From 5e49d38a0c30bc55a7ced30e87ab923a9c209f51 Mon Sep 17 00:00:00 2001 From: sujitk Date: Tue, 12 May 2026 10:54:40 +0000 Subject: [PATCH] Added compose.yaml for zammad tuleap gitea bookstack n8n --- compose.yaml | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 compose.yaml diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..473b7fe --- /dev/null +++ b/compose.yaml @@ -0,0 +1,212 @@ +services: + mysql: + image: mysql:8.0 + container_name: nova-mysql + command: > + --default-authentication-plugin=mysql_native_password + --character-set-server=utf8mb4 + --collation-server=utf8mb4_unicode_ci + --innodb-buffer-pool-size=512M + --sql-mode=NO_ENGINE_SUBSTITUTION + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + volumes: + - /opt/nova-data/mysql:/var/lib/mysql + restart: unless-stopped + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + n8n: + image: docker.n8n.io/n8nio/n8n:latest + container_name: nova-n8n + ports: + - "127.0.0.1:5678:5678" + environment: + - WEBHOOK_URL=https://n8n.parinaam.in/ + - GENERIC_TIMEZONE=Asia/Kolkata + # Add these three lines: + - N8N_HOST=n8n.parinaam.in + - N8N_PORT=5678 + - N8N_PROTOCOL=https + volumes: + - /opt/nova-data/n8n:/home/node/.n8n + restart: unless-stopped + + postgres: + image: postgres:16-alpine + container_name: nova-postgres + environment: + POSTGRES_PASSWORD: ${PG_PASSWORD} + POSTGRES_INITDB_ARGS: "--encoding=UTF8" + volumes: + - /opt/nova-data/postgres:/var/lib/postgresql/data + - /opt/nova-data/stack/pg-init:/docker-entrypoint-initdb.d + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis:7-alpine + container_name: nova-redis + command: redis-server --requirepass ${REDIS_PASSWORD} --maxmemory 256mb --maxmemory-policy allkeys-lru + volumes: + - /opt/nova-data/redis:/data + restart: unless-stopped + + tuleap: + image: tuleap/tuleap-community-edition:latest + container_name: nova-tuleap + hostname: ${TULEAP_FQDN} + ports: + - "127.0.0.1:8081:80" + - "127.0.0.1:8083:443" + - "0.0.0.0:2223:22" + environment: + TULEAP_FQDN: ${TULEAP_FQDN} + TULEAP_SYS_DBHOST: mysql + DB_ADMIN_USER: root + DB_ADMIN_PASSWORD: ${MYSQL_ROOT_PASSWORD} + TULEAP_SYS_DBPASSWD: ${TULEAP_DB_PASS} + TULEAP_FPM_SESSION_MODE: redis + TULEAP_REDIS_SERVER: redis + TULEAP_REDIS_PASSWORD: ${REDIS_PASSWORD} + SITE_ADMINISTRATOR_PASSWORD: ${TULEAP_SITE_ADMIN_PASS} + volumes: + - /opt/nova-data/tuleap:/data + depends_on: + mysql: { condition: service_healthy } + redis: { condition: service_started } + restart: unless-stopped + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:7.17.18 + container_name: nova-elasticsearch + command: > + bash -c "if ! bin/elasticsearch-plugin list | grep -q ingest-attachment; then + bin/elasticsearch-plugin install --batch ingest-attachment; + fi; + /usr/local/bin/docker-entrypoint.sh elasticsearch" + environment: + discovery.type: single-node + ES_JAVA_OPTS: "-Xms1g -Xmx1g" + xpack.security.enabled: "false" + ulimits: + memlock: { soft: -1, hard: -1 } + nofile: { soft: 65536, hard: 65536 } + volumes: + - /opt/nova-data/zammad-es:/usr/share/elasticsearch/data + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health | grep -q 'green\\|yellow'"] + interval: 20s + timeout: 10s + retries: 15 + + zammad-init: + image: ghcr.io/zammad/zammad:latest + container_name: nova-zammad-init + command: ["zammad-init"] + environment: &zammad-env + ZAMMAD_DB_ADAPTER: postgresql + POSTGRESQL_HOST: postgres + POSTGRESQL_DB: zammad + POSTGRESQL_USER: postgres + POSTGRESQL_PASS: ${PG_PASSWORD} + REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379 + ELASTICSEARCH_HOST: elasticsearch + ELASTICSEARCH_PORT: 9200 + SECRET_KEY_BASE: ${ZAMMAD_SECRET} + RAILS_SERVE_STATIC_FILES: "true" + HTTP_TYPE: "https" + # NEW: Passing the domain directly to Zammad + FQDN: ${ZAMMAD_FQDN} + depends_on: + postgres: { condition: service_healthy } + redis: { condition: service_started } + elasticsearch: { condition: service_healthy } + volumes: + - /opt/nova-data/zammad:/opt/zammad/storage + + zammad-railsserver: + image: ghcr.io/zammad/zammad:latest + container_name: nova-zammad + command: ["zammad-railsserver"] + ports: + - "127.0.0.1:8080:3000" + environment: *zammad-env + depends_on: + zammad-init: { condition: service_completed_successfully } + volumes: + - /opt/nova-data/zammad:/opt/zammad/storage + restart: unless-stopped + + zammad-websocket: + image: ghcr.io/zammad/zammad:latest + container_name: nova-zammad-websocket + command: ["zammad-websocket"] + ports: + - "127.0.0.1:6042:6042" + environment: *zammad-env + depends_on: + zammad-init: { condition: service_completed_successfully } + volumes: + - /opt/nova-data/zammad:/opt/zammad/storage + restart: unless-stopped + + zammad-scheduler: + image: ghcr.io/zammad/zammad:latest + container_name: nova-zammad-scheduler + command: ["zammad-scheduler"] + environment: *zammad-env + depends_on: + zammad-init: { condition: service_completed_successfully } + volumes: + - /opt/nova-data/zammad:/opt/zammad/storage + restart: unless-stopped + + gitea: + image: gitea/gitea:latest + container_name: nova-gitea + ports: + - "127.0.0.1:3000:3000" + - "0.0.0.0:2222:22" + environment: + # NEW: Passing domain routing explicitly + ROOT_URL: https://${GITEA_DOMAIN}/ + DOMAIN: ${GITEA_DOMAIN} + GITEA__database__DB_TYPE: postgres + GITEA__database__HOST: postgres:5432 + GITEA__database__NAME: gitea + GITEA__database__USER: postgres + GITEA__database__PASSWD: ${PG_PASSWORD} + volumes: + - /opt/nova-data/gitea:/data + depends_on: + postgres: { condition: service_healthy } + restart: unless-stopped + + bookstack: + image: lscr.io/linuxserver/bookstack:latest + container_name: nova-bookstack + ports: + - "127.0.0.1:8082:80" + environment: + PUID: 1000 + PGID: 1000 + DB_HOST: mysql + DB_PORT: 3306 + DB_DATABASE: bookstack + DB_USERNAME: bookstack + DB_PASSWORD: ${BOOKSTACK_DB_PASS} + APP_URL: ${BOOKSTACK_APP_URL} + APP_KEY: ${BOOKSTACK_APP_KEY} + volumes: + - /opt/nova-data/bookstack:/config + depends_on: + mysql: { condition: service_healthy } + restart: unless-stopped