私はDjango
でプログラミング言語の
百科事典をしています 。これについては、すでに
Habréで書いてい
ます 。 サイトの作業中に、パフォーマンスと安定性を高めるには専用のサーバーが必要であることがわかりました。 これまでのところ、1.8 GHzプロセッサと512 MBのメモリを搭載した安価なサーバーを使用しました。
この記事では、Apacheのmod_pythonとmemcachedおよび静的ファイルのlighttpdキャッシュを使用して、このサーバーにDjangoをインストールおよび構成する方法について説明します。
そのため、CentOS 5を新たにインストールし、Django(または複数のサイト)でサイトをホストしたいと考えています。
このために何をインストールする必要がありますか?
- 実際にジャンゴ
- MySQL Python
- mod_python
- memcached
- lighttpd
Django自体のインストールを除くすべてのステップはオプションです(たとえば、mod_pythonおよびPostgreSQLの代わりにfcgiでDjangoを使用するか、MySQLの代わりに別のDBMSを使用できます)が、ステップ1から3が最もよく使用され、4から5は生産性を向上させます。
この記事は主にCentOS向けですが、ある程度は他のLinuxディストリビューションにも適しています。
セキュリティに関する注意:これは新しくインストールされたシステムであるため、既に動作しているものを壊すことを恐れず、rootとして作業できます。 ただし、もちろん、特権のないユーザーの権限で作業し、管理者特権を必要とするコマンドには「sudo」を使用する方が良いでしょう。
さあ、始めましょう。
実際にジャンゴほとんどの場合、「リリース」ではなく、Djangoの最新のsvnバージョンをインストールする必要があります。 これまでのところ、「公式リリース」は古すぎて、多くの便利な機能が欠けています(たとえば、Unicodeや自動エスケープのサポート)。
インストールするには、コマンドラインを入力します
svn co http://code.djangoproject.com/svn/django/trunk/ django-trunk
しかし、最初にsvnをインストールする必要があります
yum install subversion
svnですべてのファイルを受け取った後、Pythonのsite-packagesディレクトリにDjangoへのシンボリックリンクを作成する必要があります。
ln -s `pwd` / django-trunk / django /usr/lib/python2.4/site-packages/django
djangoディレクトリー内のすべての親ディレクトリーに正しい許可(httpdユーザーの読み取りアクセス、通常はchmod 755)があることを確認してください。
また、svnを使用したDjangoのインストールについては、
公式のDjangoドキュメントで説明されています 。
Djangoをインストールした後、プロジェクトのファイルをサーバーにコピーする必要があります(svnまたはsshまたはftpを使用してコピーします。これらのファイルの所有者となるシステムに別のユーザーを作成することも価値があります)およびデータベースダンプを設定ファイルのデータベース関連の設定を調整します.py(MySQLが既にインストールおよび設定され、データベースとユーザーが作成され、すべてのデータが配置されていることを意味します-これらはこの記事の範囲をはるかに超えています)。
プロジェクトディレクトリからDjango開発サーバーを起動してみてください
python manage.py runserver 127.0.0.1:8000
CentOS 5では、「MySQLdbモジュールの読み込みエラー」というエラーメッセージが表示されます。
CentOSディストリビューションのMySQL-pythonのバージョンは古すぎてDjangoの最新のsvnバージョンを実行できないため、ソースからビルドする必要があります。
MySQL Python cd / usr / local / src
wget http://garr.dl.sourceforge.net/sourceforge/mysql-python/MySQL-python-1.2.2.tar.gz
tar xvzf MySQL-python-1.2.2.tar.gz
cd MySQL-python-1.2.2
MySQL-pythonをビルドするには、gcc、python-devel、およびmysql-develパッケージが必要です。
yum install gcc
yum install python-devel
yum install mysql-devel
cd /usr/local/src/MySQL-python-1.2.2
python setup.pyビルド
python setup.pyインストール
完了、MySQL-pythonは.eggファイルとしてsite-packagesディレクトリにインストールされます。
python manage.py runserver 127.0.0.1:8000を再度実行して、エラーを確認してください。 たとえば、プロジェクトでImageFieldを使用しているため、Python Imaging Libraryをインストールする必要があります(yum install python-imaging)。
エラーがない場合は、runserverコマンドの127.0.0.1をサーバーのIPアドレスに変更し、ブラウザーを使用してサイトを確認する必要がありますが、このためにはCentOSファイアウォールでポート8000を開くか、ファイアウォールを一時的にオフにする必要があります(または一時的にApacheをオフにしてDjangoを開始することができます)ポート80の開発サーバー)。
エラーがなければ、Django開発サーバーの電源を切り、Apacheを構成します。
mod_pythonDjangoで動作するようにmod_pythonでApacheを設定するのは簡単です。
公式のDjangoドキュメントの指示に従ってください。
注:MySQL-pythonはeggパッケージとしてインストールされるため、.eggをキャッシュするための一時ディレクトリを作成し(パーミッションを777に設定)、httpd.confでそれを指すことが重要です。
<場所「/」>
...
SetEnv PYTHON_EGG_CACHE / var / tmp / egg
</場所>
また、httpd.confを変更した後、Apacheを再起動することを忘れないでください。
/etc/init.d/httpd restart
これで、サイトは通常のhttpポートでApacheを介して動作するはずです。 ブラウザで確認してください。
memcachedmemcachedキャッシュを有効にすることは、パフォーマンスを向上させるために非常に重要です。 残念ながら、memcachedはCentOSリポジトリでは利用できないため、ソースからコンパイルする必要があります。 記事のこのセクションは、
このHOWTOに一部基づいています。
まず、libeventをインストールする必要があります。
cd / usr / local / src
wget http://monkey.org/~provos/libevent-1.4.2-rc.tar.gz
tar xvzf libevent-1.4.2-rc.tar.gz
cd libevent-1.4.2-rc
./configure
作る
インストールする
vi /etc/ld.so.conf.d/libevent.conf
##行を追加します:
/ usr / local / lib /
ldconfig -v
次に、memcached自体:
cd / usr / local / src
wget http://danga.com/memcached/dist/memcached-1.2.5.tar.gz
tar zxvf memcached-1.2.5.tar.gz
cd memcached-1.2.5
./configure
作る
インストールする
cpスクリプト/ memcached.sysv /etc/init.d/memcached
ln / usr / local / bin / memcached / usr / bin / memcached
/etc/init.d/memcached start
chkconfig memcached on
最後に、libmemcacheとcmemcache(libmemcacheのPython拡張機能)をインストールする必要があります。
cd / usr / local / src /
wget http://people.freebsd.org/~seanc/libmemcache/libmemcache-1.4.0.rc2.tar.bz2
bunzip2 libmemcache-1.4.0.rc2.tar.bz2
tar xf libmemcache-1.4.0.rc2.tar
cd libmemcache-1.4.0.rc2
./configure
作る
インストールする
cd / usr / local / src /
wget http://gijsbert.org/downloads/cmemcache/cmemcache-0.91.tar.bz2
bunzip2 cmemcache-0.91.tar.bz2
tar xf cmemcache-0.91.tar
cd cmemcache-0.91
python setup.pyインストール
プロジェクトのsettings.pyでmemcachedキャッシュを有効にします
CACHE_BACKEND = 'memcached://127.0.0.1:11211 /'
(詳細が必要な場合は、
公式のDjangoドキュメントを参照してください)、Apacheを再起動します。
さらにパフォーマンスを上げるには、Apacheを使用せず、リソースをあまり消費しないサーバーであるlighhtpdを静的ファイルに指定する必要があります。
lighttpd繰り返しますが、ソースからインストールします。
cd / usr / local / src
wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.bz2
bunzip2 lighttpd-1.4.19.tar.bz2
tar xf lighttpd-1.4.19.tar
cd lighttpd-1.4.19
yum install glib2-devel openssl-devel pcre-devel bzip2-devel gzip-devel
./configure
作る
インストールする
cp doc / rc.lighttpd.redhat /etc/init.d/lighttpd
chkconfig lighttpd on
mkdir / etc / lighttpd
cp doc / lighttpd.conf / etc / lighttpd /
ここで、静的ファイルが(ポート80で)lighttpdに渡され、残りの要求がポート81でApacheによって処理されるようにApacheとlighttpdを構成する必要があります(このソリューションの
nolancaudill.comに感謝します):
server.document-rootを「/ var / www / html /」に変更し、プロジェクトのメディアディレクトリを指すシンボリックリンク「/var/www/html/media.yourdomain.com/」を作成します。
そして最後に、いくつかのパフォーマンスのヒント: