ConohaでDjango2.0 と Apache, MySQLの環境を整える

locale の設定をきちんとしておくこと

https://qiita.com/mathayuki/items/1ec220b7b63601a914d2

apacheとdjangoの環境

【Django】Apacheとmod_wsgi環境でDjango2を使う方法を解説 – CentOS7

centos7.4での初期設定

1
2
3
$ sudo yum update -y
$ sudo yum install -y yum-utils
$ sudo yum groupinstall -y development

centos7.4でのApache2.4のインストール

1
2
$ sudo yum install -y httpd httpd-devel
$ httpd -v

一旦、apacheの立ち上げと自動起動の設定をしておく

1
2
$ sudo systemctl start httpd.service
$ sudo systemctl enable httpd.service

起動確認

1
$ sudo systemctl status httpd.service

firewallの確認

1
2
$ sudo systemctl status firewalld.service
$ sudo firewall-cmd --list-all

※conohaのVPSで試してます
※default で 80port閉じられてるみたいです。

80番ポートをあける設定

1
2
3
$ sudo firewall-cmd --permanent --add-service=http --zone=public
$ sudo firewall-cmd --permanent --add-service=https --zone=public
$ sudo firewall-cmd --reload

確認 services に http, https が追加されてる

$ sudo firewall-cmd --list-all

python3 をインストールする

1
2
3
4
$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
$ sudo yum install -y python36u
$ sudo yum install -y python36u-pip
$ sudo yum install -y python36u-devel

python の version を確認する

1
2
3
4
[high5@instance-1 ~]$ python --version
Python 2.7.5
[high5@instance-1 ~]$ python3.6 --version
Python 3.6.4

venvによる仮想環境

1
注釈 pyvenv スクリプトは Python 3.6 で非推奨となり、代わりに python3 -m venv を使い、仮想環境を動かす Python インタープリタを取り違える可能性を防ぎやすくします。
1
2
3
4
5
6
$ sudo mkdir -p /var/www/environments
$ cd /var/www
$ sudo chown high5:high5 environments
$ cd environments
$ python3.6 -m venv myenv
$ source myenv/bin/activate

venv 環境においては pythonの versionが3.6 になる

django2.0のインストール

1
2
3
4
(myenv) [high5@1instance-1 environments]$ pip install django
(myenv) [high5@1instance-1 environments]$ django-admin startproject mysite
(myenv) [high5@1instance-1 environments]$ cd mysite
(myenv) [high5@1instance-1 mysite]$ python manage.py runserver 0.0.0.0:8000

ひとまず起動したらOK . CONTROL-C. で閉じましょう  

mod_wsgiをインストールしておく

下記の記事がwsgiの理解を深めさせてくれる
Django を Apache と mod_wsgi とともに使うには?

venv 環境下にてphpでmod_wsgiをインストールする

1
2
3
4
5
6
7
(myenv) [high5@instance-1 environments]$ pip install mod_wsgi
Collecting mod_wsgi
Downloading mod_wsgi-4.5.24.tar.gz (2.6MB)
100% |████████████████████████████████| 2.6MB 447kB/s
Installing collected packages: mod-wsgi
Running setup.py install for mod-wsgi ... done
Successfully installed mod-wsgi-4.5.24

deactivate で venv 環境を一旦抜ける

1
(high5) [high5@instance-1 ~]$ deactivate

apache の設定で読み込む「mod_wsgi」 モジュールがどこにあるか把握しておく

1
2
$ find /var/www/environments/myenv -name 'mod_*.so'
/var/www/environments/myenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

apacheのhttpd.confの設定

  1. module の読み込みの設定

    1
    2
    $ sudo vi /etc/httpd/conf.modules.d/mod_wsgi.conf
    LoadModule wsgi_module /var/www/environments/myenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
  2. Django、mod_wsgi 関連設定

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ sudo vi /etc/httpd/conf.d/django.conf
    # 各自のプロジェクトのパスに応じて適宜書き替えてください
    WSGIPythonHome /var/www/environments/myenv
    WSGIScriptAlias / /var/www/environments/mysite/mysite/wsgi.py
    WSGIPythonPath /var/www/environments/mysite:/var/www/environments/myenv/lib/python3.6/site-packages

    <Directory /var/www/environments/mysite/mysite>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>
  3. apacheを再起動した後にアクセスする

再起動してアクセスする前に djangoの設定ファイルで許可するホストを記述する必要がある

1
2
$ vi /var/www/environments/mysite/mysite/settings.py
ALLOWED_HOSTS = ['*']

※上記はどのhostでもアクセスできるようにする例

1
$ sudo systemctl restart httpd.service

maridadb が入っていたら消してしまおう

1
2
3
4
5
$ rpm -qa | grep maria
mariadb-libs-5.5.56-2.el7.x86_64

$ sudo yum remove mariadb-libs
$ sudo rm -rf /var/lib/mysql

mysql5.7 をinstall しよう

1
2
3
4
-- 公式リポジトリを追加
$ sudo rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
-- mysqlをインストール
$ sudo yum install --enablerepo=mysql57-community mysql-community-server

自動起動の設定

1
$ sudo systemctl enable mysqld.service

起動する

1
$ sudo systemctl start mysqld.service

temporary パスワードの確認

1
2
$ sudo grep 'temporary password' /var/log/mysqld.log
A temporary password is generated for root@localhost: ****

mysql 接続

1
$ mysql -u root -p

password 変更

とりあえず、manual 通り強いパスワードに変更

1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

好きなパスワードに変更したい場合は下記のようにすると変更できる
下記は最小 4 までにしてポリシーレベルを下げた例

1
2
3
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
mysql> SHOW VARIABLES LIKE 'validate_password%';

おすきなパスワードへ

1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '***';

database 作っとく

1
mysql> CREATE DATABASE django DEFAULT CHARACTER SET utf8;

django に mysql との接続情報を記述しておく

1
2
3
4
5
6
7
8
9
10
11
$ vi /var/www/environments/mysite/mysite/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',
'USER': 'root',
'PASSWORD': '****',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}

pythonからmysql に繋ぐのに必要な module の設定  

1
2
3
4
5
6
7
$ sudo yum install python-devel
$ sudo yum install mysql-community-devel
$ cd /var/www/environments
$ source myenv/bin/activate
(myenv) [high5@*** environments]$ pip install mysqlclient
$ deactivate
$ sudo systemctl restart httpd.service