Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
Blame · Line-by-line history

docker-compose.standalone.yml

Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.

docker-compose.standalone.ymlBlame95 lines · 1 contributor
f635e2fClaude1# Standalone single-box deploy: Gluecron + Postgres(pgvector) + Caddy(auto-HTTPS)
2# plus self-healing (autoheal), log rotation, daily backups, and fast auto-deploy.
95e33b0Claude3#
4# For a DEDICATED VPS where Gluecron owns ports 80/443 (no co-tenant). One
5# command brings up the whole stack with automatic Let's Encrypt certs:
6#
7# docker compose -f docker-compose.standalone.yml up -d --build
8#
9# Variables come from a local .env (POSTGRES_PASSWORD, optional ANTHROPIC_API_KEY)
f635e2fClaude10# — see scripts/standalone-deploy.sh which generates it and installs the backup
11# + auto-deploy systemd timers. The Caddyfile already serves gluecron.com + www.
12
13x-logging: &default-logging
14 driver: json-file
15 options:
16 max-size: "10m"
17 max-file: "3"
18
95e33b0Claude19services:
20 postgres:
21 # pgvector image is required: migration 0057 does CREATE EXTENSION vector.
22 image: pgvector/pgvector:pg16
23 environment:
24 POSTGRES_USER: gluecron
25 POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
26 POSTGRES_DB: gluecron
27 volumes:
28 - pgdata:/var/lib/postgresql/data
29 restart: unless-stopped
f635e2fClaude30 logging: *default-logging
95e33b0Claude31 healthcheck:
32 test: ["CMD-SHELL", "pg_isready -U gluecron -d gluecron"]
33 interval: 10s
34 timeout: 5s
35 retries: 6
36
37 gluecron:
38 build: .
39 environment:
40 - DATABASE_URL=postgres://gluecron:${POSTGRES_PASSWORD}@postgres:5432/gluecron
41 - GIT_REPOS_PATH=/data/repos
42 - PORT=3000
43 - NODE_ENV=production
44 - APP_BASE_URL=https://gluecron.com
45 - SSH_PORT=0
46 - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
47 expose:
48 - "3000"
49 volumes:
50 - git-repos:/data/repos
51 depends_on:
52 postgres:
53 condition: service_healthy
54 restart: unless-stopped
f635e2fClaude55 logging: *default-logging
95e33b0Claude56 healthcheck:
f635e2fClaude57 # Liveness — autoheal restarts the container if this fails repeatedly.
95e33b0Claude58 test: ["CMD", "wget", "-qO-", "http://localhost:3000/healthz"]
59 interval: 30s
60 timeout: 10s
61 retries: 3
f635e2fClaude62 start_period: 60s
95e33b0Claude63
64 caddy:
65 image: caddy:2-alpine
66 restart: unless-stopped
f635e2fClaude67 logging: *default-logging
95e33b0Claude68 ports:
69 - "80:80"
70 - "443:443"
71 volumes:
72 - ./Caddyfile:/etc/caddy/Caddyfile:ro
73 - caddy-data:/data
74 - caddy-config:/config
75 depends_on:
76 - gluecron
77
f635e2fClaude78 # Self-healing: watches every container that declares a healthcheck and
79 # restarts any that goes unhealthy (a hung process that didn't crash).
80 autoheal:
81 image: willfarrell/autoheal:latest
82 restart: unless-stopped
83 logging: *default-logging
84 environment:
85 - AUTOHEAL_CONTAINER_LABEL=all
86 - AUTOHEAL_INTERVAL=15
87 - AUTOHEAL_START_PERIOD=60
88 volumes:
89 - /var/run/docker.sock:/var/run/docker.sock
90
95e33b0Claude91volumes:
92 pgdata:
93 git-repos:
94 caddy-data:
95 caddy-config: