Files
Sift/compose.yaml

213 lines
6.3 KiB
YAML

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