Hvad med hilsener til alle, dette er min første artikel i <» FromLinux (af flere, som jeg har i mine kladder xD), jeg håber, den er nyttig 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 det, i sidste ende var det ikke så stor en sag, vel? Det virkede simpelt for mig
Jeg håber det er nyttigt for dig, hilsen