djangoプロゞェクトのサヌバヌぞのアップロヌドを自動化したす

djangoプロゞェクトをレむアりトするためにVDSを構成するのは非垞に面倒で、䜕かを忘れるのは簡単です毎日これを行うため。 このプロセスが自動化されおいるず、はるかに優れおいたす。少ない劎力で、適切に構成されたプロゞェクトずそれを操䜜するための䞀連のコマンドを取埗できたす。



このプロセスにはさたざたなアプロヌチがありたす。Python固有 fabric 、 buildout たたは非固有 puppet 、 Chef 、シェルスクリプトセットなどです。



ファブリックアプロヌチ-ロヌカルで実行されるスクリプトはsshをサヌバヌに送信し、そこでコマンドを実行したす。 このアプロヌチは非垞に簡単で、デバッグが簡単です。これは良いこずですハブで確認しおください。 django-fab-deployず呌ばれる自転車が、さたざたなファブリックチヌムから埐々に珟れたした。 これは、Debian LennyたたはSqueeze甚にサヌバヌを構成し、その埌、最小限の劎力でそこにdjangoプロゞェクトを展開し、将来これらのプロゞェクトを管理できるファブリックスクリプトのセットです。



Debianのリリヌスに䌎い、Squeezeはdjango-fab-deployをより真剣に受け止め、いく぀かの粗さを修正したした。今、このプロゞェクトに぀いお話す時が来たず思いたす。 プロゞェクトにはドキュメントがあり、叙情的な䜙談の簡朔な改䜜がありたす。





䞀般原則



サヌバヌ偎



展開方法を遞択するための䞻な基準は安定性/信頌性であり、ここではapache + mod_wsgi + nginxの束が珟圚比類のないものです。 ubuntuのサポヌトを远加するのは難しいこずではないず思いたすが、ubuntのサポヌトは今のずころないので、なぜそれに぀いお話すのでしょう私自身はUbuntuを䜿甚したせん。



プロゞェクトはバヌゞョン管理システムで適切に保持されたすmercurialは珟圚サポヌトされおいたす 。 プロゞェクトがVCSにない堎合に備えお、tar.gzをロヌド/アンパックするセミプラグがありたす。 動䜜したすが、実皌働モヌドではテストしたせんでした必芁はありたせんでした。たた、いく぀かの機胜が衚瀺される可胜性がありたす。



展開を自動化する



サヌバヌをデプロむする基本的な方法を以䞋に説明したす。䜕らかの理由で機胜しない堎合でも、それは恐ろしいこずではありたせん。django-fab-deployは単なるスクリプトのセットです。 それらは郚分的に䜿甚したり、芗き芋したり、パッチを送信したり、蚘事を読んだりするのに圹立ちたす。



クリヌンなDebianサヌバヌがあるこずを前提ずしおいたす埌で「クリヌン」にするこずはできたせん。詳现は埌ほど説明したす。ルヌトぞの公開キヌを䜿甚しおsshアクセスを構成したした。



OpenVZでVPSを䜿甚しないでください。 VIRTはRSSの代わりにそれらに制限されおいるため、OpenVZの゜フトりェアApacheずmysql + innodbを含むはxen / kvmの堎合よりもはるかに倚くのメモリを消費したす10倍-はい簡単です。



プロゞェクトの準備


Djangoプロゞェクトは、 'local_settings.py'である皮のトリックを頻繁に䜿甚したすが、バヌゞョン管理システムにあり、リポゞトリには、pip䟝存関係を持぀ファむルず、Webサヌバヌの蚭定を持぀フォルダヌがありたす。 Django-fab-deployは、実際、これ以倖のものを必芁ずしたせん。 詳现。



1. django-fab-deployずその䟝存関係をむンストヌルしたす。



 pip install django-fab-deploy
 pip install jinja2
 pip install -e git + git//github.com/bitprophet/fabric.git#egg=Fabric-dev


django-fab-deployはFabric 0.9.xでは機胜したせん。Fabricはgithubからむンストヌルする必芁がありたす。



2.プロゞェクトのルヌトにfabfile.pyファむルを䜜成したす。 このファむルには、サヌバヌ蚭定を構成する1぀以䞊の関数が含たれおいる必芁がありたす。 たあ、なぜなら これは通垞のファブリックスクリプトであり、他のプロゞェクト固有のコマンドがある堎合がありたす。 䟋



# my_project/fabfile.py from fab_deploy import * def my_site(): env.hosts = ['my_site@example.com'] env.conf = dict( DB_PASSWORD = 'password', PROCESSES = 2, # ,    Debian Squeeze;     'lenny' # OS = 'squeeze', # ,         (  - 'hg') # VCS = 'none', ) update_env() my_site()
      
      







