simplified docker compose setup
This commit is contained in:
19
CLAUDE.md
19
CLAUDE.md
@@ -8,7 +8,7 @@ GitOps-style Docker Compose setup for a self-hosted VPS running Nextcloud, Gitea
|
|||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
Four independent service stacks, each with its own `docker-compose.yml`:
|
A root `docker-compose.yml` uses `include` to compose four service stacks, each with its own `docker-compose.yml`:
|
||||||
|
|
||||||
- **caddy/** — Reverse proxy with auto HTTPS. All services route through the shared `proxy` Docker network.
|
- **caddy/** — Reverse proxy with auto HTTPS. All services route through the shared `proxy` Docker network.
|
||||||
- **nextcloud/** — Nextcloud 29 + PostgreSQL 16 + Redis 7 + cron container. Has its own `.env` for DB credentials and Nextcloud config. Uses internal `nextcloud-internal` network for DB/Redis isolation.
|
- **nextcloud/** — Nextcloud 29 + PostgreSQL 16 + Redis 7 + cron container. Has its own `.env` for DB credentials and Nextcloud config. Uses internal `nextcloud-internal` network for DB/Redis isolation.
|
||||||
@@ -16,8 +16,9 @@ Four independent service stacks, each with its own `docker-compose.yml`:
|
|||||||
- **monitoring/** — Grafana Alloy collecting Docker logs (Loki) and node metrics (Prometheus) to Grafana Cloud. Has its own `.env` for cloud credentials.
|
- **monitoring/** — Grafana Alloy collecting Docker logs (Loki) and node metrics (Prometheus) to Grafana Cloud. Has its own `.env` for cloud credentials.
|
||||||
|
|
||||||
Key design patterns:
|
Key design patterns:
|
||||||
|
- Root `docker-compose.yml` includes all stacks via `include:` — single command to manage everything
|
||||||
- All stacks share the external `proxy` Docker network for Caddy routing
|
- All stacks share the external `proxy` Docker network for Caddy routing
|
||||||
- Each service's compose file requires `--env-file .env` (root-level) for `DATA_ROOT` and `DOMAIN`
|
- Root `.env` provides `DATA_ROOT` and `DOMAIN` (pass via `--env-file .env`)
|
||||||
- Service-specific secrets live in per-service `.env` files (loaded via `env_file:` in compose)
|
- Service-specific secrets live in per-service `.env` files (loaded via `env_file:` in compose)
|
||||||
- All persistent data under `${DATA_ROOT}` (default `/opt/docker-data/`)
|
- All persistent data under `${DATA_ROOT}` (default `/opt/docker-data/`)
|
||||||
|
|
||||||
@@ -27,6 +28,11 @@ Key design patterns:
|
|||||||
# Deploy everything (installs Docker if needed, creates dirs, starts all stacks)
|
# Deploy everything (installs Docker if needed, creates dirs, starts all stacks)
|
||||||
./scripts/deploy.sh
|
./scripts/deploy.sh
|
||||||
|
|
||||||
|
# Manage all services
|
||||||
|
docker compose --env-file .env up -d
|
||||||
|
docker compose --env-file .env logs -f
|
||||||
|
docker compose --env-file .env down
|
||||||
|
|
||||||
# Manage individual services
|
# Manage individual services
|
||||||
docker compose -f <service>/docker-compose.yml --env-file .env up -d
|
docker compose -f <service>/docker-compose.yml --env-file .env up -d
|
||||||
docker compose -f <service>/docker-compose.yml --env-file .env logs -f
|
docker compose -f <service>/docker-compose.yml --env-file .env logs -f
|
||||||
@@ -43,10 +49,11 @@ docker exec caddy caddy reload --config /etc/caddy/Caddyfile
|
|||||||
## Adding a New Service
|
## Adding a New Service
|
||||||
|
|
||||||
1. Create `myapp/docker-compose.yml` joining the `proxy` external network, with data under `${DATA_ROOT}/myapp/`
|
1. Create `myapp/docker-compose.yml` joining the `proxy` external network, with data under `${DATA_ROOT}/myapp/`
|
||||||
2. Add reverse proxy entry in `caddy/Caddyfile`
|
2. Add `- path: myapp/docker-compose.yml` to root `docker-compose.yml`
|
||||||
3. Add data directory creation to `scripts/deploy.sh`
|
3. Add reverse proxy entry in `caddy/Caddyfile`
|
||||||
4. Add backup steps to `scripts/backup.sh` if it has persistent data
|
4. Add data directory creation to `scripts/deploy.sh`
|
||||||
5. Create DNS A record for the subdomain
|
5. Add backup steps to `scripts/backup.sh` if it has persistent data
|
||||||
|
6. Create DNS A record for the subdomain
|
||||||
|
|
||||||
## Environment Files
|
## Environment Files
|
||||||
|
|
||||||
|
|||||||
5
docker-compose.yml
Normal file
5
docker-compose.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
include:
|
||||||
|
- path: caddy/docker-compose.yml
|
||||||
|
- path: nextcloud/docker-compose.yml
|
||||||
|
- path: gitea/docker-compose.yml
|
||||||
|
- path: monitoring/docker-compose.yml
|
||||||
@@ -73,23 +73,11 @@ for svc in nextcloud gitea monitoring; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
# Start stacks in order
|
# Start all stacks
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
echo "==> Starting Caddy..."
|
echo "==> Pulling and starting all services..."
|
||||||
docker compose -f "$REPO_ROOT/caddy/docker-compose.yml" --env-file "$REPO_ROOT/.env" pull
|
docker compose --env-file "$REPO_ROOT/.env" --project-directory "$REPO_ROOT" pull
|
||||||
docker compose -f "$REPO_ROOT/caddy/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d
|
docker compose --env-file "$REPO_ROOT/.env" --project-directory "$REPO_ROOT" up -d
|
||||||
|
|
||||||
echo "==> Starting Nextcloud..."
|
|
||||||
docker compose -f "$REPO_ROOT/nextcloud/docker-compose.yml" --env-file "$REPO_ROOT/.env" pull
|
|
||||||
docker compose -f "$REPO_ROOT/nextcloud/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d
|
|
||||||
|
|
||||||
echo "==> Starting Gitea..."
|
|
||||||
docker compose -f "$REPO_ROOT/gitea/docker-compose.yml" --env-file "$REPO_ROOT/.env" pull
|
|
||||||
docker compose -f "$REPO_ROOT/gitea/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d
|
|
||||||
|
|
||||||
echo "==> Starting Monitoring..."
|
|
||||||
docker compose -f "$REPO_ROOT/monitoring/docker-compose.yml" --env-file "$REPO_ROOT/.env" pull
|
|
||||||
docker compose -f "$REPO_ROOT/monitoring/docker-compose.yml" --env-file "$REPO_ROOT/.env" up -d
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "==> All services started. Verify with: docker ps"
|
echo "==> All services started. Verify with: docker ps"
|
||||||
|
|||||||
Reference in New Issue
Block a user