From e7c6b557824298b5dd258f46d79dea4c48a237a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Sp=C3=B6ttel?= <1682504+fspoettel@users.noreply.github.com> Date: Wed, 15 Mar 2023 12:37:44 +0100 Subject: [PATCH] fix: fix prod docker --- .env.dev | 2 +- .env.example | 7 +++++-- README.md | 5 ++++- docker-compose.base.yml | 17 +++-------------- docker-compose.dev.yml | 10 ++++++++++ docker-compose.prod.yml | 28 ++++++++++++++++++++++++++-- web.Dockerfile | 2 +- 7 files changed, 50 insertions(+), 21 deletions(-) diff --git a/.env.dev b/.env.dev index c89e391..f525fed 100644 --- a/.env.dev +++ b/.env.dev @@ -3,4 +3,4 @@ DOMAIN="whisperbox-transcribe.localhost" WHISPER_MODEL="tiny" ENVIRONMENT="development" DATABASE_URI="sqlite:///./whisperbox-transcribe.sqlite" -BROKER_URL="redis://redis:6379/"0 +BROKER_URL="redis://redis:6379/0" diff --git a/.env.example b/.env.example index a054f1d..227ff94 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,7 @@ API_SECRET="change_me" WHISPER_MODEL="small" -DOMAIN="whisperbox-transcribe.localhost" -DATABASE_URI="sqlite:///etc/whisperbox-transcribe/data/whisperbox-transcribe.sqlite" +TRAEFIK_SSLEMAIL="" +TRAEFIK_DOMAIN="whisperbox-transcribe.localhost" +DATABASE_URI="sqlite:////etc/whisperbox-transcribe/data/whisperbox-transcribe.sqlite" +ENVIRONMENT="production" +BROKER_URL="redis://redis:6379/0" diff --git a/README.md b/README.md index 0fe0d75..3116290 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,10 @@ OpenAPI documentation can be accessed via `/docs`. ## Deploy -// TODO + 1. Clone this repository to the host machine. + 2. Create an `.env` file from `.env.example`. + 3. Run `make run` to start the server. + 4. Wrap in a systemd service to launch at startup. ## Develop diff --git a/docker-compose.base.yml b/docker-compose.base.yml index 42f26fd..0e8be50 100644 --- a/docker-compose.base.yml +++ b/docker-compose.base.yml @@ -5,13 +5,6 @@ services: traefik: image: "traefik:latest" restart: unless-stopped - ports: - - "80:80" - command: - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - - "--providers.docker.network=whisperbox-transcribe_traefik" - - "--entrypoints.web.address=:80" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro depends_on: @@ -21,8 +14,6 @@ services: redis: image: redis:7-alpine - ports: - - 6379:6379 networks: - app deploy: @@ -35,7 +26,8 @@ services: context: . dockerfile: worker.Dockerfile args: - WHISPER_MODEL: tiny + # FIXME + WHISPER_MODEL: small networks: - app depends_on: @@ -56,10 +48,7 @@ services: depends_on: worker: condition: service_healthy - labels: - - "traefik.enable=true" - - "traefik.http.services.web.loadbalancer.server.port=8000" - - "traefik.http.routers.web.rule=(Host(`${DOMAIN}`))" + networks: app: driver: bridge diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 5f7a9ba..3fe12ed 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -3,6 +3,13 @@ version: "3.8" services: traefik: container_name: whisperbox-transcribe_traefik_dev + ports: + - "80:80" + command: + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--providers.docker.network=whisperbox-transcribe_traefik" + - "--entrypoints.web.address=:80" redis: container_name: whisperbox-transcribe_redis_dev @@ -15,6 +22,9 @@ services: - ./:/etc/whisperbox-transcribe/ labels: - "traefik.http.routers.web.entrypoints=web" + - "traefik.enable=true" + - "traefik.http.services.web.loadbalancer.server.port=8000" + - "traefik.http.routers.web.rule=(Host(`${TRAEFIK_DOMAIN}`))" worker: container_name: whisperbox-transcribe_worker_dev diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 40b8dc2..c1cc4f4 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -3,6 +3,25 @@ version: "3.8" services: traefik: container_name: whisperbox-transcribe_traefik + ports: + - "443:443" + command: + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--providers.docker.network=whisperbox-transcribe_traefik" + - "--entrypoints.websecure.address=:443" + - "--certificatesresolvers.le.acme.email=${TRAEFIK_SSLEMAIL}" + - "--certificatesresolvers.le.acme.storage=./acme.json" + - "--certificatesresolvers.le.acme.tlschallenge=true" + labels: + - "traefik.http.routers.traefik.tls=true" + - "traefik.http.routers.traefik.tls.certresolver=le" + - "traefik.http.routers.traefik.entrypoints=websecure" + - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)" + - "traefik.http.routers.http-catchall.entrypoints=web" + - "traefik.http.routers.http-catchall.middlewares=redirect-to-https" + - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" + redis: container_name: whisperbox-transcribe_redis @@ -28,9 +47,14 @@ services: container_name: whisperbox-transcribe_web env_file: .env volumes: - - whisperbox-transcribe-data:/etc/whisperbox-transcribe/data + - whisperbox-transcribe-data:/etc/whisperbox-transcribe/data/ labels: - - "traefik.http.routers.web.entrypoints=web" + - "traefik.enable=true" + - "traefik.http.services.web.loadbalancer.server.port=8000" + - "traefik.http.routers.web.rule=(Host(`${TRAEFIK_DOMAIN}`))" + - "traefik.http.routers.web.entrypoints=websecure" + - "traefik.http.routers.web.tls=true" + - "traefik.http.routers.web.tls.certresolver=le" volumes: whisperbox-transcribe-data: diff --git a/web.Dockerfile b/web.Dockerfile index 7d13e52..4111ab4 100644 --- a/web.Dockerfile +++ b/web.Dockerfile @@ -20,4 +20,4 @@ COPY alembic.ini . ENV VIRTUAL_ENV /opt/venv ENV PATH /opt/venv/bin:$PATH -CMD alembic upgrade head && gunicorn -k uvicorn.workers.UvicornWorker app.web.main:app --bind ${HOST:-0.0.0.0}:${PORT:-8000} --log-level info +CMD alembic upgrade head && gunicorn -k uvicorn.workers.UvicornWorker app.web.main:app --bind ${HOST:-0.0.0.0}:${PORT:-8000} --log-level info --proxy-headers