Zoeken…


Django-applicatie uitvoeren met Gunicorn

  1. Gunicorn installeren

    pip install gunicorn

  1. 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 laden

    gunicorn --env DJANGO_SETTINGS_MODULE=[projectname].settings [projectname].wsgi

    of uitvoeren als daemon-proces met de optie -D

  1. 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

  1. Heroku Toolbelt downloaden.

  2. Navigeer naar de hoofdmap van de bronnen van uw Django-app. Je hebt tk nodig

  3. Typ heroku create [app_name] . Als u geen app-naam opgeeft, genereert Heroku deze willekeurig voor u. De URL van uw app is http://[app name].herokuapp.com

  4. 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>

  5. 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.
  1. Het is implementatietijd!

    1. 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.

    1. heroku ps:scale web=1

    Dit schaalt het aantal web "dynos" naar één. Je kunt hier meer lezen over dyno's .

    1. heroku open of navigeer naar http://app-name.herokuapp.com

    Tip: heroku open opent de URL naar uw heroku-app in de standaardbrowser.

  2. 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.

  1. nginx - gratis, open-source, krachtige HTTP-server en reverse proxy, met hoge prestaties;
  2. gunicorn - 'Green Unicorn' is een Python WSGI HTTP-server voor UNIX (nodig om uw server te beheren);
  3. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow