Feat: Add DockerFile for creating release docker container (Using UWSGI)

This commit is contained in:
globuzma 2025-01-10 15:54:33 +01:00
parent 1302da6b21
commit 19a8867fbd
3 changed files with 84 additions and 0 deletions

55
Dockerfile Normal file
View file

@ -0,0 +1,55 @@
FROM python AS builder
RUN \
apt update && \
apt -y upgrade && \
apt install -y \
build-essential \
libldap2-dev \
libsasl2-dev \
libssl-dev
COPY uv.lock pyproject.toml /opt/canaille/
RUN pip install uv
COPY canaille /opt/canaille/canaille
WORKDIR /opt/canaille
RUN uv sync --all-extras --upgrade
# We build a python wheel to install on the definitive docker image
RUN uv build --wheel
# We create a list of all the requirements to install next to canaille on the definitive docker image
RUN uv pip compile pyproject.toml --all-extras -o requirements.txt
WORKDIR /opt/canaille/dist
# We build these two modules here to avoid including build libraries on the definitive docker image
RUN pip wheel python-ldap uwsgi
FROM python:slim
# We need libxml2 for uwsgi to work
RUN \
apt update && \
apt -y upgrade && \
apt install -y \
libxml2
# I create a volume so that I can mount it in docker using -v ./database:/opt/canaille/database
RUN mkdir -p /opt/canaille/database
COPY --from=builder /opt/canaille/dist /opt/canaille/dist
COPY --from=builder /opt/canaille/requirements.txt /opt/canaille/requirements.txt
RUN pip install --find-links /opt/canaille/dist canaille python-ldap uwsgi
RUN pip install -r /opt/canaille/requirements.txt
COPY uwsgi.ini /opt/canaille
WORKDIR /opt/canaille
ENTRYPOINT ["uwsgi","--ini","uwsgi.ini"]

13
docker-compose.yml Normal file
View file

@ -0,0 +1,13 @@
services:
canaille:
build: .
# image: git.shenanigans.cc/globuzma/canaille:latest
restart: unless-stopped
ports:
- 5000:5000
volumes:
- ./database:/opt/canaille/database
- ./config.toml:/opt/canaille/config.toml
env:
# For an example config file see : https://canaille.readthedocs.io/en/latest/references/configuration.html#example-file
- CONFIG=/opt/canaille/config.toml

16
uwsgi.ini Normal file
View file

@ -0,0 +1,16 @@
[uwsgi]
http-socket = :5000
plugin=python3
module=canaille:create_app()
lazy-apps=true
master=true
processes=1
threads=10
need-app=true
thunder-lock=true
touch-chain-reload=/etc/canaille/uwsgi-reload.fifo
enable-threads=true
reload-on-rss=1024
worker-reload-mercy=600
buffer-size=65535
disable-write-exception = true