diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a15915e --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +POSTGRES_PASSWORD= +PGADMIN_DEFAULT_EMAIL=fkrebs@nucli.de +PGADMIN_DEFAULT_PASSWORD= +WAL_G_S3_PREFIX=s3://homelab-backups/wal-g/db diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ed55c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.env +.env.* +!.env.example +data/ diff --git a/README.md b/README.md index a8f4cb6..5cdf0b3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # ct113-db -Shared Postgres + pgAdmin compose (CT 113) \ No newline at end of file +Shared Postgres 17 + pgAdmin + WAL-G compose for CT 113 (192.168.1.6). + +Auto-synced daily at 03:15 from CT 113. + +Stack: `/opt/stacks/db/` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..48262b6 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,88 @@ +services: + postgres: + image: postgres:17 + container_name: postgres + restart: unless-stopped + shm_size: "256mb" + volumes: + - ./data:/var/lib/postgresql/data + - ./wal-g/wal-g:/usr/local/bin/wal-g:ro + environment: + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + PGUSER: postgres + PGHOST: /var/run/postgresql + PGPORT: "5432" + WALG_S3_PREFIX: s3://ct113-pg-backup/ + AWS_ENDPOINT: http://192.168.1.40:10004 + AWS_ACCESS_KEY_ID: ${WALG_S3_ACCESS_KEY} + AWS_SECRET_ACCESS_KEY: ${WALG_S3_SECRET_KEY} + AWS_REGION: us-east-1 + AWS_S3_FORCE_PATH_STYLE: "true" + ports: + - "192.168.1.6:5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + deploy: + resources: + limits: + cpus: "2.0" + memory: 1G + + arcane-agent: + image: ghcr.io/getarcaneapp/arcane-headless:latest + container_name: arcane-agent + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./arcane-agent:/app/data + environment: + EDGE_AGENT: "true" + EDGE_TRANSPORT: poll + AGENT_TOKEN: ${ARCANE_AGENT_TOKEN} + MANAGER_API_URL: http://192.168.1.8:10002 + deploy: + resources: + limits: + cpus: "0.5" + memory: 256M + + pgadmin: + image: dpage/pgadmin4:latest + container_name: pgadmin + restart: unless-stopped + ports: + - "5050:80" + volumes: + - ./pgadmin:/var/lib/pgadmin + - ./pgadmin-servers.json:/pgadmin4/servers.json:ro + environment: + PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL} + PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD} + PGADMIN_CONFIG_SERVER_MODE: "False" + PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False" + depends_on: + postgres: + condition: service_healthy + deploy: + resources: + limits: + cpus: "0.5" + memory: 512M + + dozzle-agent: + image: amir20/dozzle:latest + container_name: dozzle-agent + command: agent + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + ports: + - '7007:7007' + deploy: + resources: + limits: + cpus: '0.25' + memory: 64M diff --git a/pgadmin-servers.json b/pgadmin-servers.json new file mode 100644 index 0000000..a8dbc69 --- /dev/null +++ b/pgadmin-servers.json @@ -0,0 +1,13 @@ +{ + "Servers": { + "1": { + "Name": "CT113 postgres", + "Group": "nuclide", + "Host": "postgres", + "Port": 5432, + "MaintenanceDB": "postgres", + "Username": "postgres", + "SSLMode": "prefer" + } + } +}