Overview
Webアプリケーションを作る必要が出てきたのでDjangoというのを使ってみることにした。
構築環境として指定された物は以下の通り
- CentOS7
- python 3.x
- django 1.10
- mysql
基本方針
- 可能な限りyum install (標準パッケージ)を使う
- 可能な限りOSデフォルトの挙動を変えない
- デフォルト動作が変わると他のコマンドに影響が出て基盤管理が面倒くさくなる
- 可能な限り自動化する
- ダルいから
方針に関するメモ
CentOS7のpythonは2.7がデフォルトなのでpython3.xは別インストールすると言うことになる。
また、djangoもyumパッケージは1.4だか1.6という化石のようなバージョンが標準なので
パッケージ名さえ同じであればいいでしょ、とはいかないので挫折してpipも使った
How to Install packages
Install git/ansible packages
基本、インストールはAnsible化しているのでインストールはAnsibleとして説明するが
Ansible自体が入っていないと話にならないので、以下の作業は必須。
# yum -y install epel-release
# yum -y install ansible git
Ansible play-books (roles/xxx/task/xxx.yml)
全てmain.ymlに記載しても良いが、メンテナンス性や可読性を考えると
別ファイルにしてIncludeした方が都合が良いことが多い。
Python3.4
- name: install packages from repo
yum:
name: "{{ item }}"
state: latest
with_items:
- python34
- python34-devel
- python34-setuptools
- python34-pip
- gcc
Apache
- name: yum install httpd
yum:
name: "{{ item }}"
state: latest
with_items:
- httpd
- httpd-devel
- mod_ssl
- mod_wsgi
tags:
- prod
become: yes
mariadb
- name: yum install mariadb
yum:
name: "{{ item }}"
state: latest
with_items:
- mariadb-server
- mariadb-devel
tags:
- prod
become: yes
Django
- name: install packages from pip3
easy_install:
name: "{{ item }}"
state: latest
executable: /usr/bin/pip3
with_items:
- django
- pymysql
- pip
tags:
- prod
become: yes
Settings
httpd.conf
python3.4を使っているので、パスを記載してやる必要がある。
WSGIScriptAlias / /var/www/django/project/mysite/mysite/wsgi.py
WSGIPythonPath /var/www/django/project/mysite:/usr/lib64/python3.4/site-packages
WSGIDaemonProcess mysite python-path=/var/www/django/project/mysite:/usr/lib64/python3.4/site-packages
WSGIProcessGroup mysite
django
setting.py, wsgi.py, manage.py に細工が必要なところだけ記載
manage.py
#!/usr/bin/env python3
import os
import sys
import pymysql
pymysql.install_as_MySQLdb()
setting.py
import os
import pymysql
pymysql.install_as_MySQLdb()
wsgi.py
import os
import pymysql
pymysql.install_as_MySQLdb()
Install
# ansible-playbook -i -vvv
基本的にはこれで最低限の動作はしてくれる。