mirror of
https://github.com/tiennm99/coolify.git
synced 2026-10-19 20:14:59 +00:00
Merge branch 'next' into add-service-gramps-web
This commit is contained in:
77 files changed
+4500
-786
No files matched your search
@@ -0,0 +1,88 @@
|
||||
# documentation: https://www.elastic.co/docs/deploy-manage/deploy/self-managed/install-kibana-with-docker
|
||||
# slogan: Elastic + Kibana is a Free and Open Source Search, Monitoring, and Visualization Stack
|
||||
# tags: elastic,kibana,elasticsearch,search,visualization,logging,monitoring,observability,analytics,stack,devops
|
||||
# logo: svgs/elasticsearch.svg
|
||||
# port: 5601
|
||||
|
||||
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
|
||||
volumes:
|
||||
- '/etc/localtime:/etc/localtime:ro'
|
||||
- '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'
|
||||
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}'
|
||||
volumes:
|
||||
- '/etc/localtime:/etc/localtime:ro'
|
||||
- 'kibana-data:/usr/share/kibana/data'
|
||||
depends_on:
|
||||
setup:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- "curl -s http://localhost:5601/api/status | grep -q '\"level\":\"available\"' || exit 1"
|
||||
interval: 10s
|
||||
timeout: 10s
|
||||
retries: 120
|
||||
|
||||
setup:
|
||||
image: 'elastic/elasticsearch:9.1.2'
|
||||
container_name: kibana-setup
|
||||
depends_on:
|
||||
elasticsearch:
|
||||
condition: service_healthy
|
||||
exclude_from_hc: true
|
||||
environment:
|
||||
- 'ELASTIC_PASSWORD=${SERVICE_PASSWORD_ELASTICSEARCH}'
|
||||
- 'KIBANA_PASSWORD=${SERVICE_PASSWORD_KIBANA}'
|
||||
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'
|
||||
@@ -0,0 +1,129 @@
|
||||
# documentation: https://help.ente.io/self-hosting/installation/compose
|
||||
# slogan: Ente Photos is a fully open source, End to End Encrypted alternative to Google Photos and Apple Photos.
|
||||
# category: media
|
||||
# tags: photos,gallery,backup,encryption,privacy,self-hosted,google-photos,alternative
|
||||
# logo: svgs/ente-photos.svg
|
||||
# port: 8080
|
||||
|
||||
services:
|
||||
museum:
|
||||
image: 'ghcr.io/ente-io/server:613c6a96390d7a624cf30b946955705d632423cc' # Released at 2025-09-14T22:16:37-07:00
|
||||
environment:
|
||||
- SERVICE_URL_MUSEUM_8080
|
||||
- ENTE_DB_HOST=postgres
|
||||
- ENTE_DB_PORT=5432
|
||||
- 'ENTE_DB_NAME=${POSTGRES_DB:-ente_db}'
|
||||
- 'ENTE_DB_USER=${SERVICE_USER_POSTGRES}'
|
||||
- 'ENTE_DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES}'
|
||||
- 'ENTE_HTTP_USE_TLS=${ENTE_HTTP_USE_TLS:-false}'
|
||||
- ENTE_S3_ARE_LOCAL_BUCKETS=false
|
||||
- ENTE_S3_USE_PATH_STYLE_URLS=true
|
||||
- 'ENTE_S3_B2_EU_CEN_KEY=${SERVICE_USER_MINIO}'
|
||||
- 'ENTE_S3_B2_EU_CEN_SECRET=${SERVICE_PASSWORD_MINIO}'
|
||||
- 'ENTE_S3_B2_EU_CEN_ENDPOINT=${SERVICE_FQDN_MINIO_9000}'
|
||||
- ENTE_S3_B2_EU_CEN_REGION=eu-central-2
|
||||
- ENTE_S3_B2_EU_CEN_BUCKET=b2-eu-cen
|
||||
- 'ENTE_KEY_ENCRYPTION=${SERVICE_REALBASE64_ENCRYPTION}'
|
||||
- 'ENTE_KEY_HASH=${SERVICE_REALBASE64_64_HASH}'
|
||||
- 'ENTE_JWT_SECRET=${SERVICE_REALBASE64_JWT}'
|
||||
- 'ENTE_INTERNAL_ADMIN=${ENTE_INTERNAL_ADMIN:-1580559962386438}'
|
||||
- 'ENTE_INTERNAL_DISABLE_REGISTRATION=${ENTE_INTERNAL_DISABLE_REGISTRATION:-false}'
|
||||
volumes:
|
||||
- 'museum-data:/data'
|
||||
- 'museum-config:/config'
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
minio:
|
||||
condition: service_started
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- wget
|
||||
- '--spider'
|
||||
- 'http://127.0.0.1:8080/ping'
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
|
||||
web:
|
||||
image: 'ghcr.io/ente-io/web:ca03165f5e7f2a50105e6e40019c17ae6cdd934f' # Released at 2025-10-08T00:57:05-07:00
|
||||
environment:
|
||||
- SERVICE_URL_WEB_3000
|
||||
- 'ENTE_API_ORIGIN=${SERVICE_URL_MUSEUM}'
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- curl
|
||||
- '--fail'
|
||||
- 'http://localhost:3000'
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
|
||||
|
||||
postgres:
|
||||
image: 'postgres:15-alpine'
|
||||
environment:
|
||||
- 'POSTGRES_USER=${SERVICE_USER_POSTGRES}'
|
||||
- 'POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}'
|
||||
- 'POSTGRES_DB=${POSTGRES_DB:-ente_db}'
|
||||
volumes:
|
||||
- 'postgres-data:/var/lib/postgresql/data'
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD-SHELL
|
||||
- 'pg_isready -U ${SERVICE_USER_POSTGRES} -d ${POSTGRES_DB:-ente_db}'
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
|
||||
minio:
|
||||
image: 'quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z' # Released at 2025-09-07T16-13-09Z
|
||||
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:
|
||||
- 'minio-data:/data'
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- mc
|
||||
- ready
|
||||
- local
|
||||
interval: 5s
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
|
||||
|
||||
minio-init:
|
||||
image: 'minio/mc:RELEASE.2025-08-13T08-35-41Z' # Released at 2025-08-13T08-35-41Z
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_started
|
||||
restart: on-failure
|
||||
exclude_from_hc: true
|
||||
environment:
|
||||
- 'MINIO_ROOT_USER=${SERVICE_USER_MINIO}'
|
||||
- 'MINIO_ROOT_PASSWORD=${SERVICE_PASSWORD_MINIO}'
|
||||
- 'MINIO_CORS_URLS=$SERVICE_URL_MUSEUM,$SERVICE_URL_WEB'
|
||||
entrypoint: |-
|
||||
/bin/sh -c "
|
||||
echo \"MINIO_CORS_URLS: \$${MINIO_CORS_URLS}\";
|
||||
sleep 5;
|
||||
until mc alias set minio http://minio:9000 \$${MINIO_ROOT_USER} \$${MINIO_ROOT_PASSWORD}; do
|
||||
echo 'Waiting for MinIO...';
|
||||
sleep 2;
|
||||
done;
|
||||
mc admin config set minio api cors_allow_origin='$MINIO_CORS_URLS' || true;
|
||||
mc mb minio/b2-eu-cen --ignore-existing;
|
||||
mc mb minio/wasabi-eu-central-2-v3 --ignore-existing;
|
||||
mc mb minio/scw-eu-fr-v3 --ignore-existing;
|
||||
echo 'MinIO buckets and CORS configured';
|
||||
"
|
||||
@@ -10,86 +10,71 @@ services:
|
||||
image: ghcr.io/ente-io/server:latest
|
||||
environment:
|
||||
- SERVICE_URL_MUSEUM_8080
|
||||
# Database configuration
|
||||
- POSTGRES_HOST=postgres
|
||||
- POSTGRES_PORT=5432
|
||||
- POSTGRES_DB=${POSTGRES_DB:-ente_db}
|
||||
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
|
||||
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
||||
# S3/MinIO configuration
|
||||
- S3_ARE_LOCAL_BUCKETS=true
|
||||
- S3_USE_PATH_STYLE_URLS=true
|
||||
- S3_B2_EU_CEN_KEY=${SERVICE_USER_MINIO}
|
||||
- S3_B2_EU_CEN_SECRET=${SERVICE_PASSWORD_MINIO}
|
||||
- S3_B2_EU_CEN_ENDPOINT=${SERVICE_URL_MINIO_3200}
|
||||
- S3_B2_EU_CEN_REGION=eu-central-2
|
||||
- S3_B2_EU_CEN_BUCKET=b2-eu-cen
|
||||
# Security keys
|
||||
- ENCRYPTION_KEY=${SERVICE_PASSWORD_64_ENCRYPTION}
|
||||
- HASH_KEY=${SERVICE_PASSWORD_64_HASH}
|
||||
- JWT_SECRET=${SERVICE_PASSWORD_64_JWT}
|
||||
# Admin permissions (grants first account admin access)
|
||||
- ENTE_INTERNAL_ADMIN=1580559962386438
|
||||
# App URLs (optional - for web interface)
|
||||
- APPS_PUBLIC_ALBUMS=${APPS_PUBLIC_ALBUMS:-}
|
||||
- APPS_CAST=${APPS_CAST:-}
|
||||
- APPS_ACCOUNTS=${APPS_ACCOUNTS:-}
|
||||
volumes:
|
||||
- museum-data:/data
|
||||
- museum-config:/config
|
||||
|
||||
- ENTE_HTTP_USE_TLS=${ENTE_HTTP_USE_TLS:-false}
|
||||
|
||||
- ENTE_APPS_PUBLIC_ALBUMS=${SERVICE_URL_WEB_3002}
|
||||
- ENTE_APPS_CAST=${SERVICE_URL_WEB_3004}
|
||||
- ENTE_APPS_ACCOUNTS=${SERVICE_URL_WEB_3001}
|
||||
|
||||
- ENTE_DB_HOST=${ENTE_DB_HOST:-postgres}
|
||||
- ENTE_DB_PORT=${ENTE_DB_PORT:-5432}
|
||||
- ENTE_DB_NAME=${ENTE_DB_NAME:-ente_db}
|
||||
- ENTE_DB_USER=${SERVICE_USER_POSTGRES:-pguser}
|
||||
- ENTE_DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
||||
|
||||
- ENTE_KEY_ENCRYPTION=${SERVICE_REALBASE64_ENCRYPTION}
|
||||
- ENTE_KEY_HASH=${SERVICE_REALBASE64_64_HASH}
|
||||
|
||||
- ENTE_JWT_SECRET=${SERVICE_REALBASE64_JWT}
|
||||
|
||||
- ENTE_INTERNAL_ADMIN=${ENTE_INTERNAL_ADMIN:-1580559962386438}
|
||||
- ENTE_INTERNAL_DISABLE_REGISTRATION=${ENTE_INTERNAL_DISABLE_REGISTRATION:-false}
|
||||
|
||||
- ENTE_S3_B2_EU_CEN_ARE_LOCAL_BUCKETS=${PRIMARY_STORAGE_ARE_LOCAL_BUCKETS:-false}
|
||||
- ENTE_S3_B2_EU_CEN_USE_PATH_STYLE_URLS=${PRIMARY_STORAGE_USE_PATH_STYLE_URLS:-true}
|
||||
- ENTE_S3_B2_EU_CEN_KEY=${S3_STORAGE_KEY:?}
|
||||
- ENTE_S3_B2_EU_CEN_SECRET=${S3_STORAGE_SECRET:?}
|
||||
- ENTE_S3_B2_EU_CEN_ENDPOINT=${S3_STORAGE_ENDPOINT:?}
|
||||
- ENTE_S3_B2_EU_CEN_REGION=${S3_STORAGE_REGION:-us-east-1}
|
||||
- ENTE_S3_B2_EU_CEN_BUCKET=${S3_STORAGE_BUCKET:?}
|
||||
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
minio:
|
||||
condition: service_started
|
||||
volumes:
|
||||
- museum-data:/data
|
||||
- museum-config:/config
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://127.0.0.1:8080/ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8080/ping"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
web:
|
||||
image: ghcr.io/ente-io/web
|
||||
environment:
|
||||
- SERVICE_URL_WEB_3000
|
||||
- ENTE_API_ORIGIN=${SERVICE_URL_MUSEUM}
|
||||
- ENTE_ALBUMS_ORIGIN=${SERVICE_URL_WEB_3002}
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--fail", "http://127.0.0.1:3000"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
image: postgres:15
|
||||
environment:
|
||||
- POSTGRES_USER=${SERVICE_USER_POSTGRES}
|
||||
- POSTGRES_USER=${SERVICE_USER_POSTGRES:-pguser}
|
||||
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
||||
- POSTGRES_DB=${POSTGRES_DB:-ente_db}
|
||||
- POSTGRES_DB=${SERVICE_DB_NAME:-ente_db}
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${SERVICE_USER_POSTGRES} -d ${POSTGRES_DB:-ente_db}"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
minio:
|
||||
image: quay.io/minio/minio:latest
|
||||
environment:
|
||||
- SERVICE_URL_MINIO_3200
|
||||
- MINIO_ROOT_USER=${SERVICE_USER_MINIO}
|
||||
- MINIO_ROOT_PASSWORD=${SERVICE_PASSWORD_MINIO}
|
||||
command: server /data --address ":3200" --console-address ":3201"
|
||||
volumes:
|
||||
- minio-data:/data
|
||||
healthcheck:
|
||||
test: ["CMD", "mc", "ready", "local"]
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
|
||||
interval: 5s
|
||||
timeout: 20s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
minio-init:
|
||||
image: minio/mc:latest
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- MINIO_ROOT_USER=${SERVICE_USER_MINIO}
|
||||
- MINIO_ROOT_PASSWORD=${SERVICE_PASSWORD_MINIO}
|
||||
entrypoint: >
|
||||
/bin/sh -c "
|
||||
mc alias set minio http://minio:3200 $${MINIO_ROOT_USER} $${MINIO_ROOT_PASSWORD};
|
||||
mc mb minio/b2-eu-cen --ignore-existing;
|
||||
mc mb minio/wasabi-eu-central-2-v3 --ignore-existing;
|
||||
mc mb minio/scw-eu-fr-v3 --ignore-existing;
|
||||
echo 'MinIO buckets created successfully';
|
||||
"
|
||||
@@ -20,7 +20,7 @@ services:
|
||||
- mariadb-data:/var/lib/mysql
|
||||
|
||||
moodle:
|
||||
image: docker.io/bitnami/moodle:4.3
|
||||
image: docker.io/bitnamilegacy/moodle:4.3
|
||||
environment:
|
||||
- SERVICE_URL_MOODLE_8080
|
||||
- MOODLE_DATABASE_HOST=mariadb
|
||||
|
||||
@@ -31,7 +31,7 @@ services:
|
||||
retries: 15
|
||||
|
||||
mongodb:
|
||||
image: docker.io/bitnami/mongodb:5.0
|
||||
image: docker.io/bitnamilegacy/mongodb:5.0
|
||||
volumes:
|
||||
- mongodb_data:/bitnami/mongodb
|
||||
environment:
|
||||
|
||||
Reference in new issue
Block a user