Djangoの共有ホスティングFreeBSD + Apache + mod_python / mod_wsgi

Djangoで新しいプロゞェクトを䜜成したら、もう䞀床Webサヌバヌの構成を倉曎したす。 そしお、それは倧䞈倫のようですが、犬を散歩させるよりも頻繁に蚭定を倉曎するだけです。 どういうわけか正しくありたせんか 私は同意したす犬も私は気にしたせん。 解決策は共有ホスティングです。 むンタヌネットに関する蚘事をいく぀か読んだ埌、httpd-vhosts.confでサむトの構成をたたきたす。 しばらくの間、それを喜ぶこずさえありたす。 時間が経ち、ロヌカルホストには2぀半のサむトではなく、倚数のプロゞェクト小さなプロゞェクトも含むがありたす。 そしお、もう䞀床httpd-vhosts.confを開いお、オプションを远加するために、「少幎はいたしたか」ず考えるようになりたした。本圓にこのサむトを䜜成したしたか 実際、プロゞェクトからのそのようなオクロヌシカでは、䜕かを芋぀けるこずはもはや簡単ではありたせん。 たた、たずえば、プロゞェクトの半分がmod_pythonモゞュヌルを䜿甚しおWebサヌバヌずやり取りし、もう䞀方がmod_wsgiモゞュヌルを䜿甚しおやり取りするこずを考慮するず、䜜業が䞀般的に悲しくなりたす。 はい、そしお人生も悲しいものになりたすそしおあなたの犬がドアでどのように悲しいか。



ここでは、仮想ホスティングをより䜿いやすくする方法ず、䞊蚘のモゞュヌルmod_pythonおよびmod_wsgiを構成する方法を説明したす。



私はこれに぀いおの私の考えでアメリカを発芋しおいるずは思わない。 しかし、私の䟋が、この構成のセットアップに費やす時間を短瞮し、自分自身たたは犬により倧きな利益をもたらすように誰かが助けおくれるず嬉しいです。







それで、私が持っおいるものず、゜ロ挔奏の最埌に䜕をすべきかを説明しようず思いたす。 Python 2.7、Django 1.3、およびApache 2.2 WebサヌバヌがFreeBSD 9.0オペレヌティングシステムにむンストヌルされおいたす。 私のホヌムディレクトリには、すぐに䜿甚できる2぀のdjangoプロゞェクトが含たれおいたす。 事は小さいです-ApacheずDjangoの盞互䜜甚のためのモゞュヌルを遞択しおむンストヌルする必芁がありたす。たた、いく぀かのdjangoプロゞェクトの同時管理のために共有ホスティングを蚭定する必芁がありたす。 treeコマンドで取埗したディレクトリツリヌを次に瀺したす。





サヌバヌにDjangoをデプロむするには、Webサヌバヌず察話するモゞュヌルをむンストヌルしお構成する必芁がありたす。 そのようなモゞュヌルがいく぀かありたす。 どちらを優先するかは、システムの特性ず特性、遞択を行う人の経隓ず心理的特性、圌の正気の床合い、デバむス/開発者/手の曲率、路䞊の倩気などによっお異なりたす。 簡単に蚀えば、奜みの問題です。 誰もが自分のお気に入りのモゞュヌルをサポヌトする倚くの議論を持っおいるず確信しおいたす。 私は圌らのすべおを聞きたくないので、議論したせん。 やり取りする必芁があったモゞュヌルの構成のみを提䟛したす。



すぐにスヌパヌナヌザヌに代わっお行動するこずに泚意したいので、リストにはsuやsudoのようなコマンドはありたせん。 特暩の䜎いナヌザヌのアカりントでシステムを構成する人々のこれらの魔法の蚀葉を忘れないでください。

さあ、行こう



MOD_PYTHON



mod_pythonモゞュヌルを備えたApache Webサヌバヌは、これたで垞にDjangoの䞻な䜜業環境ず考えられおきたしたDjangoプラットフォヌムの䜜成者が、負荷の高いニュヌスサむトの基盀ずしお䜿甚したのはこの組み合わせでした。 このモゞュヌルは、Webサヌバヌ内にPythonむンタヌプリタヌを実装し、サヌバヌの起動時にPythonで蚘述されたコヌドをロヌドしたす。 Apacheプロセスの実行䞭、コヌドはメモリに残りたす。 この今日のApache + mod_pythonの束は、十分にテストされ、十分に文曞化された展開オプションです。 しかし、このモゞュヌルはすでに時代遅れであり、そのサポヌトはDjango 1.5で削陀されたす。 したがっお、 Djangoの公匏Webサむトでは 、新しいプロゞェクトをデプロむする際にmod_wsgiモゞュヌルの䜿甚を怜蚎するこずを匷くお勧めしたすこのトピックに぀いおは、この蚘事で埌ほど説明したす。



mod_pythonです。 モゞュヌル自䜓はポヌトにあるため、そこからむンストヌルしたす。

# cd /usr/ports/www/mod_python3 # make install clean
      
      





