Skip to content

Instantly share code, notes, and snippets.

@unixbigot
Created July 30, 2025 23:01
Show Gist options
  • Select an option

  • Save unixbigot/404293069355264a37ee490db5e89a22 to your computer and use it in GitHub Desktop.

Select an option

Save unixbigot/404293069355264a37ee490db5e89a22 to your computer and use it in GitHub Desktop.
An example for deploying the Planka trello-inspired groupware with docker-compose
# This is just the example compose file for planka customised for my site, and then de-credentialed for your inspiration
# My planka installation has run for a few years with no problems.
#
# Search for all cases of "example" and replace with something appropriate
#
# This sits behind an nginx reverse proxy that also routes to a bunch of other services
#
# The nginx config snipped is
# upstream planka {
# server internal-server.example.com:3832;
# }
#
# # inside your 'server' block, add a directory redirect for /project/
# location /project/ {
# proxy_pass http://planka/;
# proxy_redirect off;
# proxy_buffering off;
# proxy_set_header Host $http_host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# proxy_ssl_session_reuse on;
# }
#
version: '3'
services:
planka:
image: ghcr.io/plankanban/planka:latest
restart: on-failure
volumes:
- user-avatars:/app/public/user-avatars
- project-background-images:/app/public/project-background-images
- attachments:/app/private/attachments
ports:
- 3832:1337
environment:
- BASE_URL=https://yourinternalwebsite.example.com/project
- DATABASE_URL=postgresql://postgres@postgres/planka
- SECRET_KEY=examplereallylonghexadecimalstring
# - TRUST_PROXY=0
# - TOKEN_EXPIRES_IN=365 # In days
# related: https://github.com/knex/knex/issues/2354
# As knex does not pass query parameters from the connection string we
# have to use environment variables in order to pass the desired values, e.g.
# - PGSSLMODE=<value>
# Configure knex to accept SSL certificates
# - KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false
- DEFAULT_ADMIN_EMAIL=admin@yourdomainname.example.com # Do not remove if you want to prevent this user from being edited/deleted
- DEFAULT_ADMIN_PASSWORD=decently-sized-password-example
- DEFAULT_ADMIN_NAME=planka admin
- DEFAULT_ADMIN_USERNAME=admin
# - ALLOW_ALL_TO_CREATE_PROJECTS=true
# - OIDC_ISSUER=
# - OIDC_CLIENT_ID=
# - OIDC_CLIENT_SECRET=
# - OIDC_ID_TOKEN_SIGNED_RESPONSE_ALG=
# - OIDC_USERINFO_SIGNED_RESPONSE_ALG=
# - OIDC_SCOPES=openid email profile
# - OIDC_RESPONSE_MODE=fragment
# - OIDC_USE_DEFAULT_RESPONSE_MODE=true
# - OIDC_ADMIN_ROLES=admin
# - OIDC_EMAIL_ATTRIBUTE=email
# - OIDC_NAME_ATTRIBUTE=name
# - OIDC_USERNAME_ATTRIBUTE=preferred_username
# - OIDC_ROLES_ATTRIBUTE=groups
# - OIDC_IGNORE_USERNAME=true
# - OIDC_IGNORE_ROLES=true
# - OIDC_ENFORCED=true
# Email Notifications (https://nodemailer.com/smtp/)
# - SMTP_HOST=
# - SMTP_PORT=587
# - SMTP_NAME=
# - SMTP_SECURE=true
# - SMTP_USER=
# - SMTP_PASSWORD=
# - SMTP_FROM="Demo Demo" <demo@demo.demo>
# Optional fields: accessToken, events, excludedEvents
# - |
# WEBHOOKS=[{
# "url": "http://localhost:3001",
# "accessToken": "notaccesstoken",
# "events": ["cardCreate", "cardUpdate", "cardDelete"],
# "excludedEvents": ["notificationCreate", "notificationUpdate"]
# }]
# - SLACK_BOT_TOKEN=
# - SLACK_CHANNEL_ID=
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:14-alpine
restart: on-failure
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=planka
- POSTGRES_HOST_AUTH_METHOD=trust
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres -d planka"]
interval: 10s
timeout: 5s
retries: 5
volumes:
user-avatars:
project-background-images:
attachments:
db-data:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment