django 1.7, python 3, centos 6.5 디플로이

마지막으로 yum 을 써본 것이 칠팔년은 된것같다. 이번 과제에서는 centos6.5 를 써달라는 요구사항이 있었다. 요즘 유행은 nginx 일텐데.. 이것도 apache 로 해보자.

장고나 플라스크의 디플로이에는 wsgi 가 많이 쓰이는 것 같다. 이게 module 로 제공되긴하지만, 그건 python2 얘기고. python3 가 되면 또 뭔가가 안맞는다.

검색에 걸린 stackoverflow 의 답변들은 별로 쓸모가 없었고,

가 큰 도움이되었다. 아래는 사실 도커스크립트를 조금 수정한 정도에 불과. 어쨌든 DigitalOcean 에 CentOS 6.5 를 설치하고, 그대로 따라하면 장고가 동작한다.

작업내역

# Cent OS 6.5에서 apache+python3+django1.7 셋업을 하려다가... 이틀 소비함
# CentOS 6.5 x64 을 기준으로 함.
# 참고 : http://novafactory.net/archives/3074
# 참고 : jmorton/Dockerfile (사실 이거가 답이었슴. )

# Apache
yum install -y httpd httpd-devel
chkconfig httpd on
apachectl start

# Dependencies
yum groupinstall -y "Development tools"
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline
yum install -y tar

# Python 3.4.2
cd /usr/local/src
curl -O https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
tar -xvzf Python-3.4.2.tgz
cd /usr/local/src/Python-3.4.2
./configure --enable-shared --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib"
make
make altinstall

# mod_wsgi python package
pip3.4 install mod_wsgi
mod_wsgi-express install-module

# /etc/httpd/conf/httpd.conf 수정.
# 여기서부터는 기분상 일반유저로
adduser deploy

# /etc/sudoers
# secure_path 에 /usr/local/bin
# user 에 deploy 추가 (나는 모든 권한을 다주는데... 그건 알아서하시길)
su - deploy
ssh-keygen -t rsa -C "yourmail@for_github"
cat ~/.ssh/id_rsa.pub # 결과를 github.com 에 등록
sudo easy_install-3.4 pip
sudo pip3.4 install virtualenv

# 프로젝트용 virtualenv

cd /opt/
sudo mkdir /opt/venv
sudo chown deploy.deploy venv/
virtualenv-3.4 venv --no-site-packages
source venv/bin/activate

# 프로젝트 설치
sudo mkdir projectname
sudo chown deploy.deploy projectname
git clone git@github.com:username/projectname
cd /opt/projectname
pip install -r requirements.txt

# sudo yum install python-devel postgresql-devel (psycog2 가 안될때)

# 시동
./manage.py collectstatic
./manage.py migrate
sudo apachectl restart

/etc/httpd/conf/httpd.conf 는…

#virtualhost 밖에..
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi-py34.cpython-34m.so
WSGIPythonPath /opt/projectname:/opt/venv/lib/python3.4/site-packages

#virtualhost 안에..
WSGIScriptAlias / /opt/projectname/main/wsgi.py
WSGIScriptReloading On