Tervehdys kaikille, tämä on ensimmäinen artikkelini <» DesdeLinux (useista luonnoksistani xD), toivottavasti siitä on sinulle hyötyä 😀
No, uudessa ja nykyisessä työssäni tällä hetkellä suoritetaan useiden järjestelmien siirtyminen Djangoon (kuinka outoa eh ?? xD) ja yksi tehtäväni, paitsi kehitys, on näiden asettaminen tuotantoon, joten kuinka hyvä oppipoika, koska olin ensimmäinen kerta, kun laitin sovelluksen tuotantoon todelliselle palvelimelle: $ aloin lukea jokaisen vaadittavan pinon paketin (Gunicorn ja Supervisord enemmän kuin kaikki) virallista asiakirjaa ja nähdä, että opetusohjelmat Espanjan kielellä ne eivät olleet minulle kovin selkeitä joistakin näkökohdista. Päätin luoda pienen oppaan vaiheilla, joita seurasin sovelluksen tuotantoon, Django-, Gunicorn-, Supervisord-, Nginx- ja Postgresql-pinoihin perustuen.
Jos työskentelen, palvelimet käyttävät edelleen Debian Squeeze -ohjelmaa, mutta oppaan tulisi olla täysin voimassa muille jakeluille ... joten aloitetaan suoraan asiaan ja aloitetaan:
Työskentelen superkäyttäjänä. Ensinnäkin vaaditaan seuraavat paketit:
PIP -> Työkalu Pythonin pakettien asentamiseen ja hallintaan
aptitude install python-pip
nginx -> Verkkopalvelin (käytämme sitä käänteisenä välityspalvelimena ja välimuistiin staattiset tiedostot 'img, js, css') Asennamme sen:
aptitude install nginx
Supervisord -> Sovellus sovelluksemme hallintaan ja seurantaan, vaikka sitä käytetään paljon enemmän. Asennamme sen seuraavilla tavoilla:
aptitude install supervisor
virtualenv -> Se auttaa meitä luomaan räätälöidyn virtuaalisen suoritusympäristön sovelluksellemme. Asennamme sen seuraavilla tavoilla:
aptitude install python-virtualenv
Gunicorn -> web-palvelin pythonille (emme asenna tätä vielä)
Oletan, että postgresql: n pitäisi olla jo asennettu ja määritetty
psychopg2 -> Postgresql-liitin pythonille (emme asenna sitä vielä)
Luo virtuaaliympäristö virtualenv: n avulla:
Ensin aiomme siirtyä työhakemistoon, jota käytämme tuotannon aloittamiseen:
cd /var/www/
Sitten tässä hakemistossa luomme virtuaalisen ympäristön:
virtualenv ENV-nombreApp
Siirtymme hakemistoon, jonka juuri luin virtualenv
cd ENV-nombreAPP
Kopioimme sovelluksen tähän hakemistoon ja aktivoimme nyt ympäristön seuraavasti:
source bin/activate
Kehotteen pitäisi nyt näyttää (ENV)usuario@host:
Tämä tekee nyt kaiken tekemämme tallennetaan hakemistoon / var / www / ENV-sovelluksen nimi / vaikuttamatta järjestelmäkokonaisuuksiin
Nyt siirrymme sovellushakemistoon:
cd nombreApp
Asennamme luettelon sovellusriippuvuuksista (tarvittaessa), joissa ne on määritelty tiedostossa requirements.txt:
pip install -r requirements.txt
Voimme myös asentaa paketteja yksitellen esimerkiksi liittimen asentamiseksi PostgreSQL:
pip install psycopg2
GUnicornin asennus ja konfigurointi:
Asentaaksemme sen teemme samalla tavalla:
pip install gunicorn
Nyt aiomme määrittää sen, tätä varten aiomme luoda tiedoston nimeltä gunicorn-deploy.py sovelluksemme juuressa (vaikka nimi voi olla mikä tahansa), jonka sisältö on seuraava:
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
Esimiehen kokoonpano:
Nyt asetetaan supervisord, sitä varten luomme määritystiedoston
echo_supervisord_conf > /etc/supervisord.conf
Nyt muokkaamme kokoonpanotiedostoa:
vim /etc/supervisord.conf
Ja me kommentoimme seuraavia rivejä poistamalla; (puolipiste):
[unix_http_server] tiedosto = / tmp / supervisor.sock [valvoja] logitiedosto = / var / log / supervord.log lokitiedosto_maxtavua = 50 Mt logfile_backups = 10 logitaso = debug pidfile = / var / run / supervord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: valvoja] valvoja.rpcinterface_factory = valvoja.rpcinterface: make_main_rpcinterface [supervorctl] serverurl = unix: [ohjelma: sovelluksen nimi] komento = / var / www / ENV-sovelluksen nimi / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py hakemisto = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Käyttäjätunnus redirect_stderr = true stdout_logfile = / var / www / lokit / sovelluksen nimi / supervord.log
Nyt luomme komentosarjan supervordille järjestelmän aloittamiseksi, sitä varten luomme tiedoston:
vim /etc/init.d/supervisord
Ja lisäämme seuraavan sisällön:
# Valvojan automaattinen käynnistys # # kuvaus: Käynnistää automaattisesti valvojan # prosessin nimi: valvoja # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervord SUPERVISORCTL = / usr / local / bin / supervorctl tapaus $ 1 alussa) echo -n "Aloitusvalvoja:" $ SUPERVISORD kaiku ;; stop) echo -n "Pysäytysvalvoja:" $ SUPERVISORCTL sammutuskaiku ;; uudelleenkäynnistys) echo -n "Pysäyttävä valvoja:" $ SUPERVISORCTL shutdown echo echo -n "Käynnistävä valvoja:" $ SUPERVISORD echo ;; että C
Ja nyt annamme tiedostolle suoritusoikeudet, jotta se voi aloittaa järjestelmästä:
sudo chmod +x /etc/init.d/supervisord
Päivitämme linkit palvelun käynnistämiseksi:
sudo update-rc.d supervisord defaults
Aloitamme palvelun:
sudo /etc/init.d/supervisord start
Nginxin asettaminen:
Tämä vaihe on myös melko yksinkertainen, luomme seuraavan kokoonpanotiedoston Nginx sovelluksellemme:
vim /etc/nginx/sites-enabled/nombreApp
Ja me lisäämme sinulle seuraavan sisällön
palvelin {kuuntele 9001; # portti, jossa he haluavat nginxin kuuntelevan palvelimen_nimi www.domain.com; # tai 192.168.0.100, osoite, johon pääsemme access_log /var/log/nginx/Appname.access.log; # missä meillä on sovelluslokin sijainti / {# mihin nginx soittaa, kun hän käyttää osoitetta www.dominio.com/proxy_pass http://127.0.0.1:8001; proxy_set_header Isäntä $ http_host; } sijainti / staattinen / {# mihin nginx pääsee, kun kirjoitamme www.dominio.com/static/ alias / var / www / ENV-sovelluksen nimi / sovelluksen nimi / staticfiles /; }}
Ja käynnistämme nginxin uudelleen:
service nginx restart
Djangon asettaminen:
Muutetaan django-määritystiedostoa:
vim nombreApp/settings.py
Etsimme linjaa, joka sanoo DEBUG = Tosi ja muutamme arvoa, jäljelle jäänyt DEBUG = väärä
Lisätään DB-parametrit:
DATABASES = {'oletus': {'MOOTTORI': 'django.db.backends.postgresql_psycopg2', # tai mysql tai mitä tahansa he käyttävät 'NAME': 'DBName', 'USER': 'DBUser', 'SALASANA' : 'password DB', 'HOST': 'localhost', # tai tarvitsemansa 'PORT': '', # tai käyttämäsi}}
Etsimme linjaa ALLOWED_HOSTS = [] ja lisätään verkkotunnus tai osoite, jonka kautta pääsemme, jättäen jotain ALLOWED_HOSTS = ['www.verkkotunnus.com']
Määritämme hakemiston staattisille tiedostoille, etsimme riviä, joka sanoo STATIC_ROOT = ' '
ja muutamme arvoa sijoittamalla absoluuttisen polun sinne, missä haluamme staattisten tiedostojemme olevan, tapauksessani jätin sen suunnilleen tälle STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Lähes valmis, suoritamme seuraavan komennon:
./manage.py collectstatic
Tämä luo kansion nimeltä 'statiikka polussa, jonka määritämme settings.py ", missä kaikki staattiset tiedostomme ovat.
Ja lopuksi käynnistämme esimiehen uudelleen ottamaan uudet muutokset:
supervisorctl restart nombreApp
Ja se olisi kaikki, loppujen lopuksi se ei ollut niin totta? se tuntui minusta yksinkertaiselta 😀
Toivon, että siitä on sinulle hyötyä, terveisiä 😉
Ymmärrän, että Django-sovellusta ei tule sijoittaa verkkopalvelimen kansion (/ var / www) juuriin? Turvallisuuden vuoksi en tiedä, olenko väärässä.
Tervehdys.
Selvä !!! Se oli jotain, josta en ollut täysin tietoinen, päivitän merkinnän 😛 ja teen heti kun palaan maanantaina, teen muutoksia xD-sovellukseen
kiitos
Epale veli hyvä opetusohjelma. Äskettäin olin samassa, mutta Debian 7: ssä, minun piti etsiä ja lukea enemmän tai vähemmän. Suosittelen, että luot virtuaaliverkon virtuaaliympäristön käyttäjän kotiin piilotettuun kansioon.
Tervehdys!
hahaha ctm dokumentoin eilen Djangoa ja olet jo käymässä läpi galaksin 999999 Tervehdys miehet xD
Erittäin hyvä artikkeli =) Juuri viikko sitten otin käyttöön django-sovelluksen, mutta tein sen uwsgin ja nginxin kanssa, tiedätkö mikä etu aseella on? Olen nähnyt sen mainitsevan paljon.
On mukavaa nähdä, että djangosta on tulossa erittäin suosittu, se on todella paras kehys, jonka olen nähnyt =)
Määritän STATIC_ROOT: lle globaalin muuttujan. Jotain tällaista:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Missä taustakuva on luomani sovellus. Joten varmistan, että missä käytän projektia, globaali polku on sama.
Mielenkiintoista, yritän tulevaisuudessa.
Muuten, tietääkö kukaan, kuinka korostukset ja muut kuin ASCII-merkit otetaan käyttöön django-sovelluksessa?
Olen katsonut kaikkialle, mikään seuraavista menetelmistä ei toimi minulle:
sys.setdefaultencoding ('utf-8') # in sites.py
# - * - koodaus: utf-8 - * - # jokaisessa python-tiedostossa
Site.py: n muokkaamisen ja utf-8: n asettamisen ascii: n sijaan on tarkoitus toimia, mutta $ file models.py ilmoittaa minulle, että tiedostoni on edelleen ascii.
Mitään ehdotuksia?
Se toimi!!!!
erittäin hyvä opetusohjelma, mutta voisitko tehdä jonkin siitä, miten lähetän sovellukseni jo tuotannossa olevaan verkkopalvelimeen
kiitos