-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdocker-compose.selfhost.yml
More file actions
152 lines (146 loc) · 5.85 KB
/
Copy pathdocker-compose.selfhost.yml
File metadata and controls
152 lines (146 loc) · 5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Self-host CodemagicPatch stack for a single Docker host.
#
# Run through scripts/selfhost/install.sh so .env.selfhost exists and the
# first API token is bootstrapped safely. Day-2 ops use the matching scripts:
# scripts/selfhost/backup.sh, scripts/selfhost/restore.sh, scripts/selfhost/upgrade.sh.
#
# Running compose directly? This file expands ${VARS} from .env.selfhost, which
# `docker compose up` does NOT auto-load (only a file named .env is). Pass it
# explicitly, and use the same --project-name the installer/scripts use, or the
# stack comes up with empty config and under a different project (separate
# volumes) than backup/restore/upgrade expect:
# docker compose --project-name codemagic-patch-selfhost --env-file .env.selfhost -f docker-compose.selfhost.yml up -d
services:
caddy:
image: ${CODEMAGIC_PATCH_CADDY_IMAGE:-codemagic-patch-caddy:selfhost}
build:
context: .
dockerfile: deploy/selfhost/Dockerfile.caddy
restart: unless-stopped
depends_on:
server:
condition: service_healthy
minio:
condition: service_healthy
environment:
CODEMAGIC_PATCH_API_DOMAIN: ${CODEMAGIC_PATCH_API_DOMAIN}
CODEMAGIC_PATCH_STORAGE_DOMAIN: ${CODEMAGIC_PATCH_STORAGE_DOMAIN}
ACME_EMAIL: ${ACME_EMAIL}
ports:
- "80:80"
- "443:443"
volumes:
- ./deploy/selfhost/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
server:
image: ${CODEMAGIC_PATCH_SERVER_IMAGE:-codemagic-patch-server:selfhost}
build:
context: .
dockerfile: server/Dockerfile
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
minio-init:
condition: service_completed_successfully
environment:
MODE: all
HOST: 0.0.0.0
PORT: 3000
LOGGER: ${LOGGER:-true}
RUN_MIGRATIONS: ${RUN_MIGRATIONS:-true}
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
WORKER_SHARED_SECRET: ${WORKER_SHARED_SECRET}
STORAGE_ADAPTER: ${STORAGE_ADAPTER:-s3}
S3_ENDPOINT: http://minio:9000
S3_BUCKET: codemagic-patch
S3_REGION: ${S3_REGION:-us-east-1}
S3_FORCE_PATH_STYLE: ${S3_FORCE_PATH_STYLE:-true}
S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER}
S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD}
PUBLIC_BASE_URL: ${PUBLIC_BASE_URL}
MANIFEST_CACHE_CONTROL: ${MANIFEST_CACHE_CONTROL:-no-cache, must-revalidate}
DELIVERY_ADAPTER: ${DELIVERY_ADAPTER:-base-url}
CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:-}
CLOUDFLARE_ZONE_ID: ${CLOUDFLARE_ZONE_ID:-}
CLOUDFLARE_API_BASE_URL: ${CLOUDFLARE_API_BASE_URL:-}
GITHUB_OAUTH_CLIENT_ID: ${GITHUB_OAUTH_CLIENT_ID:-}
GITHUB_OAUTH_CLIENT_SECRET: ${GITHUB_OAUTH_CLIENT_SECRET}
GITHUB_OAUTH_ALLOWED_REDIRECT_URIS: ${GITHUB_OAUTH_ALLOWED_REDIRECT_URIS:-}
OAUTH_DEVICE_POLL_TOKEN_SECRET: ${OAUTH_DEVICE_POLL_TOKEN_SECRET:-}
GITHUB_OAUTH_SCOPES: ${GITHUB_OAUTH_SCOPES:-read:user user:email}
INITIAL_ADMIN_EMAILS: ${INITIAL_ADMIN_EMAILS:-}
# The fixed `default-team` is created on boot (idempotent); the initial
# admin becomes its owner on first sign-in. Team CRUD is disabled in the
# CLI/dashboard. The team name is not configurable.
REGISTRATION_MODE: ${REGISTRATION_MODE:-}
healthcheck:
# Probe /health/ready (DB-backed readiness), not /health (liveness): the
# latter returns ok while the database is down, so the container — and
# anything gated on `service_healthy` (caddy, the install/restore waits) —
# would go green with a dead DB. start_period keeps failing checks from
# flapping the container to "unhealthy" while it boots and migrates.
test:
[
"CMD-SHELL",
"wget -qO- http://127.0.0.1:3000/health/ready >/dev/null || exit 1",
]
interval: 5s
timeout: 5s
retries: 60
start_period: 60s
postgres:
image: postgres:16.13-alpine@sha256:20edbde7749f822887a1a022ad526fde0a47d6b2be9a8364433605cf65099416
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\""]
interval: 5s
timeout: 5s
retries: 60
volumes:
- postgres-selfhost-data:/var/lib/postgresql/data
minio:
image: quay.io/minio/minio@sha256:14cea493d9a34af32f524e538b8346cf79f3321eff8e708c1e2960462bd8936e
command: server /data --console-address ":9001"
restart: unless-stopped
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"]
interval: 5s
timeout: 5s
retries: 60
volumes:
- minio-selfhost-data:/data
minio-init:
image: quay.io/minio/mc@sha256:a7fe349ef4bd8521fb8497f55c6042871b2ae640607cf99d9bede5e9bdf11727
depends_on:
minio:
condition: service_healthy
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
S3_BUCKET: codemagic-patch
entrypoint: >
/bin/sh -c "
mc alias set local http://minio:9000 \"$${MINIO_ROOT_USER}\" \"$${MINIO_ROOT_PASSWORD}\" &&
mc mb --ignore-existing \"local/$${S3_BUCKET}\" &&
mc anonymous set-json /policy/codemagic-patch-bucket-policy.json \"local/$${S3_BUCKET}\" &&
echo \"minio bucket ready: $${S3_BUCKET} (public OTA prefix, _internal/* denied)\"
"
volumes:
- ./deploy/selfhost/minio-bucket-policy.json:/policy/codemagic-patch-bucket-policy.json:ro
restart: "no"
volumes:
caddy-data:
caddy-config:
postgres-selfhost-data:
minio-selfhost-data: