|
services: |
|
bot: |
|
build: |
|
context: . |
|
dockerfile: ./Dockerfile |
|
image: bot:latest |
|
container_name: ${COMPOSE_PROJECT_NAME}-bot |
|
restart: always |
|
env_file: |
|
- .env |
|
ports: |
|
- ${WEBHOOK_PORT}:${WEBHOOK_PORT} |
|
networks: |
|
- app |
|
- monitoring |
|
depends_on: |
|
- pgbouncer |
|
- redis |
|
|
|
admin: |
|
build: |
|
context: . |
|
dockerfile: ./admin/Dockerfile |
|
container_name: ${COMPOSE_PROJECT_NAME}-admin |
|
restart: always |
|
env_file: |
|
- .env |
|
ports: |
|
- ${ADMIN_PORT}:${ADMIN_PORT} |
|
networks: |
|
- app |
|
depends_on: |
|
- bot |
|
volumes: |
|
- ./admin:/usr/src/app/admin |
|
|
|
postgres: |
|
image: postgres:14-alpine |
|
container_name: ${COMPOSE_PROJECT_NAME}-postgres |
|
restart: always |
|
env_file: |
|
- .env |
|
environment: |
|
- POSTGRES_USER=${DB_USER} |
|
- POSTGRES_PASSWORD=${DB_PASS} |
|
- POSTGRES_DB=${DB_NAME} |
|
- PGDATA='/var/lib/postgresql/data/pgdata' |
|
networks: |
|
- app |
|
volumes: |
|
- postgres-data:/var/lib/postgresql/data |
|
|
|
pgbouncer: |
|
image: edoburu/pgbouncer |
|
container_name: ${COMPOSE_PROJECT_NAME}-pgbouncer |
|
restart: always |
|
env_file: |
|
- .env |
|
environment: |
|
- DB_USER=${DB_USER} |
|
- DB_PASSWORD=${DB_PASS} |
|
- DB_HOST=postgres |
|
- POOL_MODE=session |
|
- MAX_DB_CONNECTIONS=0 |
|
- DEFAULT_POOL_SIZE=40 |
|
- ADMIN_USERS=postgres,${DB_USER} |
|
- AUTH_TYPE=scram-sha-256 |
|
ports: |
|
- ${DB_PORT}:${DB_PORT} |
|
depends_on: |
|
- postgres |
|
networks: |
|
- app |
|
|
|
|
|
pgbackup: |
|
container_name: ${COMPOSE_PROJECT_NAME}-pgbackup |
|
image: prodrigestivill/postgres-backup-local |
|
restart: always |
|
volumes: |
|
- backups-data:/backups |
|
networks: |
|
- app |
|
depends_on: |
|
- postgres |
|
environment: |
|
- POSTGRES_HOST=postgres |
|
- POSTGRES_DB=${DB_NAME} |
|
- POSTGRES_USER=${DB_USER} |
|
- POSTGRES_PASSWORD=${DB_PASS} |
|
- POSTGRES_EXTRA_OPTS=-Z9 --schema=public --blobs |
|
- SCHEDULE=@every 0h30m00s |
|
- BACKUP_KEEP_DAYS=7 |
|
- BACKUP_KEEP_WEEKS=4 |
|
- BACKUP_KEEP_MONTHS=6 |
|
- HEALTHCHECK_PORT=81 |
|
|
|
|
|
redis: |
|
image: redis:7-alpine |
|
container_name: ${COMPOSE_PROJECT_NAME}-redis |
|
restart: always |
|
env_file: |
|
- .env |
|
ports: |
|
- ${REDIS_PORT}:${REDIS_PORT} |
|
networks: |
|
- app |
|
volumes: |
|
- redis-data:/bitnami/redis/data |
|
command: /bin/sh -c 'if [ -n "$REDIS_PASS" ]; then redis-server --requirepass "$REDIS_PASS"; else redis-server; fi' |
|
|
|
migrator: |
|
image: bot:latest |
|
container_name: ${COMPOSE_PROJECT_NAME}-migrator |
|
restart: "on-failure" |
|
command: alembic upgrade head |
|
env_file: |
|
- .env |
|
networks: |
|
- app |
|
depends_on: |
|
- bot |
|
volumes: |
|
- ./migrations:/usr/src/app/migrations |
|
|
|
|
|
node-exporter: |
|
image: prom/node-exporter:latest |
|
container_name: ${COMPOSE_PROJECT_NAME}-node-exporter |
|
restart: unless-stopped |
|
ports: |
|
- 9100:9100 |
|
networks: |
|
- monitoring |
|
volumes: |
|
- /proc:/host/proc:ro |
|
- /sys:/host/sys:ro |
|
- /:/rootfs:ro |
|
command: |
|
- "--path.procfs=/host/proc" |
|
- "--path.sysfs=/host/sys" |
|
- "--collector.filesystem.mount-points-exclude" |
|
- "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)" |
|
|
|
prometheus: |
|
image: prom/prometheus:v2.43.0 |
|
container_name: ${COMPOSE_PROJECT_NAME}-prometheus |
|
restart: unless-stopped |
|
env_file: |
|
- .env |
|
ports: |
|
- ${PROMETHEUS_PORT}:${PROMETHEUS_PORT} |
|
depends_on: |
|
- bot |
|
- node-exporter |
|
networks: |
|
- monitoring |
|
volumes: |
|
- ./configs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml |
|
- prometheus-data:/prometheus |
|
command: |
|
- "--config.file=/etc/prometheus/prometheus.yml" |
|
- "--storage.tsdb.path=/prometheus" |
|
- "--web.console.libraries=/etc/prometheus/console_libraries" |
|
- "--web.console.templates=/etc/prometheus/consoles" |
|
- "--web.enable-lifecycle" |
|
|
|
grafana: |
|
image: grafana/grafana:8.5.22 |
|
container_name: ${COMPOSE_PROJECT_NAME}-grafana |
|
restart: always |
|
env_file: |
|
- .env |
|
environment: |
|
- GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER} |
|
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD} |
|
- GF_INSTALL_PLUGINS=grafana-clock-panel |
|
ports: |
|
- ${GRAFANA_PORT}:${GRAFANA_PORT} |
|
depends_on: |
|
- prometheus |
|
networks: |
|
- monitoring |
|
volumes: |
|
- ./configs/grafana/datasources:/etc/grafana/provisioning/datasources |
|
- ./configs/grafana/dashboards:/etc/grafana/provisioning/dashboards |
|
- ./configs/grafana/node-exporter.json:/var/lib/grafana/dashboards/node-exporter.json |
|
- grafana-data:/var/lib/grafana |
|
user: "0" |
|
|
|
networks: |
|
app: |
|
driver: bridge |
|
monitoring: |
|
driver: bridge |
|
|
|
volumes: |
|
backups-data: {} |
|
postgres-data: {} |
|
redis-data: {} |
|
prometheus-data: {} |
|
grafana-data: {} |
|
|