Vad sägs om hälsningar alla, detta är min första artikel i <» DesdeLinux (de varios que tengo en mis borradores xD), espero les sea de utilidad 😀
Tja, i mitt nya och nuvarande jobb, för tillfället genomförs migrering av flera system till Django (hur konstigt va ?? xD) och en av mina uppgifter, förutom utveckling, är att sätta dessa i produktion, så hur bra lärling, eftersom det var första gången jag satte en applikation i produktion på en riktig server: $ Jag började läsa det officiella dokumentet för alla paket som krävs i stacken (Gunicorn och Supervisord mer än alla), och såg att självstudierna i Spanska de var inte så tydliga för mig i vissa aspekter, jag bestämde mig för att skapa en miniguide med de steg som jag följde för att sätta applikationen i produktion, baserad på stacken Django, Gunicorn, Supervisord, Nginx och Postgresql.
I det fall jag arbetar körs servrarna fortfarande på Debian Squeeze, men guiden bör vara helt giltig för andra distributioner ... så låt oss komma direkt till saken och komma igång:
Jag kommer att arbeta som superanvändare. Först och främst krävs följande paket:
PIP -> Verktyg för att installera och hantera paket för Python
aptitude install python-pip
nginx -> Webbserver (vi använder den som en omvänd proxy och för att cache de statiska filerna 'img, js, css') Vi installerar den med:
aptitude install nginx
Supervisord -> Applikation för att hantera och övervaka vår applikation, även om den används för mycket mer. Vi installerar det med:
aptitude install supervisor
virtualenv -> Det hjälper oss att skapa en anpassad virtuell exekveringsmiljö för vår applikation. Vi installerar det med:
aptitude install python-virtualenv
gunicorn -> webbserver för python (vi installerar inte detta ännu)
Jag antar att de redan borde ha installerat och konfigurerat postgresql
psychopg2 -> Postgresql-kontakt för python (vi installerar inte heller än)
Skapa virtuell miljö med virtualenv:
Först ska vi flytta till den arbetskatalog som vi kommer att använda för att sätta i produktion:
cd /var/www/
Sedan skapar vi den virtuella miljön i den här katalogen:
virtualenv ENV-nombreApp
Vi flyttar till katalogen som jag just skapade virtualenv
cd ENV-nombreAPP
Vi kopierar applikationen i den här katalogen och nu fortsätter vi med att aktivera miljön med:
source bin/activate
Prompten ska nu se ut (ENV)usuario@host:
Detta gör att allt vi gör lagras i katalogen / var / www / ENV-appname / utan att påverka systempaket
Nu går vi till applikationskatalogen:
cd nombreApp
Vi fortsätter med att installera listan över applikationsberoenden (om nödvändigt), där de anges i filen requirements.txt:
pip install -r requirements.txt
Vi kan också installera paket individuellt, till exempel för att installera anslutningen till postgresql:
pip install psycopg2
GUnicorn installation och konfiguration:
För att installera det gör vi det på samma sätt:
pip install gunicorn
Nu ska vi konfigurera det, för detta ska vi skapa en fil som heter gunicorn-deploy.py i roten till vår ansökan (även om namnet kan vara vad som helst) med följande innehåll:
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
Övervakningskonfiguration:
Låt oss nu ställa in supervisord, för det genererar vi konfigurationsfilen med
echo_supervisord_conf > /etc/supervisord.conf
Nu redigerar vi konfigurationsfilen:
vim /etc/supervisord.conf
Och vi kommenterar följande rader genom att ta bort; (semikolon):
[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 = falska minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appnamn] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log
Nu skapar vi skriptet för övervakning för att börja med systemet, för det skapar vi filen:
vim /etc/init.d/supervisord
Och vi lägger till följande innehåll:
# Supervisord auto-start # # description: Auto-starts supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 i start) echo -n "Startar överordnad:" $ SUPERVISORD echo ;; stop) echo -n "Stoppar övervakaren:" $ SUPERVISORCTL avstängningseko ;; starta om) echo -n "Stoppar övervakaren:" $ SUPERVISORCTL avstängning echo echo -n "Startar övervakaren:" $ SUPERVISORD echo ;; att C
Och nu ger vi filen körbehörigheter så att den kan börja med systemet:
sudo chmod +x /etc/init.d/supervisord
Vi uppdaterar länkarna för att starta tjänsten:
sudo update-rc.d supervisord defaults
Vi startar tjänsten:
sudo /etc/init.d/supervisord start
Ställa in nginx:
Detta steg är också ganska enkelt, vi skapar följande konfigurationsfil av nginx för vår ansökan:
vim /etc/nginx/sites-enabled/nombreApp
Och vi kommer att lägga till följande innehåll till dig
server {lyssna 9001; # port där de vill att nginx server_name ska lyssna på www.domain.com; # eller 192.168.0.100, adress att vi kommer åt access_log /var/log/nginx/Appname.access.log; # där vi kommer att ha applikationsloggplatsen / {# där nginx kommer att ringa vid åtkomst till www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Värd $ http_host; } plats / statisk / {# där nginx kommer åt när vi anger www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
Och vi startar om nginx:
service nginx restart
Ställa in Django:
Låt oss ändra django-konfigurationsfilen:
vim nombreApp/settings.py
Vi letar efter linjen som säger DEBUG = Sant och vi ändrar värdet, återstående DEBUG = Falskt
Vi lägger till DB-parametrarna:
DATABASES = {'default': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql, eller vad som helst 'NAME': 'DBName', 'USER': 'DBUser', 'LÖSENORD' använder: 'lösenord DB', 'HOST': 'localhost', # eller det de behöver 'PORT': '', # eller det de använder}}
Vi letar efter linjen ALLOWED_HOSTS = [] och vi lägger till domänen eller adressen som vi kommer åt genom att lämna något liknande ALLOWED_HOSTS = ['www.domän.com']
Vi konfigurerar katalogen för de statiska filerna, vi letar efter raden som säger STATIC_ROOT = ' '
och vi ändrar värdet, placerar den absoluta sökvägen där vi vill att våra statiska filer ska vara, i mitt fall lämnade jag det mer eller mindre så här STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Nästan färdigt utför vi följande kommando:
./manage.py collectstatic
Detta skapar en mapp med namnet 'statik i den sökväg som vi anger i settings.py ', det är där alla våra statiska filer kommer att vara.
Och slutligen startar vi om handledaren för att ta de nya ändringarna:
supervisorctl restart nombreApp
Och det skulle vara allt, i slutändan var det inte så mycket sant? det verkade enkelt för mig 😀
Jag hoppas att det är användbart för dig, hälsningar 😉
Jag förstår att Django-appen inte ska placeras i roten till webbservermappen (/ var / www)? Av säkerhetsskäl vet jag inte om jag har fel.
Hälsningar.
Okej !!! Det var något jag inte kände till, jag kommer att uppdatera posten 😛 och så snart jag återvänder på måndag kommer jag att göra ändringar i xD-applikationen
tack
Epale bror bra handledning. Nyligen var jag också i samma men i Debian 7 var jag tvungen att söka och läsa mer eller mindre. Jag rekommenderar att du skapar den virtuella virtualmiljön i användarens hem i en dold mapp.
Hälsningar!
hahaha ctm Jag igår dokumenterade Django och du går redan igenom galaxen 999999 Hälsningar män xD
Mycket bra artikel =) för bara en vecka sedan distribuerade jag min django-app men jag gjorde det med uwsgi och nginx, vet du vilken fördel gunicorn har? Jag har sett det nämnts mycket.
Det är trevligt att se att django blir mycket populär, sanningen är det bästa ramverk jag har sett =)
För STATIC_ROOT definierar jag en global variabel. Något som det här:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Där backend är en app som jag skapade. På det här sättet ser jag till att den globala vägen är densamma där jag distribuerar projektet.
Intressant, jag kommer att försöka i framtiden.
Förresten, vet någon hur man aktiverar accenter och icke-ascii-karaktärer i en django-applikation?
Jag har tittat överallt, ingen av följande metoder fungerar för mig:
sys.setdefaultencoding ('utf-8') # i sites.py
# - * - kodning: utf-8 - * - # i varje pythonfil
Att redigera site.py och sätta utf-8 istället för ascii ska fungera, men $ file models.py informerar mig om att min fil fortfarande är en ascii.
Några förslag?
Det fungerade!!!!
mycket bra handledning men du kan göra något av hur jag laddar upp min app på en webbserver som redan är i produktion
Tack