投稿日: | 最終更新日:
VagrantでCentOS7 + Python + Django環境を作る(Apache編 その1)
Vagrantを使い、CentOS7にPython3.6をインストールします。webアプリケーションとしてApacheを利用してプログラムを動かします。
ApacheでPythonを動かすには?
Apache上にPythonベースのWebアプリケーションをホスティングするためには、WSGIが必要になります。
WSGIとは?
WSGI(ウィズギー)とは「Web Server Gateway Interface」の略です。PythonはApacheなどのWebサーバと、FlaskやDjangoで作成したWebアプリケーションを接続するための、標準化されたインターフェースとしてWSGIを利用します。PythonのWebアプリケーションライブラリにはそれぞれWSGIに対応する方法があり、それを使うとApacheやNginxなどWebサーバと結合して動作させることができます。
準備
Vagrantでゲスト環境(仮想環境)を作ります。ゲスト環境の中にDjangoを構築します。その前に、以下の作業を終わらせましょう。
①Virtualboxをインストールします。Virtualboxのインストールまでで結構です。
→VirtualBoxをインストールする for Ubuntu
②Vagrantをインストールします。centos7環境を作りますので、Vagrantのインストールのみ済ませてください。
→Vagrantをインストールしてテスト環境を作る for Ubuntu
ホスト環境
OS | Ubuntu 16.04.1 LTS 64bit |
---|---|
Virtualbox | 5.1 |
Vagrant | 1.9.5 |
ゲスト環境
OS | CentOS 7.1.1503 |
---|---|
Python | 3.6.1 |
pip | 9.0.1 |
Webサーバ | Apache/2.4.6 (CentOS) |
mod_wsgi | 4.5.17 |
Vagrantへログイン
①【ホスト環境】端末を開き、前回構築したVagrantのディレクトリまで移動します。
cd vagrant/django_apps/
②【ホスト環境】仮想マシンを起動します。
vagrant up
③【ホスト環境】ログインします。
vagrant ssh
必要なパッケージの追加
まっさらな状態のvagrant環境から始めます。
①パッケージをアップデートします。
sudo yum update -y
②作業が面倒なので、ルートでログインしておきます。
sudo su
③依存ライブラリーをインストールします。
yum groupinstall -y "Development tools" yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
Development tools | makeやgccなど様々な開発環境を整えます。 |
---|---|
openssl-devel | pipが使えなかったり、Ignoring ensurepip failure: pip…等と出る場合に備えてインストールします。 |
sqlite-devel | No module named ‘_sqlite3’ 等が出たらいやなので、インストールします。 |
Apacheのインストール
①apacheをインストールします。
yum -y install httpd
②DSOという動的リンクを利用したモジュールのビルドに「httpd-devel」が必要ですのでインストールします。
yum -y install httpd-devel
インストール: httpd.x86_64 0:2.4.6-45.el7.centos.4 httpd-devel.x86_64 0:2.4.6-45.el7.centos.4
③仮想環境のため、ファイヤーウォールを停止させておきます。
systemctl stop firewalld systemctl disable firewalld
Python3.6のインストール
①Python3.6をソースコードからコンパイルしてインストールします。
cd /usr/local/src wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz cd Python-3.6.1 ./configure --enable-shared --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib" make make altinstall
configureで使っている「–enable-shared」は、mod_wsgiを作成するために必要です。詳細はLinuxでPythonをビルドするときの–enable-sharedオプションについてを参照してください。
②動作確認します。動けばOKです。
python3.6 pip3.6
mod_wsgiのインストールしてapache起動
①mod_wsgiをインストールします。
pip3.6 install mod_wsgi
※「yum install mod_wsgi」でもインストールできますが、Pythonのバージョンが古い(2系)ので、pip経由で導入します。
②インストールが完了したら、Python3.6.1のインストール先を見つけます。
python3.6 -c "import sys; print(sys.path)" ['', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']
「/usr/local/lib/python3.6/site-packages」にあることがわかります.
③次は、mod_wsgiモジュールがあるか確認します。
ls -la /usr/local/lib/python3.6/site-packages/mod_wsgi/server -rw-r--r-- 1 root root 1558 Jul 28 01:31 apxs_config.py -rw-r--r-- 1 root root 3563 Mar 31 2016 environ.py -rw-r--r-- 1 root root 128131 Jul 7 09:57 __init__.py drwxr-xr-x 4 root root 57 Jul 28 01:32 management -rwxr-xr-x 1 root root 932872 Jul 28 01:32 mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so drwxr-xr-x 2 root root 98 Jul 28 01:32 __pycache__
「/usr/local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so」にあることがわかりました。
④apacheファイル(wsgi.conf)を作成します。
vi /etc/httpd/conf.d/wsgi.conf
以下のような内容を記述します。
WSGIScriptAlias /test_wsgi /var/www/html/test_wsgi.py LoadModule wsgi_module /home/user/django/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
⑤apacheが参照している位置にテスト用のpythonスクリプトを作成します。内容は参照しているpythonのバージョンが表示されるようになっています。
vi /var/www/html/test_wsgi.py
以下のような内容を記述します。
import sys def application(environ,start_response): status = '200 OK' versions = sys.version_info output = str(versions).encode('utf-8') response_header = [('Content-type','text/plain'), ('Content-Length',str(len(output)))] start_response(status,response_header) return [output]
⑥apacheを再起動します。
systemctl restart httpd
⑦ホスト環境のブラウザから、以下のURLを入力します。vagrantのipアドレスは「192.168.33.15」とします。
http://192.168.33.15/test_wsgi
以下のように表示されます。
次回
次回は、Djangoアプリケーションをデプロイしたいと思います。
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1