Django
Deployment
Zoeken…
Django-applicatie uitvoeren met Gunicorn
Gunicorn installeren
pip install gunicorn
Voer vanuit de django-projectmap (dezelfde map waar manage.py zich bevindt) de volgende opdracht uit om het huidige django-project met gunicorn uit te voeren
gunicorn [projectname].wsgi:application -b 127.0.0.1:[port number]
U kunt de optie
--env
gebruiken om het pad in te stellen om de instellingen te ladengunicorn --env DJANGO_SETTINGS_MODULE=[projectname].settings [projectname].wsgi
of uitvoeren als daemon-proces met de optie
-D
Na succesvolle start van Gunicorn verschijnen de volgende regels in de console
Starting gunicorn 19.5.0
Listening at: http://127.0.0.1:[port number] ([pid])
....
(andere aanvullende informatie over gunicorn server)
Inzetten bij Heroku
Heroku Toolbelt downloaden.
Navigeer naar de hoofdmap van de bronnen van uw Django-app. Je hebt tk nodig
Typ
heroku create [app_name]
. Als u geen app-naam opgeeft, genereert Heroku deze willekeurig voor u. De URL van uw app ishttp://[app name].herokuapp.com
Maak een tekstbestand met de naam
Procfile
. Plaats geen extensie aan het einde.web: <bash command to start production server>
Als u een werkproces hebt, kunt u dit ook toevoegen. Voeg nog een regel toe in de notatie:
worker-name: <bash command to start worker>
Voeg een requirements.txt toe.
- Als u een virtuele omgeving gebruikt, voert u
pip freeze > requirements.txt
- Anders krijgt u een virtuele omgeving! . Je kunt ook handmatig de Python-pakketten vermelden die je nodig hebt, maar dat wordt niet behandeld in deze tutorial.
Het is implementatietijd!
-
git push heroku master
Heroku heeft een git-repository of een dropbox-map nodig om te implementeren. Je kunt ook automatisch herladen instellen vanuit een GitHub-repository op
heroku.com
, maar we zullen dat niet behandelen in deze tutorial.-
heroku ps:scale web=1
Dit schaalt het aantal web "dynos" naar één. Je kunt hier meer lezen over dyno's .
-
heroku open
of navigeer naarhttp://app-name.herokuapp.com
Tip:
heroku open
opent de URL naar uw heroku-app in de standaardbrowser.-
Add -ons toevoegen . U moet uw Django-app configureren om te binden met databases die in Heroku worden aangeboden als "add-ons". Dit voorbeeld behandelt dit niet, maar een ander voorbeeld zit in de pijplijn over het inzetten van databases in Heroku.
Eenvoudige implementatie op afstand fabfile.py
Fabric is een Python (2.5-2.7) bibliotheek en opdrachtregelprogramma voor het stroomlijnen van het gebruik van SSH voor applicatie-implementatie of systeembeheertaken. Hiermee kunt u willekeurige Python-functies uitvoeren via de opdrachtregel.
Stof installeren via pip install fabric
Maak fabfile.py
in uw hoofdmap:
#myproject/fabfile.py
from fabric.api import *
@task
def dev():
# details of development server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def release():
# details of release server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def run():
with cd('path/to/your_project/'):
with prefix('source ../env/bin/activate'):
# activate venv, suppose it appear in one level higher
# pass commands one by one
run('git pull')
run('pip install -r requirements.txt')
run('python manage.py migrate --noinput')
run('python manage.py collectstatic --noinput')
run('touch reload.txt')
Gebruik de opdracht fab
om het bestand uit te voeren:
$ fab dev run # for release server, `fab release run`
Opmerking: je kunt ssh-sleutels niet configureren voor github en typ login en wachtwoord handmatig, terwijl fabfile wordt uitgevoerd, hetzelfde met sleutels.
Heroku Django Starter Template gebruiken.
Als u van plan bent om uw Django-website op Heroku te hosten, kunt u uw project starten met behulp van de Heroku Django Starter Template:
django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile YourProjectName
Het heeft productie-ready configuratie voor statische bestanden, database-instellingen, Gunicorn, enz. En verbeteringen aan de statische file serving-functionaliteit van Django via WhiteNoise. Dit bespaart u tijd, het is All-Ready voor hosting op Heroku, bouw gewoon uw website op de top van deze sjabloon
Om deze sjabloon op Heroku te implementeren:
git init
git add -A
git commit -m "Initial commit"
heroku create
git push heroku master
heroku run python manage.py migrate
Dat is het!
Django gebruiksinstructies. Nginx + Gunicorn + Supervisor op Linux (Ubuntu)
Drie basishulpmiddelen.
- nginx - gratis, open-source, krachtige HTTP-server en reverse proxy, met hoge prestaties;
- gunicorn - 'Green Unicorn' is een Python WSGI HTTP-server voor UNIX (nodig om uw server te beheren);
- supervisor - een client / serversysteem waarmee gebruikers een aantal processen op UNIX-achtige besturingssystemen kunnen controleren en besturen. Gebruikt wanneer uw app of systeem crasht, uw django / selder / selderingscamera opnieuw opstart, enz .;
Om het simpel te houden, laten we aannemen dat uw app zich in deze map bevindt: /home/root/app/src/
en we gaan root
gebruiker gebruiken (maar u moet een afzonderlijke gebruiker voor uw app maken). Onze virtuele omgeving bevindt zich ook in /home/root/app/env/
path.
NGINX
Laten we beginnen met nginx. Als nginx nog niet op de machine staat, installeer het dan met sudo apt-get install nginx
. Later moet u een nieuw configuratiebestand maken in uw nginx-map /etc/nginx/sites-enabled/yourapp.conf
. Als er een bestand met de naam default.conf
, verwijdert u dit.
Blader code naar een nginx conf-bestand, dat probeert uw service uit te voeren met behulp van socketbestand; Later komt er een configuratie van Gunicorn. Socket-bestand wordt hier gebruikt om te communiceren tussen nginx en gunicorn. Het kan ook worden gedaan met behulp van poorten.
# your application name; can be whatever you want
upstream yourappname {
server unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}
server {
# root folder of your application
root /home/root/app/src/;
listen 80;
# server name, your main domain, all subdomains and specific subdomains
server_name yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
charset utf-8;
client_max_body_size 100m;
# place where logs will be stored;
# folder and files have to be already located there, nginx will not create
access_log /home/root/app/src/logs/nginx-access.log;
error_log /home/root/app/src/logs/nginx-error.log;
# this is where your app is served (gunicorn upstream above)
location / {
uwsgi_pass yourappname;
include uwsgi_params;
}
# static files folder, I assume they will be used
location /static/ {
alias /home/root/app/src/static/;
}
# media files folder
location /media/ {
alias /home/root/app/src/media/;
}
}
GUNICORN
Nu ons GUNICORN-script, dat verantwoordelijk zal zijn voor het uitvoeren van de django-applicatie op de server. Het eerste is om gunicorn in een virtuele omgeving te installeren met pip install gunicorn
.
#!/bin/bash
ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/root/app/env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name root \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
om gunicorn start script te kunnen uitvoeren, moet de uitvoeringsmodus zijn ingeschakeld
sudo chmod u+x /home/root/app/src/gunicorn_start
nu kun je je gunicorn-server starten met alleen ./gunicorn_start
LEIDINGGEVENDE
Zoals we in het begin al zeiden, willen we dat onze applicatie opnieuw wordt opgestart als deze mislukt door een supervisor. Als supervisor nog niet op de server is geïnstalleerd met sudo apt-get install supervisor
.
Bij eerste installatie supervisor. Maak vervolgens een .conf
bestand in uw hoofddirectory /etc/supervisor/conf.d/your_conf_file.conf
inhoud configuratiebestand:
[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true
Korte beschrijving, [program:youappname]
is in het begin vereist, dit zal onze identificatie zijn. ook stdout_logfile
is een bestand waarin logboeken worden opgeslagen, zowel toegang als fouten.
Als we dat gedaan hebben, moeten we onze supervisor vertellen dat we zojuist een nieuw configuratiebestand hebben toegevoegd. Om dit te doen, is er een ander proces voor verschillende Ubuntu-versies.
Voor Ubuntu version 14.04 or lesser
voert u deze opdrachten uit:
sudo supervisorctl reread
-> herleest alle configuratiebestanden in de supervisor-catalogus dit moet worden afgedrukt: yourappname: beschikbaar
sudo supervisorctl update
-> updates supervisor naar nieuw toegevoegde configuratiebestanden; moet uw naam afdrukken : toegevoegde procesgroep
Voor Ubuntu 16.04
Run:
sudo service supervisor restart
en om te controleren of uw app correct werkt, voert u deze uit
sudo supervisorctl status yourappname
Dit moet het volgende weergeven:
yourappname RUNNING pid 18020, uptime 0:00:50
Surf naar deze video om live een demonstratie van deze procedure te krijgen.
Lokaal implementeren zonder apache / nginx in te stellen
Aanbevolen manier van productie-implementatie vereist het gebruik van Apache / Nginx voor het aanbieden van de statische inhoud. Wanneer DEBUG
dus vals statisch is en media-inhoud niet kan worden geladen. We kunnen de statische inhoud in de implementatie echter laden zonder de Apache / Nginx-server voor onze app in te stellen met behulp van:
python manage.py runserver --insecure
Dit is alleen bedoeld voor lokale implementatie (bijv. LAN) en mag nooit in productie worden gebruikt en is alleen beschikbaar als de staticfiles
app zich in de INSTALLED_APPS
instelling van uw project bevindt.