Pinakamahusay na kasanayan para sa Django project working directory structure

Ang Django ay isang malakas na balangkas para sa paglikha Mga aplikasyon ng Python. Ang isang buong tampok na balangkas tulad ng Django ay makabuluhang nagpapabilis sa proseso ng paglikha at pag-deploy ng isang application sa pamamagitan ng pag-aalaga sa pangkalahatang pagbubuo ng code; sa ganitong paraan, maaaring tumuon ang developer sa pagiging natatangi at nilalaman ng site.

Sinasaklaw ng gabay na ito ang iba't ibang paraan para sa pag-install ng Django sa Ubuntu server 14.04, pati na rin ang pagsisimula sa balangkas na ito.

Mga Paraan ng Pag-install ng Django

Mayroong ilang iba't ibang pamamaraan Mga pag-install ng Django, na ang bawat isa ay may sariling mga pakinabang sa ilang partikular na sitwasyon.

  • Pandaigdigang pag-install ng Django mula sa isang pakete. Ang opisyal na repositoryo ng Ubuntu ay nagbibigay ng mga pakete ng Django na madaling mai-install gamit ang manager angkop na mga pakete. Ang pamamaraang ito ay napaka-simple, ngunit hindi kasing-flexible ng iba pang mga pamamaraan. Bilang karagdagan, ang isang repositoryo ay maaaring maglaman ng ilan lumang bersyon Pakete ng Django.
  • Pandaigdigang pag-install ng Django gamit ang pip. Ang pip tool ay isang Python package manager. Maaari itong magamit upang magsagawa ng pag-install ng Django sa buong system. Karaniwan itong nagbibigay ng pinakabagong magagamit na bersyon ng package. Gayunpaman, ang mga pandaigdigang (system-wide) na mga setting ay palaging hindi gaanong nababaluktot.
  • Pag-install sa pamamagitan ng pip sa Virtualenv. Binibigyang-daan ka ng virtualenv package na lumikha ng mga stand-alone na kapaligiran para sa iba't ibang proyekto. Gamit ang teknolohiyang ito, maaari mong i-install ang Django sa iyong direktoryo ng proyekto nang hindi naaapektuhan ang system sa kabuuan. Binibigyang-daan ka nitong magtakda ng mga indibidwal na setting para sa bawat proyekto. Ang isang virtual na kapaligiran (o kapaligiran) ay isang mas nababaluktot na opsyon para sa pag-install ng isang pakete.
  • Pag-install ng bersyon ng pag-unlad sa pamamagitan ng Git. Upang mai-install ang pinakabagong bersyon ng pag-unlad sa halip na ang stable na release, kailangan mong hilahin ang code mula sa git repository. Ito ay magbibigay pinakabagong mga tampok at mga pagwawasto ng programa; Maaari mong i-install ang bersyong ito sa buong mundo at lokal. Ngunit tandaan: ang mga bersyon ng pag-unlad ay hindi matatag.

Piliin ang pinakaangkop na opsyon sa pag-install ng Django at sundin ang mga tagubilin sa naaangkop na seksyon ng artikulong ito.

Pandaigdigang pag-install ng Django mula sa isang pakete

Ang proseso ng pag-install ng Django mula sa opisyal na imbakan ng Ubuntu ay napaka-simple. Una kailangan mong i-update ang listahan mga lokal na pakete sa angkop na tulong at pagkatapos ay i-install ang python-django package.

sudo apt-get update
sudo apt-get install python-django

Upang matiyak na matagumpay ang pag-install, hilingin ang bersyon ng programa.

django-admin --bersyon
1.6.1

Ang lalabas na numero ng bersyon ay nangangahulugan na ang pag-install ay matagumpay.

Mangyaring tandaan: Ang bersyon na ito ay hindi ang pinakabagong magagamit na bersyon ng Django.

Pandaigdigang pag-install sa pamamagitan ng pip

Upang i-install sa buong mundo ang pinakabagong stable na bersyon ng Django, gamitin ang pip tool, ang package manager ng Python. Upang mag-install ng pip, kailangan mo munang i-update ang listahan ng package:

sudo apt-get update

Upang mag-install ng pip para sa Python 2, i-type ang:

Upang mag-install ng pip para sa Python 3 gamitin:

Ngayong naka-install na ang pip package manager, maaari mong simulan ang pag-install ng Django. Para sa Python 2, ipasok ang:

sudo pip i-install ang django

Para sa uri ng Python 3:

sudo pip3 i-install ang django

Upang i-verify na matagumpay ang pag-install, ipasok ang:

django-admin --bersyon
1.7.5

Tulad ng nakikita mo, ang pip ay nagbibigay ng higit pa bagong release Django kaysa sa repositoryo ng Ubuntu.

Pag-install ng Django sa pamamagitan ng pip sa Virtualenv

Marahil ang pinaka-flexible na opsyon sa pag-install ay ang paggamit ng virtualenv. Binibigyang-daan ka ng tool na ito na lumikha ng mga virtual na kapaligiran sa Python kung saan maaari kang mag-install ng anuman mga kinakailangang pakete nang hindi naaapektuhan ang sistema sa kabuuan. Sa virtualenv, maaari kang pumili ng mga pakete para sa mga proyekto sa isang indibidwal na batayan nang hindi nababahala tungkol sa mga salungatan sa dependency.

