Hvad med hilsener alle sammen, dette er min første artikel i <» DesdeLinux (af flere som jeg har i mine kladder xD), jeg håber det er nyttigt for dig 😀
Nå, i mit nye og nuværende job udføres i øjeblikket migrering af flere systemer til Django (hvor mærkeligt eh ?? xD) og en af mine opgaver, bortset fra udvikling, er at sætte i produktion af disse, så som god lærling, da det var første gang, jeg satte en applikation i produktion på en rigtig server: $ Jeg begyndte at læse det officielle dokument for hver af de krævede pakker i stakken (Gunicorn og Supervisord mere end alle), og så, at tutorials På spansk var de ikke meget klare for mig i nogle aspekter, jeg besluttede at oprette en mini-guide med de trin, jeg fulgte for at sætte applikationen i produktion, baseret på Django, Gunicorn, Supervisord, Nginx og Postgresql stakken.
I det tilfælde hvor jeg arbejder, kører serverne stadig Debian Squeeze, men guiden skal være fuldt gyldig til andre distributioner ... så lad os komme lige til det punkt og komme i gang:
Jeg vil arbejde som superbruger. Først og fremmest er følgende pakker påkrævet:
PIP -> Værktøj til at installere og administrere pakker til Python
aptitude install python-pip
Nginx -> Webserver (vi bruger den som en omvendt proxy og til at cache de statiske filer 'img, js, css') Vi installerer den med:
aptitude install nginx
Supervisord -> Applikation til at styre og overvåge vores applikation, selvom den bruges til meget mere. Vi installerer det med:
aptitude install supervisor
virtualenv -> Det hjælper os med at skabe et tilpasset virtuelt eksekveringsmiljø til vores applikation. Vi installerer det med:
aptitude install python-virtualenv
kanonhjørning -> webserver til python (vi installerer ikke dette endnu)
Jeg antager, at de allerede skal have postgresql installeret og konfigureret
psychopg2 -> Postgresql-stik til python (vi installerer det heller ikke endnu)
Opret virtuelt miljø med virtualenv:
Først skal vi flytte til den arbejdsmappe, som vi vil bruge til at sætte i produktion:
cd /var/www/
Derefter opretter vi i dette bibliotek det virtuelle miljø:
virtualenv ENV-nombreApp
Vi flytter til den mappe, som jeg lige har oprettet virtualenv
cd ENV-nombreAPP
Vi kopierer applikationen i denne mappe, og nu fortsætter vi med at aktivere miljøet med:
source bin/activate
Prompten skal nu se ud (ENV)usuario@host:
Dette vil nu gøre alt, hvad vi gør, gemmes i biblioteket / var / www / ENV-appname / uden at påvirke systempakker
Nu flytter vi til applikationsmappen:
cd nombreApp
Vi fortsætter med at installere listen over applikationsafhængigheder (hvis det er nødvendigt), hvor de er angivet i filen krav.txt:
pip install -r requirements.txt
Vi kan også installere pakker individuelt, for eksempel for at installere stikket til postgresql:
pip install psycopg2
GUnicorn installation og konfiguration:
For at installere det gør vi det på samme måde:
pip install gunicorn
Nu skal vi konfigurere det, for dette skal vi oprette en fil kaldet gunicorn-deploy.py i roden af vores ansøgning (selvom navnet kan være hvad som helst) med følgende indhold:
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 konfiguration:
Lad os nu indstille supervisord, for det genererer vi konfigurationsfilen med
echo_supervisord_conf > /etc/supervisord.conf
Nu redigerer vi konfigurationsfilen:
vim /etc/supervisord.conf
Og vi kommenterer følgende linjer ved at fjerne; (semikolon):
[unix_http_server] fil = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = falske minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appnavn] kommando = / var / www / ENV-appnavn / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Brugernavn redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log
Nu opretter vi scriptet til supervisord til at starte med systemet, for det opretter vi filen:
vim /etc/init.d/supervisord
Og vi tilføjer følgende indhold:
# Supervisord auto-start # # beskrivelse: Auto-starter supervisord # procesnavn: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 i start) echo -n "Starter supervisord:" $ SUPERVISORD echo ;; stop) ekko -n "Stopper tilsyn:" $ SUPERVISORCTL nedlukningsekko ;; genstart) echo -n "Stopper supervisord:" $ SUPERVISORCTL nedlukning echo echo -n "Starter supervisord:" $ SUPERVISORD echo ;; at C
Og nu giver vi filen tilladelser, så den kan starte med systemet:
sudo chmod +x /etc/init.d/supervisord
Vi opdaterer linkene for at starte tjenesten:
sudo update-rc.d supervisord defaults
Vi starter tjenesten:
sudo /etc/init.d/supervisord start
Opsætning af nginx:
Dette trin er også ret simpelt, vi opretter følgende konfigurationsfil af Nginx til vores ansøgning:
vim /etc/nginx/sites-enabled/nombreApp
Og vi vil tilføje følgende indhold til dig
server {lyt 9001; # port, hvor de vil have nginx til at lytte servernavn www.domæne.com; # eller 192.168.0.100, adresse, som vi får adgang til access_log /var/log/nginx/Appname.access.log; # hvor vi har applikationslogplaceringen / {# hvor nginx ringer ved adgang til www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } placering / statisk / {# hvor nginx får adgang, når vi indtaster www.domæne.dk/statisk/ alias / var / www / ENV-appnavn / appnavn / staticfiles /; }}
Og vi genstarter nginx:
service nginx restart
Opsætning af Django:
Lad os ændre django-konfigurationsfilen:
vim nombreApp/settings.py
Vi ser efter den linje, der siger DEBUG = Sandt og vi ændrer værdien, resterende DEBUG = Falsk
Vi tilføjer DB-parametre:
DATABASES = {'default': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql eller hvad de end bruger 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'password DB', 'HOST': 'localhost', # eller den, de har brug for 'PORT': '', # eller den, de bruger}}
Vi kigger efter linjen ALLOWED_HOSTS = [] og vi tilføjer domænet eller adressen, hvorigennem vi får adgang, efterlader noget lignende ALLOWED_HOSTS = ['www.domæne.com']
Vi konfigurerer biblioteket til de statiske filer, vi ser efter den linje, der siger STATIC_ROOT = ' '
og vi ændrer værdien og placerer den absolutte sti, hvor vi ønsker, at vores statiske filer skal være, i mit tilfælde forlod jeg det mere eller mindre sådan STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Næsten færdig udfører vi følgende kommando:
./manage.py collectstatic
Dette opretter en mappe med navnet 'statik i den sti, som vi angiver i settings.py ', det er her alle vores statiske filer vil være.
Og endelig genstarter vi supervisoren for at tage de nye ændringer:
supervisorctl restart nombreApp
Og det ville være alt, til sidst var det ikke så meget sandt? det virkede simpelt for mig 😀
Jeg håber, det er nyttigt for dig, hilsner 😉
Jeg forstår, at Django-appen ikke skal placeres i roden til webserver-mappen (/ var / www)? Af hensyn til sikkerheden ved jeg ikke, om jeg tager fejl.
Greetings.
Okay !!! Det var noget, jeg var helt uvidende om, jeg opdaterer posten 😛 og så snart jeg vender tilbage mandag, vil jeg foretage ændringer i xD-applikationen
Tak
Epale bror god vejledning. For nylig var jeg også i det samme, men i Debian 7 var jeg nødt til at søge og læse mere eller mindre. Jeg anbefaler, at du opretter det virtuelle miljø af virtualenv i brugerens hjem i en skjult mappe.
Greetings!
hahaha ctm I går dokumenterede Django og du går allerede gennem galaksen 999999 Hilsen mænd xD
Meget god artikel =) for bare en uge siden implementerede jeg min django-app, men jeg gjorde det med uwsgi og nginx. Ved du hvilken fordel gunicorn har? Jeg har set det nævnt meget.
Det er rart at se, at django bliver meget populær, sandheden er den bedste ramme, jeg har set =)
For STATIC_ROOT definerer jeg en global variabel. Noget som dette:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Hvor backend er en app, som jeg oprettede. Så jeg sørger for, at hvor den globale sti er den samme, hvor jeg implementerer projektet.
Interessant, jeg vil prøve i fremtiden.
Forresten, ved nogen, hvordan man aktiverer accenter og ikke-ascii-tegn i en django-applikation?
Jeg har kigget overalt, ingen af følgende metoder fungerer for mig:
sys.setdefaultencoding ('utf-8') # i sites.py
# - * - kodning: utf-8 - * - # i hver pythonfil
Redigering af site.py og udf-8 i stedet for ascii skulle fungere, men $ file models.py informerer mig om, at min fil stadig er en ascii.
Nogen forslag?
Det virkede!!!!
meget god tutorial, men kunne du gøre en af, hvordan jeg uploader min app på en webserver, der allerede er i produktion
tak