【Apache2】Djangoのアプリをレンタルしたvpsサーバー上でとりあえず動かすまで【Wsgi】

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

参考文献

タイトルとURLをコピーしました