| | 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: {} |
| |
|