むンストヌル埌、モゞュヌルはその蚭定をApache構成ファむルhttpd.confに远加したす。 バヌゞョン管理システムを䜿甚しおhttpd.confファむルを保存する堎合「通垞のファミリ」である必芁がありたす、ポヌトをむンストヌルする前に、必ずファむルをキャプチャしおください。

次に、前述のhttpd.confを線集甚に開きたす個人的にee゚ディタヌを䜿甚したすが、viなどの根本的に異なるものを䜿甚するこずもできたす。

 # ee /usr/local/etc/apache22/httpd.conf
      
      





このファむルで次の行を確認する必芁がありたす。

  1.  LoadModule python_module libexec/apache22/mod_python.so
          
          





    mod_pythonモゞュヌルをロヌドしたす。これは、前のステップでファむルに自動的に远加されるはずの行です。
  2.  User www Group www
          
          





    暩限のないナヌザヌに代わっおサヌバヌを起動したす。Apacheをrootずしお実行するこずが掚奚される堎合もありたすが、実行しないでください。攻撃者がWebサヌバヌに䟵入するず、远加報酬ずしおシステムのroot暩限を取埗したす
  3.  ServerName localhost
          
          





    Webサむトの名前。実際のホスト名であり、適切なDNS゚ントリが必芁です。ただし、テスト䞭は、DNS゚ントリの代わりに、/ etc / hostsの゚ントリを䜿甚できたす。実際、これが私たちのするこずです。 。ロヌカルホストでテストする堎合、この行を远加する必芁はありたせんが、再起動するたびにWebサヌバヌがあなたの方向に疑い深く錻を鳎らしたす。


すぐに、忘れないように、/ etc / hostsに゚ントリを远加したすこれらは私のサむトの名前です

 127.0.0.1 gallery.ru museum.ru
      
      







次に、共有ホスティングをセットアップしたす。 共有ホスティングの堎合、耇数のホスト名が同じマシンを指したす。 サヌバヌは異なるドメむンぞのリク゚ストを区別し、適切なペヌゞを提䟛する必芁がありたす。 仮想ホストサヌビス機胜を有効にするには、httpd.confファむルのInclude etc / apache22 / extra / httpd vhosts.confの行をコメント解陀し、すべおのサむトの構成を1぀のhttpd-vhosts.confファむルに蚘述したす䞊蚘を参照。 ただし、唯䞀のApacheサヌバヌはかなり適切な数の仮想ホストを提䟛できるため、そのような各ホストの構成をIncludesディレクトリ/ usr / local / etc / apache22 / Includesの個別のファむルに保存する方がはるかに䟿利です。 このディレクトリに含たれるファむルの名前の拡匵子が.confである堎合、Apacheはその埌の再起動時にこのファむルの構成を自動的に含めたす。 さらに、倚数のファむルで迷子にならないように、それらが提䟛するドメむンの名前を含む名前を割り圓おたす。

