Kā izvietot Django lietojumprogrammu:

Apsveicam visus, šis ir mans pirmais raksts sadaļā <» DesdeLinux (no vairākiem, kas man ir manos melnrakstos xD), es ceru, ka tas jums noderēs 😀

Nu, manā jaunajā un pašreizējā darbā šobrīd tiek veikta vairāku sistēmu migrācija uz Django (cik dīvaini eh ?? xD), un viens no maniem uzdevumiem, izņemot attīstību, ir šo ieviešana ražošanā, lai cik labi māceklis, jo es pirmo reizi ievietoju lietojumprogrammu ražošanā reālā serverī: $ es sāku lasīt oficiālo dokumentu par katru nepieciešamo kaudzes paketi (galvenokārt Gunicorn un Supervisord) un redzot, ka Spāņu valodā tie man dažos aspektos nebija ļoti skaidri, es nolēmu izveidot mini ceļvedi ar soļiem, kurus sekoju, lai lietojumprogrammu ieviestu ražošanā, pamatojoties uz Django, Gunicorn, Supervisord, Nginx un Postgresql kaudzīti.

Gadījumā, kad es strādāju, serveri joprojām darbojas ar Debian Squeeze, taču ceļvedim jābūt pilnībā derīgam citiem izplatījumiem ... tāpēc sāksim tieši pie lietas un sāksim:

Es strādāšu kā super lietotājs. Pirmkārt, ir nepieciešamas šādas paketes:

PIP -> Rīks Python pakotņu instalēšanai un pārvaldīšanai
aptitude install python-pip

Nginx -> Tīmekļa serveris (mēs to izmantosim kā apgriezto starpniekserveri un statisko failu “img, js, css” kešatmiņā) Mēs to instalējam ar:
aptitude install nginx

Uzraudzības iestāde -> Lietojumprogramma, lai pārvaldītu un uzraudzītu mūsu lietojumprogrammu, lai gan to izmanto daudz vairāk. Mēs to instalējam ar:
aptitude install supervisor

virtualenv -> Tas palīdz mums izveidot pielāgotu virtuālās izpildes vidi mūsu lietojumprogrammai. Mēs to instalējam ar:
aptitude install python-virtualenv

lielradzis -> tīmekļa serveris pitonam (mēs to vēl neinstalēsim)

Es pieņemu, ka viņiem jau vajadzētu būt instalētiem un konfigurētiem postgresql

psihopg2 -> Postgresql savienotājs pitonam (arī mēs to vēl neinstalēsim)

Izveidojiet virtuālo vidi ar virtualenv:

Vispirms mēs pārejam uz darba direktoriju, kuru izmantosim, lai ieviestu ražošanā:
cd /var/www/

Tad šajā direktorijā mēs izveidosim virtuālo vidi:
virtualenv ENV-nombreApp

Mēs pārietam uz direktoriju, kuru tikko izveidoju virtualenv
cd ENV-nombreAPP

Mēs kopējam lietojumprogrammu šajā direktorijā un tagad aktivizējam vidi ar:
source bin/activate

Tagad uzvednei vajadzētu izskatīties (ENV)usuario@host:

Tagad viss, ko mēs darām, tiks saglabāts direktorijā / var / www / ENV-appname / neietekmējot sistēmas paketes

Tagad mēs pārietam uz lietojumprogrammu direktoriju:
cd nombreApp

Mēs turpinām instalēt lietojumprogrammu atkarību sarakstu (ja nepieciešams), kurā tie ir norādīti failā prasības.txt:
pip install -r requirements.txt

Mēs varam instalēt paketes arī atsevišķi, piemēram, lai instalētu postgresql:
pip install psycopg2

GUnicorn instalēšana un konfigurēšana:

Lai to instalētu, mēs to darām tāpat:
pip install gunicorn

Tagad mēs to konfigurēsim, šim nolūkam mēs izveidosim failu ar nosaukumu gunicorn-deploy.py mūsu lietojumprogrammas saknē (lai arī nosaukums var būt jebkas) ar šādu saturu:

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

Supervizora konfigurācija:

Tagad iestatīsim vadītājs, tam mēs ģenerējam konfigurācijas failu ar

echo_supervisord_conf > /etc/supervisord.conf

Tagad mēs rediģējam konfigurācijas failu:
vim /etc/supervisord.conf

Un mēs atceļam nākamās rindas, noņemot; (semikols):

[unix_http_server] fails = / tmp / supervisor.sock [supervord] logfile = / var / log / supervord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = atkļūdošanas pidfile = / var / run / supervord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervizors] supervizors.rpcinterface_factory = uzraugs.rpcinterface: make_main_rpcinterface [supervorctl] serverurl = unix: [programma: lietotnes nosaukums] komanda = / var / www / ENV-lietotnes nosaukums / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Lietotājvārds redirect_stderr = true stdout_logfile = / var / www / logs / lietotnes nosaukums / supervord.log

Tagad mēs izveidosim skriptu supervord, lai sāktu ar sistēmu, un tāpēc mēs izveidosim failu:
vim /etc/init.d/supervisord

Mēs pievienojam šādu saturu:

 # Supervisord auto-start # # description: Automātiski sāk supervordoru # procesa nosaukums: supervord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervord SUPERVISORCTL = / usr / local / bin / supervorctl gadījums $ 1 sākumā) echo -n "Sākuma vadītājs:" $ SUPERVISORD atbalss ;; stop) echo -n "Apstāšanās vadītājs:" $ SUPERVISORCTL izslēgšanas atbalss ;; restart) echo -n "Apturošs uzraugs:" $ SUPERVISORCTL shutdown echo echo -n "Sākuma uzraudzītājs:" $ SUPERVISORD echo ;; ka C

