Django
Apache
Ubuntu
Python3

UbuntuにApacheとPythonとDjangoを入れようとした話(1)。(失敗編)

環境

OS Windows10 64bit
CPU core i7 2600k
メモリ 16GB
GPU Quadro 400

のVMware上で動かしています。
OSはUbuntu 16.04 LTSです。
UbuntuはOSをインストールした直後の状態となっています。

まずはpythonのバージョンを確認してみます。

$ python -V
Python 2.7.12

Python2でもいいのですが将来的にPython3に移行することを考えると今のうちにpython3で環境開発を行っておきます。

pythonのコンパイルに必要なパッケージをインストール

$ sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

Pyenvのインストール

localのフォルダにインストールします。
ちなみに/bin・/sbin・/usrにインストールするのはパッケージ管理の対象で
/usr/local/以下にインストールするのはパッケージ管理の対象外となるものです。

/bin・/sbin・/usrには
ユーザーは直接インストールすることは無いです。

$ cd /usr/local/
$ sudo git clone git://github.com/yyuu/pyenv.git ./pyenv
$ sudo mkdir -p ./pyenv/versions ./pyenv/shims

Pyenv-virtualenvのインストール

$ cd /usr/local/pyenv/plugins/
$ sudo git clone git://github.com/yyuu/pyenv-virtualenv.git

Pathの設定

$ echo 'export PYENV_ROOT="/usr/local/pyenv"' | sudo tee -a /etc/profile.d/pyenv.sh
$ echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | sudo tee -a /etc/profile.d/pyenv.sh
$ source /etc/profile.d/pyenv.sh 
$ pyenv --version

pyenv --vesrionでversionを確認します。

ちなみに自分の環境では

pyenv 1.1.5-12-ga2d00cb

と表示されました。

anacondaのインストール

python3を使うためにanacondaをインストールします。

$pyenv install -l | grep anaconda
$pyenv install anaconda3-5.0.0
$pyenv rehash
$pyenv global anaconda3-5.0.0
$echo 'export PATH="$PYENV_ROOT/versions/anaconda3-5.0.0/bin/:$PATH"' >> ~/.bashrc
$source ~/.bashrc
$conda update conda

これでpython3が使えるようになったと思います

$python -V
Python 3.6.2 :: Anaconda, Inc.

と表示されるのを確認します。

Apacheのインストール

$sudo apt-get install apache2
$systemctl start apache2 

でFirefoxなりWebブラウザのアドレス欄に「localhost」
と入力して

Apache2 Ubuntu Default Page

が表示されれば成功です。
このままではapacheの設定はガバガバなので実際に運用する際はセキュリティの設定をお願いします。

mod_wsgiのインストール

mod_wsgiはapacheとpythonを繋ぐためのモジュールです。

$ sudo apt-get install -y libapache2-mod-wsgi-py3

Djangoのインストール

$ sudo pip install django

Djangoのアプリの作成

$mkdir /home/django
$cd /home/django
$django-admin startproject proj1

apacheとdjangoの結びつけ

/etc/apache2/sites-available/django.conf
を作成し

<VirtualHost *:80>
  WSGIDaemonProcess proj1 python-home=/usr python-path=/home/django/proj1
  WSGIScriptAlias / /home/django/proj1/proj1/wsgi.py process-group=proj1
  <Directory /home/django/proj1/proj1>
    <Files wsgi.py>
      Require all granted
    </Files>
  </Directory>
</VirtualHost>

を記載。環境のところは各自で置き換えて下さい。

その後、django.confを有効にするために

$sudo a2dissite 000-default
$ sudo a2ensite django

を実行します

$ systemctl restart apache2

トラブルシューティング

apacheを再起動して、はい終わりって書こうとしました。

localhostにアクセスすると
Internal Server Error
が....
こうなると真剣にめんどくさいです。

まずは

tail -f /var/log/apache2/error.log

でlocalhostに接続したときにapacheが吐いているエラーを確認します。

'/home/django/proj1/proj1/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=81137): Exception occurred processing WSGI script '/home/django/proj1/proj1/wsgi.py'.
[pid 81137:tid 139969182480128] [remote 127.0.0.1:19222] Traceback (most recent call last):
][wsgi:error] [pid 81137:tid 139969182480128] [remote 127.0.0.1:19222]   File "/home/django/proj1/proj1/wsgi.py", line 12, in <module>
 [wsgi:error] [pid 81137:tid 139969182480128] [remote 127.0.0.1:19222]     from django.core.wsgi import get_wsgi_application
[wsgi:error] [pid 81137:tid 139969182480128] [remote 127.0.0.1:19222] ImportError: No module named 'django'

最後の1文気になります。djangoが見つからないらしい。

現在思ってること。
mod_wsgiがインストール時にapt-getを使ってシステム組み込みのpython2系と結びついてしまった?
→pip install mod_wsgiを試す。
→何故かインストール失敗。

apache2-devをインストールし忘れてる?
現在原因解明中。再インストールわんちゃん。

この方法だとうまく行かなかったので別の方法で試してみました。