wulf-ansible/playbooks/templates/planka-compose.yml.j2
Lorentz 1483d66e4f Refactor planka deployment to use .env file for secrets
Move all sensitive and configurable values out of compose.yaml
into a .env file (mode 0600). compose.yaml now uses ${VAR}
substitution with no embedded secrets. Added planka.env.j2
template and a dedicated Deploy .env task in the playbook.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 14:14:59 -04:00

60 lines
1.6 KiB
Django/Jinja

networks:
pangolin:
external: true
planka_net:
driver: bridge
services:
planka:
image: ghcr.io/plankanban/planka:${PLANKA_VERSION}
container_name: planka_app
restart: unless-stopped
ports:
- "${PLANKA_PORT}:1337"
volumes:
- favicons:/app/public/favicons
- user-avatars:/app/public/user-avatars
- background-images:/app/public/background-images
- attachments:/app/private/attachments
environment:
BASE_URL: ${BASE_URL}
DATABASE_URL: postgresql://postgres@postgres/${POSTGRES_DB}
SECRET_KEY: ${SECRET_KEY}
INTERNAL_ACCESS_TOKEN: ${INTERNAL_ACCESS_TOKEN}
LOG_LEVEL: ${LOG_LEVEL}
TRUST_PROXY: ${TRUST_PROXY}
TOKEN_EXPIRES_IN: ${TOKEN_EXPIRES_IN}
DEFAULT_ADMIN_EMAIL: ${DEFAULT_ADMIN_EMAIL}
DEFAULT_ADMIN_PASSWORD: ${DEFAULT_ADMIN_PASSWORD}
DEFAULT_ADMIN_NAME: ${DEFAULT_ADMIN_NAME}
DEFAULT_ADMIN_USERNAME: ${DEFAULT_ADMIN_USERNAME}
depends_on:
postgres:
condition: service_healthy
networks:
- pangolin
- planka_net
postgres:
image: postgres:16-alpine
container_name: planka-postgres
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- planka_net
volumes:
favicons:
user-avatars:
background-images:
attachments:
db-data: