From 44356e5bd2a6ca4391d5fbae8e2ad84e0f25a3f4 Mon Sep 17 00:00:00 2001 From: fivemoons Date: Fri, 2 Jan 2026 21:02:47 +0800 Subject: [PATCH] add umami and planka --- planka/docker-compose-v1.yml | 50 ++++++++++++++ planka/docker-compose-v2.yml | 127 +++++++++++++++++++++++++++++++++++ umami/docker-compose.yml | 34 ++++++++++ 3 files changed, 211 insertions(+) create mode 100644 planka/docker-compose-v1.yml create mode 100644 planka/docker-compose-v2.yml create mode 100644 umami/docker-compose.yml diff --git a/planka/docker-compose-v1.yml b/planka/docker-compose-v1.yml new file mode 100644 index 0000000..4d81146 --- /dev/null +++ b/planka/docker-compose-v1.yml @@ -0,0 +1,50 @@ +services: + planka: + image: ghcr.io/plankanban/planka:1.26.3 + restart: on-failure + volumes: + - ./user-avatars:/app/public/user-avatars + - ./project-background-images:/app/public/project-background-images + - ./attachments:/app/private/attachments + ports: + - 3000:1337 + environment: + - BASE_URL=http://localhost:3000 + - DATABASE_URL=postgresql://postgres@postgres/planka + - SECRET_KEY=fcd418de1fcc0fd57d06971659f8d2d087148edf2d740f00e50a6f25ec8b2cbfa5dbb73ed51a24eb84ea4fcb0a0188552ba301fd6372cf045d9cc0fb7d8e2c11 + + # - LOG_LEVEL=warn + + # - 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= + + # Configure knex to accept SSL certificates + # - KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false + + - DEFAULT_ADMIN_EMAIL=demo@demo.demo # 修改管理员邮箱 + - DEFAULT_ADMIN_PASSWORD=demo # 修改管理员密码 + - DEFAULT_ADMIN_NAME=Demo Demo + - DEFAULT_ADMIN_USERNAME=demo # 修改管理员用户名 + + depends_on: + postgres: + condition: service_healthy + + postgres: + image: postgres:16-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 diff --git a/planka/docker-compose-v2.yml b/planka/docker-compose-v2.yml new file mode 100644 index 0000000..3ce45ba --- /dev/null +++ b/planka/docker-compose-v2.yml @@ -0,0 +1,127 @@ +services: + planka: + image: ghcr.io/plankanban/planka:2.0.0-rc.4 + restart: on-failure + # 需对文件夹授权chown -R 1000:1000 /home/planka/ + volumes: + - ./favicons:/app/public/favicons + - ./user-avatars:/app/public/user-avatars + - ./background-images:/app/public/background-images + - ./attachments:/app/private/attachments + ports: + - 3000:1337 + environment: + - BASE_URL=http://localhost:3000 + - DATABASE_URL=postgresql://postgres@postgres/planka + + # Optionally store the database password in secrets: + # - DATABASE_URL=postgresql://postgres:$${DATABASE_PASSWORD}@postgres/planka + # - DATABASE_PASSWORD__FILE=/run/secrets/database_password + # And add the following to the service: + # secrets: + # - database_password + + - SECRET_KEY=notsecretkey # 执行openssl rand -hex 64 + # Optionally store in secrets - then SECRET_KEY should not be set + # - SECRET_KEY__FILE=/run/secrets/secret_key + + # - LOG_LEVEL=warn + + # - TRUST_PROXY=true + # - MAX_UPLOAD_FILE_SIZE= + # - 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= + + # Configure knex to accept SSL certificates + # - KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false + + # The default application language used as a fallback when a user's language is not set. + # This language is also used for per-board notifications. + # - DEFAULT_LANGUAGE=en-US + + # Do not comment out DEFAULT_ADMIN_EMAIL if you want to prevent this user from being edited/deleted + # - DEFAULT_ADMIN_EMAIL=demo@demo.demo + # - DEFAULT_ADMIN_PASSWORD=demo + # Optionally store in secrets - then DEFAULT_ADMIN_PASSWORD should not be set + # - DEFAULT_ADMIN_PASSWORD__FILE=/run/secrets/default_admin_password + # - DEFAULT_ADMIN_NAME=Demo Demo + # - DEFAULT_ADMIN_USERNAME=demo + + # - INTERNAL_ACCESS_TOKEN= + # - STORAGE_LIMIT= + # - ACTIVE_USERS_LIMIT= + # - CUSTOMER_PANEL_URL= + + # Set to true to show more detailed authentication error messages. + # It should not be enabled without a rate limiter for security reasons. + # - SHOW_DETAILED_AUTH_ERRORS=false + + # - S3_ENDPOINT= + # - S3_REGION= + # - S3_ACCESS_KEY_ID= + # - S3_SECRET_ACCESS_KEY= + # Optionally store in secrets - then S3_SECRET_ACCESS_KEY should not be set + # - S3_SECRET_ACCESS_KEY__FILE=/run/secrets/s3_secret_access_key + # - S3_BUCKET= + # - S3_FORCE_PATH_STYLE=true + + # - OIDC_ISSUER= + # - OIDC_CLIENT_ID= + # - OIDC_CLIENT_SECRET= + # Optionally store in secrets - then OIDC_CLIENT_SECRET should not be set + # - OIDC_CLIENT_SECRET__FILE=/run/secrets/oidc_client_secret + # - OIDC_USE_OAUTH_CALLBACK=true + # - 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_PROJECT_OWNER_ROLES=project_owner + # - OIDC_BOARD_USER_ROLES=board_user + # - OIDC_CLAIMS_SOURCE=userinfo + # - 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/) + # These values override and disable configuration in the UI if set. + # - SMTP_HOST= + # - SMTP_PORT=587 + # - SMTP_NAME= + # - SMTP_SECURE=true + # - SMTP_TLS_REJECT_UNAUTHORIZED=false + # - SMTP_USER= + # - SMTP_PASSWORD= + # Optionally store in secrets - then SMTP_PASSWORD should not be set + # - SMTP_PASSWORD__FILE=/run/secrets/smtp_password + # - SMTP_FROM="Demo Demo" + + # Using Gravatar directly exposes user IPs and hashed emails to a third party (GDPR risk). + # Use a proxy you control for privacy, or leave commented out or empty to disable. + # - GRAVATAR_BASE_URL=https://www.gravatar.com/avatar/ + depends_on: + postgres: + condition: service_healthy + + postgres: + image: postgres:16-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 diff --git a/umami/docker-compose.yml b/umami/docker-compose.yml new file mode 100644 index 0000000..e81643c --- /dev/null +++ b/umami/docker-compose.yml @@ -0,0 +1,34 @@ +services: + umami: + image: umami-software/umami:3.0.3 + ports: + - "3000:3000" + environment: + DATABASE_URL: postgresql://umami:umami@db:5432/umami # 修改密码 + APP_SECRET: replace-me-with-a-random-string + depends_on: + db: + condition: service_healthy + init: true + restart: always + healthcheck: + test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] + interval: 5s + timeout: 5s + retries: 5 + db: + image: postgres:15-alpine + environment: + POSTGRES_DB: umami + POSTGRES_USER: umami + POSTGRES_PASSWORD: umami # 修改密码 + volumes: + - umami-db-data:/var/lib/postgresql/data + restart: always + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 5 +volumes: + umami-db-data: \ No newline at end of file