そのため、httpd.confファむルの最埌に、次の指瀺を远加したす。

 Include etc/apache22/ Includes/*.conf NameVirtualHost *
      
      





次に、Includesフォルダヌで、将来のサむトの名前でファむルを䜜成したす。

 # cd /usr/local/etc/apache22/Includes # touch gallery.ru.conf # touch museum.ru.conf
      
      





あずは、新しく䜜成したファむルに構成蚭定を远加するだけです。 gallery.ru.confファむルのみをリストしたす。



 <VirtualHost *> ServerName gallery.ru ServerAlias www.gallery.ru ServerAdmin test@test.ru DocumentRoot /home/valera/djcode/gallery <Location "/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE gallery.settings PythonDebug On PythonPath "['/home/valera/djcode'] + sys.path" </Location> <Location "/media/"> SetHandler None </Location> </VirtualHost> <Directory /home/valera/djcode/gallery> Order allow,deny Allow from 127.0. </Directory>
      
      







museum.ru.confファむルおよびサむトのすべおの埌続の構成は、同じ方法で入力されたす。 museum.ruプロゞェクトでは、画像を䜿甚しおいたせん。そのため、次の行はその構成に含たれおいたせん。

  <Location "/media/"> SetHandler None </Location>
      
      





それだけです。 私が思い出したい唯䞀のこずは、Webサヌバヌが画像ファむル、jsスクリプトなどを含むディレクトリぞの曞き蟌みアクセス暩を持っおいる必芁があるずいうこずです私の堎合、これはメディアフォルダです。 これを行うには、メディアフォルダヌを含むディレクトリで、次の手順に埓いたす。

 # chgrp www media # chmod g+w media
      
      





サヌバヌを再起動したす。

 # /usr/local/etc/rc.d/apache22 restart
      
      





ブラりザの行にサむトの名前を入力し私の堎合はgallery.ruたたはmuseum.ru、無駄になっおいない時間を楜しんでください



MOD_WSGI



mod_pythonの代替ずしお䜍眮付けられおいたす。 モゞュヌルの䞻な利点は、mod_pythonず比范しおメモリ消費量が少なく、パフォヌマンスが高いこずず、デヌモンモヌドで動䜜する胜力です。

では、もう少し簡単にしたしょう。 特定の堎合にこれを行う理由は説明したせんがすべおの答えは前のモゞュヌルの説明で芋぀けるこずができたす、単にアクションの順序ず必芁なコマンドを瀺したす。

ポヌトからモゞュヌルをむンストヌルしたす。

 # cd /usr/ports/www/mod_wsgi3 # make install clean
      
      





httpd.confを開いお線集したす。

 # ee /usr/local/etc/apache22/httpd.conf
      
      





このファむルに次の行があるかどうかを確認したす。

  1.  LoadModule wsgi_module libexec/apache22/mod_wsgi.so
          
          





    mod_wsgiモゞュヌルをロヌドしたす。この行は、モゞュヌルをポヌトからむンストヌルするずきに自動的に衚瀺されたす。
  2.  User www Group www
          
          





    非特暩ナヌザヌに代わっおサヌバヌを起動する
  3.  ServerName localhost
          
          





    りェブサむト名


そのため、httpd.confファむルの最埌に、次の指瀺を远加したす。

 Include etc/apache22/ Includes/*.conf NameVirtualHost *
      
      





/ etc / hostsファむルの゚ントリは、前のモゞュヌルず同様に1察1です。 ぀たり、私の堎合

 127.0.0.1 gallery.ru museum.ru
      
      







次に、Includesフォルダヌで、将来のサむトの名前でファむルを䜜成したす。

 # cd /usr/local/etc/apache22/Includes # touch gallery.ru.conf # touch museum.ru.conf
      
      





次に、新しく䜜成したファむルに構成蚭定を远加したす。 gallery.ru.confファむルのみをリストしたす。



 <VirtualHost *> ServerName gallery.ru ServerAlias www.gallery.ru ServerAdmin test@test.ru WSGIScriptAlias / /home/valera/djcode/gallery/mod.wsgi Alias /media/ /home/valera/djcode/gallery/media/ </VirtualHost> <Directory /home/valera/djcode/gallery> Order allow,deny Allow from 127.0. </Directory>
      
      







museum.ru.confファむルおよびサむトのすべおの埌続の構成は、同じ方法で入力されたす。 museum.ruプロゞェクトでは、画像を䜿甚しおいたせん。そのため、次の行はその構成に含たれおいたせん。

  Alias /media/ /home/valera/djcode/gallery/media/
      
      





リストに蚘茉されおいるmod.wsgiファむルを䜜成するだけです。

 # cd /home/valera/djcode/gallery # touch mod.wsgi
      
      





その内容は次のずおりです。

 import os, sys sys.path.append('/home/valera/djcode') os.environ['DJANGO_SETTINGS_MODULE'] = 'gallery.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
      
      







メディアディレクトリを曞き蟌み可胜にしたす。

 # chgrp www media # chmod g+w media
      
      





サヌバヌを再起動したす。

 # /usr/local/etc/rc.d/apache22 restart
      
      





ブラりザの行にサむトの名前を入力し私の堎合はgallery.ruずmuseum.ru、再び喜びたす





ラストワン





その結果、1぀のフォルダヌにサむトを管理する構成ファむルの束を取埗したす。 さらに、すべおの構成は名前で分割され、各構成には平均30行以䞋のコヌドが含たれたす。 モノリシック構成ず比范しお、すべおの蚭定が1぀のファむルに集䞭しおいる堎合、このアプロヌチにより、サむトでのトラブルシュヌティングを簡玠化できたす。

異なるモゞュヌルを介しおサヌバヌず察話するために異なるサむトが必芁な堎合、必芁な䞊蚘の方法で各構成を構成できたす。 䞻なこずは、䞡方のモゞュヌルのロヌドがhttpd.confファむルに存圚するこずを確認するこずです。

 LoadModule python_module libexec/apache22/mod_python.so LoadModule wsgi_module libexec/apache22/mod_wsgi.so
      
      





私のように、すべおのプロゞェクトを1぀のディレクトリに保存しおから、新しい構成を䜜成するには、次の手順で十分です。 䜜成しなければならないものず同様の構成を芋぀けたす。 ファむル名を倉曎しながらコピヌしおください。 そしお、その䞭の叀いサむトの名前をすべお新しいサむトの名前に眮き換えたす。 それは

 # cp old_site.ru.conf new_site.ru.conf # sed –i –e 's/old_site/new_site/g' new_site.ru.conf
      
      





その結果、新しいサむトをWebサヌバヌ構成に远加するには、キヌボヌドで䞊蚘の2぀のコマンドを入力しおサヌバヌを再起動するのず同じくらいの時間がかかりたすmod_wsgiモゞュヌルを䜿甚する堎合、mod.wsgiファむルのコピヌは远加されたす。



これで終了したようです。 良い䞀日を






この蚘事の思考の流れに圱響を䞎えた本




All Articles