Una kailangan mong i-install ang pip manager mula sa opisyal na repositoryo ng Ubuntu. I-update ang listahan ng package:

sudo apt-get update

Para sa Python 2:

sudo apt-get install python-pip

Para sa Python 3:

sudo apt-get install python3-pip

Kapag na-install na ang pip, magagamit mo ito para i-install ang virtualenv package.

Para sa Python 2, ilagay ang:

sudo pip i-install ang virtualenv

Para sa Python 3:

sudo pip3 i-install ang virtualenv

Ngayon ay maaari kang lumikha ng isang pasadyang virtual na kapaligiran para sa anumang proyekto. Lumikha ng bagong direktoryo ng proyekto at pumunta dito:

mkdir ~/newproject
cd ~/newproject

Lumikha ng isang virtual na kapaligiran sa direktoryo ng proyekto:

virtualenv newenv

Tandaan: Palitan ang conditional name newenv ng iyong pangalan.

Ang utos na ito ay lilikha ng isang standalone na kapaligiran, i-install ang Python at pip sa isang nakahiwalay na direktoryo. Maglalaman ang nilikha na direktoryo hierarchy ng file upang mag-install ng mga pakete.

Upang mag-install ng mga pakete sa nakahiwalay na kapaligiran, paganahin ito:

pinagmulan newenv/bin/activate

Pagkatapos noon command line ay magbabago, na nagpapahiwatig na ang virtual na kapaligiran ay pinagana. Magiging ganito ang hitsura nito:

(newenv)username@hostname:~/newproject$.

Sa iyong bagong kapaligiran, gumamit ng pip upang i-install ang Django. Anuman ang bersyon ng Python na iyong ginagamit, kailangan mo lamang patakbuhin ang pip command sa isang virtual na kapaligiran. Gayundin, kung nag-install ka nang lokal, hindi mo kailangang gumamit ng sudo.

pip install django

Tiyaking matagumpay na na-install ang program.

django-admin --bersyon
1.7.5

Upang umalis sa virtual na kapaligiran, gamitin ang command:

Pagkatapos nito, ang command line ay kukuha ng karaniwang anyo nito. Upang paganahin muli ang virtual na kapaligiran, bumalik sa iyong direktoryo ng proyekto at ilagay ang:

cd ~/newproject
pinagmulan newenv/bin/activate

Pag-install ng bersyon ng pag-unlad ng Django mula sa git

Para i-install ang development na bersyon ng Django, i-download ito mula sa git repository.

Upang gawin ito, i-install ang git gamit karaniwang tagapamahala angkop na mga pakete. I-update ang listahan ng package:

sudo apt-get update

At pagkatapos ay i-install ang git at ang pip package manager, na kakailanganin mo sa ibang pagkakataon upang mai-install ang Django. Para sa Python 2 gamitin:

sudo apt-get install git python-pip

Para sa Python 3:

sudo apt-get install git python3-pip

Pagkatapos git installation I-clone ang Django repository. Naglalaman ito ng mga pinakabagong feature at pag-aayos, ngunit hindi stable. Upang i-clone ang repositoryo sa direktoryo ng django-dev sa direktoryo ng tahanan, ipasok ang:

git clone git://github.com/django/django ~/django-dev

Pagkatapos nito, i-install ito gamit ang pip. Gamitin ang -e na flag para i-install sa editable mode, dahil kinakailangan ito kapag nag-i-install sa pamamagitan ng version control. Para sa Python 2:

sudo pip install -e ~/django-dev

Para sa Python 3:

sudo pip3 install -e ~/django-dev

Ipasok ang sumusunod na command upang i-verify na matagumpay ang pag-install:

django-admin --bersyon
1.9.dev20150305171756

Tandaan: Ang pamamaraang ito ay maaaring ilapat sa isang virtual na kapaligiran at sa gayon ay ihiwalay ang hindi matatag na bersyon ng Django.

Paglikha ng isang Django Project

Pagkatapos i-install ang Django, matutunan ang mga pangunahing kaalaman sa paggamit ng framework.

Para gumawa ng proyekto, gamitin ang django-admin command:

django-admin startproject projectname
cd projectname

Ang utos na ito ay lilikha ng isang direktoryo ng pangalan ng proyekto sa kasalukuyang direktoryo at ilalagay ang control script at isa pang direktoryo na tinatawag na projectname na may kasalukuyang code sa loob nito.

Tandaan: Habang nasa isang direktoryo ng proyekto na nilikha gamit ang virtualenv, maaaring ilagay ni Django ang mga control script at panloob na direktoryo sa kasalukuyang direktoryo gamit ang sumusunod na command (tandaan ang tuldok sa dulo ng linya):

django-admin startproject projectname .

Upang bumuo ng database sa mga mas bagong bersyon ng Django (default ay SQLite), ilagay ang:

python manage.py migrate

Kung hindi gumana ang paglipat, nangangahulugan ito na ang iyong kasalukuyang bersyon ng Django ay mas luma at hindi ito sinusuportahan. Sa kasong ito, gamitin ang:

python manage.py syncdb

Hihilingin nito kay Django na gumawa account tagapangasiwa; Pakibigay ang iyong username, email address at password.

Kapag ginagamit ang migrate command, dapat kang gumawa ng administrator account nang manu-mano. Upang gawin ito, i-type ang:

python manage.py createsuperuser

