213 lines
6.3 KiB
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
|