env.hostsに泚意しおください。 トリックがありたすプロゞェクト名をナヌザヌmy_siteずしお指定したすPythonで正しい倉数名にする必芁がありたす-ダッシュやスペヌスは䜿甚したせん。 そのようなナヌザヌがいなくおも構いたせん。django-fab-deployはそれを䜜成しお、埌でsshアクセスを蚭定できたす。 いずれにせよ、プロゞェクトごずに別々のナヌザヌを甚意するこずをお勧めしたす。



Env.confは、いく぀かの芏則を適甚しお物事を単玔化したす。 たずえば、デフォルトでは、デヌタベヌスの名前DB_NAMEはプロゞェクトのむンスタンスの名前INSTANCE_NAMEず䞀臎したす。これは、env.hostsのナヌザヌず䞀臎したす。



ここで䜕をどのように構成するかに぀いお詳しくは、 fabfile api documentationを参照しおください。



3. Webサヌバヌなどの構成テンプレヌトを䜜成したす。



  django-fab-deploy config_templates 


config_templatesフォルダヌがプロゞェクトのルヌトに衚瀺されたす。構成テンプレヌトがありたす。 プロゞェクトは異なり、倚くの堎合、蚭定を線集する必芁がありたす-少なくずも流readに読んでください。



{{}}で囲たれた倉数は、蚭定テンプレヌトで䜿甚できたすここでのテンプレヌト゚ンゞンはjinja2です。 これらの倉数は、サヌバヌにテンプレヌトをレむアりトするずきにenv.conf蟞曞の倀に眮き換えられたす。



4.プロゞェクトルヌトにconfig.server.pyを䜜成したす。 このファむルは、サヌバヌ䞊のconfig.pyファむルになりたす。 䟋



 # my_project/config.server.py DEBUG = False DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '{{ DB_NAME }}', 'USER': '{{ DB_USER }}', 'PASSWORD': '{{ DB_PASSWORD }}', 'HOST': '', 'PORT': '', 'OPTIONS': { "init_command": "SET storage_engine=INNODB" }, } }
      
      







開発甚のロヌカル蚭定でconfig.pyも䜜成したす。 config.pyをsettings.pyにむンポヌトしたす。

 # Django settings for my_project project. # ... from config import * # ...
      
      





トリックはよく知られおおり、倚くの堎合config.pyはlocal_settings.pyずも呌ばれたす。 このファむルは、VCSで無芖されるように远加する必芁がありたすVCSを䜿甚する堎合。



ご芧のずおり、config.server.pyはconfig_templatesフォルダヌのファむルのようなテンプレヌトでもあり、env.confの倉数もそれに眮き換えられたす。



5.プロゞェクトのルヌトに「reqs」フォルダヌを䜜成したす。 このようなフォルダヌの䟋は、プロゞェクトルヌトから次のコマンドを実行するこずで取埗できたす。



  django-fab-deploy example_reqs 


このフォルダヌには、pip䟝存関係を持぀テキストファむルがありたす。 1぀のファむルには特別な意味がありたすreqs / all.txt。 これは䟝存関係を持぀メむンファむルであり、そこからのすべおのパッケヌゞは展開䞭にむンストヌルされたす。 そこで、すべおの䟝存関係を単玔にリストするか、より良い「-r」オプションを䜿甚しお䟝存関係を持぀他のファむルを接続できたす。



django-fab-deploy generate_reqs



コマンドもありたす。このコマンドは、1぀のall.txtファむルでreqsフォルダヌを䜜成し、ロヌカル環境にむンストヌルされおいるすべおのpythonパッケヌゞを䞀芧衚瀺したすpip freezeが瀺す内容。



ステップ1〜5が完了するず、プロゞェクトは次のようになりたす。



 my_project
     ...
     config_templates 
         ...
    芁求             
         all.txt      
         ...     

     fabfile.py      
     config.py      
     config.server.py 
     settings.py
     manage.py


その堎合、プロゞェクトの準備は完了です。



サヌバヌの準備


1. env.hostsで存圚しないナヌザヌが指定された堎合、それを䜜成し、キヌによる手動たたは次のようにsshアクセスを蚭定したす公開キヌのあるファむルが必芁です。



  fab create_linux_account "/ home / kmike / .ssh / id_rsa.pub" 


sshが機胜しおいるこずを確認したす。



  ssh my_site@example.com 


2.デヌタベヌスをセットアップしたす。 デヌタベヌスがすでに手動で構成されおいる堎合たずえば、プロゞェクトが既に機胜しおいる堎合、䜕もする必芁はありたせん。 django-fab-deployは、mysqlをむンストヌルし、プロゞェクト甚の空のデヌタベヌスを䜜成する方法を認識したす。



 fab mysql_install
 fab mysql_create_db


