mirror of
https://github.com/tiennm99/coolify.git
synced 2026-10-15 22:14:53 +00:00
Merge branch 'next' into v4.x
This commit is contained in:
138 files changed
+7978
-10302
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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}'
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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,3 +1,4 @@
|
||||
# ignore: true
|
||||
# documentation: https://www.mautic.org/
|
||||
# slogan: Mautic v5 Open Source Marketing Automation
|
||||
# category: analytics
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
@@ -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}
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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}"
|
||||
|
||||
Reference in new issue
Block a user