Što kažete na pozdrav svima, ovo je moj prvi članak u <» FromLinuxu (od nekoliko koje imam u svojim nacrtima xD), nadam se da će vam biti od koristi
Pa, na mom novom i trenutnom poslu, trenutno se provodi migracija nekoliko sustava na Django (koliko je to čudno? XD), a jedan od mojih zadataka, osim razvoja, je stavljanje u proizvodnju tih, zatim kao dobar šegrt, budući da sam prvi put pustio aplikaciju u produkciju na pravom poslužitelju: $ Počeo sam čitati službeni dokument svakog od potrebnih paketa steka (Gunicorn i Supervisord više od svih), i vidjevši da tutoriali Na španjolskom mi u nekim aspektima nisu bili previše jasni, odlučio sam stvoriti mini vodič s koracima koje sam slijedio za puštanje aplikacije u proizvodnju, temeljeno na hrpi Django, Gunicorn, Supervisord, Nginx i Postgresql.
U slučaju kada radim, poslužitelji i dalje rade na Debian Squeezeu, ali vodič bi trebao biti potpuno valjan za ostale distribucije ... pa krenimo odmah na stvar i krenimo:
Radit ću kao super korisnik. Prije svega, potrebni su sljedeći paketi:
PIP -> Alat za instaliranje i upravljanje paketima za Python
aptitude install python-pip
Nginx -> Web poslužitelj (koristit ćemo ga kao obrnuti proxy i za predmemoriranje statičkih datoteka 'img, js, css') Instaliramo ga sa:
aptitude install nginx
Nadglednik -> Aplikacija za upravljanje i nadzor naše aplikacije, iako se koristi za mnogo više. Instaliramo ga sa:
aptitude install supervisor
virtualenv -> Pomaže nam u stvaranju prilagođenog virtualnog okruženja za izvršavanje naše aplikacije. Instaliramo ga sa:
aptitude install python-virtualenv
Gunicorn -> Web poslužitelj za Python (ovo još nećemo instalirati)
Pretpostavljam da bi već trebali instalirati i konfigurirati postgresql
psycopg2 -> PostgreSQL konektor za Python (ni njega još nećemo instalirati)
Stvorite virtualno okruženje s virtualenv:
Prvo ćemo prijeći na radni direktorij koji ćemo koristiti za puštanje u proizvodnju:
cd /var/www/
Tada ćemo u ovom direktoriju stvoriti virtualno okruženje:
virtualenv ENV-nombreApp
Prelazimo na direktorij koji sam upravo stvorio virtualenv
cd ENV-nombreAPP
Kopiramo aplikaciju u ovaj direktorij i sada nastavljamo s aktiviranjem okoline pomoću:
source bin/activate
Upit bi sada trebao izgledati (ENV)usuario@host:
To će osigurati da se sve što radimo sada pohranjuje u direktorij /var/www/ENV-appname/ bez utjecaja na sistemske pakete.
Sada prelazimo na direktorij aplikacija:
cd nombreApp
Nastavljamo s instaliranjem popisa ovisnosti aplikacija (ako je potrebno), u kojem su navedene u datoteci zahtjevi.txt:
pip install -r requirements.txt
Pakete također možemo instalirati pojedinačno, na primjer za instaliranje konektora PostgreSQL:
pip install psycopg2
Instalacija i konfiguracija GUnicorn:
Da bismo ga instalirali, radimo to na isti način:
pip install gunicorn
Sada ga konfigurirajmo. Da bismo to učinili, stvorit ćemo datoteku pod nazivom gunicorn-deploy.py u korijenu naše aplikacije (iako naziv može biti bilo koji) sa sljedećim sadržajem:
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
Konfiguracija supervizora:
Sada konfigurirajmo supervisord ; za to generiramo konfiguracijsku datoteku s
echo_supervisord_conf > /etc/supervisord.conf
Sada uređujemo konfiguracijsku datoteku:
vim /etc/supervisord.conf
I mi komentiramo sljedeće retke uklanjanjem; (točka i zarez):
[unix_http_server] datoteka = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervizor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py direktorij = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Korisničko ime redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log
Sada ćemo stvoriti skriptu za nadzor da započne sa sustavom, za to ćemo stvoriti datoteku:
vim /etc/init.d/supervisord
I dodajemo sljedeći sadržaj:
# Automatsko pokretanje supervisorda # # opis: Automatsko pokretanje supervisorda # naziv procesa: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 u startu) echo -n "Pokretanje nadzora:" $ SUPERVISORD echo ;; stop) echo -n "Zaustavljanje nadzora:" $ SUPERVISORCTL isključivanje eha ;; ponovno pokretanje) echo -n "Zaustavljanje nadzora:" $ SUPERVISORCTL zaustavljanje echo -n "Pokretanje nadzora:" $ SUPERVISORD echo ;; da je C
A sada dajemo dozvolu za izvršavanje datoteke kako bi mogla započeti sa sustavom:
sudo chmod +x /etc/init.d/supervisord
Ažuriramo veze za pokretanje usluge:
sudo update-rc.d supervisord defaults
Uslugu započinjemo:
sudo /etc/init.d/supervisord start
Postavljanje nginxa:
Ovaj korak je također prilično jednostavan; kreirat ćemo sljedeću nginx konfiguracijsku datoteku za našu aplikaciju:
vim /etc/nginx/sites-enabled/nombreApp
A mi ćemo vam dodati sljedeći sadržaj
poslužitelj {preslušaj 9001; # priključak na kojem žele da nginx sluša ime poslužitelja www.domain.com; # ili 192.168.0.100, adresa kojoj ćemo pristupiti access_log /var/log/nginx/Appname.access.log; # gdje ćemo imati mjesto dnevnika aplikacija / {# gdje će nginx nazvati prilikom pristupa www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } location / static / {# gdje će nginx pristupiti kada uđemo na www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
I ponovno pokrećemo nginx:
service nginx restart
Postavljanje Djanga:
Izmijenimo konfiguracijsku datoteku django:
vim nombreApp/settings.py
Tražimo redak koji kaže DEBUG = True i mijenjamo njegovu vrijednost , ostavljajući DEBUG = False
Dodamo DB parametre:
DATABASE = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # ili mysql, ili bilo što 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' koriste: 'DB password', 'HOST': 'localhost', # ili onaj koji im treba 'PORT': '', # ili onaj koji koriste}}
Tražimo redak ALLOWED_HOSTS=[] i dodajemo domenu ili adresu putem koje ćemo mu pristupiti, što rezultira nečim poput ALLOWED_HOSTS=['www.domain.com']
Konfiguriramo direktorij za statičke datoteke, tražimo redak koji kaže STATIC_ROOT = ' ' i mijenjamo vrijednost, postavljajući apsolutni put tamo gdje želimo da budu naše statičke datoteke, u mom slučaju ostavio sam to više-manje ovako STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Gotovo gotovi, izvršavamo sljedeću naredbu:
./manage.py collectstatic
Ovim će se stvoriti mapa pod nazivom ' statics' u putanji koju smo naveli u settings.py , gdje će se nalaziti sve naše statičke datoteke.
I na kraju ponovno pokrećemo nadzornika kako bi preuzeo nove promjene:
supervisorctl restart nombreApp
I to bi bilo to, na kraju i nije bilo tako strašno, zar ne? Činilo mi se jednostavno
Nadam se da će vam biti od koristi, pozdrav