oxynote/docker/docker-compose.dev.yaml
2026-08-07 17:24:38 +03:00

279 lines
7.1 KiB
YAML

services:
caddy:
image: caddy:2.9-alpine
container_name: caddy
volumes:
- caddy_data:/data
- caddy_config:/config
- ./Caddyfile:/etc/caddy/Caddyfile
restart: unless-stopped
ports:
- "8080:8080"
- "8081:8081"
- "8082:8082"
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
web:
container_name: web
image: ghcr.io/oxynote/web:dev
environment:
# SSR inside the container must reach the services directly; these
# compose hostnames don't resolve on the host, which is why they live
# here and not in the shared env template.
- NUXT_CORE_API_INTERNAL_HTTP_URL=http://core:8080
- NUXT_AUTH_REALTIME_API_INTERNAL_HTTP_URL=http://auth-realtime:8081
# not started by plain `up` — `make dev` runs web on the host instead;
# `make run` / `make start` enable this profile for the full stack.
profiles:
- web
build:
context: ../web
dockerfile: Dockerfile.dev
env_file:
- ./env/web.local.env
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
auth-realtime:
container_name: auth-realtime
image: ghcr.io/oxynote/auth-realtime:dev
build:
context: ../server/auth-realtime
dockerfile: Dockerfile.dev
env_file:
- ./env/auth-realtime.local.env
depends_on:
postgres:
condition: service_healthy
valkey:
condition: service_healthy
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
core:
container_name: core
image: ghcr.io/oxynote/core:dev
platform: linux/amd64
env_file:
- ./env/core.local.env
depends_on:
postgres:
condition: service_healthy
meilisearch:
condition: service_started
volumes:
# optional GitHub App private key: drop oxynote.private-key.pem into
# docker/github/ and set OXYNOTE_CORE_GITHUB_APP_ID to enable the
# GitHub App integration.
- ./github:/etc/oxynote/core/github:ro
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
datagen:
container_name: datagen
image: ghcr.io/oxynote/datagen:dev
platform: linux/amd64
environment:
- DATAGEN_POSTGRES_DSN=postgresql://demouser:demopass@postgres/demodb?sslmode=disable
- DATAGEN_MARIADB_DSN=demouser:demopass@tcp(mariadb:3306)/demodb?parseTime=true
depends_on:
postgres:
condition: service_healthy
mariadb:
condition: service_healthy
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
postgres:
image: pgvector/pgvector:pg16
volumes:
- postgres_data:/var/lib/postgresql/data
- ./demo/postgres/init-demo-db.sh:/docker-entrypoint-initdb.d/init-demo-db.sh
environment:
POSTGRES_USER: devuser
POSTGRES_PASSWORD: devpass
POSTGRES_DB: devdb
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U devuser -d devdb"]
interval: 10s
timeout: 5s
retries: 5
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
mariadb:
image: mariadb:11-noble
volumes:
- mariadb_data:/var/lib/mysql
- ./demo/mariadb/init-demo-db.sql:/docker-entrypoint-initdb.d/init-demo-db.sql
environment:
MARIADB_ROOT_PASSWORD: devroot
MARIADB_USER: devuser
MARIADB_PASSWORD: devpass
MARIADB_DATABASE: devdb
restart: unless-stopped
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
meilisearch:
container_name: meilisearch
image: getmeili/meilisearch:v1.23
volumes:
- meilisearch_data:/meili_data
environment:
- MEILI_MASTER_KEY=devmasterkey
- MEILI_ENV=development
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
mailpit:
container_name: mailpit
image: axllent/mailpit
ports:
- "8025:8025"
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
valkey:
container_name: valkey
image: valkey/valkey:9.0-alpine
volumes:
- valkey_data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
minio:
container_name: minio
image: minio/minio
command: server --console-address ":9001" /data
volumes:
- minio_data:/data
environment:
- MINIO_ROOT_USER=sparta
- MINIO_ROOT_PASSWORD=chad_warrior
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
changedetection:
container_name: changedetection
image: dgtlmoon/changedetection.io
volumes:
- changedetection_data:/datastore
environment:
- HIDE_REFERER=true
- LOGGER_LEVEL=WARNING
- PLAYWRIGHT_DRIVER_URL=ws://browser-sockpuppet-chrome:3000
depends_on:
browser-sockpuppet-chrome:
condition: service_started
restart: unless-stopped
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
browser-sockpuppet-chrome:
container_name: browser-sockpuppet-chrome
hostname: browser-sockpuppet-chrome
image: dgtlmoon/sockpuppetbrowser:latest
cap_add:
- SYS_ADMIN # TODO: Recommended in their docker-compose example, need to double-check this.
restart: unless-stopped
environment:
- SCREEN_WIDTH=1920
- SCREEN_HEIGHT=1024
- SCREEN_DEPTH=16
- MAX_CONCURRENT_CHROME_PROCESSES=10
- LOG_LEVEL=WARNING
prometheus:
container_name: prometheus
image: prom/prometheus:latest
restart: unless-stopped
volumes:
- prometheus_data:/prometheus
- ./demo/prometheus:/etc/prometheus/
command:
- "--config.file=/etc/prometheus/prometheus.yaml"
logging:
driver: local
options:
mode: non-blocking
max-size: 10m
max-file: "3"
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "8083:3000"
volumes:
- grafana_storage:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
minio_data:
mariadb_data:
postgres_data:
meilisearch_data:
valkey_data:
caddy_data:
caddy_config:
changedetection_data:
prometheus_data:
grafana_storage: