changes for docker deployment

This commit is contained in:
www
2020-09-22 19:18:58 +00:00
parent 58c22cd3c8
commit 9c0009a2c4
11 changed files with 121 additions and 79 deletions

22
Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
FROM tiangolo/uwsgi-nginx-flask:python3.8-alpine AS builder
RUN python -m venv /opt/venv
# Make sure we use the virtualenv:
ENV PATH="/opt/venv/bin:$PATH"
RUN apk add --no-cache --virtual .build-deps ca-certificates gcc linux-headers \
musl-dev jpeg-dev zlib-dev libffi-dev git make \
&& pip install --upgrade pip
COPY ./requirements.txt /app/requirements.txt
RUN pip install wheel && pip install -r requirements.txt
FROM tiangolo/uwsgi-nginx-flask:python3.8-alpine
#ENV LISTEN_PORT 8080
COPY --from=builder /opt/venv /opt/venv
COPY ./fotos-nginx.conf /etc/nginx/conf.d/fetfotos2020.conf
ENV PATH="/opt/venv/bin:$PATH"
COPY . /app

25
bak/uwsgi.ini.back Normal file
View File

@@ -0,0 +1,25 @@
[uwsgi]
# User and group www-data on debian
uid = 33
gid = 33
master = true
# No. of processes can be increased
processes = 9
chown-socket =www-data:www-data
virtualenv = /opt/venv
pythonpath = /srv/flask-fet-fotos/
#pidfile = /srv/simple_sample_flat_index/uwsgi.pid
#socket = /srv/simple_sample_flat_index/uwsgi.sock
pidfile=/var/run/fet_fotos.pid
socket = /var/run/fet_fotos.sock
chmod-socket = 666
module = foto_gallery
callable= app
wsgi-file = run.py
logdate = true
loglevel = debug
gevent = 100
vacuum=true
plugins=python3,logfile
py-autoreload=2

16
build_docker Executable file
View File

@@ -0,0 +1,16 @@
docker stop flask-fet-fotos
docker container rm flask-fet-fotos
docker build -t flask-fet-fotos .
#docker run -d --name mycontainer -p 8080:8080 -v $(pwd):/app -e FLASK_APP=main.py -e FLASK_DEBUG=1 myimage flask run --host=0.0.0.0 --port=8080
while true; do
read -p "Run a docker container?" yn
case $yn in
[Yy]* ) docker run --name flask-fet-fotos -d -p 8080:8080 \
-v "$(pwd)/data:/mnt" flask-fet-fotos; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
#-v "$(pwd):/app"

View File

@@ -1,13 +0,0 @@
[Unit]
Description=uWSGI Simple Sample for Flat Page with Index Default
After=network.target
[Service]
#User=www-data
#Group=www-data
WorkingDirectory=/srv/flask-fet-fotos
Environment="PATH=/srv/flask-fet-fotos/.env/bin"
ExecStart=uwsgi --ini uwsgi.ini
[Install]
WantedBy=multi-user.target

View File

@@ -1,16 +0,0 @@
server {
listen 80 default_server;
listen [::]:80 ;
index index.html index.htm index.nginx-debian.html;
server_name _;
root /var/www/html;
location / {
include uwsgi_params;
uwsgi_pass unix:///var/run/fet_fotos.sock
}
}

View File

@@ -1,13 +0,0 @@
[Unit]
Description=uWSGI Simple Sample for Flat Page with Index Default
After=network.target
[Service]
#User=www-data
#Group=www-data
WorkingDirectory=/srv/foto_gallery
Environment="PATH=/srv/foto_gallery/.env/bin"
ExecStart=/srv/foto_gallery/.env/bin/uwsgi --ini uwsgi.ini
[Install]
WantedBy=multi-user.target

View File

