Merge branch 'next' into v4.x

This commit is contained in:
matfire authored and GitHub committed 2026-02-14 14:10:52 +01:00
commit 4045c7267e
138 files changed
+7978 -10302

No files matched your search

+2 -1
View File
@@ -28,6 +28,7 @@ services:
- AP_TELEMETRY_ENABLED=${AP_TELEMETRY_ENABLED:-false}
- AP_TEMPLATES_SOURCE_URL=${AP_TEMPLATES_SOURCE_URL:-https://cloud.activepieces.com/api/v1/flow-templates}
- AP_TRIGGER_DEFAULT_POLL_INTERVAL=${AP_TRIGGER_DEFAULT_POLL_INTERVAL:-5}
- AP_SIGN_UP_ENABLED=${AP_SIGN_UP_ENABLED:-true}
- AP_WEBHOOK_TIMEOUT_SECONDS=${AP_WEBHOOK_TIMEOUT_SECONDS:-30}
depends_on:
postgres:
@@ -47,7 +48,7 @@ services:
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
volumes:
- "pg-data:/var/lib/postgresql/data"
- 'pg-data:/var/lib/postgresql'
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
+93
View File
@@ -0,0 +1,93 @@
# documentation: https://github.com/Smaug6739/Alexandrie/tree/main/docs
# slogan: A powerful Markdown workspace designed for speed, clarity, and creativity.
# category: productivity
# tags: note-taking, markdown, knowledge-management, personal-wiki, productivity
# logo: svgs/alexandrie.svg
# port: 8200
services:
frontend:
image: ghcr.io/smaug6739/alexandrie-frontend:v8.4.1
environment:
- SERVICE_URL_FRONTEND_8200
- PORT=8200
- NUXT_PUBLIC_CONFIG_DISABLE_SIGNUP_PAGE=${CONFIG_DISABLE_SIGNUP:-false}
- NUXT_PUBLIC_CONFIG_DISABLE_LANDING_PAGE=${CONFIG_DISABLE_LANDING:-false}
- NUXT_PUBLIC_BASE_API=${SERVICE_URL_BACKEND}
- NUXT_PUBLIC_BASE_CDN=${SERVICE_URL_RUSTFS}
- NUXT_PUBLIC_CDN_ENDPOINT=${CDN_ENDPOINT:-/alexandrie/}
- NUXT_PUBLIC_BASE_URL=${SERVICE_URL_FRONTEND}
depends_on:
- backend
backend:
image: ghcr.io/smaug6739/alexandrie-backend:v8.4.1
environment:
- SERVICE_URL_BACKEND_8201
- BACKEND_PORT=8201
- GIN_MODE=release
- JWT_SECRET=${SERVICE_PASSWORD_JWT}
- COOKIE_DOMAIN=${SERVICE_URL_FRONTEND}
- FRONTEND_URL=${SERVICE_URL_FRONTEND}
- ALLOW_UNSECURE=${ALLOW_UNSECURE:-false}
- DATABASE_HOST=mysql
- DATABASE_PORT=3306
- DATABASE_NAME=${MYSQL_DATABASE:-alexandrie-db}
- DATABASE_USER=${SERVICE_USER_MYSQL}
- DATABASE_PASSWORD=${SERVICE_PASSWORD_MYSQL}
- MINIO_ENDPOINT=rustfs:9000
- MINIO_PUBLIC_URL=${SERVICE_URL_RUSTFS}
- MINIO_SECURE=${MINIO_SECURE:-false}
- MINIO_ACCESSKEY=${SERVICE_USER_RUSTFS}
- MINIO_SECRETKEY=${SERVICE_PASSWORD_RUSTFS}
- MINIO_BUCKET=${MINIO_BUCKET:-alexandrie}
- SMTP_HOST=${SMTP_HOST:-}
- SMTP_MAIL=${SMTP_MAIL:-}
- SMTP_PASSWORD=${SMTP_PASSWORD:-}
depends_on:
mysql:
condition: service_healthy
rustfs:
condition: service_healthy
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
- MYSQL_USER=${SERVICE_USER_MYSQL}
- MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
- MYSQL_DATABASE=${MYSQL_DATABASE:-alexandrie-db}
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test:
- CMD
- mysqladmin
- ping
- "-h"
- localhost
- "-u"
- root
- "-p${SERVICE_PASSWORD_MYSQLROOT}"
timeout: 5s
interval: 10s
retries: 5
rustfs:
image: rustfs/rustfs:1.0.0-alpha.81
environment:
- SERVICE_URL_RUSTFS_9000
- RUSTFS_ACCESS_KEY=${SERVICE_USER_RUSTFS}
- RUSTFS_SECRET_KEY=${SERVICE_PASSWORD_RUSTFS}
- RUSTFS_CONSOLE_ENABLE=${RUSTFS_CONSOLE_ENABLE:-false}
- RUSTFS_LOG_LEVEL=${RUSTFS_LOG_LEVEL:-info}
volumes:
- rustfs-data:/data
- rustfs-logs:/logs
healthcheck:
test:
- CMD-SHELL
- "nc -z localhost 9000 || exit 1"
interval: 10s
timeout: 5s
retries: 5
+1 -1
View File
@@ -27,7 +27,7 @@ services:
environment:
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
volumes:
- autobase-db-data:/var/lib/postgresql/data
- autobase-db-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
+17
View File
@@ -0,0 +1,17 @@
# documentation: https://bentopdf.com/docs
# slogan: Process PDFs entirely in your browser. No uploads. No servers. Complete privacy.
# category: productivity
# tags: pdf, manipulation, web, tool
# logo: svgs/bento-pdf.png
# port: 8080
services:
bento-pdf:
image: ghcr.io/alam00000/bentopdf:v1.16.1
environment:
- SERVICE_URL_BENTOPDF_8080
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:8080"]
interval: 5s
timeout: 20s
retries: 10
+1 -1
View File
@@ -12,7 +12,7 @@ services:
- pds-data:/pds
environment:
- SERVICE_URL_PDS_3000
- 'PDS_HOSTNAME=${SERVICE_FQDN_PDS_3000}'
- 'PDS_HOSTNAME=${SERVICE_FQDN_PDS}'
- 'PDS_JWT_SECRET=${SERVICE_HEX_32_JWTSECRET}'
- 'PDS_ADMIN_PASSWORD=${SERVICE_PASSWORD_ADMIN}'
- 'PDS_ADMIN_EMAIL=${PDS_ADMIN_EMAIL}'
+1 -1
View File
@@ -33,7 +33,7 @@ services:
- SECRET_KEY=$SERVICE_PASSWORD_64_BUGSINK
- CREATE_SUPERUSER=admin:$SERVICE_PASSWORD_BUGSINK
- SERVICE_URL_BUGSINK_8000
- BASE_URL=$SERVICE_URL_BUGSINK_8000
- BASE_URL=$SERVICE_URL_BUGSINK
- DATABASE_URL=mysql://${SERVICE_USER_BUGSINK}:$SERVICE_PASSWORD_BUGSINK@mysql:3306/${MYSQL_DATABASE:-bugsink}
- BEHIND_HTTPS_PROXY=True
depends_on:
+37 -36
View File
@@ -1,47 +1,48 @@
# documentation: https://bluewavelabs.gitbook.io/checkmate
# slogan: An open source server monitoring application
# documentation: https://docs.checkmate.so/
# slogan: An open source server and websites monitoring application
# category: monitoring
# tags: monitoring,server,uptime,healthcheck
# logo: svgs/checkmate.png
# port: 80
# port: 52345
services:
client:
image: bluewaveuptime/uptime_client:latest
checkmate:
image: 'ghcr.io/bluewave-labs/checkmate-backend-mono-multiarch:v3.2.0'
environment:
- SERVICE_URL_CHECKMATE_80
- UPTIME_APP_API_BASE_URL=${SERVICE_URL_CHECKMATESERVER_5000}/api/v1
- SERVICE_URL_CHECKMATE_52345
- 'UPTIME_APP_API_BASE_URL=${SERVICE_URL_CHECKMATE}/api/v1'
- 'UPTIME_APP_CLIENT_HOST=${SERVICE_URL_CHECKMATE}'
- 'DB_CONNECTION_STRING=mongodb://mongodb:27017/uptime_db'
- 'CLIENT_HOST=${SERVICE_URL_CHECKMATE}'
- 'JWT_SECRET=${SERVICE_PASSWORD_64_JWT}'
depends_on:
- server
server:
image: bluewaveuptime/uptime_server:latest
environment:
- SERVICE_URL_CHECKMATESERVER_5000
- JWT_SECRET=${SERVICE_PASSWORD_64_JWT}
- REFRESH_TOKEN_SECRET=${SERVICE_PASSWORD_64_REFRESH}
- SYSTEM_EMAIL_ADDRESS=${SYSTEM_EMAIL_ADDRESS:-test@example.com}
- SYSTEM_EMAIL_PASSWORD=${SERVICE_PASSWORD_64_EMAIL}
- SYSTEM_EMAIL_HOST=${SYSTEM_EMAIL_HOST}
- SYSTEM_EMAIL_PORT=${SYSTEM_EMAIL_PORT}
- PAGESPEED_API_KEY=${PAGESPEED_API_KEY}
- DB_CONNECTION_STRING=${DB_CONNECTION_STRING:-mongodb://mongodb:27017/uptime_db}
- REDIS_HOST=${REDIS_HOST:-redis}
- REDIS_PORT=${REDIS_PORT:-6379}
- DB_TYPE=${DB_TYPE:-MongoDB}
- TOKEN_TTL=${TOKEN_TTL:-99d}
- REFRESH_TOKEN_TTL=${REFRESH_TOKEN_TTL:-99d}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- redis
- mongodb
redis:
image: bluewaveuptime/uptime_redis:latest
volumes:
- redis:/data
healthcheck:
test:
- CMD
- node
- '-e'
- "require('http').get('http://127.0.0.1:52345/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"
interval: 30s
timeout: 5s
retries: 3
mongodb:
image: bluewaveuptime/uptime_database_mongo:latest
image: 'ghcr.io/bluewave-labs/checkmate-mongo:v3.2.0'
command:
- mongod
- '--quiet'
- '--bind_ip_all'
volumes:
- mongodb:/data/db
command: ["mongod", "--quiet"]
- 'checkmate-mongo:/data/db'
healthcheck:
test:
- CMD
- mongosh
- '--eval'
- "db.adminCommand('ping')"
- '--quiet'
interval: 5s
timeout: 30s
start_period: 10s
@@ -7,82 +7,82 @@
services:
elasticsearch:
image: 'elastic/elasticsearch:9.1.2'
container_name: elasticsearch
restart: unless-stopped
environment:
- ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}
- 'ES_JAVA_OPTS=-Xms512m -Xmx512m'
- discovery.type=single-node
- bootstrap.memory_lock=true
- xpack.security.enabled=true
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=false
- ELASTIC_USER=elastic # Default built-in superuser (can't be changed); included here to avoid confusion about the username
- 'ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}'
- 'ES_JAVA_OPTS=-Xms512m -Xmx512m' # Limit JVM heap size to 512MB to prevent Elasticsearch from consuming all system memory
- discovery.type=single-node # Disable clustering; run as a standalone node (sufficient for most local or single-host setups)
- bootstrap.memory_lock=true # Prevent memory swapping by locking JVM memory (helps with performance/stability)
- xpack.security.http.ssl.enabled=false # SSL is unnecessary for HTTP traffic within the isolated Docker network
volumes:
- '/etc/localtime:/etc/localtime:ro'
- '/etc/localtime:/etc/localtime:ro' # Sync container timezone with host
- 'elasticsearch-data:/usr/share/elasticsearch/data'
healthcheck:
test:
- CMD-SHELL
- 'curl --user elastic:${SERVICE_PASSWORD_ELASTICSEARCH} --silent --fail http://localhost:9200/_cluster/health || exit 1'
- 'curl --user elastic:${SERVICE_PASSWORD_ELASTICSEARCH} --silent --fail http://localhost:9200/_cluster/health'
interval: 10s
timeout: 10s
retries: 24
kibana:
image: 'kibana:9.1.2'
container_name: kibana
restart: unless-stopped
environment:
- SERVICE_URL_KIBANA_5601
- 'SERVER_NAME=${SERVICE_URL_KIBANA}'
- 'SERVER_PUBLICBASEURL=${SERVICE_URL_KIBANA}'
- 'ELASTICSEARCH_HOSTS=http://elasticsearch:9200'
- 'ELASTICSEARCH_USERNAME=kibana_system'
- 'ELASTICSEARCH_PASSWORD=${SERVICE_PASSWORD_KIBANA}'
- 'XPACK_SECURITY_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKSECURITY}'
- 'XPACK_REPORTING_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKREPORTING}'
- 'XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKENCRYPTEDSAVEDOBJECTS}'
- 'TELEMETRY_OPTIN=${TELEMETRY_OPTIN:-false}'
- 'KIBANA_PASSWORD=${SERVICE_PASSWORD_KIBANA}'
- 'ELASTICSEARCH_SERVICEACCOUNTTOKEN=${ELASTICSEARCH_SERVICEACCOUNTTOKEN}' # Kibana authenticates to Elasticsearch using this service token
- 'SERVER_NAME=${SERVICE_FQDN_KIBANA}' # For generating links and setting cookie domains
- 'SERVER_PUBLICBASEURL=${SERVICE_URL_KIBANA}' # Public URL used in generated links (reporting, alerting, etc.)
- 'ELASTICSEARCH_HOSTS=http://elasticsearch:9200' # Connect Kibana to Elasticsearch Service
- XPACK.SECURITY.ENABLED=true # Enable authentication and authorization (required for service tokens, roles, etc.)
- 'XPACK_SECURITY_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKSECURITY}' # Required for encrypted session & auth tokens
- 'XPACK_REPORTING_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKREPORTING}' # Required for reporting (PDFs, PNGs)
- 'XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${SERVICE_PASSWORD_XPACKENCRYPTEDSAVEDOBJECTS}' # Required for encrypting saved objects like alerts
- 'TELEMETRY_OPTIN=${TELEMETRY_OPTIN:-false}' # Disable telemetry by default (opt-in only)
volumes:
- '/etc/localtime:/etc/localtime:ro'
- '/etc/localtime:/etc/localtime:ro' # Sync container timezone with host
- 'kibana-data:/usr/share/kibana/data'
depends_on:
setup:
condition: service_completed_successfully
elasticsearch:
condition: service_healthy
healthcheck:
test:
- CMD-SHELL
- "curl -s http://localhost:5601/api/status | grep -q '\"level\":\"available\"' || exit 1"
- "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'" # Expect HTTP 302 (redirect) from Kibana login page
interval: 10s
timeout: 10s
retries: 120
setup:
image: 'elastic/elasticsearch:9.1.2'
container_name: kibana-setup
kibana-token-generator:
image: 'alpine:latest'
depends_on:
elasticsearch:
condition: service_healthy
exclude_from_hc: true
environment:
- 'ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}'
- 'KIBANA_PASSWORD=${SERVICE_PASSWORD_KIBANA}'
- 'ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}' # Needed to authenticate the ELASTICSEARCH_SERVICEACCOUNTTOKEN creation request
entrypoint:
- sh
- '-c'
- |
echo "Setting up Kibana user password..."
until curl -s -u "elastic:${ELASTIC_PASSWORD}" http://elasticsearch:9200/_cluster/health | grep -q '"status":"green\|yellow"'; do
echo "Waiting for Elasticsearch..."
sleep 2
done
echo "Setting password for kibana_system user..."
curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" \
-H "Content-Type: application/json" \
http://elasticsearch:9200/_security/user/kibana_system/_password \
-d "{\"password\":\"${KIBANA_PASSWORD}\"}" || exit 1
echo "Kibana setup completed successfully"
restart: 'no'
apk add --no-cache curl jq >/dev/null 2>&1
echo "Generating Kibana service token..."
RESPONSE=$(curl -s -w "\n%{http_code}" -u elastic:"$${ELASTIC_PASSWORD}" -X POST "http://elasticsearch:9200/_security/service/elastic/kibana/credential/token/kibana-service-token")
HTTP_CODE=$$(echo "$${RESPONSE}" | tail -n1)
BODY=$$(echo "$${RESPONSE}" | head -n -1)
if [ "$${HTTP_CODE}" = "200" ]; then
CREATED=$$(echo "$${BODY}" | jq -r '.created')
if [ "$${CREATED}" = "true" ]; then
TOKEN_VALUE=$$(echo "$${BODY}" | jq -r '.token.value')
echo "Token created successfully:"
echo "$${TOKEN_VALUE}"
else
echo "Unexpected response, token not created:"
echo "$${BODY}"
fi
elif [ "$${HTTP_CODE}" = "409" ]; then
echo "Token already exists. Skipping token creation."
else
echo "Failed to create token. HTTP code: $${HTTP_CODE}"
echo "$${BODY}"
exit 1
fi
restart: 'no' # Run once to generate token, then exit
+3 -3
View File
@@ -39,13 +39,13 @@ services:
- ENTE_S3_B2_EU_CEN_REGION=${S3_STORAGE_REGION:-us-east-1}
- ENTE_S3_B2_EU_CEN_BUCKET=${S3_STORAGE_BUCKET:?}
- ENTE_SMTP_HOST=${ENTE_SMTP_HOST:-smtp.gmail.com}
- ENTE_SMTP_PORT=${ENTE_SMTP_PORT:-587}
- ENTE_SMTP_HOST=${ENTE_SMTP_HOST}
- ENTE_SMTP_PORT=${ENTE_SMTP_PORT}
- ENTE_SMTP_USERNAME=${ENTE_SMTP_USERNAME}
- ENTE_SMTP_PASSWORD=${ENTE_SMTP_PASSWORD}
- ENTE_SMTP_EMAIL=${ENTE_SMTP_EMAIL}
- ENTE_SMTP_SENDER_NAME=${ENTE_SMTP_SENDER_NAME}
- ENTE_SMTP_ENCRYPTION=${ENTE_SMTP_ENCRYPTION:-tls}
- ENTE_SMTP_ENCRYPTION=${ENTE_SMTP_ENCRYPTION}
depends_on:
postgres:
+1 -1
View File
@@ -10,7 +10,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
+1 -1
View File
@@ -10,7 +10,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
@@ -10,7 +10,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
@@ -11,7 +11,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
@@ -11,7 +11,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
@@ -11,7 +11,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
+1 -1
View File
@@ -11,7 +11,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS:-false}
- USER_UID=1000
+1 -1
View File
@@ -10,7 +10,7 @@ services:
image: codeberg.org/forgejo/forgejo:8
environment:
- SERVICE_URL_FORGEJO_3000
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO_3000}
- FORGEJO__server__ROOT_URL=${SERVICE_URL_FORGEJO}
- FORGEJO__migrations__ALLOWED_DOMAINS=${FORGEJO__migrations__ALLOWED_DOMAINS}
- FORGEJO__migrations__ALLOW_LOCALNETWORKS=${FORGEJO__migrations__ALLOW_LOCALNETWORKS-false}
- USER_UID=1000
+59 -5
View File
@@ -1,13 +1,13 @@
# documentation: https://formbricks.com/docs/self-hosting/configuration
# documentation: https://formbricks.com/docs/self-hosting/setup/docker
# slogan: Open Source Survey Platform
# category: analytics
# tags: form, builder, forms, survey, open source, experience, management, self-hosted, docker
# tags: form, builder, forms, survey
# logo: svgs/formbricks.png
# port: 3000
services:
formbricks:
image: ghcr.io/formbricks/formbricks:latest
image: ghcr.io/formbricks/formbricks:4.5.0 # Released on Jan 5 2026
environment:
- SERVICE_URL_FORMBRICKS_3000
- WEBAPP_URL=$SERVICE_URL_FORMBRICKS
@@ -57,15 +57,25 @@ services:
- IMPRINT_URL=${IMPRINT_URL}
- RATE_LIMITING_DISABLED=${RATE_LIMITING_DISABLED:-0}
- OPENTELEMETRY_LISTENER_URL=${OPENTELEMETRY_LISTENER_URL}
- REDIS_URL=${REDIS_URL}
- REDIS_HTTP_URL=${REDIS_HTTP_URL}
- 'REDIS_URL=redis://valkey:6379'
- DEFAULT_ORGANIZATION_ID=${DEFAULT_ORGANIZATION_ID}
- DEFAULT_ORGANIZATION_ROLE=${DEFAULT_ORGANIZATION_ROLE:-owner}
- S3_ACCESS_KEY=$SERVICE_USER_MINIO
- S3_SECRET_KEY=${SERVICE_PASSWORD_MINIO}
- S3_REGION=us-east-1
- S3_BUCKET_NAME=formbricks
- S3_ENDPOINT_URL=$MINIO_SERVER_URL # This has to be publically accessible by frombricks frontend, using http://minio:9000 doesn't work!!
- 'S3_FORCE_PATH_STYLE=1'
volumes:
- formbricks-uploads:/apps/web/uploads/
depends_on:
postgresql:
condition: service_healthy
valkey:
condition: service_healthy
minio:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 2s
@@ -85,3 +95,47 @@ services:
interval: 5s
timeout: 20s
retries: 10
valkey:
image: valkey/valkey:8-alpine
command: valkey-server --appendonly yes
volumes:
- formbricks-valkey:/data
healthcheck:
test:
- CMD-SHELL
- 'valkey-cli ping | grep PONG'
interval: 5s
timeout: 5s
retries: 5
start_period: 3s
minio:
image: ghcr.io/coollabsio/minio:RELEASE.2025-10-15T17-29-55Z # Released on 15 October 2025
command: server /data --console-address ":9001"
environment:
- MINIO_SERVER_URL=$MINIO_SERVER_URL
- MINIO_BROWSER_REDIRECT_URL=$MINIO_BROWSER_REDIRECT_URL
- MINIO_ROOT_USER=$SERVICE_USER_MINIO
- MINIO_ROOT_PASSWORD=$SERVICE_PASSWORD_MINIO
volumes:
- formbricks-minio-data:/data
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 5s
timeout: 20s
retries: 10
minio-init:
image: minio/mc:latest
depends_on:
minio:
condition: service_healthy
entrypoint: >
sh -c "
mc alias set local http://minio:9000 ${SERVICE_USER_MINIO} ${SERVICE_PASSWORD_MINIO} &&
mc mb -p local/formbricks || true &&
mc anonymous set private local/formbricks
"
restart: "no"
exclude_from_hc: true
+19
View File
@@ -0,0 +1,19 @@
# documentation: https://www.goatcounter.com/help
# slogan: Lightweight web analytics platform.
# category: analytics
# tags: analytics, insights, privacy
# logo: svgs/goatcounter.svg
# port: 8080
services:
goatcounter:
image: arp242/goatcounter:2.7
environment:
- SERVICE_URL_GOATCOUNTER_8080
volumes:
- goatcounter-data:/home/goatcounter/goatcounter-data
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8080/status >/dev/null 2>&1 || exit 1"]
interval: 10s
timeout: 5s
retries: 10
+1 -1
View File
@@ -1,5 +1,5 @@
# documentation: https://docs.hatchet.run/self-hosting/docker-compose
# slogan: Hatchet is a high-throughput, low-latency computing service. It's built on an open-source, fault-tolerant queue, allowing work to be delivered as fast as your system can handle
# slogan: Hatchet allows you to run background tasks at scale with a high-throughput, low-latency computing service built on an open-source, fault-tolerant queue.
# tags: ai-agents,background-tasks,data-pipelines,scheduling
# logo: svgs/hatchet.svg
# port: 80
+1 -1
View File
@@ -37,7 +37,7 @@ services:
- ADMINMAIL=${ADMINMAIL:-admin@kimai.local}
- ADMINPASS=${SERVICE_PASSWORD_ADMINPASS}
- DATABASE_URL=mysql://${SERVICE_USER_MYSQL}:${SERVICE_PASSWORD_MYSQL}@mysql/${MYSQL_DATABASE}?charset=utf8mb4&serverVersion=8.3.0
- TRUSTED_HOSTS=localhost
- 'TRUSTED_HOSTS=${TRUSTED_HOSTS}|localhost|127.0.0.1'
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8001"]
interval: 2s
+43
View File
@@ -0,0 +1,43 @@
# documentation: https://docs.langflow.org
# slogan: Langflow is an open-source, Python-based, customizable framework for building AI applications.
# category: ai
# tags: langflow, ai, openai, gpt, llm, workflow, automation, open source, low code
# logo: svgs/langflow.svg
# port: 7860
services:
langflow:
image: langflowai/langflow:1.7.2
environment:
- SERVICE_URL_LANGFLOW_7860
- LANGFLOW_AUTO_LOGIN=${LANGFLOW_AUTO_LOGIN:-false}
- LANGFLOW_SUPERUSER=$SERVICE_USER_LANGFLOW
- LANGFLOW_SUPERUSER_PASSWORD=$SERVICE_PASSWORD_LANGFLOW
- LANGFLOW_DATABASE_URL=postgresql://$SERVICE_USER_POSTGRES:$SERVICE_PASSWORD_POSTGRES@postgres:5432/${POSTGRES_DB:-langflow-db}
- LANGFLOW_CONFIG_DIR=app/langflow
- LANGFLOW_HOST=0.0.0.0
- PORT=7860
healthcheck:
test: ["CMD-SHELL", "curl -f http://127.0.0.1:7860/health"]
interval: 5s
timeout: 20s
retries: 10
depends_on:
postgres:
condition: service_healthy
volumes:
- langflow-data:/app/langflow
postgres:
image: postgres:18-alpine
environment:
- POSTGRES_USER=$SERVICE_USER_POSTGRES
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
- POSTGRES_DB=${POSTGRES_DB:-langflow-db}
volumes:
- langflow-postgres:/var/lib/postgres/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10
+10 -8
View File
@@ -7,7 +7,7 @@
services:
listmonk:
image: listmonk/listmonk:latest
image: listmonk/listmonk:v6.0.0
environment:
- SERVICE_URL_LISTMONK_9000
- LISTMONK_app__address=0.0.0.0:9000
@@ -18,17 +18,18 @@ services:
- LISTMONK_db__port=5432
- TZ=Etc/UTC
volumes:
- "listmonk-data:/listmonk/uploads"
depends_on:
postgres:
condition: service_healthy
- listmonk-data:/listmonk/uploads
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:9000"]
interval: 5s
timeout: 20s
retries: 10
depends_on:
postgres:
condition: service_healthy
listmonk-initial-database-setup:
image: listmonk/listmonk:latest
image: listmonk/listmonk:v6.0.0
command: "./listmonk --install --yes --idempotent"
restart: "no"
depends_on:
@@ -40,14 +41,15 @@ services:
- LISTMONK_db__user=$SERVICE_USER_POSTGRES
- LISTMONK_db__password=$SERVICE_PASSWORD_POSTGRES
- LISTMONK_db__port=5432
postgres:
image: "postgres:latest"
image: postgres:18-alpine
environment:
- POSTGRES_DB=listmonk
- POSTGRES_PASSWORD=$SERVICE_PASSWORD_POSTGRES
- POSTGRES_USER=$SERVICE_USER_POSTGRES
volumes:
- "pg-data:/var/lib/postgresql/data"
- postgres-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
+1
View File
@@ -1,3 +1,4 @@
# ignore: true
# documentation: https://www.mautic.org/
# slogan: Mautic v5 Open Source Marketing Automation
# category: analytics
+1
View File
@@ -1,3 +1,4 @@
# ignore: true
# documentation: https://github.com/maybe-finance/maybe
# slogan: Maybe, the OS for your personal finances.
# category: productivity
@@ -124,7 +124,7 @@ services:
task-runners:
image: n8nio/runners:2.1.5
environment:
- N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n:5679}
- N8N_RUNNERS_TASK_BROKER_URI=${N8N_RUNNERS_TASK_BROKER_URI:-http://n8n-worker:5679}
- N8N_RUNNERS_AUTH_TOKEN=$SERVICE_PASSWORD_N8N
- N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=${N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT:-15}
- N8N_RUNNERS_MAX_CONCURRENCY=${N8N_RUNNERS_MAX_CONCURRENCY:-5}
+87
View File
@@ -0,0 +1,87 @@
# documentation: https://coolify.io/docs/services/openclaw
# slogan: AI-powered coding assistant with multi-provider support and browser automation.
# category: ai
# tags: ai, coding, assistant, llm, anthropic, openai, automation
# logo: svgs/openclaw.svg
# port: 8080
services:
openclaw:
image: "coollabsio/openclaw:2026.2.6"
environment:
- SERVICE_FQDN_OPENCLAW_8080
- AUTH_USERNAME=$SERVICE_USER_OPENCLAW
- AUTH_PASSWORD=$SERVICE_PASSWORD_OPENCLAW
- OPENCLAW_GATEWAY_TOKEN=$SERVICE_PASSWORD_64_GATEWAYTOKEN
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
- GEMINI_API_KEY=${GEMINI_API_KEY}
- XAI_API_KEY=${XAI_API_KEY}
- GROQ_API_KEY=${GROQ_API_KEY}
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
- CEREBRAS_API_KEY=${CEREBRAS_API_KEY}
- VENICE_API_KEY=${VENICE_API_KEY}
- MOONSHOT_API_KEY=${MOONSHOT_API_KEY}
- KIMI_API_KEY=${KIMI_API_KEY}
- MINIMAX_API_KEY=${MINIMAX_API_KEY}
- ZAI_API_KEY=${ZAI_API_KEY}
- AI_GATEWAY_API_KEY=${AI_GATEWAY_API_KEY}
- OPENCODE_API_KEY=${OPENCODE_API_KEY}
- SYNTHETIC_API_KEY=${SYNTHETIC_API_KEY}
- COPILOT_GITHUB_TOKEN=${COPILOT_GITHUB_TOKEN}
- XIAOMI_API_KEY=${XIAOMI_API_KEY}
- OPENCLAW_PRIMARY_MODEL=${OPENCLAW_PRIMARY_MODEL}
- DEEPGRAM_API_KEY=${DEEPGRAM_API_KEY}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_REGION=${AWS_REGION:-us-east-1}
- AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}
- BEDROCK_PROVIDER_FILTER=${BEDROCK_PROVIDER_FILTER:-anthropic}
- OLLAMA_BASE_URL=${OLLAMA_BASE_URL}
- PORT=8080
- OPENCLAW_GATEWAY_PORT=18789
- OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND:-loopback}
- OPENCLAW_STATE_DIR=/data/.openclaw
- OPENCLAW_WORKSPACE_DIR=/data/workspace
- BROWSER_CDP_URL=http://browser:9223
- BROWSER_DEFAULT_PROFILE=${BROWSER_DEFAULT_PROFILE:-openclaw}
- BROWSER_EVALUATE_ENABLED=${BROWSER_EVALUATE_ENABLED:-true}
- BROWSER_SNAPSHOT_MODE=${BROWSER_SNAPSHOT_MODE:-efficient}
- BROWSER_REMOTE_TIMEOUT_MS=${BROWSER_REMOTE_TIMEOUT_MS:-1500}
- BROWSER_REMOTE_HANDSHAKE_TIMEOUT_MS=${BROWSER_REMOTE_HANDSHAKE_TIMEOUT_MS:-3000}
- HOOKS_ENABLED=${HOOKS_ENABLED:-false}
- HOOKS_PATH=${HOOKS_PATH:-/hooks}
- MOONSHOT_BASE_URL=${MOONSHOT_BASE_URL:-https://api.moonshot.ai/v1}
- KIMI_BASE_URL=${KIMI_BASE_URL:-https://api.moonshot.ai/anthropic}
- TELEGRAM_BOT_TOKEN=$TELEGRAM_BOT_TOKEN
- DISCORD_BOT_TOKEN=$DISCORD_BOT_TOKEN
- SLACK_BOT_TOKEN=$SLACK_BOT_TOKEN
- SLACK_APP_TOKEN=$SLACK_APP_TOKEN
- WHATSAPP_ENABLED=$WHATSAPP_ENABLED
- OPENCLAW_DOCKER_APT_PACKAGES=$OPENCLAW_DOCKER_APT_PACKAGES
volumes:
- "openclaw-data:/data"
depends_on:
browser:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-sf", "http://127.0.0.1:8080/healthz"]
interval: 10s
timeout: 10s
retries: 5
browser:
image: "coollabsio/openclaw-browser:latest"
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- CHROME_CLI=--remote-debugging-port=9222
volumes:
- "browser-data:/config"
shm_size: 2g
healthcheck:
test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/9222' || exit 1"]
interval: 5s
timeout: 5s
retries: 10
+3 -3
View File
@@ -7,7 +7,7 @@
services:
openpanel-dashboard:
image: lindesvard/openpanel-dashboard:2.0.0
image: lindesvard/openpanel-dashboard:2
environment:
- NODE_ENV=production
- SELF_HOSTED=true
@@ -37,7 +37,7 @@ services:
start_period: 15s
openpanel-api:
image: lindesvard/openpanel-api:2.0.0
image: lindesvard/openpanel-api:2
command: >
sh -c "
echo 'Running migrations...'
@@ -74,7 +74,7 @@ services:
retries: 5
openpanel-worker:
image: lindesvard/openpanel-worker:2.0.0
image: lindesvard/openpanel-worker:2
environment:
- DISABLE_BULLBOARD=${DISABLE_BULLBOARD:-1}
- NODE_ENV=production
+1 -1
View File
@@ -32,7 +32,7 @@ services:
retries: 3
pterodactyl:
image: ghcr.io/pterodactyl/panel:latest
image: ghcr.io/pterodactyl/panel:v1.12.0
volumes:
- "panel-var:/app/var/"
- "panel-nginx:/etc/nginx/http.d/"
@@ -33,7 +33,7 @@ services:
timeout: 1s
retries: 3
pterodactyl:
image: 'ghcr.io/pterodactyl/panel:v1.11.11'
image: 'ghcr.io/pterodactyl/panel:v1.12.0'
volumes:
- 'panel-var:/app/var/'
- 'panel-nginx:/etc/nginx/http.d/'
@@ -109,7 +109,7 @@ services:
- MAIL_PASSWORD=$MAIL_PASSWORD
- MAIL_ENCRYPTION=$MAIL_ENCRYPTION
wings:
image: 'ghcr.io/pterodactyl/wings:v1.11.13'
image: 'ghcr.io/pterodactyl/wings:v1.12.1'
restart: unless-stopped
ports:
- "2022:2022"
+21 -2
View File
@@ -7,7 +7,7 @@
services:
reactive-resume:
image: amruthpillai/reactive-resume:latest
image: amruthpillai/reactive-resume:v4.3.7
environment:
- SERVICE_URL_REACTIVERESUME_3000
- PUBLIC_URL=$SERVICE_URL_REACTIVERESUME
@@ -31,6 +31,16 @@ services:
- postgres
- minio
- chrome
healthcheck:
test:
- CMD
- node
- '-e'
- "require('http').get('http://127.0.0.1:3000', res => process.exit(res.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"
interval: 10s
timeout: 3s
retries: 5
start_period: 10s
postgres:
image: postgres:16-alpine
environment:
@@ -69,7 +79,16 @@ services:
- TIMEOUT=10000
- CONCURRENT=10
- TOKEN=$SERVICE_PASSWORD_CHROMETOKEN
healthcheck:
test:
- CMD
- curl
- '-f'
- 'http://127.0.0.1:3000/'
interval: 10s
timeout: 3s
retries: 5
redis:
image: redis:7-alpine
command: redis-server
+1 -1
View File
@@ -1,5 +1,5 @@
# documentation: https://www.redmine.org/
# slogan: Redmine is a flexible project management web application. Written using the Ruby on Rails framework, it is cross-platform and cross-database.
# slogan: Redmine is a flexible project management web application.
# tags: redmine,project management
# logo: svgs/redmine.svg
# port: 3000
+17 -22
View File
@@ -7,44 +7,39 @@
services:
rocketchat:
image: registry.rocket.chat/rocketchat/rocket.chat:latest
image: 'registry.rocket.chat/rocketchat/rocket.chat:8.0.1'
environment:
- SERVICE_URL_ROCKETCHAT_3000
- MONGO_URL=mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/${MONGODB_DATABASE:-rocketchat}?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}
- MONGO_OPLOG_URL=mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/local?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}
- 'MONGO_URL=mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/${MONGODB_DATABASE:-rocketchat}?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}'
- 'MONGO_OPLOG_URL=mongodb://${MONGODB_ADVERTISED_HOSTNAME:-mongodb}:${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}/local?replicaSet=${MONGODB_REPLICA_SET_NAME:-rs0}'
- ROOT_URL=$SERVICE_URL_ROCKETCHAT
- DEPLOY_METHOD=docker
- REG_TOKEN=$REG_TOKEN
- 'MAIL_URL=${MAIL_URL:-test@example.com}'
depends_on:
mongodb:
condition: service_healthy
healthcheck:
test:
[
"CMD",
"node",
"--eval",
"const http = require('http'); const options = { host: '0.0.0.0', port: 3000, timeout: 2000, path: '/health' }; const healthCheck = http.request(options, (res) => { console.log('HEALTHCHECK STATUS:', res.statusCode); if (res.statusCode == 200) { process.exit(0); } else { process.exit(1); } }); healthCheck.on('error', function (err) { console.error('ERROR'); process.exit(1); }); healthCheck.end();",
]
- CMD
- node
- '--eval'
- "const http = require('http'); const options = { host: '0.0.0.0', port: 3000, timeout: 2000, path: '/health' }; const healthCheck = http.request(options, (res) => { console.log('HEALTHCHECK STATUS:', res.statusCode); if (res.statusCode == 200) { process.exit(0); } else { process.exit(1); } }); healthCheck.on('error', function (err) { console.error('ERROR'); process.exit(1); }); healthCheck.end();"
interval: 2s
timeout: 10s
retries: 15
mongodb:
image: docker.io/bitnamilegacy/mongodb:5.0
image: 'mongo:7'
volumes:
- mongodb_data:/bitnami/mongodb
environment:
- MONGODB_REPLICA_SET_MODE=primary
- MONGODB_REPLICA_SET_NAME=${MONGODB_REPLICA_SET_NAME:-rs0}
- MONGODB_PORT_NUMBER=${MONGODB_PORT_NUMBER:-27017}
- MONGODB_INITIAL_PRIMARY_HOST=${MONGODB_INITIAL_PRIMARY_HOST:-mongodb}
- MONGODB_INITIAL_PRIMARY_PORT_NUMBER=${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}
- MONGODB_ADVERTISED_HOSTNAME=${MONGODB_ADVERTISED_HOSTNAME:-mongodb}
- MONGODB_ENABLE_JOURNAL=${MONGODB_ENABLE_JOURNAL:-true}
- ALLOW_EMPTY_PASSWORD=${ALLOW_EMPTY_PASSWORD:-yes}
- 'mongodb_data:/data/db'
command: "sh -c \"\n mongod --replSet ${MONGODB_REPLICA_SET_NAME:-rs0} --bind_ip_all &\n sleep 5 &&\n mongosh --eval 'rs.initiate({_id:\\\"${MONGODB_REPLICA_SET_NAME:-rs0}\\\", members:[{_id:0, host:\\\"mongodb:27017\\\"}]})' ||\n true &&\n wait\n\"\n"
healthcheck:
test: echo 'db.stats().ok' | mongo localhost:27017/test --quiet
test:
- CMD
- mongosh
- '--quiet'
- '--eval'
- "db.adminCommand('ping')"
interval: 2s
timeout: 10s
retries: 15
+33
View File
@@ -0,0 +1,33 @@
# documentation: https://github.com/wolveix/satisfactory-server
# slogan: Satisfactory Dedicated Server for hosting your own Satisfactory game sessions.
# category: games
# tags: satisfactory, game-server, dedicated-server, steam, self-hosted, gaming
# logo: svgs/satisfactory.jpg
# ports: 7777 tcp/udp, 8888 tcp
services:
satisfactory-server:
image: wolveix/satisfactory-server:v1.9.10
ports:
- ${SERVER_GAME_PORT}:7777/tcp
- ${SERVER_GAME_PORT}:7777/udp
- ${SERVER_MESSAGING_PORT}:8888/tcp
volumes:
- satisfactory-server:/config
environment:
- AUTOSAVENUM=${AUTOSAVE_NUM:-5}
- DEBUG=${DEBUG:-false}
- DISABLESEASONALEVENTS=${DISABLE_SEASONAL_EVENTS:-false}
- LOG=${LOG:-false}
- MAXOBJECTS=${MAX_OBJECTS:?2162688}
- MAXPLAYERS=${MAX_PLAYERS:?4}
- MAXTICKRATE=${MAX_TICK_RATE:-30}
- MULTIHOME=${MULTI_HOME:-::}
- PGID=${PGID:?1000}
- PUID=${PUID:?1000}
- SERVERGAMEPORT=${SERVER_GAME_PORT:-7777}
- SERVERMESSAGINGPORT=${SERVER_MESSAGING_PORT:-8888}
- SERVERSTREAMING=${SERVER_STREAMING:-true}
- SKIPUPDATE=${SKIP_UPDATE:-false}
- STEAMBETA=${STEAM_BETA:-false}
- TIMEOUT=${TIMEOUT:-30}
+1 -1
View File
@@ -2,7 +2,7 @@
# slogan: SeaweedFS is a simple and highly scalable distributed file system. Compatible with S3, with an admin web interface.
# category: storage
# tags: object, storage, server, s3, api
# logo: svgs/garage.svg
# logo: svgs/seaweedfs.svg
# port: 8333
services:
+32
View File
@@ -0,0 +1,32 @@
# documentation: https://github.com/rahulhaque/soketi-app-manager-filament
# slogan: Manage soketi websocket server and apps with ease.
# tags: soketi,websockets,app-manager,dashboard
# logo: svgs/soketi-app-manager.svg
# port: 8080
services:
soketi-app-manager:
image: ghcr.io/rahulhaque/soketi-app-manager-filament-alpine:latest
environment:
- SERVICE_FQDN_SOKETIAPPMANAGER_8080
- AUTORUN_ENABLED=true
- AUTORUN_LARAVEL_MIGRATION=${AUTORUN_LARAVEL_MIGRATION:-true}
- APP_DEBUG=${APP_DEBUG:-false}
- APP_URL=$SERVICE_FQDN_SOKETIAPPMANAGER
- APP_KEY=$APP_KEY
- DB_CONNECTION=$DB_CONNECTION
- DB_HOST=$DB_HOST
- DB_PORT=$DB_PORT
- DB_DATABASE=$DB_DATABASE
- DB_USERNAME=$DB_USERNAME
- DB_PASSWORD=$DB_PASSWORD
- PUSHER_HOST=$PUSHER_HOST
- PUSHER_PORT=$PUSHER_PORT
- PUSHER_SCHEME=$PUSHER_SCHEME
- PUSHER_APP_CLUSTER=$PUSHER_APP_CLUSTER
- SOKETI_DB_REDIS_USERNAME=$SOKETI_DB_REDIS_USERNAME
- SOKETI_DB_REDIS_PASSWORD=$SOKETI_DB_REDIS_PASSWORD
- METRICS_HOST=$METRICS_HOST
healthcheck:
test: ["CMD", "php-fpm-healthcheck"]
start_period: 10s
+22 -1
View File
@@ -7,8 +7,29 @@
services:
strapi:
image: "elestio/strapi-development:latest"
image: "elestio/strapi-production:v5.33.4"
entrypoint: /bin/sh
command:
- -c
- |
cat > /opt/app/src/admin/vite.config.js << 'EOFVITE'
const { mergeConfig } = require('vite');
module.exports = (config) => {
return mergeConfig(config, {
resolve: {
alias: {
'@': '/src',
},
},
server: {
allowedHosts: ['$SERVICE_FQDN_STRAPI']
}
});
};
EOFVITE
exec npm run develop
environment:
- SERVICE_FQDN_STRAPI
- SERVICE_URL_STRAPI_1337
- DATABASE_CLIENT=postgres
- DATABASE_HOST=postgresql
+13
View File
@@ -29,6 +29,11 @@ services:
- SUPABASE_SERVICE_KEY=${SERVICE_SUPABASESERVICE_KEY}
- DASHBOARD_USERNAME=${SERVICE_USER_ADMIN}
- DASHBOARD_PASSWORD=${SERVICE_PASSWORD_ADMIN}
- 'KONG_STORAGE_CONNECT_TIMEOUT=${KONG_STORAGE_CONNECT_TIMEOUT:-60}'
- 'KONG_STORAGE_WRITE_TIMEOUT=${KONG_STORAGE_WRITE_TIMEOUT:-3600}'
- 'KONG_STORAGE_READ_TIMEOUT=${KONG_STORAGE_READ_TIMEOUT:-3600}'
- 'KONG_STORAGE_REQUEST_BUFFERING=${KONG_STORAGE_REQUEST_BUFFERING:-false}'
- 'KONG_STORAGE_RESPONSE_BUFFERING=${KONG_STORAGE_RESPONSE_BUFFERING:-false}'
volumes:
# https://github.com/supabase/supabase/issues/12661
- type: bind
@@ -215,12 +220,17 @@ services:
## Storage routes: the storage server manages its own auth
- name: storage-v1
_comment: 'Storage: /storage/v1/* -> http://supabase-storage:5000/*'
connect_timeout: $KONG_STORAGE_CONNECT_TIMEOUT
write_timeout: $KONG_STORAGE_WRITE_TIMEOUT
read_timeout: $KONG_STORAGE_READ_TIMEOUT
url: http://supabase-storage:5000/
routes:
- name: storage-v1-all
strip_path: true
paths:
- /storage/v1/
request_buffering: $KONG_STORAGE_REQUEST_BUFFERING
response_buffering: $KONG_STORAGE_RESPONSE_BUFFERING
plugins:
- name: cors
@@ -314,6 +324,9 @@ services:
- LOGFLARE_API_KEY=${SERVICE_PASSWORD_LOGFLARE}
- LOGFLARE_URL=http://supabase-analytics:4000
- 'SUPABASE_PUBLIC_API=${SERVICE_URL_SUPABASEKONG}'
# Next.js client-side environment variables (required for browser access)
- 'NEXT_PUBLIC_SUPABASE_URL=${SERVICE_URL_SUPABASEKONG}'
- NEXT_PUBLIC_SUPABASE_ANON_KEY=${SERVICE_SUPABASEANON_KEY}
- NEXT_PUBLIC_ENABLE_LOGS=true
# Comment to use Big Query backend for analytics
- NEXT_ANALYTICS_BACKEND_PROVIDER=postgres
+93
View File
@@ -0,0 +1,93 @@
# documentation: https://github.com/we-promise/sure
# slogan: An all-in-one personal finance platform.
# category: finance
# tags: budgeting,budget,money,expenses,income
# logo: svgs/sure.png
# port: 3000
services:
web:
image: ghcr.io/we-promise/sure:0.6.7
environment:
- SERVICE_URL_SURE_3000
- APP_DOMAIN=$SERVICE_FQDN_SURE
- SECRET_KEY_BASE=$SERVICE_BASE64_BASE
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-sure}
- 'REDIS_URL=redis://valkey:6379'
- DB_HOST=postgresql
- DB_PORT=5432
- 'SELF_HOSTED=true'
- 'RAILS_FORCE_SSL=false'
- 'RAILS_ASSUME_SSL=false'
- ONBOARDING_STATE=${ONBOARDING_STATE:-open}
depends_on:
postgresql:
condition: service_healthy
valkey:
condition: service_healthy
volumes:
- sure-app-storage:/rails/storage
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 15s
timeout: 20s
retries: 5
worker:
image: ghcr.io/we-promise/sure:0.6.7
command: bundle exec sidekiq
environment:
- APP_DOMAIN=$SERVICE_FQDN_SURE
- SECRET_KEY_BASE=$SERVICE_BASE64_BASE
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-sure}
- 'REDIS_URL=redis://valkey:6379'
- DB_HOST=postgresql
- DB_PORT=5432
- 'SELF_HOSTED=true'
- 'RAILS_FORCE_SSL=false'
- 'RAILS_ASSUME_SSL=false'
- ONBOARDING_STATE=${ONBOARDING_STATE:-open}
volumes:
- sure-app-storage:/rails/storage
depends_on:
postgresql:
condition: service_healthy
valkey:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 15s
timeout: 20s
retries: 5
postgresql:
image: postgres:16-alpine
volumes:
- sure-postgresql-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-sure}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 20s
retries: 10
valkey:
image: valkey/valkey:8-alpine
command: valkey-server --appendonly yes
volumes:
- sure-valkey:/data
healthcheck:
test:
- CMD-SHELL
- 'valkey-cli ping | grep PONG'
interval: 5s
timeout: 5s
retries: 5
start_period: 3s
+2 -2
View File
@@ -1,5 +1,5 @@
# documentation: https://pterodactyl.io/
# slogan: Wings is Pterodactyl's server control plane
# slogan: The server control plane for Pterodactyl Panel. Written from the ground-up with security, speed, and stability in mind.
# category: devtools
# tags: game, game server, management, panel, minecraft
# logo: svgs/pterodactyl.png
@@ -7,7 +7,7 @@
services:
wings:
image: "ghcr.io/pterodactyl/wings:latest"
image: "ghcr.io/pterodactyl/wings:v1.12.1"
environment:
- SERVICE_URL_WINGS_8443
- "TZ=${TIMEZONE:-UTC}"