Hihilingin din ng program ang iyong username, email address, at password.

Kapag nakagawa ka na ng user, maaari mong simulan ang Django development server para maging pamilyar hitsura bagong proyekto. Pakitandaan: ang server na ito ay dapat lamang gamitin sa panahon ng pagbuo at hindi angkop para sa produksyon. Patakbuhin:

python manage.py runserver 0.0.0.0:8000

Sa iyong browser, bisitahin ang IP address sa pamamagitan ng pagtatakda ng port:

server_ip_address:8000

Ito ay magbubukas sa Django welcome page.

server_ip_address:8000/admin

Ilagay ang iyong pangalan ng administrator at password para ma-access ang iyong control panel.

Kapag pamilyar ka na sa karaniwang proyekto, itigil ang development server sa pamamagitan ng pagpasok ng CTRL-C sa terminal. Ang karaniwang proyektong ito ng Django ay ang building block para sa pagbuo ng isang natatanging website. Upang matutunan kung paano lumikha pasadyang mga application at i-set up ang iyong site, basahin ang dokumentasyon ng Django.

Mga resulta

Kaya, ngayon ang malakas na balangkas ng Django ay naka-install sa server, na nagbibigay sa iyo ng lahat mga kinakailangang kasangkapan para sa pagbuo ng mga web application. Ang isang ganap na balangkas ng Django ay maaaring makabuluhang mapabilis ang proseso ng pagbuo, na nagbibigay-daan sa iyong tumuon sa pagiging natatangi ng iyong aplikasyon.

Mga Tag: ,

Ang tala na ito ay isang pagpapatuloy ng artikulo tungkol sa pagsusulat ng isang telegram bot, kung saan susubukan kong sakupin nang mas detalyado hangga't maaari ang paksa ng pag-deploy ng ganap, kahit maliit, Django application sa isang production environment sa Linux OS, Ubuntu 14.04 LTS. Sa pagtatapos ng artikulo, magkakaroon tayo ng ganap na telegram bot na umiikot sa web at tumatanggap ng mga utos mula sa mga user ng messenger na ito.

Ano ang matututuhan mo pagkatapos basahin ang tala:

  • Mag-deploy ng isang Django application (o anumang WSGI application) na hino-host ng Digital Ocean sa kapaligiran ng Linux
  • Makipagtulungan sa nginx web server at gunicorn
  • Pamahalaan ang mga proseso gamit ang supervisord utility
  • I-configure ang virtualenv gamit ang pyenv
  • Awtomatikong ilunsad ang web application kahit na pagkatapos ng pag-reboot ng server

Noong Setyembre 2015, nagsagawa kami ng Python meetup sa Almaty, kung saan nakausap ko si . Sa panahon ng pag-uusap, maikling inilarawan ko ang Python web eco-system at ginawa maikling pangkalahatang-ideya tanyag na mga kasangkapan. Sa kasamaang palad, ang format ng meetup ay hindi nagbigay ng isang detalyadong pagsusuri sa paksa, kaya ang mga bagong dating sa lugar na ito ay karaniwang kailangang maghukay ng higit pa sa kanilang sarili. Ngayon ay susubukan kong punan ang puwang na ito at mas malalim sa "mainit" na paksa ng pag-deploy ng mga web application sa Python. Sa kabila ng katotohanan na ang artikulo ay tututuon sa isang Django application, ang mga inilarawang recipe ay magiging may-katuturan din para sa iba pang mga proyekto sa web na binuo sa Python gamit ang WSGI-compatible frameworks (Flask, Bottle, Pyramid, Falcon, web2py, at iba pa).

Sa tala na ito ay ipapakalat ko sa virtual hosting ng Digital Ocean. Kung magparehistro ka gamit ang link na ito, pagkatapos ay pagkatapos makumpirma ang iyong mga detalye ng pagbabayad, ang iyong account ay agad na mapupunan ng $10, na maaari mong gastusin sa paggawa ng maliliit na droplet (mga virtual na server) at magsanay sa pag-deploy ng mga proyekto sa web sa Python. Sasabihin ko kaagad na hindi mo kailangang gawin ang lahat malayong makina at sa pangkalahatan na gumamit ng hosting provider, maaari kang makayanan gamit ang isang lokal na virtual machine, halimbawa, gamit ang VirtualBox (ngunit sa kasong ito, imposibleng mag-install ng webhook).

Paglikha ng isang virtual server

Gaya ng nabanggit ko kanina, isasagawa namin ang deployment sa isa sa mga virtual na server ng DigitalOcean na may malakas na API :)

Lumikha ng droplet sa pamamagitan ng pag-click sa "Gumawa ng droplet" sa kanan itaas na sulok mga control panel:

Pinipili namin ang pinaka pinakamababang taripa para sa $5 bawat buwan kasama ang operating system ng Ubuntu 14.04.4 LTS sa hinaharap na virtual machine.

Halos palaging pinipili ko ang Frankfurt bilang isang data center, dahil mayroon akong pinakamahusay na ping dito. Matapos punan ang lahat ng kinakailangang mga patlang, i-click ang pindutang "Lumikha". Ang droplet ay nilikha sa loob ng 60 segundo, pagkatapos nito ang lahat ng impormasyon tungkol sa bago na kinakailangan para sa pag-access ay ipinadala sa iyong email. virtual machine: IP address, login at password.

Setup ng server