@@ -9,18 +9,36 @@ from flask import Flask, Blueprint,render_template, send_from_directory,jsonify,
import flatpages_index import flatpages_index
from flatpages_index import FlatPagesIndex from flatpages_index import FlatPagesIndex
from flask_frozen import Freezer from flask_frozen import Freezer
from config import Config #from config import Config
import os import os
import re import re
from PIL import Image, ExifTags, ImageOps from PIL import Image, ExifTags, ImageOps
from functools import partial from functools import partial
from flask_csp.csp import csp_header, csp_default from flask_csp.csp import csp_header, csp_default
cfg = Config("config.cfg") #cfg = Config("./config.cfg")
import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False),
pages_root=(str,'data_sample'),
static_root=(str,'static'),
default_template=(str, 'page.html'),
url_prefix =(str, "/stuff"),
FLATPAGES_EXTENSION = (str, ".md"),
FLATPAGES_AUTO_RELOAD = (bool, True)
)
# Initialize application # Initialize application
app = Flask(__name__) app = Flask(__name__)
app.config.update(cfg) #app.config.update(cfg)
app.config["pages_root"]=env('pages_root')
app.config["static_root"]=env('static_root')
app.config["default_template"]=env('default_template')
app.config["url_prefix"]=env('url_prefix')
app.config["FLATPAGES_EXTENSION"]=env('FLATPAGES_EXTENSION')
app.config["FLATPAGES_AUTO_RELOAD"]=env('FLATPAGES_AUTO_RELOAD')
app.logger.setLevel(logging.DEBUG) app.logger.setLevel(logging.DEBUG)
# Initialize FlatPages Index # Initialize FlatPages Index
@@ -35,10 +53,10 @@ flatpages.get('index')
app.logger.info('Initialize FET Foto Gallery App') app.logger.info('Initialize FET Foto Gallery App')
app.logger.info('flatpages loaded %d pages' % len(flatpages._pages)) app.logger.info('flatpages loaded %d pages' % len(flatpages._pages))
app.logger.info("Data directory is: %s" % flatpages.root) app.logger.info("Data directory is: %s" % flatpages.root)
app.logger.info("Url prefix;: %s" % cfg.url_prefix)
csp_d=csp_default()
csp_d.update({'default-src':"'self' 'unsafe-inline'", 'script-src': "'unsafe-inline' 'self'"}) #csp_d=csp_default()
#csp_d.update({'default-src':"'self' 'unsafe-inline'", 'script-src': "'unsafe-inline' 'self'"})
@@ -87,7 +105,6 @@ def thumb(size=64,name=''):
@page_blueprint.route('/<path:name>/',strict_slashes=False) @page_blueprint.route('/<path:name>/',strict_slashes=False)
@page_blueprint.route('/') @page_blueprint.route('/')
@csp_header()
def post(name=''): def post(name=''):
print("Post: %s" % name) print("Post: %s" % name)
page = flatpages.get(name) page = flatpages.get(name)
@@ -104,8 +121,8 @@ def post(name=''):
elif os.path.exists(os.path.join('static',name)): elif os.path.exists(os.path.join('static',name)):
print("send from static dir %s" % name) print("send from static dir %s" % name)
return send_from_directory(os.path.abspath('static'),name) return send_from_directory(os.path.abspath('static'),name)
elif os.path.exists(os.path.join(cfg["fet_assets"],name)): #elif os.path.exists(os.path.join(cfg["fet_assets"],name)):
return send_from_directory(cfg["fet_assets"],name) # return send_from_directory(cfg["fet_assets"],name)
elif os.path.exists(os.path.join("blueimp",name)): elif os.path.exists(os.path.join("blueimp",name)):
return send_from_directory(os.path.abspath('blueimp'),name) return send_from_directory(os.path.abspath('blueimp'),name)
else: else:
@@ -133,6 +150,6 @@ def postjson(name='index'):
app.register_blueprint(page_blueprint, url_prefix=cfg.url_prefix,static_folder='static') app.register_blueprint(page_blueprint, url_prefix=app.config["url_prefix"],static_folder='static')
app.register_blueprint(api_blueprint, url_prefix="/api/"+cfg.url_prefix,static_folder='static') app.register_blueprint(api_blueprint, url_prefix="/api/"+app.config["url_prefix"],static_folder='static')
app.add_url_rule('%s/<path:name>' % cfg.url_prefix,'page', post) app.add_url_rule('%s/<path:name>' % app.config["url_prefix"],'page', post)

12
fotos-nginx.conf Normal file
View File

@@ -0,0 +1,12 @@
server {
listen 8080;
index index.html;
location /static {
alias /app/static;
try_files $uri $uri/ =404;
}
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/uwsgi.sock;
}
}

9
main.py Normal file
View File

@@ -0,0 +1,9 @@
from foto_gallery import app,freezer
import sys
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "build":
freezer.freeze()
else:
app.run(host='0.0.0.0',port=8080, debug=True)

View File

@@ -1,6 +1,8 @@
flask flask
Frozen-Flask Frozen-Flask
config python-environ
gevent gevent
Pillow Pillow
wheel
flask_csp
git+https://github.com/andreassteph/flatpages_index.git git+https://github.com/andreassteph/flatpages_index.git

View File

@@ -1,25 +1,6 @@
[uwsgi] [uwsgi]
# User and group www-data on debian uid = 100
uid = 33 gid = 101
gid = 33 module = main
master = true callable = app
# No. of processes can be increased venv=/opt/venv
processes = 9
chown-socket =www-data:www-data
virtualenv = /srv/flask-fet-fotos/.env
pythonpath = /srv/flask-fet-fotos/
#pidfile = /srv/simple_sample_flat_index/uwsgi.pid
#socket = /srv/simple_sample_flat_index/uwsgi.sock
pidfile=/var/run/fet_fotos.pid
socket = /var/run/fet_fotos.sock
chmod-socket = 666
module = foto_gallery
callable= app
wsgi-file = run.py
logdate = true
#logger = file:/srv/simple_sample_flat_index/uwsgi.log
loglevel = debug
gevent = 100
vacuum=true
plugins=python3,logfile
py-autoreload=2