mysqlが既にサヌバヌにむンストヌルされおいる堎合、mysql_installは䜕もしたせん。 mysqlがむンストヌルされおいない堎合はむンストヌルされ、mysql rootナヌザヌのパスワヌドはenv.conf ['DB_PASSWORD']に蚭定されたす。



mysql_create_dbは、env.conf ['DB_NAME']ずいう空のデヌタベヌスを䜜成したすこの䟋では、これはenv.hostsからのナヌザヌ名になりたす。



mysqlを䜿甚しおいない堎合、たたはmysqlナヌザヌがrootでない堎合、すべおを手䜜業で行うこずをお勧めしたす。 さらに良いこずに、自動化このためのファブリックスクリプトを蚘述しお、パッチをdjango-fab-deployに送信したす。



3.すべお、サヌバヌの準備ができたした。 指を亀差させお、プロゞェクトのルヌトからコマンドを実行できたす。



  fab full_deploy 


すべおが正しく行われた堎合、サむトは獲埗するはずです。



このコマンド



゜ヌスコヌドは〜/ src / <INSTANCE_NAME>にあり、virtualenvは〜/ envs / <INSTANCE_NAME>に配眮されたす。



django-fab-deployは、Apacheずnginxのデフォルトサむトを無効にし、Apachevsky ports.confをコマンドしたすApacheはポヌト80をリッスンしなくなりたす。 Apacheの他のサむトがサヌバヌ䞊で実行されおいた堎合、このためアクセスできなくなりたす。 nginxだけが突き出おいれば、すべおがうたくいくはずです-django-fab-deployはサヌバヌに察しおトリッキヌなこずは䜕もしたせん。



サヌバヌ管理



サヌバヌに倉曎をアップロヌドしお適甚する fab push







別の䟋䟝存関係の曎新ず移行䞭のprodサヌバヌぞの倉曎のアップロヌド fab prod push:pip_update,migrate







Webサヌバヌ蚭定の曎新 fab setup_web_server





fab update_django_config



蚭定の曎新config.server.py fab update_django_config







コマンドの完党なリストは、ドキュメントに蚘茉されおいたす。 より高いレベルが必芁な堎合スピリット-fabの再デプロむを開始し、すべおがすぐに曎新され、コヌド、蚭定、䟝存関係、および移行が完了したした-fabコマンドを基本コマンドのラッパヌずしお簡単に蚘述できたす。 プッシュコマンドの実行が倚すぎる堎合たずえば、デフォルトでテストを実行する堎合、コヌドを芋お、fabfile.pyにより適切なバヌゞョンを蚘述しおください。 このような実隓が有甚で成功しおいるず思われる堎合は、 バグトラッカヌでチケットを開いおください。



アナログ



django-fab-deployに最も近いアナログはwovenです。 どうやら、たた玠晎らしいこず。 WovenはUbuntuに焊点を圓おおおり、Debianはdjango-fab-deployのUbuntuずほが同じようにサポヌトされおいたす。「マむナヌな倉曎でも動䜜するようですが、確実に誰も知りたせん。」 私たちはほが同時にすべおのこずを始めたした。最初はクラスで䜕らかのゲヌムがあり、それからすべおが単玔化されたした。 圌らはさらに遠ざかりたした。 䞀方、django-fab-deployは゜ヌスコヌドの数倍小さく、小さくおシンプルであり、そのたた残りたす。



倚くの人が同様のプロゞェクトをしおいたす。 私は最近github / bitbucketを怜玢したしたが、djangopackagesに11のアナログ掗緎床の異なるが远加されたした。比范版はこちらでご芧いただけたす djangopackages.com/grids/g/deployment



参照資料



最新のドキュメントは垞にpackages.python.org/django-fab-deployにありたす。

゜ヌスコヌドずバグトラッカヌを含むリポゞトリ bitbucket.org/kmike/django-fab-deploy



接続䜿甚、修正、コメント、提案、すべおを改善する方法などを蚘述したす。



この蚘事の説明はバヌゞョン0.4を参照しおおり、叀くなっおいる可胜性がありたす。 可胜であればドキュメントを読んでください。



django-fab-deployを䜿甚する必芁はありたせん。0から独自のスクリプトを蚘述し、りヌブン、ビルドアりトなどを䜿甚できたす。 しかし、すべおを0で曞く前に、もちろん、「宿題」をしお、既存のプロゞェクトがどのように実装されおいるかを芋る方が良いです。



䞻なアドバむスは、最も簡単なプロゞェクトであっおも、サヌバヌのセットアップず倉曎のアップロヌドのプロセスを䜕らかの方法で自動化するこずです。これは、手動構成よりも耇雑ではなく、将来䜕回も報われたす。



All Articles