Pag-update ng mga pakete:

# apt-get update # apt-get -y upgrade

# adduser django # adduser django sudo

Mag-login sa ilalim ng bagong user django sa server, at lahat ng iba pang mga utos ay isinasagawa mula sa ilalim ng user na ito.
Ini-install namin ang kinakailangang arsenal upang i-configure ang virtual na kapaligiran sa pamamagitan ng Pyenv at itayo ang pinakabagong bersyon Python (2.7.11).

$ sudo apt-get install -y build-essential $ sudo apt-get install -y python-dev libreadline-dev libbz2-dev libssl-dev libsqlite3-dev libxslt1-dev libxml2-dev $ sudo apt-get install -y git

Pagkatapos nito, i-install namin ang Pyenv mismo. Maaari kang magbasa nang higit pa tungkol sa kung ano ang Pyenv at kung paano ito i-configure:
I-install ang pinakabagong bersyon ng Python (Python 2.7.11):

$ pyenv install 2.7.11 Pag-download ng Python-2.7.11.tgz... -> https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz Pag-install ng Python-2.7.11 ... Nag-install ng Python-2.7.11 sa /home/django/.pyenv/versions/2.7.11

Ang utos ay magtatagal ng ilang oras upang makumpleto (ang script ay magda-download ng Python at i-compile ito mula sa pinagmulan). Sa pamamagitan ng pag-install ng isang hiwalay na interpreter ng Python, hindi namin sa anumang paraan naaapektuhan ang pagpapatakbo ng system isa, bukod pa rito, sa pinakabagong LTS Mga bersyon ng Ubuntu(14.04) na bersyon 2.7.6 ang ginagamit, na may ilang malubhang kahinaan, kabilang ang isang bug na may SSL, at kulang din ng suporta para sa TLS 1.2

Kino-clone namin ang repositoryo sa proyekto ng Django:

$ cd ~ $ git clone https://github.com/adilkhash/planetpython_telegrambot.git $ cd planetpython_telegrambot/

$ pyenv virtualenv 2.7.11 telegram_bot $ pyenv local telegram_bot

Nag-install kami ng mga dependency gamit ang pip package manager.

Pip install -r requirements.txt

Ang Django application na nakasulat sa unang bahagi ay sumailalim sa maliliit na pagbabago. Sa partikular, inilipat ko ang mga nababagong bahagi ng code sa isang espesyal na .env file gamit ang django-environ library. Maaari mong tingnan ang mga pagbabago gamit ang link na ito.

Gumawa ng .env file mula sa template at punan ang mga kinakailangang setting.

$ cd blog_telegram && mv .env-template .env && vi .env

Sa partikular, kailangan mong baguhin ang DEBUG mode sa False, magrehistro ng token para sa Telegram bot at tumukoy ng karagdagang host na pinaghihiwalay ng mga kuwit sa ALLOWED_HOSTS. Sa aking kaso, ganito ang hitsura ng ALLOWED_HOSTS:

ALLOWED_HOSTS=127.0.0.1,bot.site

Ibig sabihin, gumawa ako ng karagdagang subdomain kung saan tatakbo ang Telegram bot.

Pagse-set up ng SSL certificate

Sa nakaraang artikulo ay isinulat ko iyon sa kaso Paggamit ng API sa pagtawag sa setWehook, ang host ay dapat na may wastong SSL certificate (Pinapayagan din ng Telegram ang paggamit ng mga self-signed certificate). Gagawin namin ang sertipiko sa pamamagitan ng libreng serbisyo para sa pag-isyu ng mga SSL certificate na Let's Encrypt.

$ cd ~ && git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt/ $ ./letsencrypt-auto certonly --standalone -d bot.site

Kakailanganin mong tukuyin ang ilang mga setting at sumang-ayon sa mga tuntunin ng serbisyo. Pagkatapos ng matagumpay na pagpapatupad ng mga utos, ang mga sertipiko ay matatagpuan sa /etc/letsencrypt/live/bot.site/

Pag-set up ng Nginx

Ngayon ay oras na upang i-install ang sikat na HTTP nginx server na sa aming kaso ay magsisilbing proxy (tumanggap ng mga kahilingan mula sa mga kliyente at ipasa ang mga ito sa karagdagang pagsunod sa mga tagubilin sa configuration file).

$ sudo apt-get install -y nginx $ cd /etc/nginx/sites-available/ $ sudo nano telegram_bot.conf

Punan bagong file telegram_bot.conf na may sumusunod na nilalaman:

