conohaのvps上にdjangoアプリを展開するのにかなり時間がかかったので手順をメモしておきます。
自分の環境
- Conohaでレンタルしたvpsのサーバー:Ubuntu 18.04
- ウェブサーバー:Apache2
- Django:2.1.7
手順
VPS借りる
Conoha Vpsで借りました。
月690円から使えるのでとりあえず始めてみたい人にはおすすめです。
下にconoha vpsのリンクを貼っておきます。
vpsの基本的な作業
sshでrootログイン
ssh root@xxx.xxx.xxx.xxx
ユーザーの追加
adduser testuser
rootログインの禁止と、SSHログインの設定
/etc/ssh/sshd_configの編集
PermitRootLogin no RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
sshの再起動
sudo service sshd restart
ssh 鍵の作成
$ cd ~/ $ mkdir .ssh $ chmod 700 .ssh $ cd .ssh $ ssh-keygen -t rsa -b 2048 名前とパスフレーズを設定。ここでは、ファイル名をconohaにする $ mv conoha.pub authorized_keys $ chmod 600 authorized_keys $ cat conoha 出力をコピー
以下、ローカルでの作業
$ cd ~/.ssh $ vim conoha # さっきコピーしたものを貼り付け $ chmod 600 conoha
.ssh/ssh_configに
#ConoHa Host conoha HostName xxx.xxx.xxx.xxx User testuser Port 22 IdentityFile ~/.ssh/conoha
再ログイン
ssh conoha
プロジェクトのclone
djangoプロジェクト名sampleをcloneしておきます。
pip install -r requirements.txt python manage.py migrate #DB定義更新 python manage.py collectstatic #静的ファイル収集 python manage.py createsuperuser #管理ユーザー作成
権限の設定
$ chmod +x /home/testuser $ chmod +x /home/testuser/sample $ chmod +x /home/testuser/sample/sample
pythonやwsgi, apacheをいれる
まずは
sudo apt-get update sudo apt-get install -y python3-pip apache2 apache2-dev libapache2-mod-wsgi-py3 sudo apt-get install python-virtualenv virtualenv -p python3.6 venv
次に、mod_wsgiをインストールします。
ちなみに、
wsgi(Web Server Gateway Interface)はPythonとWebサーバとWebアプリケーションをつなぐためのインタフェース定義です。
mod_wsgiはApache上でPythonのアプリケーションを動かすためのモジュール。
以下のコマンドでインストールします。
pip install mod-wsgi pip install mod-wsgi-httpd
apacheとmod-wsgiの設定
mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.soファイルを探します。
以下のコマンド等で見つけてみてください。コピーする
find -name 'mod_*.so' #=> /home/testuser/sample/venv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so sudo cp /home/testuser/sample/venv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36-x86_64-linux-gnu.so /usr/lib/apache2/modules/mod_wsgi.so
wsgi.pyに記述
以下のように追記します。
import sys sys.path.append(os.path.dirname(os.path.abspath(__file__))) sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
apacheの設定
/etc/apache2/sites-available/django.conf を作って以下のように記述します。
<VirtualHost *:80>
ServerName xxx.xxx.xxx.xxx
ServerAdmin root@localhost
WSGIDaemonProcess sample python-path=/home/testuser/sample:/home/testuser/sample/venv/lib/python3.6/site-packages
WSGIProcessGroup sample
WSGIScriptAlias / /home/testuser/sample/sample/wsgi.py
WSGIApplicationGroup %{GLOBAL}
<Directory /home/testuser/sample/sample>
<Files wsgi.py>
<IfVersion < 2.3 >
Order allow,deny
Allow from all
</IfVersion>
<IfVersion >= 2.3>
Require all granted
</IfVersion>
</Files>
</Directory>
ErrorLog /var/log/apache2/django-error.log
LogLevel warn
CustomLog /var/log/apache2/django-access.log combined
</VirtualHost>
apache2の再起動
sudo a2ensite django
sudo service apache2 restart
で、urlにアクセスすればアクセスできます。
用語とメモ
- ApacheのVirtualHostは1台のマシン上で複数のウェブサイトを扱う運用方法のことを言う
- DaemonProcessは主にバックグラウンド上で動作するプログラムのこと
- WSGIProcessGroupはwsgiアプリケーションが属するプロセスグループ
- WSGIScriptAlias:wsgi.pyのPath
- apatchのログの場所 /var/log/apache2/access.log
参考文献
- https://modwsgi.readthedocs.io/en/develop/index.html
- https://qiita.com/jqtype/items/e394fb9e027892e9a2a4