Resolve "Create a docker image"

This commit is contained in:
jfriedli 2019-08-28 08:33:28 -07:00 committed by jvoisin
parent 08ce6aed76
commit 3a3d122755
9 changed files with 85 additions and 12 deletions

View file

@ -1,9 +1,14 @@
image: debian:testing image: debian:testing
stages: stages:
- build
- linting - linting
- test - test
variables:
CONTAINER_TEST_IMAGE: registry.0xacab.org/jvoisin/mat2-web:$CI_BUILD_REF_NAME
CONTAINER_RELEASE_IMAGE: registry.0xacab.org/jvoisin/mat2-web:latest
pyflakes: pyflakes:
stage: linting stage: linting
script: script:
@ -28,3 +33,15 @@ tests:debian:
- pip3 install -r requirements.txt - pip3 install -r requirements.txt
- python3-coverage run --branch --include main.py -m unittest discover -s test - python3-coverage run --branch --include main.py -m unittest discover -s test
- python3-coverage report -m - python3-coverage report -m
build-docker:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.production --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
only:
- tags
- master

View file

@ -1,8 +0,0 @@
FROM python:3.7
ADD . /mat2-web
WORKDIR /mat2-web
RUN apt-get update
RUN apt install -y python3-gi python3-gi-cairo gir1.2-poppler-0.18 \
gir1.2-gdkpixbuf-2.0 libimage-exiftool-perl libgirepository1.0-dev
RUN pip install -r requirements.txt
CMD flask run --host=0.0.0.0

15
Dockerfile.development Normal file
View file

@ -0,0 +1,15 @@
FROM python:3.7
ADD . /mat2-web
WORKDIR /mat2-web
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests --yes \
python3-gi \
python3-gi-cairo \
gir1.2-poppler-0.18 \
gir1.2-gdkpixbuf-2.0 \
libimage-exiftool-perl \
libgirepository1.0-dev \
&& pip install -r requirements.txt \
&& rm -rf /var/cache/apt/* /var/lib/apt/lists/*
CMD flask run --host=0.0.0.0

24
Dockerfile.production Normal file
View file

@ -0,0 +1,24 @@
From debian:buster-slim
WORKDIR /var/www/mat2-web
COPY . /var/www/mat2-web
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests --yes \
systemd \
mat2 \
uwsgi \
uwsgi-plugin-python3 \
nginx-light \
python3-pip \
python3-setuptools \
python3-wheel \
&& rm -rf /var/cache/apt/* /var/lib/apt/lists/* \
&& pip3 install -r requirements.txt \
&& mkdir ./uploads \
&& chown -R www-data:www-data . \
&& cp ./config/uwsgi.config /etc/uwsgi/apps-enabled/mat2-web.ini \
&& rm /etc/nginx/sites-enabled/default \
&& mkdir -p /etc/nginx/sites-enabled/ \
&& cp ./config/nginx.config /etc/nginx/sites-enabled/mat2.conf \
&& chmod +x ./startup-server.sh
CMD ["./startup-server.sh"]

View file

@ -35,7 +35,7 @@ configure, feel free to copy
[this file](https://0xacab.org/jvoisin/mat2-web/tree/master/config/uwsgi.config) [this file](https://0xacab.org/jvoisin/mat2-web/tree/master/config/uwsgi.config)
to `/etc/uwsgi/apps-enabled/mat2-web.ini` and to `/etc/uwsgi/apps-enabled/mat2-web.ini` and
[this one](https://0xacab.org/jvoisin/mat2-web/tree/master/config/nginx.config) [this one](https://0xacab.org/jvoisin/mat2-web/tree/master/config/nginx.config)
to `/etc/nginx/site-enabled/mat2-web`. to `/etc/nginx/sites-enabled/mat2-web`.
Nginx is the recommended web engine, but you can also use Apache if you prefer, Nginx is the recommended web engine, but you can also use Apache if you prefer,
by copying [this file](https://0xacab.org/jvoisin/mat2-web/tree/master/config/apache2.config) by copying [this file](https://0xacab.org/jvoisin/mat2-web/tree/master/config/apache2.config)
@ -73,6 +73,18 @@ collector cronjob to remove leftover files. Besides, it can create a
the uploads folder, to ensure that the uploaded files won't be recoverable the uploads folder, to ensure that the uploaded files won't be recoverable
between reboots. between reboots.
# Deploy using Docker
You can find the ready to run docker image here:
https://0xacab.org/jvoisin/mat2-web/container_registry
Example:
`docker run -p 80:80 -d -e MAT2_ALLOW_ORIGIN_WHITELIST='https://myhost1.org' registry.0xacab.org/jvoisin/mat2-web:latest`
Make sure to add
`find /var/www/mat2-web/uploads/ -type f -mtime +1 -exec rm {} \;` as cron job
run inside the container.
# Development # Development
Install docker and docker-compose and then run `docker-compose up` to setup Install docker and docker-compose and then run `docker-compose up` to setup
the docker dev environment. Mat2-web is now accessible on your host machine at `localhost:5000`. the docker dev environment. Mat2-web is now accessible on your host machine at `localhost:5000`.
@ -137,6 +149,13 @@ The `file` parameter is the base64 encoded file which will be cleaned.
] ]
``` ```
# Docker
There are two Dockerfiles present in this repository. The file called `Dockerfile.development` is used for development
and `Dockerfile.production` is used for production deployments.
You can find the automated docker builds in the registry of this
repository: https://0xacab.org/jvoisin/mat2-web/container_registry
# Custom templates # Custom templates
You can override the default templates from `templates/` by putting replacements You can override the default templates from `templates/` by putting replacements

View file

@ -2,7 +2,7 @@
module=main module=main
chdir = /var/www/mat2-web/ chdir = /var/www/mat2-web/
callable = app callable = app
wsgi-file = main.py wsgi-file = /var/www/mat2-web/main.py
master = true master = true
workers = 1 workers = 1

View file

@ -1,7 +1,9 @@
version: '2' version: '2'
services: services:
web: web:
build: . build:
context: .
dockerfile: Dockerfile.development
environment: environment:
- FLASK_APP=main.py - FLASK_APP=main.py
- FLASK_ENV=development - FLASK_ENV=development

View file

@ -187,6 +187,7 @@ def create_app(test_config=None):
return app return app
app = create_app()
if __name__ == '__main__': # pragma: no cover if __name__ == '__main__': # pragma: no cover
create_app().run() app.run()

3
startup-server.sh Normal file
View file

@ -0,0 +1,3 @@
#!/bin/bash
/etc/init.d/nginx restart
uwsgi --ini /etc/uwsgi/apps-enabled/mat2-web.ini