diff --git a/.drone.jsonnet b/.drone.jsonnet index 5164f98..b08dc4b 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -4,6 +4,20 @@ type: 'docker', name: 'reflex-ipad', steps: [ + { + name: 'restore-cache', + image: 'drillster/drone-volume-cache', + settings: { + restore: true, + ttl: 7, + mount: [ + '/drone/docker', + ], + }, + volumes: [ + { name: 'cache', path: '/cache' }, + ], + }, { name: 'builder', image: 'plugins/docker', @@ -13,19 +27,23 @@ registry: 'gitea.pb42.de', repo: 'gitea.pb42.de/matthias/reflex-ipad', cache_from: 'gitea.pb42.de/matthias/reflex-ipad:builder', + storage_path: '/drone/docker', config: { from_secret: 'dockerconfigjson' }, }, + depends_on: [ + 'restore-cache', + ], }, { name: 'frontend-builder', image: 'gitea.pb42.de/matthias/reflex-ipad:builder', - commands:[ + commands: [ 'cd /app', 'reflex export --frontend-only --no-zip', 'mv .web/_static /drone/src/web', ], depends_on: [ - 'builder' + 'builder', ], }, { @@ -38,28 +56,46 @@ repo: 'gitea.pb42.de/matthias/reflex-ipad', config: { from_secret: 'dockerconfigjson' }, build_args: ['API_URL=https://ipad.pb42.de'], + storage_path: '/drone/docker', }, depends_on: [ - 'builder' + 'builder', ], }, { - name: "deploy_web", - image: "appleboy/drone-scp", + name: 'deploy_web', + image: 'appleboy/drone-scp', settings: { - host: "pb42.de", - target: "/", - source: "web/*", + host: 'pb42.de', + target: '/', + source: 'web/*', username: { - from_secret: "deploy_username", + from_secret: 'deploy_username', }, key: { - from_secret: "deploy_key", + from_secret: 'deploy_key', }, port: 42022, }, depends_on: [ - 'frontend-builder' + 'frontend-builder', + ], + }, + { + name: 'rebuild-cache', + image: 'drillster/drone-volume-cache', + settings: { + rebuild: true, + mount: [ + '/drone/docker', + ], + }, + volumes: [ + { name: 'cache', path: '/cache' }, + ], + depends_on: [ + 'builder', + 'backend', ], }, { @@ -84,19 +120,26 @@ stack: 'reflex-ipad', file: 'docker-compose.yml', standalone: true, - swarmId: "", + swarmId: '', type: 2, environment: [], env: [], debug: true, }, depends_on: [ - 'backend', + 'backend', ], }, ], + volumes: [ + { + name: 'cache', + host: { + path: '/tmp/cache', + }, + }, + ], trigger: { event: ['push'] }, image_pull_secrets: ['dockerconfigjson'], }, ] - diff --git a/Dockerfile b/Dockerfile index 16e2384..e010085 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,18 @@ # Stage 1: init FROM python:3.11 as init -# Pass `--build-arg API_URL=http://app.example.com:8000` during build ARG API_URL -# Copy local context to `/app` inside container (see .dockerignore) WORKDIR /app -COPY requirements.txt . -# Create virtualenv which will be copied into final container ENV VIRTUAL_ENV=/app/.venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN python3.11 -m venv $VIRTUAL_ENV -# Install app requirements and reflex inside virtualenv +COPY requirements.txt . + RUN pip install -r requirements.txt COPY . . -# Deploy templates and prepare app RUN reflex init diff --git a/Dockerfile.backend b/Dockerfile.backend index 2b4ac99..1957e17 100644 --- a/Dockerfile.backend +++ b/Dockerfile.backend @@ -9,4 +9,4 @@ RUN chown reflex:reflex /app USER reflex ENV PATH="/app/.venv/bin:$PATH" API_URL=$API_URL PYTHONUNBUFFERED=TRUE -CMD reflex db migrate && reflex run --env dev --backend-only +CMD reflex db migrate && reflex run --env prod --backend-only diff --git a/Dockerfile.builder b/Dockerfile.builder index 0ff9ce8..3cc9447 100644 --- a/Dockerfile.builder +++ b/Dockerfile.builder @@ -6,13 +6,13 @@ ARG API_URL # Copy local context to `/app` inside container (see .dockerignore) WORKDIR /app -COPY requirements.txt . -# Create virtualenv which will be copied into final container ENV VIRTUAL_ENV=/app/.venv ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN python3.11 -m venv $VIRTUAL_ENV +COPY requirements.txt . + # Install app requirements and reflex inside virtualenv RUN pip install -r requirements.txt diff --git a/deploy/rxconfig.py b/deploy/rxconfig.py index a2387f2..7fa2eb1 100644 --- a/deploy/rxconfig.py +++ b/deploy/rxconfig.py @@ -4,7 +4,7 @@ config = rx.Config( app_name="reflex_ipad", db_url="postgresql://ipad:uizJOcDZR3qKLUJuAeSr8WG8onJ1vsUQB2zgE5NIKcpLGT5EF3x7JBkPs@db:5432/ipad", api_url="https://ipad.pb42.de", - env=rx.Env.DEV, + env=rx.Env.PROD, loglevel="debug", telemetry_enabled=False, )