Move development into docker
This makes working with related services like redis much easier, and helps start writing a production container
This commit is contained in:
parent
e87ed66a02
commit
97d786e969
7 changed files with 86 additions and 13 deletions
11
.devcontainer/devcontainer.json
Normal file
11
.devcontainer/devcontainer.json
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"name": "Existing Docker Compose",
|
||||||
|
"dockerComposeFile": ["../docker/dev/docker-compose.yml"],
|
||||||
|
"service": "web",
|
||||||
|
"workspaceFolder": "/app",
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.defaultProfile.linux": "bash",
|
||||||
|
"python.pythonPath": "/usr/local/bin/python"
|
||||||
|
},
|
||||||
|
"extensions": ["ms-python.python", "editorconfig.editorconfig"]
|
||||||
|
}
|
1
.dockerignore
Symbolic link
1
.dockerignore
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
.gitignore
|
|
@ -40,6 +40,12 @@ pip:
|
||||||
- ./env/
|
- ./env/
|
||||||
expire_in: 30 mins
|
expire_in: 30 mins
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: docker:stable
|
||||||
|
stage: test
|
||||||
|
script:
|
||||||
|
- docker build -t website .
|
||||||
|
|
||||||
.python_test_template: &python_test_template
|
.python_test_template: &python_test_template
|
||||||
image: python:3.10-slim
|
image: python:3.10-slim
|
||||||
stage: test
|
stage: test
|
||||||
|
|
54
Dockerfile
Normal file
54
Dockerfile
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
FROM node:16 as frontend
|
||||||
|
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
RUN npm ci --no-audit --progress=false
|
||||||
|
|
||||||
|
# Compile static files
|
||||||
|
COPY ./scripts ./scripts
|
||||||
|
COPY ./static/src ./static/src
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# The actual container
|
||||||
|
FROM python:3.10 as production
|
||||||
|
|
||||||
|
ENV VIRTUAL_ENV=/venv
|
||||||
|
|
||||||
|
RUN useradd website --create-home && mkdir /app $VIRTUAL_ENV && chown -R website /app $VIRTUAL_ENV
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
ENV PATH=${POETRY_HOME}/bin:$VIRTUAL_ENV/bin:$PATH \
|
||||||
|
PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
USER website
|
||||||
|
|
||||||
|
RUN python -m venv $VIRTUAL_ENV
|
||||||
|
COPY --chown=website requirements.txt ./
|
||||||
|
RUN pip install --upgrade pip && pip install -r requirements.txt
|
||||||
|
|
||||||
|
COPY --chown=website --from=frontend ./static/build ./static/build
|
||||||
|
|
||||||
|
COPY --chown=website ./manage.py ./manage.py
|
||||||
|
COPY --chown=website ./templates ./templates
|
||||||
|
COPY --chown=website ./website ./website
|
||||||
|
|
||||||
|
RUN SECRET_KEY=none python manage.py collectstatic --noinput --clear -v3
|
||||||
|
|
||||||
|
# Just dev stuff
|
||||||
|
FROM production as dev
|
||||||
|
|
||||||
|
# Swap user, so the following tasks can be run as root
|
||||||
|
USER root
|
||||||
|
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs
|
||||||
|
RUN apt-get install -y postgresql-client
|
||||||
|
RUN curl -sSf https://just.systems/install.sh | bash -s -- --to /usr/bin
|
||||||
|
|
||||||
|
# Restore user
|
||||||
|
USER website
|
||||||
|
|
||||||
|
COPY --chown=website dev-requirements.txt ./
|
||||||
|
RUN pip install --upgrade pip && pip install -r dev-requirements.txt
|
||||||
|
|
||||||
|
CMD sleep infinity
|
3
Procfile
3
Procfile
|
@ -2,5 +2,4 @@ web: ./manage.py runserver
|
||||||
watch-js: npm run build:js -- --watch
|
watch-js: npm run build:js -- --watch
|
||||||
watch-css: npm run build:css -- --watch
|
watch-css: npm run build:css -- --watch
|
||||||
watch-contrib: ./scripts/copy-npm-contrib.sh; while inotifywait -e modify ./scripts/copy-npm-contrib.sh; do ./scripts/copy-npm-contrib.sh; done
|
watch-contrib: ./scripts/copy-npm-contrib.sh; while inotifywait -e modify ./scripts/copy-npm-contrib.sh; do ./scripts/copy-npm-contrib.sh; done
|
||||||
docker: docker-compose -f docker/dev/docker-compose.yml up
|
rqworker: ./manage.py rqworker --with-scheduler
|
||||||
rqworker: sleep 5 && ./manage.py rqworker --with-scheduler
|
|
||||||
|
|
|
@ -1,6 +1,17 @@
|
||||||
version: '3.7'
|
version: '3.7'
|
||||||
services:
|
services:
|
||||||
|
web:
|
||||||
|
build:
|
||||||
|
context: ../../
|
||||||
|
target: dev
|
||||||
|
environment:
|
||||||
|
- QUEUE_STORE_URL=redis://redis/0
|
||||||
|
- DEBUG=true
|
||||||
|
- SECRET_KEY=super-secret-key
|
||||||
|
volumes:
|
||||||
|
- ../../:/app
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:6.0
|
image: redis:6.0
|
||||||
ports:
|
|
||||||
- 127.0.0.1:6379:6379
|
|
||||||
|
|
9
justfile
9
justfile
|
@ -1,14 +1,5 @@
|
||||||
set dotenv-load
|
set dotenv-load
|
||||||
|
|
||||||
# Load virtualenv
|
|
||||||
export PATH := justfile_directory() + "/env/bin:" + env_var('PATH')
|
|
||||||
export PYTHONUNBUFFERED := "true"
|
|
||||||
export QUEUE_STORE_URL := "redis://localhost/0"
|
|
||||||
|
|
||||||
# Dev environment
|
|
||||||
export DEBUG := "true"
|
|
||||||
export SECRET_KEY := "super-secret-key"
|
|
||||||
|
|
||||||
# Recipes
|
# Recipes
|
||||||
@default:
|
@default:
|
||||||
just --list
|
just --list
|
||||||
|
|
Loading…
Reference in a new issue