ubuntu+apacheによるdjangoサーバー構築

ssh接続できるubuntu18.04にapacheを使ったdjango用のサーバ構築の備忘録です。

まず、システムをアップデートしておきます。

sudo apt update
sudo apt upgrade

次にpythonをインストールしたいと思いますが、すこし厄介なのはubuntu自体にはすでにpythonが入っており、

sudo apt install python3

とするとシステムデフォルトのpythonをアップデートすることになってしまいます。ubuntuの安定性が損なわれる可能性もあるので、システムのpythonは残したままにしたいですね。

色々確認したところ、

sudo apt install python3.8

とすれば、システムデフォルトのpythonとは別にインストールされる様ですのでこちらを使いましょう。

sudo apt install python3.8
sudo apt install python3.8-dev
sudo apt install python3.8-venv
sudo apt install python3.8-distutils

続いてapacheをインストールします。

sudo apt install apache2
sudo apt install apache2-dev

このままではpipがインストールされていないため、djangoなどをインストールするのが難しいです。。先にpipをインストールしましょう。インストールはbootstrapのファイルを使わせてもらいます。

wget https://bootstrap.pypa.io/get-pip.py
sudo python3.8 get-pip.py

以降は仮想環境で進めます。

python3.8 -m venv env
source env/bin/activate

仮想環境下でモジュールをインストールしていきます。

pip install wheel
pip install mod-wsgi
pip install django

apacheの設定に必要な情報を確認するために下記のコマンドを実行します。出力された設定値はメモしておきましょう。

mod_wsgi-express module-config

では続いて下記のコマンドでdjangoのプロジェクトを作成します。(ここではプロジェクト名をpjにしています。)

sudo python3.8 -m django startproject pj
または、(仮想環境下で)django-admin startproject pj

この状態で仮想環境下でプロジェクトフォルダに移動して下記のコマンドで開発用サーバを起動します。

python manage.py runserver 0.0.0.0:80

0.0.0.0:80を指定しない場合はサーバー自身からしか参照できない様です。外部からポート80でのアクセスが可能か確認したい場合は指定しましょう。

ちゃんとdjangoの画面が表示された場合はaliasでdjangoとseminarの二つのアプリを動かす場合の設定をしましょう。

まずは先ほどメモしたモジュールの場所の情報を最初の段落に貼り付けます。

続いて複数のdjangoアプリを同じサーバーで動かしたい場合はDeamonProcessの設定が必要です。下記の例ではdjango-testとdjango-semiの二つを規定し、それぞれのaliasでprocess-groupとして参照しています。

LoadModule wsgi_module "/home/ubuntu/django/env/lib/python3.8/site-packages/mod_wsgi/server/mod_wsgi-py38.cpython-38-x86_64-linux-gnu.so"

WSGIDaemonProcess django-test python-home=/home/ubuntu/django/env/ python-path=/home/ubuntu/django/pj/
WSGIProcessGroup django-test

WSGIDaemonProcess django-semi python-home=/home/ubuntu/django/env/ python-path=/home/ubuntu/django/seminar/
WSGIProcessGroup django-semi

<VirtualHost *:80>

WSGIScriptAlias /django /home/ubuntu/django/pj/pj/wsgi.py process-group=django-test

<Directory /home/ubuntu/django/pj/pj>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Alias /django/media/ /home/ubuntu/django/pj/media/
Alias /django/static/ /home/ubuntu/django/pj/static/

<Directory /home/ubuntu/django/pj/static>
Require all granted
</Directory>

<Directory /home/ubuntu/django/pj/media>
Require all granted
</Directory>

WSGIScriptAlias /seminar /home/ubuntu/django/seminar/config/wsgi.py process-group=django-semi

<Directory /home/ubuntu/django/seminar/config>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Alias /seminar/media/ /home/ubuntu/django/seminar/media/
Alias /seminar/static/ /home/ubuntu/django/seminar/static/

<Directory /home/ubuntu/django/seminar/static>
Require all granted
</Directory>

※もしアクセスできない場合はdjangoのsettings.pyのallowed hostの設定を確認してください。

ALLOWED_HOSTS = [‘your global ip address’,’127.0.0.1′]

直接アクセスの場合はサーバーのグローバルipやドメインが設定されている必要があります。サーバー自身からのアクセスや、リバースプロキシからのアクセスの場合はローカルアドレスを許可する必要があります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です