Server ( makinig 80; makinig 443 ssl; server_name bot..site/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/bot..pem; lokasyon / ( proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme;

BABALA: Huwag kalimutang palitan ang host bot.site sa iyong sarili.

Inirehistro namin ang aming bagong config mga setting ng nginx at i-reboot ito para magkabisa ang mga pagbabago:

$ cd /etc/nginx/sites-enabled/ $ sudo ln -s ../sites-available/telegram_bot.conf telegram_bot.conf $ sudo service nginx restart

Ano ang ginawa namin?

  • Nagrehistro kami ng wastong SSL certificate para sa aming website
  • Ang lahat ng mga kahilingang dumarating sa host ay i-proxy sa aming hinaharap na Django application, na dapat na tumakbo sa port 8001.
  • Nagpapadala kami ng mga karagdagang HTTP header sa bawat kahilingan (host, client IP address, https/http scheme, at iba pa). Maaari kang magbasa nang higit pa tungkol sa mga setting ng nginx.

Upang suriin ang tagumpay ng aming mga setting, maaari kaming tumakbo application ng django sa pamamagitan ng test server na may runserver command sa port 8001 at pumunta sa site:

$ cd ~/planetpython_telegrambot/ $ python manage.py runserver 8001

Buksan ang browser at tingnan (agad kong binuksan ito sa pamamagitan ng https):

URL Hindi Nahanap ito ay isang normal na kababalaghan, dahil mayroon lamang kaming 1 wastong URL para sa direktang pagtatrabaho sa Telegram - /planet/bot/ / (hindi binibilang ang mga setting ng admin ng Django).

Pag-set up ng Gunicorn sa pamamagitan ng Supervisor

Oras na para simulan ang pagse-set up ng production-ready Mga HTTP server Gunicorn, na, sa pamamagitan ng paraan, ay ganap na nakasulat sa Wikang sawa at napatunayang mabuti ang sarili sa totoong labanan (nga pala, sa lahat ng "live" na proyekto ay ginagamit ko ang partikular na kumbinasyong ito: nginx+gunicorn)

Ano ang Supervisor?

Superbisor Ito ay isang utility ng manager ng proseso. Ito ay "sinusubaybayan ang kalusugan" ng iyong mga proseso ng daemon at, kung bumagsak ang mga ito, susubukan itong itaas muli. Kung sa panahon ng operasyon Gunicorn "bumagsak" ( error sa system, maling yugto ng buwan, at iba pa), Sinusubukan ng Supervisor na "itaas" ito muli, upang hindi magdusa ang pagganap ng site. Sa pamamagitan ng paraan, mayroon akong mga plano na magsulat ng isang maikling tala tungkol sa utility na ito, upang magsalita ng Supervisor Advanced Usage. Ito ay nagkakahalaga ng pagpuna na ang lahat ng mga proseso na tumatakbo sa Supervisor ay dapat tumakbo sa foreground mode upang maunawaan ng utility kapag ang isang bagay ay hindi nangyayari ayon sa plano.

Una, gumawa tayo ng configuration file para patakbuhin ang Gunicorn sa loob ng Supervisor. Ang mga nilalaman nito ay ganito ang hitsura:

Command=/home/django/.pyenv/versions/telegram_bot/bin/gunicorn blog_telegram.wsgi:application -b 127.0.0.1:8001 -w 1 --timeout=60 --graceful-timeout=60 --max-requests= 1024 directory=/home/django/planetpython_telegrambot/ user=django redirect_stderr=True stdout_logfile=/tmp/gunicorn.log stderr_logfile=/tmp/gunicorn_err.log autostart=true autorestartcs=true startsecs=9190 stopwaitsec=10190 stopwaitsec

I-save ang file sa ilalim ng pangalang gunicorn.conf ( ~/planetpython_telegrambot/gunicorn.conf). Sa pamamagitan ng paraan, ang Gunicorn ay kasama sa mga dependency ng aming proyekto ( requirements.txt) at dahil na-install na natin ito sa ating kapaligiran, pagkatapos ay alamin ang landas maipapatupad na file maaari mong patakbuhin ang command sa loob ng naka-activate na virtual na kapaligiran (awtomatikong nangyayari ang pag-activate kapag pumunta ka sa direktoryo ng web application dahil sa pagkakaroon ng isang file doon .python-version nilikha sa pamamagitan ng pyenv local):

$pyenv aling gunicorn

Mga nilalaman ng configuration file para sa supervisor:

File=/tmp/telgram_bot_supervisord.sock logfile=/tmp/telgram_bot_supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/tmp/telgram_bot_supervisord.pid nodaemon=false minfds=1024 pc supervisor. : make_main_rpcinterface serverurl=unix:///tmp/telgram_bot_supervisord.sock files = /home/django/planetpython_telegrambot/gunicorn.conf

I-save sa ~/planetpython_telegrambot/supervisord.conf

$superd

Ang paglulunsad ay dapat magpatuloy nang walang anumang mga error. Upang malaman ang katayuan ng mga kasalukuyang proseso, patakbuhin ang supervisorctl utility:

$ supervisorctl gunicorn RUNNING pid 20901, uptime 0:04:18 supervisor>

Para makakuha ng tulong, maaari mong patakbuhin ang help command. At para makakuha ng impormasyon tungkol sa command-help. Halimbawa:

Supervisor> tumulong na huminto Ihinto ang proseso ng paghinto:* Ihinto ang lahat ng mga proseso sa isang grupo ihinto Ihinto ang maramihang mga proseso o mga grupo ihinto ang lahat Itigil ang lahat ng mga proseso supervisor>

Pagkatapos ng matagumpay na paglunsad ng superbisor, ang site ay dapat na available online.

I-autostart ang web application sa pag-reboot

Ano ang mangyayari kung biglang nag-reboot ang aming virtual server? (isang pagkabigo sa data center, mga problema sa host machine, isang baluktot na admin na nagulo, atbp.). Sa kaso ng ganitong senaryo, ngayon ang aming aplikasyon ay hindi awtomatikong magsisimula. Upang ayusin ito, kailangan nating maglagay ng kaunting pagsisikap na magsulat ng isang maliit na script, na matagumpay nating ilalagay sa mekanismo ng pagsisimula ng Ubuntu OS (mga distribusyon na tulad ng Debian).

Narinig mo na ba ang tungkol sa tinatawag na upstart files? Ang pagsulat ng isa sa kanila ang gagawin natin ngayon. By the way, on kasalukuyang sandali Ang upstart ay itinuturing na hindi na ginagamit sa mga bagong bersyon ng OS sa Nakabatay sa Linux binalak buong paglipat sa systemd.

Paglalarawan "Supervisor Telegram bot django app starting handler" magsimula sa runlevel stop sa runlevel [!2345] respawn setuid django setgid django chdir /home/django/planetpython_telegrambot/ exec /home/django/.pyenv/versions/telegram_bot/bin/supervisord

Ang file ay dapat ilagay sa /etc/init/(sa aking kaso, binigyan ko ito ng pangalang telegram_bot.conf). Kung dati ang lahat ng paglulunsad ay hindi nagdulot ng mga problema, pagkatapos pagkatapos ng pag-restart ng system, ang application ay awtomatikong ilulunsad:

$ sudo shutdown -r ngayon

Ngayon kailangan naming irehistro ang aming URL sa panig ng Telegram gamit ang setWebhook API na tawag:

Mag-import ng telepot bot_token = "BOT_TOKEN" bot = telepot.Bot(bot_token) bot.setWebhook("https://bot..format(bot_token=bot_token))

Kinukumpleto nito ang pag-setup ng bot. Nagpapadala kami ng mga utos sa aming bot @PythonPlanetBot at nakakakuha kami ng sapat na mga sagot :)

Alam kong wala talaga ang tamang paraan. Gayunpaman, nahirapan akong lumikha ng istraktura ng direktoryo na gumagana nang maayos at nananatiling malinis para sa bawat developer at administrator. Karamihan sa mga proyekto sa github ay may karaniwang istraktura. Ngunit hindi ito nagpapakita ng paraan upang ayusin ang iba pang mga file at lahat ng proyekto sa PC.

Ano ang pinaka-maginhawang paraan upang ayusin ang lahat ng mga direktoryo na ito sa isang development machine? Ano ang tawag mo sa kanila, at paano mo ikokonekta at i-deploy ito sa server?

  • mga proyekto (lahat ng mga proyektong ginagawa mo)
  • source file (ang application mismo)
  • gumaganang kopya ng repositoryo (ginagamit ko ang git)
  • virtual na kapaligiran (mas gusto kong ilagay ito sa tabi ng proyekto)
  • static na ugat (para sa pinagsama-samang mga static na file)
  • media root (para sa mga na-download na media file)
  • README
  • MGA LISENSYA
  • mga dokumento
  • mga sketch
  • (halimbawang proyekto na gumagamit ng application na ibinigay ng proyektong ito)
  • (sa kaso ng paggamit ng sqlite)
  • lahat ng karaniwang kailangan mo upang matagumpay na magtrabaho sa isang proyekto

Mga problemang gusto kong lutasin:

4 na sagot

Mayroong dalawang uri ng mga proyekto ng Django na mayroon ako sa aking ~/projects/ direktoryo, parehong may bahagyang naiibang istraktura:

  • Mga offline na site
  • Mga konektadong app

Offline na website

Kadalasan ay mga pribadong proyekto, ngunit hindi kinakailangan. Karaniwang ganito ang hitsura:

~/projects/project_name/ docs/ # documentation scripts/ manage.py # na naka-install sa PATH sa pamamagitan ng setup.py project_name/ # project dir (ang ginawa ng django-admin.py) apps/ # project-specific applications accounts/ # karamihan madalas na app, na may custom na modelo ng user na __init__.py ... mga setting/ # setting para sa iba't ibang kapaligiran, tingnan sa ibaba ang __init__.py production.py development.py ... __init__.py # ay naglalaman ng bersyon ng proyekto urls.py wsgi.py static/ # mga template ng static na file na tukoy sa site/ # mga pagsubok na template na tukoy sa site/ # mga pagsubok na tukoy sa site (karamihan ay nasa browser) tmp/ # hindi kasama sa git setup.py requirements.txt requirements_dev.txt pytest.ini ...

Mga setting

Ang mga pangunahing setting ay ang produksyon. I-import lang ng ibang mga file (hal. staging.py, development.py) ang lahat mula sa production.py at i-override lang ang mga kinakailangang variable.

Para sa bawat kapaligiran mayroong hiwalay na mga file mga setting, halimbawa. produksyon, pag-unlad. Mayroon akong ilang mga proyekto na sinubukan ko (para sa tester), (bilang isang tseke bago ang huling pag-deploy) at heroku (para sa pag-deploy sa heroku).

Mga kinakailangan

Mas gusto kong itakda ang mga kinakailangan sa setup.py nang direkta. Ang mga kailangan lang para sa development/test environment na mayroon akong requirements_dev.txt .

Ang ilang mga serbisyo (hal. heroku) ay nangangailangan ng requirements.txt sa root directory.

setup.py

Kapaki-pakinabang kapag nagde-deploy ng proyekto gamit ang setuptools. Nagdaragdag ito ng manage.py sa PATH para mapatakbo ko nang direkta ang manage.py (kahit saan).

Mga aplikasyon para sa mga partikular na proyekto

Ginamit ko ang mga app na ito sa project_name/apps/ directory at na-import ang mga ito gamit ang relative import.

Mga template/static/local/test na mga file

Inilagay ko ang mga template na ito at mga static na file sa mga global template/static na direktoryo sa halip na sa loob ng bawat application. Ang mga file na ito ay karaniwang na-edit ng mga taong hindi nangangailangan ng framework o python project code. Kung ikaw ay isang full stack developer na nagtatrabaho nang mag-isa o sa isang maliit na team maaari kang gumawa ng bawat template ng app/static na direktoryo. Panlasa lang talaga.

Ang parehong naaangkop sa wika, kahit na kung minsan ay maginhawa upang lumikha ng isang hiwalay na direktoryo ng lokal.

Ang mga pagsubok ay karaniwang pinakamahusay na inilalagay sa loob ng bawat aplikasyon, ngunit kadalasan mayroong maraming integration/functional na pagsubok na sumusubok higit pang mga application,nagtutulungan, kaya may katuturan ang isang pandaigdigang direktoryo ng pagsubok.

Direktoryo ng Tmp

Mayroong pansamantalang direktoryo sa ugat ng proyekto na hindi kasama sa VCS. Ito ay ginamit upang mag-imbak ng media/static na mga file at database sqlite data sa panahon ng pag-unlad. Lahat ng nasa tmp ay maaaring tanggalin anumang oras nang walang anumang problema.

Virtualenv

Mas gusto ko ang virtualenvwrapper at ilagay ang lahat ng venvs sa ~/.venvs na direktoryo ngunit maaari mo itong ilagay sa loob ng tmp/ upang panatilihin itong magkasama.

Template ng proyekto

Gumawa ako ng template ng proyekto para sa setup na ito, django-start-template

Deployment

Ang proyektong ito ay na-deploy tulad ng sumusunod:

Source $VENV/bin/activate export DJANGO_SETTINGS_MODULE=project_name.settings.production git pull pip install -r requirements.txt # I-update ang database, mga static na file, locales manage.py syncdb --noinput manage.py migrate manage.py collectstatic --noinput manage.py makemessages -a manage.py compilemessages # restart wsgi touch project_name/wsgi.py

Maaari mong gamitin ang rsync sa halip na git , ngunit kailangan mo pa ring magpatakbo ng isang batch ng mga utos upang i-update ang iyong kapaligiran.

Kamakailan ay gumawa ako ng isang app na nagpapahintulot sa akin na magpatakbo ng isang control command upang i-update ang kapaligiran, ngunit ginamit ko lamang ito para sa isang proyekto at nag-eeksperimento pa rin ako dito.

Mga sketch at draft

Draft template na ipo-post ko sa loob pandaigdigang katalogo mga template/ . Sa palagay ko posible na lumikha ng isang sketch/ folder sa ugat ng proyekto, ngunit hindi pa ito ginagamit.

Konektadong application

Ang mga application na ito ay karaniwang inihahanda para sa publikasyon bilang open source. Nagbigay ako ng isang halimbawa sa ibaba ng django-forme

~/projects/django-app/ docs/ app/ tests/ example_project/ LICENSE MANIFEST.in README.md setup.py pytest.ini tox.ini .travis.yml ...

Malinaw ang mga pangalan ng mga katalogo (sana). Inilagay ko ang mga test file sa labas ng direktoryo ng application, ngunit talagang hindi mahalaga. Mahalagang magbigay ng README at setup.py para madaling ma-install ang package sa pamamagitan ng pip.

Ang sagot ko ay base sa akin sariling karanasan trabaho at karamihan sa aklat na Two Matching Django, na lubos kong inirerekomenda, at kung saan ka makakahanap ng higit pa detalyadong paliwanag sa lahat ng bagay. Sasagutin ko lang ang ilang mga katanungan at anumang mga pagpapabuti o pagwawasto ay malugod na tatanggapin. Ngunit maaaring mayroong mas mahusay na gumaganap upang makamit ang parehong layunin.

Mga proyekto
Mayroon akong pangunahing folder sa aking personal na direktoryo kung saan tinitingnan ko ang lahat ng mga item na aking ginagawa.

Pinagmulan ng mga file
Personal kong ginagamit ang django project root bilang repository root ng aking mga proyekto. Ngunit inirerekomenda ng aklat na paghiwalayin ang dalawang bagay. Sa tingin ko ito ang pinakamahusay na diskarte, kaya inaasahan kong unti-unti kong baguhin ang aking mga proyekto.

Project_repository_folder/ .gitignore Makefile LICENSE.rst docs/ README.rst requirements.txt project_folder/ manage.py media/ app-1/ app-2/ ... app-n/ static/ templates/ project/ __init__.py settings/ __init__ .py base.py dev.py local.py test.py production.py ulrs.py wsgi.py

Imbakan
Mukhang ang Git o Mercurial ang pinaka mga sikat na sistema kontrol ng bersyon sa mga developer ng Django. At ang pinakasikat na serbisyo sa pagho-host para sa mga backup na kopya GitHub at Bitbucket.

Virtual na kapaligiran
Gumagamit ako ng virtualenv at virtualenvwrapper. Pagkatapos i-install ang pangalawa, kailangan mong i-configure ang gumaganang direktoryo. Ang akin ay matatagpuan sa my/home/envs na direktoryo dahil ito ay inirerekomenda sa virtualenvwrapper na gabay sa pag-install. Ngunit sa tingin ko ay hindi ang pinakamahalagang bagay ay kung saan ito nakalagay. Ang pinakamahalagang bagay kapag nagtatrabaho sa mga virtual na kapaligiran- i-update ang requirements.txt file.

Pip freeze -l > requirements.txt

Static na ugat
Folder ng proyekto

Root Media
Folder ng proyekto

README
ugat ng repositoryo

LISENSYA
ugat ng repositoryo

Mga dokumento
ugat ng repositoryo. Ang mga ito mga pakete ng python makakatulong sa iyo na pasimplehin ang iyong dokumentasyon:

Mga sketch

Mga halimbawa

Database

Hindi ako mahilig gumawa ng bagong setting/direktoryo. Nagdaragdag lang ako ng mga file na tinatawag na settings_dev.py at settings_production.py para hindi ko na kailangang i-edit ang BASE_DIR. Pinapataas ng diskarte sa ibaba ang default na istraktura sa halip na baguhin ito.

Mysite/ # Project conf/ locale/ en_US/ fr_FR/ it_IT/ mysite/ __init__.py settings.py settings_dev.py settings_production.py urls.py wsgi.py static/ admin/ css/ # Custom back end styles css/ # Project front end style fonts/ images/ js/ sass/ staticfiles/ templates/ # Project templates includes/ footer.html header.html index.html myapp/ # Application core/ migrations/ __init__.py templates/ # Application templates myapp/ index.html static / myapp/ js/ css/ images/ __init__.py admin.py apps.py forms.py models.py models_foo.py models_bar.py views.py templatetags/ # Application na may mga custom na context processor at template tags __init__.py context_processors.py templatetags/ __init__.py templatetag_extras.py gulpfile.js manage.py requirements.txt

Paglalarawan ng Proseso mabilis na pag-install Django mula sa Plesk Control Panel.

Ang artikulong ito ay luma na at tumutukoy sa isang Plesk panel na hindi na susuportahan.

"Pro" (na may konektadong SSH access), "Plus", "VIP", pati na rin sa panahon ng pagsubok na pag-access sa mga rate na ito, at mga alok upang mabilis na gumawa bagong proyekto Django. Upang gawin ito kailangan mo:

  1. Mag-login sa Control Panel (makakatanggap ka kaagad ng mga kredensyal sa pag-access.)
  2. Sa pangunahing menu ng control panel, piliin ang "Mga Domain".
  3. Piliin ang domain kung saan mo planong i-install ang Django.
  4. Sa pangkat na "Applications and Services," piliin ang "Web Applications".
  5. Ipasok ang django sa search bar at pagkatapos ay simulan ang pag-install.
  6. Basahin nang mabuti ang kasunduan sa lisensya pagkatapos sumang-ayon, posible ang karagdagang pag-install.
  7. Sa seksyong "Mga Opsyon sa Pag-install," piliin ang target na direktoryo para sa pag-install ng application.
  8. Sa seksyong "Mga Setting ng Database", dapat mong piliin ang uri (Kasalukuyang sinusuportahan ang MySQL at PostgreSQL), tukuyin ang username at password ng database - ang mga parameter na ito ay awtomatikong ipasok sa settings.py file.
  9. Susunod, kailangan mong ipasok ang iyong login, email address at password ng administrator, ibinigay na password gagamitin pa.
  10. Ang seksyong "Mga Personal na Setting" kapag ini-install ang package ay nagbibigay ng access sa mga setting ng Django para sa bagong proyekto, lalo na:
    • "Django Project Name" - ang pangalan ng Django project na gagawin.
    • "Pangalan ng direktoryo na may mga proyektong Django" - ang pangalan ng direktoryo kung saan matatagpuan ang mga proyekto ng django, direktoryo na ito ay matatagpuan sa pribadong folder sa iyong site.
    • "I-activate ang interface ng administrator" - kapag napili ang opsyong ito, i-deploy ang django na pinagana ang seksyon ng admin, naka-synchronize ang database, nakatakda ang login at password ng administrator sa mga value na tinukoy sa itaas.
    • "Iyong sariling virtualenv" - pagpipiliang ito nagsasangkot ng paglikha ng iyong sariling python na "halimbawa", habang nakakakuha ka ng pagkakataon na mag-install ng iyong sariling mga module, na maaaring naiiba sa mga naka-install sa pagho-host kapag pinagana, ang espasyo sa disk na inookupahan ng application ay tumataas nang bahagya.

Pagkatapos ng pag-install ang application na ito, sa http://domain_name/installation_directory/ magiging available ang karaniwang pahina ng pinakabagong pag-install ng Django matatag na bersyon Mula sa Python 2.6.2, ang mga karagdagang operasyon at karaniwang pagkilos, tulad ng pamamahala ng proyekto sa pamamagitan ng manage.py, ay nangangailangan ng buong ssh na pag-access. Available ang serbisyong ito bilang default para sa mga plano sa taripa"Plus" at "VIP", sa "Pro" na taripa posible na mabuo ssh access, pagpapalawak ng taripa karagdagang opsyon sa pamamagitan ng sistema ng pagsingil. Kung paketeng ito sa ilang kadahilanan ay hindi nakakatugon sa mga kinakailangan ng iyong proyekto, maaari kang lumikha ng isang proyekto ng Django