Django-sovelluksen käyttöönotto:

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ä 😉

GUnicornin dokumentaatio

Valvojan dokumentaatio


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   f3niX dijo

    Ymmärrän, että Django-sovellusta ei tule sijoittaa verkkopalvelimen kansion (/ var / www) juuriin? Turvallisuuden vuoksi en tiedä, olenko väärässä.

    Tervehdys.

    1.    urKh dijo

      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

  2.   Rodrigo Bravo (goidor) dijo

    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!

  3.   Tarjoile Fenriziä dijo

    hahaha ctm dokumentoin eilen Djangoa ja olet jo käymässä läpi galaksin 999999 Tervehdys miehet xD

  4.   daniel2ac dijo

    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 =)

  5.   ozkar dijo

    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.

  6.   sg-fiksu dijo

    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?

    1.    sg-fiksu dijo

      Se toimi!!!!

  7.   anime 230 XNUMX dijo

    erittäin hyvä opetusohjelma, mutta voisitko tehdä jonkin siitä, miten lähetän sovellukseni jo tuotannossa olevaan verkkopalvelimeen
    kiitos