Hoe een Django-applicatie te implementeren:

Wat dacht je van de groeten aan iedereen, dit is mijn eerste artikel in <» FromLinux (van een aantal die ik in mijn concepten heb xD), ik hoop dat het nuttig voor je is 

Welnu, in mijn nieuwe en huidige baan wordt momenteel de migratie van verschillende systemen naar Django uitgevoerd (hoe vreemd hè ?? xD) en een van mijn taken, naast ontwikkeling, is deze in productie te nemen, dus hoe goed leerling, aangezien het mijn eerste keer was dat ik een applicatie in productie bracht op een echte server: $ Ik begon het officiële document van elk van de vereiste pakketten van de stapel te lezen (Gunicorn en Supervisord meer dan allemaal), en zag dat de tutorials In Spaans waren ze in sommige opzichten niet erg duidelijk voor mij, ik besloot een minigids te maken met de stappen die ik volgde om de applicatie in productie te nemen, gebaseerd op de Django, Gunicorn, Supervisord, Nginx en Postgresql stack.

In het geval dat ik werk, draaien de servers nog steeds Debian Squeeze, maar de gids zou volledig geldig moeten zijn voor andere distributies ... dus laten we meteen ter zake komen en aan de slag gaan:

Ik zal werken als een supergebruiker. Allereerst zijn de volgende pakketten vereist:

PIP -> Tool om pakketten voor Python te installeren en te beheren
aptitude install python-pip

Nginx -> Webserver (we zullen het gebruiken als een reverse proxy en om de statische bestanden 'img, js, css' te cachen) We installeren het met:
aptitude install nginx

Supervisord -> Applicatie om onze applicatie te beheren en te monitoren, hoewel deze voor veel meer wordt gebruikt. We installeren het met:
aptitude install supervisor

virtualenv -> Het helpt ons om een ​​op maat gemaakte virtuele uitvoeringsomgeving voor onze applicatie te creëren. We installeren het met:
aptitude install python-virtualenv

Gunicorn -> Webserver voor Python (deze installeren we nog niet)

Ik neem aan dat ze postgresql al geïnstalleerd en geconfigureerd zouden moeten hebben

psycopg2 -> PostgreSQL-connector voor Python (die installeren we ook nog niet).

Creëer een virtuele omgeving met virtualenv:

Eerst gaan we naar de werkdirectory die we zullen gebruiken voor het in productie nemen:
cd /var/www/

Vervolgens maken we in deze map de virtuele omgeving:
virtualenv ENV-nombreApp

We gaan naar de directory die ik zojuist heb gemaakt virtualenv
cd ENV-nombreAPP

We kopiëren de applicatie in deze directory en gaan nu verder met het activeren van de omgeving met:
source bin/activate

De prompt zou er nu uit moeten zien (ENV)usuario@host:

Dit zorgt ervoor dat alles wat we doen nu wordt opgeslagen in de map /var/www/ENV-appname/ zonder de systeempakketten te beïnvloeden.

Nu gaan we naar de toepassingsmap:
cd nombreApp

We gaan verder met het installeren van de lijst met toepassingsafhankelijkheden (indien nodig), waarin ze zijn gespecificeerd in het bestand requirements.txt:
pip install -r requirements.txt

We kunnen pakketten ook afzonderlijk installeren, bijvoorbeeld om de connector van te installeren postgresql:
pip install psycopg2

GUnicorn installatie en configuratie:

Om het te installeren doen we het op dezelfde manier:
pip install gunicorn

Laten we het nu configureren. Hiervoor maken we een bestand met de naam gunicorn-deploy.py aan in de hoofdmap van onze applicatie (de naam mag overigens willekeurig zijn) met de volgende inhoud:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

Supervisord configuratie:

Laten we nu supervisord configureren ; daarvoor genereren we het configuratiebestand met

echo_supervisord_conf > /etc/supervisord.conf

Nu bewerken we het configuratiebestand:
vim /etc/supervisord.conf

En we verwijderen commentaar op de volgende regels door de; (puntkomma):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [programma: appnaam] commando = / var / www / ENV-appnaam / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Gebruikersnaam redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Nu zullen we het script voor supervisord maken om met het systeem te beginnen, daarvoor zullen we het bestand maken:
vim /etc/init.d/supervisord

En we voegen de volgende inhoud toe:

 # Supervisord auto-start # # omschrijving: Auto-start supervisord # procesnaam: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 in start) echo -n "Beginnend supervisord:" $ SUPERVISORD echo ;; stop) echo -n "Supervisord stoppen:" $ SUPERVISORCTL shutdown echo ;; herstart) echo -n "Supervisord stoppen:" $ SUPERVISORCTL shutdown echo echo -n "Supervisord starten:" $ SUPERVISORD echo ;; dat C

En nu geven we het bestand uitvoeringsrechten zodat het kan starten met het systeem:
sudo chmod +x /etc/init.d/supervisord

We werken de links bij om de service te starten:
sudo update-rc.d supervisord defaults

We starten de service:
sudo /etc/init.d/supervisord start

Nginx instellen:

Ook deze stap is vrij eenvoudig; we maken het volgende Nginx -configuratiebestand aan voor onze applicatie:

vim /etc/nginx/sites-enabled/nombreApp

En we zullen de volgende inhoud aan u toevoegen

server {luister 9001; # poort waar ze nginx willen laten luisteren naar servernaam www.domein.com; # of 192.168.0.100, adres waartoe we toegang hebben_log /var/log/nginx/Appname.access.log; # waar we de locatie van het toepassingslogboek hebben / {# where nginx zal bellen bij het openen van www.dominio.com/proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } locatie / statisch / {# waar nginx toegang toe krijgt als we www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles / invoeren; }}

En we herstarten nginx:
service nginx restart

Django opzetten:

Laten we het django-configuratiebestand aanpassen:
vim nombreApp/settings.py

We zoeken naar de regel met DEBUG = True en veranderen de waarde ervan , zodat DEBUG = False overblijft.

We voegen de DB-parameters toe:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # of mysql, of wat ze ook gebruiken 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'wachtwoord DB', 'HOST': 'localhost', # of degene die ze nodig hebben 'PORT': '', # of degene die ze gebruiken}}

We zoeken naar de regel ALLOWED_HOSTS=[] en voegen het domein of adres toe waarmee we er toegang toe willen krijgen, wat resulteert in iets als ALLOWED_HOSTS=['www.domain.com']

We configureren de map voor de statische bestanden, we zoeken naar de regel die zegt STATIC_ROOT = ' ' en we veranderen de waarde door het absolute pad te plaatsen waar we onze statische bestanden willen hebben, in mijn geval heb ik het min of meer zo gelaten STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Bijna klaar, we voeren het volgende commando uit:
./manage.py collectstatic

Hierdoor wordt een map met de naam ' statics' aangemaakt in het pad dat we in settings.py hebben opgegeven . In deze map worden al onze statische bestanden opgeslagen.

En tot slot herstarten we de supervisor om de nieuwe wijzigingen door te voeren:
supervisorctl restart nombreApp

En dat zou het zijn, uiteindelijk was het niet zo'n groot probleem, toch? Het leek mij eenvoudig 

Ik hoop dat het nuttig voor je is, groeten 

GUnicorn documentatie

Supervisord documentatie


Voeg dit toe als voorkeursbron in Google.