From 17c2c81fcabe9b748d0bd0ebe82d17066ae3a082 Mon Sep 17 00:00:00 2001 From: Kevin Heyer Date: Mon, 18 Aug 2025 10:56:49 +0200 Subject: [PATCH] Add Container habitica --- .../defaults/main.yml | 11 ++++ .../deploy_container_habitica/files/.gitkeep | 0 .../handlers/main.yml | 0 .../deploy_container_habitica/meta/main.yml | 0 .../deploy_container_habitica/tasks/main.yml | 28 +++++++++ .../templates/.env.j2 | 11 ++++ .../templates/docker-compose.yml | 59 +++++++++++++++++++ .../deploy_container_habitica/vars/main.yml | 1 + 8 files changed, 110 insertions(+) create mode 100644 ansible/roles/deploy_container_habitica/defaults/main.yml create mode 100644 ansible/roles/deploy_container_habitica/files/.gitkeep create mode 100644 ansible/roles/deploy_container_habitica/handlers/main.yml create mode 100644 ansible/roles/deploy_container_habitica/meta/main.yml create mode 100644 ansible/roles/deploy_container_habitica/tasks/main.yml create mode 100644 ansible/roles/deploy_container_habitica/templates/.env.j2 create mode 100644 ansible/roles/deploy_container_habitica/templates/docker-compose.yml create mode 100644 ansible/roles/deploy_container_habitica/vars/main.yml diff --git a/ansible/roles/deploy_container_habitica/defaults/main.yml b/ansible/roles/deploy_container_habitica/defaults/main.yml new file mode 100644 index 0000000..6a0bb4e --- /dev/null +++ b/ansible/roles/deploy_container_habitica/defaults/main.yml @@ -0,0 +1,11 @@ +############ +# Habitica # +############ +container_habitica_version: "latest" +container_habitica_mongo_version: "6.0" +container_habitica_domain: "habitica.example.com" +container_habitica_mail_server: "mail.example.com" +container_habitica_mail_port: "587" +container_habitica_mail_user: "habitica@example.com" +container_habitica_mail_password: "changeme" +container_habitica_mail_address: "habitica@example.com" \ No newline at end of file diff --git a/ansible/roles/deploy_container_habitica/files/.gitkeep b/ansible/roles/deploy_container_habitica/files/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/deploy_container_habitica/handlers/main.yml b/ansible/roles/deploy_container_habitica/handlers/main.yml new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/deploy_container_habitica/meta/main.yml b/ansible/roles/deploy_container_habitica/meta/main.yml new file mode 100644 index 0000000..e69de29 diff --git a/ansible/roles/deploy_container_habitica/tasks/main.yml b/ansible/roles/deploy_container_habitica/tasks/main.yml new file mode 100644 index 0000000..5526bff --- /dev/null +++ b/ansible/roles/deploy_container_habitica/tasks/main.yml @@ -0,0 +1,28 @@ +--- +- name: Ensure data directories exist + ansible.builtin.file: + path: "{{ container_base_dir }}/data/{{ item }}" + state: directory + mode: '0755' + loop: + - "db" + - "dbconf" + become: false + +- name: Deploy Docker Compose and .env files + ansible.builtin.template: + src: "{{ item.src }}" + dest: "{{ container_base_dir }}/{{ item.dest }}" + mode: '0644' + loop: + - { src: 'docker-compose.yml.j2', dest: 'docker-compose.yml' } + - { src: '.env.j2', dest: '.env' } + become: false + +- name: Start Container + community.docker.docker_compose_v2: + project_src: "{{ container_base_dir }}" + pull: always + recreate: always + docker_host: "unix:///run/user/1000/docker.sock" + become: false \ No newline at end of file diff --git a/ansible/roles/deploy_container_habitica/templates/.env.j2 b/ansible/roles/deploy_container_habitica/templates/.env.j2 new file mode 100644 index 0000000..f7eb6df --- /dev/null +++ b/ansible/roles/deploy_container_habitica/templates/.env.j2 @@ -0,0 +1,11 @@ +# --------------- +# Habitica Server +# --------------- +HABITICA_VERSION={{ container_habitica_version }} +HABITICA_MONGO_VERSION={{ container_habitica_mongo_version }} +HABITICA_DOMAIN={{ container_habitica_domain }} +HABITICA_MAIL_SERVER={{ container_habitica_mail_server }} +HABITICA_MAIL_PORT={{ container_habitica_mail_port }} +HABITICA_MAIL_USER={{ container_habitica_mail_user }} +HABITICA_MAIL_PASSWORD={{ container_habitica_mail_password }} +HABITICA_MAIL_ADDRESS={{ container_habitica_mail_address }} \ No newline at end of file diff --git a/ansible/roles/deploy_container_habitica/templates/docker-compose.yml b/ansible/roles/deploy_container_habitica/templates/docker-compose.yml new file mode 100644 index 0000000..1db80de --- /dev/null +++ b/ansible/roles/deploy_container_habitica/templates/docker-compose.yml @@ -0,0 +1,59 @@ +--- +services: + server: + image: docker.io/awinterstein/habitica-server:${HABITICA_VERSION} + container_name: habitica + restart: unless-stopped + networks: + - traefik + - habitica + environment: + - NODE_DB_URI=mongodb://mongo/habitica + - BASE_URL=https://${HABITICA_DOMAIN} + - INVITE_ONLY=false + - EMAIL_SERVER_URL=${HABITICA_MAIL_SERVER} + - EMAIL_SERVER_PORT=${HABITICA_MAIL_PORT} + - EMAIL_SERVER_AUTH_USER=${HABITICA_MAIL_USER} + - EMAIL_SERVER_AUTH_PASSWORD=${HABITICA_MAIL_PASSWORD} + - ADMIN_EMAIL=${HABITICA_MAIL_ADDRESS} + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik" + - "traefik.http.routers.habitica.entrypoints=http" + - "traefik.http.routers.habitica.rule=Host(`${HABITICA_DOMAIN}`)" + - "traefik.http.middlewares.habitica-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.habitica.middlewares=habitica-https-redirect" + - "traefik.http.routers.habitica-secure.entrypoints=https" + - "traefik.http.routers.habitica-secure.rule=Host(`${HABITICA_DOMAIN}`)" + - "traefik.http.routers.habitica-secure.tls=true" + - "traefik.http.routers.habitica-secure.service=habitica" + - "traefik.http.services.habitica.loadbalancer.server.port=3000" + depends_on: + - mongo + + mongo: + image: docker.io/mongo:${HABITICA_MONGO_VERSION} + restart: unless-stopped + container_name: habitica-db + hostname: mongo + networks: + habitica: + aliases: + - mongo + volumes: + - ./data/db:/data/db:rw + - ./data/dbconf:/data/configdb + command: ["--replSet", "rs", "--bind_ip_all", "--port", "27017"] + healthcheck: + test: echo "try { rs.status() } catch (err) { rs.initiate() }" | mongosh --port 27017 --quiet + interval: 10s + timeout: 30s + start_period: 0s + start_interval: 1s + retries: 30 + +networks: + habitica: + driver: bridge + traefik: + external: true \ No newline at end of file diff --git a/ansible/roles/deploy_container_habitica/vars/main.yml b/ansible/roles/deploy_container_habitica/vars/main.yml new file mode 100644 index 0000000..2c35603 --- /dev/null +++ b/ansible/roles/deploy_container_habitica/vars/main.yml @@ -0,0 +1 @@ +container_base_dir: /opt/docker/habitica \ No newline at end of file