101 lines
3.3 KiB
YAML
101 lines
3.3 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
postgres:
|
|
image: pgvector/pgvector:pg16@sha256:00ba258a66dac104fd5171074a0084462a64a1369d8513f3d0a634e2f24d15bc
|
|
container_name: elektrine_db
|
|
shm_size: ${POSTGRES_SHM_SIZE:-512m}
|
|
command:
|
|
[
|
|
"postgres",
|
|
"-c",
|
|
"shared_preload_libraries=pg_stat_statements",
|
|
"-c",
|
|
"pg_stat_statements.max=10000",
|
|
"-c",
|
|
"pg_stat_statements.track=all"
|
|
]
|
|
environment:
|
|
POSTGRES_USER: elektrine
|
|
POSTGRES_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD}
|
|
POSTGRES_DB: elektrine_prod
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- ./initdb:/docker-entrypoint-initdb.d:ro
|
|
networks:
|
|
- elektrine_network
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U elektrine -d elektrine_prod"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
app:
|
|
image: ${ELEKTRINE_IMAGE:-elektrine:local}
|
|
build:
|
|
context: ../..
|
|
dockerfile: deploy/docker/Dockerfile
|
|
args:
|
|
RELEASE_NAME: ${RELEASE_NAME:-elektrine}
|
|
ELEKTRINE_RELEASE_MODULES: ${ELEKTRINE_RELEASE_MODULES:-chat,social,nerve,atomine}
|
|
PRIMARY_DOMAIN: ${PRIMARY_DOMAIN:-localhost}
|
|
EMAIL_DOMAIN: ${EMAIL_DOMAIN:-${PRIMARY_DOMAIN:-localhost}}
|
|
SUPPORTED_DOMAINS: ${SUPPORTED_DOMAINS:-${PRIMARY_DOMAIN:-localhost}}
|
|
PROFILE_BASE_DOMAINS: ${PROFILE_BASE_DOMAINS:-${PRIMARY_DOMAIN:-localhost}}
|
|
container_name: elektrine_app
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
env_file:
|
|
- ../../.env.production
|
|
environment:
|
|
DATABASE_URL: ecto://elektrine:${DB_PASSWORD:?set DB_PASSWORD}@postgres/elektrine_prod
|
|
PHX_HOST: ${PHX_HOST:-localhost}
|
|
PHX_SERVER: "true"
|
|
PORT: ${PORT:-8080}
|
|
PHX_HTTP_IP: ${DOCKER_PHX_HTTP_IP:-0.0.0.0}
|
|
TRUSTED_PROXY_CIDRS: ${TRUSTED_PROXY_CIDRS:-172.30.0.0/24}
|
|
CADDY_ASK_TRUSTED_CIDRS: ${CADDY_ASK_TRUSTED_CIDRS:-${TRUSTED_PROXY_CIDRS:-172.30.0.0/24}}
|
|
MIX_ENV: prod
|
|
ELEKTRINE_ENABLED_MODULES: ${ELEKTRINE_ENABLED_MODULES:-chat,social,nerve,atomine}
|
|
ACME_HOME: ${ACME_HOME:-/data/acme.sh}
|
|
ACME_SH_BIN: ${ACME_SH_BIN:-/data/acme.sh/acme.sh}
|
|
ACME_WILDCARD_RENEWAL_ENABLED: ${ACME_WILDCARD_RENEWAL_ENABLED:-false}
|
|
ELEKTRINE_API_BASE: ${ELEKTRINE_API_BASE:-http://app:8080}
|
|
CADDY_TLS_MOUNT_DIR: ${CADDY_TLS_MOUNT_DIR:-/opt/elektrine/certs}
|
|
RELOAD_CMD: ${ACME_RELOAD_CMD:-true}
|
|
ports:
|
|
- "${APP_HTTP_BIND:-127.0.0.1:8080:8080}"
|
|
volumes:
|
|
- app_data:/data
|
|
- uploads:/data/uploads
|
|
- ${CADDY_TLS_MOUNT_DIR:-/opt/elektrine/certs}:/opt/elektrine/certs
|
|
networks:
|
|
elektrine_network:
|
|
caddy_proxy_network:
|
|
aliases:
|
|
- app_proxy
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:$${PORT:-8080}/health >/dev/null || curl -g -fsS http://[::1]:$${PORT:-8080}/health >/dev/null || exit 1"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 12
|
|
start_period: 30s
|
|
restart: unless-stopped
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
|
|
volumes:
|
|
postgres_data:
|
|
uploads:
|
|
app_data:
|
|
|
|
networks:
|
|
elektrine_network:
|
|
driver: bridge
|
|
caddy_proxy_network:
|
|
driver: bridge
|
|
ipam:
|
|
config:
|
|
- subnet: ${CADDY_PROXY_DOCKER_SUBNET:-172.30.0.0/24}
|