Remove deprecated Docker Compose files and configurations for various services including edu_master, glance, homer, and traefik. Introduce new Docker Compose files for dockmon, glance, homer, and traefik with updated configurations and environment variables. Ensure all services are integrated with Traefik for routing and TLS management.

This commit is contained in:
2025-11-11 01:32:14 +01:00
parent 32aac89fdf
commit 0403524992
6 changed files with 57 additions and 65 deletions
-306
View File
@@ -1,306 +0,0 @@
x-app: &app
build:
context: backend/
dockerfile: Dockerfile
args:
- VERSION=${VERSION:-v0.10.2}
depends_on:
db:
condition: service_healthy
dns:
- 8.8.8.8
- 1.1.1.1
environment:
- SECRET_KEY=${SECRET_KEY:-django-insecure-el4wo4a4--=f0+ag#omp@^w4eq^8v4(scda&1a(td_y2@=sh6&}
- API_ENCRYPTION_KEY=${API_ENCRYPTION_KEY:-8zSd6JIuC7ovfZ4AoxG_XmhubW6CPnQWW7Qe_4TD1TQ=}
- DEBUG=${DEBUG:-True}
- ALLOWED_HOSTS=${ALLOWED_HOSTS:-*}
- LANGUAGE_CODE=${LANGUAGE_CODE:-en-us}
- TIME_ZONE=${TIME_ZONE:-UTC}
- USE_I18N=${USE_I18N:-True}
- USE_TZ=${USE_TZ:-True}
- STATIC_ROOT=${STATIC_ROOT:-storage/static/}
- MEDIA_ROOT=${MEDIA_ROOT:-storage/media/}
- LOG_LEVEL=${LOG_LEVEL:-INFO}
- REDIS_URL=${REDIS_URL:-redis://redis:6379/1}
- DATABASE_URL=postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@${POSTGRES_HOST:-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-postgres}
- CELERY_BROKER_URL=${CELERY_BROKER_URL:-redis://redis:6379/0}
- CELERY_RESULT_BACKEND=${CELERY_RESULT_BACKEND:-django-db}
- REDIS_LOCKER_URL=${REDIS_LOCKER_URL:-redis://redis:6379/3}
- MINIO_ENDPOINT=minio:9000
- MINIO_EXTERNAL_ENDPOINT=nginx
- MINIO_REGION=us-east-1
- MINIO_ACCESS_KEY=minio
- MINIO_SECRET_KEY=minio123
- MINIO_USE_HTTPS=False
- MINIO_EXTERNAL_ENDPOINT_USE_HTTPS=False
- MINIO_URL_EXPIRY_HOURS=7
- MINIO_PRIVATE_BUCKET=private
- MINIO_PUBLIC_BUCKET=public
- CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS:-}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:-}
- CORS_ALLOWED_ORIGIN_REGEXES=${CORS_ALLOWED_ORIGIN_REGEXES:-}
- CORS_ALLOW_ALL_ORIGINS=${CORS_ALLOW_ALL_ORIGINS:-False}
- FRONTEND_URL=${FRONTEND_URL:-http://localhost}
- IS_LOGIN_ACTIVE=${IS_LOGIN_ACTIVE:-True}
- IS_SIGNUP_ACTIVE=${IS_SIGNUP_ACTIVE:-True}
- IS_GITHUB_LOGIN_ACTIVE=${IS_GITHUB_LOGIN_ACTIVE:-True}
- IS_GOOGLE_LOGIN_ACTIVE=${IS_GOOGLE_LOGIN_ACTIVE:-True}
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-}
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
- ACCESS_TOKEN_LIFETIME_MINUTES=${ACCESS_TOKEN_LIFETIME_MINUTES:-5}
- REFRESH_TOKEN_LIFETIME_DAYS=${REFRESH_TOKEN_LIFETIME_DAYS:-30}
- EMAIL_BACKEND=${EMAIL_BACKEND:-django.core.mail.backends.smtp.EmailBackend}
- EMAIL_HOST=${EMAIL_HOST:-}
- EMAIL_PORT=${EMAIL_PORT:-587}
- EMAIL_USE_TLS=${EMAIL_USE_TLS:-True}
- EMAIL_HOST_USER=${EMAIL_HOST_USER:-}
- EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-}
- DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL:-}
- SCRAPY_USER_AGENT=${SCRAPY_USER_AGENT:-WaterCrawl/0.1 (+https://github.com/watercrawl/watercrawl)}
- SCRAPY_ROBOTSTXT_OBEY=${SCRAPY_ROBOTSTXT_OBEY:-True}
- SCRAPY_CONCURRENT_REQUESTS=${SCRAPY_CONCURRENT_REQUESTS:-16}
- SCRAPY_DOWNLOAD_DELAY=${SCRAPY_DOWNLOAD_DELAY:-0}
- SCRAPY_CONCURRENT_REQUESTS_PER_DOMAIN=${SCRAPY_CONCURRENT_REQUESTS_PER_DOMAIN:-4}
- SCRAPY_CONCURRENT_REQUESTS_PER_IP=${SCRAPY_CONCURRENT_REQUESTS_PER_IP:-4}
- SCRAPY_COOKIES_ENABLED=${SCRAPY_COOKIES_ENABLED:-False}
- SCRAPY_HTTPCACHE_ENABLED=${SCRAPY_HTTPCACHE_ENABLED:-True}
- SCRAPY_HTTPCACHE_EXPIRATION_SECS=${SCRAPY_HTTPCACHE_EXPIRATION_SECS:-3600}
- SCRAPY_HTTPCACHE_DIR=${SCRAPY_HTTPCACHE_DIR:-httpcache}
- SCRAPY_LOG_LEVEL=${SCRAPY_LOG_LEVEL:-ERROR}
- SCRAPY_GOOGLE_API_KEY=${SCRAPY_GOOGLE_API_KEY:-}
- SCRAPY_GOOGLE_CSE_ID=${SCRAPY_GOOGLE_CSE_ID:-}
- SCRAPY_MAX_NUMBER_OF_SITEMAP_URLS=${SCRAPY_MAX_NUMBER_OF_SITEMAP_URLS:-20000}
- SCRAPY_SITEMAP_CRAWL_PAGE_LIMIT=${SCRAPY_SITEMAP_CRAWL_PAGE_LIMIT:-100}
- PLAYWRIGHT_SERVER=${PLAYWRIGHT_SERVER:-http://playwright:8000}
- PLAYWRIGHT_API_KEY=${PLAYWRIGHT_API_KEY:-your-secret-api-key}
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY:-}
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET:-}
- GOOGLE_ANALYTICS_ID=${GOOGLE_ANALYTICS_ID:-}
- IS_ENTERPRISE_MODE_ACTIVE=${IS_ENTERPRISE_MODE_ACTIVE:-False}
- MAX_CRAWL_DEPTH=${MAX_CRAWL_DEPTH:--1}
- CAPTURE_USAGE_HISTORY=${CAPTURE_USAGE_HISTORY:-True}
- MCP_SERVER=${MCP_SERVER:-http://localhost/sse}
networks:
- traefik-proxy
- default
x-frontend: &frontend
image: watercrawl/frontend:${VERSION:-v0.10.2}
environment:
- VITE_API_BASE_URL=${API_BASE_URL:-http://localhost/api}
depends_on:
- app
services:
nginx:
image: nginx:alpine
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf.template
- ./nginx/entrypoint.sh:/entrypoint.sh
environment:
- MINIO_PRIVATE_BUCKET=${MINIO_PRIVATE_BUCKET:-private}
- MINIO_PUBLIC_BUCKET=${MINIO_PUBLIC_BUCKET:-public}
command: ["/bin/sh", "/entrypoint.sh"]
depends_on:
- app
- frontend
- minio
restart: unless-stopped
networks:
- traefik-proxy
- default
labels:
- "traefik.enable=true"
- "traefik.http.routers.watercrawl.rule=Host(`watercrawl.workstation`)"
- "traefik.http.routers.watercrawl.entrypoints=websecure"
- "traefik.http.services.watercrawl.loadbalancer.server.port=80"
- "traefik.docker.network=traefik-proxy"
- "traefik.http.routers.watercrawl.tls.certresolver=le"
app:
<<: *app
command: [ "gunicorn", "-b", "0.0.0.0:9000", "-w", "2", "watercrawl.wsgi:application", "--access-logfile", "-", "--error-logfile", "-", "--timeout", "60" ]
celery:
<<: *app
command: [ "celery", "-A", "watercrawl", "worker", "-l", "info", "-S", "django" ]
dns:
- 1.1.1.1
- 8.8.8.8
celery-beat:
<<: *app
command: [ "celery", "-A", "watercrawl", "beat", "-l", "info", "-S", "django" ]
frontend:
<<: *frontend
command: [ "npm", "run", "serve" ]
minio:
image: minio/minio:RELEASE.2024-11-07T00-52-20Z
restart: unless-stopped
volumes:
- ./volumes/minio-data:/data
command: server /data --console-address ":9001"
environment:
- MINIO_BROWSER_REDIRECT_URL=${MINIO_BROWSER_REDIRECT_URL:-http://localhost/minio-console/}
- MINIO_SERVER_URL=${MINIO_SERVER_URL:-http://localhost/}
- MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-minio}
- MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-minio123}
playwright:
image: watercrawl/playwright:1.1
restart: unless-stopped
user: root
environment:
- AUTH_API_KEY=${PLAYWRIGHT_API_KEY:-your-secret-api-key}
- PORT=${PLAYWRIGHT_PORT:-8000}
- HOST=${PLAYWRIGHT_HOST:-0.0.0.0}
dns:
- 8.8.8.8
- 1.1.1.1
networks:
- traefik-proxy
- default
db:
image: postgres:17.2-alpine3.21
restart: unless-stopped
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_DB=${POSTGRES_DB:-postgres}
volumes:
- ./volumes/postgres-db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD-SHELL", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
mcp:
image: watercrawl/mcp:v1.2.0
restart: unless-stopped
command: [ "sse", "--base-url", "http://app:9000", '--port', '3000', '--endpoint', '/sse' ]
redis:
image: redis:latest
restart: unless-stopped
llm:
image: ollama/ollama:latest
restart: unless-stopped
volumes:
- ./volumes/ollama-models:/root/.ollama
environment:
- OLLAMA_DISABLE_TELEMETRY=true
- OLLAMA_KEEP_ALIVE=5m
- OLLAMA_HOST=0.0.0.0:11434
- OLLAMA_NUM_PARALLEL=1
- OLLAMA_MAX_LOADED_MODELS=1
dns:
- 1.1.1.1
- 8.8.8.8
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
environment:
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_PORT=5678
- N8N_RUNNERS_ENABLED=true
- NODE_ENV=production
- GENERIC_TIMEZONE=Europe/Bratislava
- TZ=Europe/Bratislava
- N8N_SECURE_COOKIE=false
- N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true
volumes:
- n8n_data:/home/node/.n8n
- ./n8n/local-files:/files
extra_hosts:
- "enterprise.n8n.io:104.26.13.187"
- "enterprise.n8n.io:104.26.12.187"
- "enterprise.n8n.io:172.67.68.102"
dns:
- 1.1.1.1
- 8.8.8.8
networks:
- traefik-proxy
- default
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.workstation`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
- "traefik.docker.network=traefik-proxy"
- "traefik.http.routers.n8n.tls.certresolver=le"
# docker exec -it edu_master-llm-1 ollama pull neural-chat:7b-q4
# docker exec -it edu_master-llm-1 ollama pull mistral:7b-q4
lessons-bot:
build:
context: lessons_bot/
dockerfile: Dockerfile
restart: unless-stopped
environment:
- LESSONS_BOT_TOKEN=${LESSONS_BOT_TOKEN}
- N8N_WEBHOOK_URL=${N8N_WEBHOOK_URL:-http://n8n:5678/webhook-test/get-lessons}
- N8N_SECRET=${N8N_SECRET:-your-secret-token-here}
- WATERCRAWL_API_URL=${WATERCRAWL_API_URL:-http://app:9000/api}
- PHPSESSID_BOT_URL=${PHPSESSID_BOT_URL:-http://phpsessid-bot:5000}
- EDU_HOST=${EDU_HOST:-edu.edu.vn.ua}
depends_on:
- n8n
- app
- phpsessid-bot
dns:
- 1.1.1.1
- 8.8.8.8
networks:
- default
healthcheck:
test: ["CMD-SHELL", "pgrep -f 'python.*main.py' || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
# webinar-notif-worker:
# image: python:3.11-slim
# restart: on-failure
# volumes:
# - ./webinar_notif:/app/webinar_notif:ro
# working_dir: /app/webinar_notif
# command: ["/bin/sh", "-c", "pip install --no-cache-dir -r requirements.txt 2>/dev/null || true; python -u main.py"]
phpsessid-bot:
build:
context: phpsessid_bot/
dockerfile: Dockerfile
restart: unless-stopped
environment:
- EDU_HOST=${EDU_HOST:-edu.edu.vn.ua}
- EDU_LOGIN=${EDU_LOGIN}
- EDU_PASSWORD=${EDU_PASSWORD}
- BOT_PORT=${PHPSESSID_BOT_PORT:-5000}
- BOT_HOST=${PHPSESSID_BOT_HOST:-0.0.0.0}
dns:
- 1.1.1.1
- 8.8.8.8
networks:
- default
volumes:
n8n_data:
postgres-db:
minio-data:
ollama-models:
lmstudio_data:
networks:
traefik-proxy:
external: true