FreeBSD 10.1でApache、mod_wsgi、およびMySQLを使用してDjangoサイトを実行する方法
序章
この記事では、人気のあるPythonフレームワークであるDjangoを使用してWebアプリケーションをデプロイする方法を説明します。 人気のあるWebフレームワークを使用して開発することの利点は、多くの反復作業が行われているため、サイトの構築に集中できることです。
開発者であるかどうかに関係なく、Dropletで実行しているもののコアは、大規模なオープンソースコミュニティの精査を受けており、大規模なセキュリティホールの影響を受けにくいはずです。
本質的に単純ではないことの1つは、これらのWebフレームワークを独自の開発環境またはテスト環境の外部で稼働させる方法を知っていることです。 この記事では、FreeBSD 10.1上で実行されている標準のApache、mod_wsgi、およびMySQLスタックを使用してそれを行う方法を示します。
目標
- DjangoサイトのPython仮想環境をインストールして構成します
- テスト用のサンプルDjangoサイトを作成して構成します
- シンプルで安全なMySQLサーバーを構成する
- Djangoサイトにサービスを提供する単純なApache仮想ホストを構成します
- 新しく作成されたサイトが正しく機能することをテストします
前提条件
このガイドを開始する前に、次のものが必要です。
- FreeBSD10.1ドロップレット
- ルートアカウントまたはこのチュートリアルに続くsudo権限を持つアカウントへのアクセス
- コマンドラインからテキストファイルを編集する方法に関する実用的な知識
- Bash シェル環境。このチュートリアルの後半でVirtualenvを使用するため、 FreeBSD10.1チュートリアルの開始方法のデフォルトシェルの変更セクションの指示に従ってください。 freebsd ユーザーのBashシェルを取得するには、ログアウトしてから再度ログインする必要がある場合があります。
ステップ1—Python仮想環境をインストールして構成する
まず最初に; 現在のパッケージが最新であることを確認してください。
- sudo pkg update && sudo pkg upgrade -y
次のコマンドを実行し、表示されるプロンプトに対して「はい」と言って、必要なすべてのパッケージをインストールします。 pkg
システムがすべての適切な依存関係を計算して選択するため、入力したものよりはるかに多くのものがインストールされていることに気付くでしょう。
- sudo pkg install bash ap24-mod_wsgi3 py27-virtualenv mysql56-server
間もなく使用するvirtualenv
コマンドは、FreeBSDのデフォルトユーザーtcsh
シェルではうまく機能しません。 代わりにbash
が必要です。 Linux環境から来ている場合は、自宅にいるように感じるでしょう。 前提条件でこれをまだ行っていない場合は、ここの指示に従ってください。
今Bashシェルを実行していますか?忘れずにログアウトして再度ログインしてください。 素晴らしい!
それでは、Python環境を始めましょう。
見つけやすくするために、このコマンドを発行してサイトのディレクトリを作成します。
- sudo mkdir -p /www/data/www.example.com
ユーザーアカウントに、新しいプロジェクトディレクトリで作業するためのアクセス権を付与します。 コマンドのwhoami
の部分は、現在のユーザー名を自動的に入力します。
- sudo chown -R `whoami` /www/data/www.example.com
新しく作成したディレクトリに移動します。
- cd /www/data/www.example.com
サイトごとまたはアプリケーションごとの仮想環境を使用すると、システム全体のレベルでインストールするのではなく、インストールするPythonパッケージとバージョンをカスタマイズできます。
次に、virtualenv
ユーティリティを使用してPython仮想環境を作成します。
- virtualenv venv
その環境をアクティブ化して、システム全体のレベルではなく、その環境にDjangoサイトの要件をインストールしていることを確認します。
- source venv/bin/activate
コマンドプロンプトの前に(venv)
が付いているのを見ると、適切な環境にいることがわかります。
すべてが正常に見える場合は、Pythonのツールが最新であることを確認してこの手順を完了してください。
- pip install -U setuptools pip
ステップ2—サンプルDjangoサイトを作成して構成する
これで、Djangoサイトの始まりを作成できます。 まず、サイトの実行に必要なPython要件をインストールします。 /www/data/www.example.com
ディレクトリと仮想環境にいることを確認してください。
- pip install django mysql-python
Pythonに対するDjangoとMySQLのサポートがインストールされたら、Djangoのdjango-admin
ユーティリティを使用してプロジェクトレイアウトを作成します。
- django-admin.py startproject mysite .
お気に入りのエディタを使用して、mysite/settings.py
ファイルを開きます。
- vi /www/data/www.example.com/mysite/settings.py
DATABASES
セクションを次のように変更します。 password
をより安全なものに交換してください。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mysite',
'USER': 'mysite',
'PASSWORD': 'password',
'HOST': '/tmp/mysql.sock',
}
変更を保存します。
ステップ3—シンプルで安全なMySQLサーバーを構成する
すでにMySQLをインストールしているので、構成する必要があります。
まず、ちょっとしたハウスキーピング。 /etc/rc.conf
ファイルを開いて編集します。
- sudo vi /etc/rc.conf
これらの2行をファイルの最後に追加します。 これにより、サーバーの起動時にMySQLとApacheが確実に起動します。
mysql_enable="YES"
apache24_enable="YES"
Apacheはまだ構成していませんが、両方の行を追加する方が簡単なので、後で忘れないでください。
MySQLサーバーインスタンスを起動します。
- sudo service mysql-server start
このコマンドを実行して、データベースサーバーを保護します。
- mysql_secure_installation
(ご自身の知識のために)すべてのプロンプトを読み、パスワードの選択を除くすべてにY
と答えてください。 パスワードプロンプトについては、 rootMySQLパスワードを安全なものに設定してください。
設定したパスワードを使用して、新しくて適度に安全なMySQLインスタンスにログインします。
- mysql -u root -p
このコマンドを実行して、mysiteというサンプルサイトデータベースを作成します。
- create database mysite character set utf8;
次に、このコマンドを使用して mysite データベースユーザーを作成し、作成したデータベースへのアクセス許可を付与します。 password
が以前にsettings.py
ファイルで設定したものと一致することを確認してください。 実際、必要に応じてデータベース名とユーザー名を変更することもできます。 作成するデータベースとユーザーがPython構成ファイルの設定と一致していることを確認してください。
- grant all privileges on mysite.* to 'mysite'@'localhost' identified by 'password';
エラーが表示されない場合は、次のようにMySQLシェルを終了できます。
- quit
データベースの準備ができたので、Django manage.py
ユーティリティを使用して、サンプルサイトの初期データをデータベースに入力します。 繰り返しますが、これはサイトのディレクトリ/www/data/www.example.com
から実行する必要があります。
- ./manage.py migrate
(オプション)ステップ4 —新しいDjangoアプリケーションをテストします
先に進む前に、サンプルのDjangoサイトが正常に機能していることを確認しましょう。
Django開発サーバーを起動し、Dropletのパブリックネットワークインターフェースでリッスンできるようにします。
- ./manage.py runserver 0.0.0.0:8000
DigitalOcean Dropletパネルで、Dropletの外部IPアドレスを見つけます。 次に、ブラウザでhttp://<your ip here>:8000
にアクセスします。 新しいDjangoインストールのデフォルトページが表示されます。
キーボードのCTRL+C
を押してDjango開発サーバーを終了することは、非常に重要です。これは、本番環境では使用されないためです。
セキュリティに関する注意
サイトを運営する際のセキュリティとベストプラクティスについて読むべきことがたくさんあります。 本番環境で実際に何かを実行するには、公開されているWebサーバーとデータベースサーバーを適切に保護する方法についてさらに読むことを強くお勧めします。
その公共サービスの発表が邪魔になったので、Djangoサイトにサービスを提供するようにApacheを構成する時が来ました。
ステップ5—Djangoサイト用にシンプルなApache仮想ホストを構成する
お気に入りのエディタを使用して、/usr/local/etc/apache24/Includes/httpd.conf
ファイルを作成および編集します。
- sudo vi /usr/local/etc/apache24/Includes/httpd.conf
次のすべての構成設定を追加して、仮想ホストを作成します。 以前に作成したディレクトリと一致するように、www.example.com
をWebサイト名に置き換えてください。
# Settings
ServerName mysite
## Default Overrides
ServerSignature Off
ServerTokens Prod
Timeout 30
## Virtual Hosts
<VirtualHost *:80>
WSGIDaemonProcess mysite python-path=/www/data/www.example.com:/www/data/www.example.com/venv/lib/python2.7/site-packages/
WSGIProcessGroup mysite
WSGIScriptAlias / /www/data/www.example.com/mysite/wsgi.py
<Directory /www/data/www.example.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
ここでは、Apacheにいくつかの適切なデフォルト構成オプションを設定するように指示し、Apacheのmod_wsgi
モジュールを使用してDjangoサイトを起動するPythonコードを見つける場所を示しています。 この記事には、Apache仮想ホストに関する詳細が記載されています。
ApacheWebサーバーを起動します。
- sudo service apache24 restart
サンプルDjangoサイトのテスト
これで、ブラウザからhttp://your_server_ip
にアクセスして、デフォルトのDjangoページを表示できるようになります。 DNSを設定している場合は、ドメインを使用することもできます。
結論
ご覧のとおり、最も単純なWebサイトやアプリケーションでさえも展開するというトピックについて学ぶことがたくさんあります。 次のステップは、チュートリアルで使用したデモアプリケーションの代わりに、カスタムアプリケーションをデプロイすることです。
ご不明な点やご意見がございましたら、以下にご記入ください。
おすすめの読み物
次のリンクは、単純なDjangoサイトの構築とデプロイについて詳しく知るのに役立ちます。