feat: add Docker and Gitea services, monitoring, queue, and Telegram notification functionalities
- Implemented Docker operations including image building, container management, and resource stats. - Added Gitea API client for repository management and webhook handling. - Introduced monitoring service to collect and store container metrics in InfluxDB. - Created a queue system using BullMQ for managing deployment jobs with real-time log streaming. - Developed Telegram notification service for deployment status updates. - Added Traefik label generation for dynamic reverse proxy configuration. - Implemented WebSocket endpoints for log streaming and terminal access to containers. - Created an updater sidecar for self-updating the AutoDeployer container.
This commit is contained in:
66
docker-compose.yml
Normal file
66
docker-compose.yml
Normal file
@@ -0,0 +1,66 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
autodeployer:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: autodeployer
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3000
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
- ADMIN_PASSWORD_HASH=${ADMIN_PASSWORD_HASH}
|
||||
- REDIS_URL=redis://redis:6379/2
|
||||
- GITEA_URL=http://gitea:3000
|
||||
- GITEA_TOKEN=${GITEA_TOKEN}
|
||||
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
||||
- TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID}
|
||||
- INFLUXDB_URL=${INFLUXDB_URL:-http://influxdb:8086}
|
||||
- INFLUXDB_TOKEN=${INFLUXDB_TOKEN}
|
||||
- INFLUXDB_ORG=${INFLUXDB_ORG:-autodeployer}
|
||||
- INFLUXDB_BUCKET=${INFLUXDB_BUCKET:-metrics}
|
||||
- DEPLOY_DOMAIN=${DEPLOY_DOMAIN:-deploy.mebboat.it}
|
||||
- WEBHOOK_SECRET=${WEBHOOK_SECRET}
|
||||
- UPDATE_SECRET=${UPDATE_SECRET:-}
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- autodeployer-data:/app/data
|
||||
- autodeployer-builds:/tmp/builds
|
||||
- updater-trigger:/app/trigger
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.autodeployer.rule=Host(`${DEPLOY_DOMAIN:-deploy.mebboat.it}`)"
|
||||
- "traefik.http.routers.autodeployer.entrypoints=websecure"
|
||||
- "traefik.http.routers.autodeployer.tls.certresolver=cloudflare"
|
||||
- "traefik.http.services.autodeployer.loadbalancer.server.port=3000"
|
||||
- "traefik.docker.network=meb-public"
|
||||
networks:
|
||||
- meb-public
|
||||
- meb-private
|
||||
depends_on: []
|
||||
|
||||
updater:
|
||||
build:
|
||||
context: ./updater
|
||||
dockerfile: Dockerfile
|
||||
container_name: autodeployer-updater
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- .:/project:ro
|
||||
- updater-trigger:/trigger
|
||||
working_dir: /project
|
||||
networks: []
|
||||
|
||||
volumes:
|
||||
autodeployer-data:
|
||||
autodeployer-builds:
|
||||
updater-trigger:
|
||||
|
||||
networks:
|
||||
meb-public:
|
||||
external: true
|
||||
meb-private:
|
||||
external: true
|
||||
Reference in New Issue
Block a user