[PYTHON] Déployer une application existante avec docker + pyenv-virtualenv + uwsgi + django

introduction

Cet article est destiné à ceux qui peuvent gérer docker, python, uwsgi et django dans une certaine mesure comme une seule unité.

Objectif

Je souhaite créer un conteneur d'applications en tant que conteneur Docker et y déployer plusieurs applications.

Méthode

Il a été réalisé par la méthode suivante.

./
├── Dockerfile
├── data
│   ├── hogehogeapp1
│   │   ├── hogehogeapp1
│   │   │   └──wsgi.py
│   │   ├── data
│   │   ├── db.sqlite3
│   │   └── manage.py
│   ├── hogehogeapp2
│   │   ├── hogehogeapp2
│   │   │   └──wsgi.py
│   │   ├── data
│   │   ├── db.sqlite3
│   │   └── manage.py
│   ├── hogehogeapp1.ini
│   └── hogehogeapp2.ini
└── init.sh

Dockerfile


FROM ubuntu:xenial #FROM ubuntu-xenial
MAINTAINER erscl

RUN apt-get -y update
RUN apt-get upgrade -yV
RUN apt-get update && apt-get install -y git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

RUN cd /usr/local &&\
git clone git://github.com/yyuu/pyenv.git ./pyenv &&\
mkdir -p ./pyenv/versions ./pyenv/shims &&\
cd /usr/local/pyenv/plugins/ &&\
git clone git://github.com/yyuu/pyenv-virtualenv.git

RUN echo 'export PYENV_ROOT="/usr/local/pyenv"' | tee -a /etc/profile.d/pyenv.sh
RUN echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | tee -a /etc/profile.d/pyenv.sh
RUN export PYENV_ROOT="/usr/local/pyenv" &&\
export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}" &&\
pyenv install -v 2.7.12 &&\
pyenv install -v 3.5.2 &&\
pyenv virtualenv 2.7.12 uwsgi-2.7 &&\
pyenv global uwsgi-2.7 &&\
pip install django==1.8.* django-bootstrap django-bootstrap-form django-registration uwsgi &&\
pyenv virtualenv 3.5.2 uwsgi-3.5 &&\
pyenv global uwsgi-3.5 &&\
pip install django django-bootstrap django-bootstrap-form uwsgi

RUN groupadd -g 1000 uwsgi && \
    useradd -g uwsgi -m -s /bin/bash uwsgi

RUN mkdir -p /var/log/uwsgi && chown uwsgi /var/log/uwsgi

RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

COPY init.sh /opt/init.sh

EXPOSE 8801 8802

CMD ["/bin/bash","/opt/init.sh"]

init.sh


source /etc/profile.d/pyenv.sh
sudo -u uwsgi /usr/local/pyenv/versions/uwsgi-2.7/bin/uwsgi --ini /opt/data/hogehogeapp1.ini
sudo -u uwsgi /usr/local/pyenv/versions/uwsgi-3.5/bin/uwsgi --ini /opt/data/hogehogeapp2.ini
tail -f /dev/null

data/hogehogeapp1.ini


[uwsgi]
http=x1.x2.x3.x4:8801
chdir=/opt/data/hogehogeapp1
wsgi-file=/opt/data/hogehogeapp1/hogehogeapp1/wsgi.py
module=hogehogeapp.wsgi:application
master=True
pidfile=/var/run/hogehogeapp1.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/hogehogeapp1.log

data/hogehogeapp2.ini


[uwsgi]
http=x1.x2.x3.x4:8802
chdir=/opt/data/hogehogeapp2
wsgi-file=/opt/data/hogehogeapp2/hogehogeapp2/wsgi.py
module=hogehogeapp.wsgi:application
master=True
pidfile=/var/run/hogehogeapp2.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/hogehogeapp2.log

Ajoutez --volume / abs_path / data: / opt / data au démarrage du conteneur et démarrez-le

Recommended Posts

Déployer une application existante avec docker + pyenv-virtualenv + uwsgi + django
Déployer l'application Django avec Docker
Créer une application Todo avec Django ① Créer un environnement avec Docker
Parcourir une base de données externe existante avec Django
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Déployer l'application Django créée avec PTVS sur Azure
Déployer Django sans serveur avec Lambda
Renommer une application Django existante
C'était trop facile d'utiliser une base de données existante avec Django
Charger les modules Django avec un interpréteur
Développement Google AppEngine avec Docker
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Remarque: envoyer un e-mail avec Django
Créez une application Django sur Docker et déployez-la sur AWS Fargate
Créer une application de fractionnement d'image avec Tkinter
Déployer l'application flask avec mod_wsgi (à l'aide de pipenv)
Déployer l'application Django sur Heroku [Partie 2]
Déployer l'application Django sur Heroku [Partie 1]
Créer un environnement Python + uWSGI + Nginx avec Docker
Créer un écran de mise à jour avec Django Updateview
Déploiement de Django (Ubuntu 14.04 LTS + Nginx + uWSGI + Supervisor)
Création de la première application avec Django startproject
Je ne peux plus déployer avec le moteur d'application Google
Créez une application de mots anglais avec python
Un exemple de cloudbuild.yaml lors du déploiement automatique de Django sur App Engine avec Cloud Build
Django + Docker
Comment développer une application de panier avec Django
Créez une application de composition d'images avec Flask + Pillow
[Python] Créer un environnement de développement Django avec Docker