Un tagad mēs piešķiram failam izpildes atļaujas, lai to varētu sākt ar sistēmu:
sudo chmod +x /etc/init.d/supervisord

Mēs atjauninām saites, lai sāktu pakalpojumu:
sudo update-rc.d supervisord defaults

Mēs sākam pakalpojumu:
sudo /etc/init.d/supervisord start

Nginx iestatīšana:

Šis solis ir arī diezgan vienkāršs, mēs izveidosim šādu konfigurācijas failu nginx mūsu pieteikumam:

vim /etc/nginx/sites-enabled/nombreApp

Mēs pievienosim jums šādu saturu

serveris {klausīties 9001; # ports, kur viņi vēlas, lai nginx klausītos servera_nosaukums www.domain.com; # vai 192.168.0.100, adrese, kurai piekļūsim access_log /var/log/nginx/Appname.access.log; # kur mums būs lietojumprogrammas žurnāla atrašanās vieta / {# kur nginx zvanīs, piekļūstot vietnei www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header resursdators $ http_host; } location / static / {# kur nginx piekļūs, kad mēs ievadīsim www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Un mēs restartējam nginx:
service nginx restart

Django iestatīšana:

Pārveidosim django konfigurācijas failu:
vim nombreApp/settings.py

Mēs meklējam līniju, kurā teikts ATKLĀŠANA = patiess un mēs mainām vērtību, paliek DEBUG = Nepatiesa

Mēs pievienojam DB parametrus:

DATU BĀZES = {'noklusējums': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # vai mysql vai jebkuru citu, ko viņi lieto 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'password DB', 'HOST': 'localhost', # vai viņiem vajadzīgais 'PORT': '', # vai tas, ko viņi lieto}}

Mēs meklējam līniju ALLOWED_HOSTS = [] un mēs pievienojam domēnu vai adresi, caur kuru mēs piekļūsim, atstājot kaut ko līdzīgu ALLOWED_HOSTS = ['www.domens.com']

Mēs konfigurējam direktoriju statiskajiem failiem, mēs meklējam līniju, kas saka STATIC_ROOT = ' ' un mēs mainām vērtību, ievietojot absolūto ceļu tur, kur mēs vēlamies būt mūsu statiskajiem failiem, manā gadījumā es to atstāju apmēram šādi STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Gandrīz pabeigts, mēs izpildām šādu komandu:
./manage.py collectstatic

Tādējādi tiks izveidota mape ar nosaukumu 'statika ceļā, kuru mēs norādām settings.py ", tur atradīsies visi mūsu statiskie faili.

Visbeidzot, mēs restartējam vadītāju, lai veiktu jaunās izmaiņas:
supervisorctl restart nombreApp

Un tas būtu viss, galu galā tas nebija tik daudz taisnība? man tas likās vienkārši 😀

Es ceru, ka tas jums ir noderīgi, sveicieni 😉

GUnicorn dokumentācija

Uzrauga dokumentācija


9 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   f3niX teica

    Es saprotu, ka lietotni Django nevajadzētu ievietot tīmekļa servera mapes saknē (/ var / www)? Drošības labad es nezinu, vai kļūdos.

    Sveicieni.

    1.    urKh teica

      Viss kārtībā !!! Tas bija kaut kas, par ko es pilnīgi nezināju, es atjaunināšu ierakstu 😛 un tiklīdz es atgriezīšos pirmdien, es veikšu izmaiņas xD lietojumprogrammā
      Gracias

  2.   Rodrigo Bravo (goidors) teica

    Epale brāļa laba apmācība. Nesen es biju arī tajā pašā, bet Debian 7, man nācās meklēt vai lasīt vairāk vai mazāk. Es iesaku jums izveidot virtuālo virtuālā vidi lietotāja mājās slēptā mapē.

    Sveicieni!

  3.   Pasniedz Fenrizu teica

    hahaha ctm es vakar dokumentēju Django, un jūs jau ejat cauri galaktikai 999999 Sveicieni, vīrieši xD

  4.   Daniels2ac teica

    Ļoti labs raksts =) tikai pirms nedēļas es izvietoju savu django lietotni, bet es to izdarīju ar uwsgi un nginx, vai jūs zināt, kādas priekšrocības ir lielgabalam? Esmu redzējis, ka tas daudz minēts.
    Ir patīkami redzēt, ka django kļūst ļoti populārs, tas tiešām ir labākais ietvars, ko esmu redzējis =)

  5.   ir ozkan teica

    STATIC_ROOT, ko es daru, ir definēt globālo mainīgo. Kaut kas tamlīdzīgs:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    Kur aizmugure ir manis izveidota lietotne. Tāpēc es pārliecinos, ka tur, kur izvietoju projektu, globālais ceļš ir vienāds.

  6.   sggudrs teica

    Interesanti, mēģināšu arī turpmāk.

    Starp citu, vai kāds zina, kā iespējot akcentus un citas ascii rakstzīmes django lietojumprogrammā?

    Esmu skatījies visur, un neviena no šīm metodēm man neder:
    sys.setdefaultencoding ('utf-8') # vietnē sites.py

    # - * - kodēšana: utf-8 - * - # katrā python failā

    Domājams, ka vietnes.py rediģēšana un utf-8 ievietošana ascii vietā darbojas, taču $ file models.py informē, ka mans fails joprojām ir ascii.

    Kādi ieteikumi?

    1.    sggudrs teica

      Tas nostrādāja !!!!

  7.   anime 230 teica

    ļoti laba apmācība, bet vai jūs varētu darīt to, kā manu lietotni augšupielādēt jau gatavā tīmekļa serverī
    paldies