django 1.7, python 3, centos 6.5 디플로이
마지막으로 yum 을 써본 것이 칠팔년은 된것같다. 이번 과제에서는 centos6.5 를 써달라는 요구사항이 있었다. 요즘 유행은 nginx 일텐데.. 이것도 apache 로 해보자.
장고나 플라스크의 디플로이에는 wsgi 가 많이 쓰이는 것 같다. 이게 module 로 제공되긴하지만, 그건 python2 얘기고. python3 가 되면 또 뭔가가 안맞는다.
검색에 걸린 stackoverflow 의 답변들은 별로 쓸모가 없었고,
http://novafactory.net/archives/3074 한글로 된 삽질기.
https://gist.github.com/jmorton/558f7079ed2159156277 도커 스크립트인
가 큰 도움이되었다. 아래는 사실 도커스크립트를 조금 수정한 정도에 불과. 어쨌든 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