elektrine/deploy/docker/compose.core.yml
Maxfield Luke 454e80a8f8
Some checks failed
Deploy Docker Images / Build, push, and deploy (push) Failing after 19m8s
Smoke / Hello from Forgejo Actions (push) Successful in 1s
Initial commit
Fresh repository on git.elektrine.com/elektrine/elektrine.
2026-07-30 01:36:18 -04:00

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}