|
|
|
|
---
|
|
|
|
|
layout: post
|
|
|
|
|
type: handbook
|
|
|
|
|
title: "PSISv2 Setup"
|
|
|
|
|
date: 2014-11-13
|
|
|
|
|
tags: admin setup
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## การติดตั้งระบบ PSIS v2
|
|
|
|
|
|
|
|
|
|
ระบบ __PSIS v2__ นั้นจะรองรับเครื่องแม่ข่ายที่สามารถใช้งาน `Python` และฐานข้อมูล `PostgreSQL` หรือ `MySQL` หรือ `Oracle` ได้ แต่อย่างไรก็ดีเครื่องแม่ข่ายที่แนะนำในการใช้งานกับ __PSIS v2__ นั้นจะเป็นระบบปฏิบัติการใดๆ ก็ตามที่ทำงานบน Linux kernel ไม่ว่าจะเป็น Debian, Ubuntu, CentOS, RedHat, Arch ตามแต่ความถนัดของผู้ปฏิบัติการ ซึ่งเอกสารนี้จะใช้ระบบปฏิบัติการ Ubuntu 12.04 เป็นตัวอย่าง
|
|
|
|
|
ความต้องการของระบบ __PSIS v2__
|
|
|
|
|
|
|
|
|
|
* Python 2.7.x หรือใหม่กว่า
|
|
|
|
|
* PostgreSQL 9 หรือใหม่กว่า
|
|
|
|
|
* nginx 1.0.0 หรือใหม่กว่า
|
|
|
|
|
|
|
|
|
|
## ขั้นตอนการติดตั้งระบบ PSIS v2
|
|
|
|
|
|
|
|
|
|
หลังจากติดตั้งระบบปฏิบัติการ Ubuntu 12.04 เรียบร้อยแล้ว จะต้องมีการติดตั้งโปรแกรมที่จำเป็นในการใช้งานของระบบ PSIS v2 ดังนี้
|
|
|
|
|
ติดตั้งความพร้อมของระบบที่ต้องใช้เพิ่มเติมจากระบบปฏิบัติการ
|
|
|
|
|
|
|
|
|
|
# apt-get update
|
|
|
|
|
# apt-get install postgresql mongodb nginx python python-pip git mercurial nodejs npm mysql-client
|
|
|
|
|
# npm install -g bower
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## ติดตั้งส่วนของ PSIS v2
|
|
|
|
|
|
|
|
|
|
การติดตั้งส่วนนี้จะไม่มีหลักเกณฑ์ที่แน่นอนในการติดตั้ง แต่เอกสารนี้จะสิ่งที่เกี่ยวข้องกับโปรแกรมทั้งหมดใน `/opt/` เพื่อความสะดวกในการอธิบาย ซึ่งจะสามารถเปลี่ยนแปลงได้ตามความเหมาะสม
|
|
|
|
|
|
|
|
|
|
# mkdir -p /opt/psis-v2/
|
|
|
|
|
# cd /opt/psis-v2
|
|
|
|
|
|
|
|
|
|
ทำการคัดลอกไฟล์มายังไดเรกทอรี่นี้
|
|
|
|
|
|
|
|
|
|
# bzip2 -d psis-v2-app.bz2
|
|
|
|
|
|
|
|
|
|
จะได้ไดเรกทอรี่ `/opt/psis-v2/app/` เพิ่มขึ้นมาซึ่งเป็นส่วนของโปรแกรมนั้น จากนั้นจะต้องทำการสร้างไดเรกทอรี่แยกเพื่อให้เป็น root ของ `nginx` เพ่ื่อความปลอดภัยของไฟล์โปรแกรมหลัก
|
|
|
|
|
|
|
|
|
|
# mkdir -p /opt/psis-v2/static/
|
|
|
|
|
# ln -s /opt/psis-v2/app/static /opt/psis-v2/static
|
|
|
|
|
|
|
|
|
|
สร้างไดเรกทอรี่สำหรับเก็บ log
|
|
|
|
|
|
|
|
|
|
# mkdir -p /opt/psis-v2/log
|
|
|
|
|
|
|
|
|
|
จากนั้นจะต้องลง `virtualenv` และ `virtualenvwrapper` โดยใช้คำสั่ง
|
|
|
|
|
|
|
|
|
|
# pip install virtualenv virtualenvwrapper
|
|
|
|
|
|
|
|
|
|
หลังจากลงโปรแกรมที่จำเป็นต่อระบบ จะยังต้องลง library ที่ PSIS v2 ใช้งานด้วย
|
|
|
|
|
|
|
|
|
|
# apt-get build-dep python-mysqldb
|
|
|
|
|
# apt-get install graphviz libgraphviz-dev pkg-config
|
|
|
|
|
|
|
|
|
|
และ
|
|
|
|
|
|
|
|
|
|
$ cd /opt/psis-v2/
|
|
|
|
|
$ pip install -r requirements.txt
|
|
|
|
|
$ bower install
|
|
|
|
|
|
|
|
|
|
ถ้าไม่มี error อะไรก็จะเป็นการเสร็จสิ้นการติดตั้งเราสามารถทดสอบว่าใช้งานได้หรือไม่ด้วยคำสั่ง
|
|
|
|
|
|
|
|
|
|
$ ./manage.py runserver
|
|
|
|
|
|
|
|
|
|
เมื่อใช้งานได้แล้ว ก็สามารถปิดการทำสอบได้จาก ctrl+C
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### ติดตั้งส่วนของ nginx
|
|
|
|
|
|
|
|
|
|
หลังจากส่วนนี้ก็จะต้องทำการปรับแต่งค่าของ nginx เพื่อให้เป็น proxy server และ media server ของระบบ PSIS v2
|
|
|
|
|
|
|
|
|
|
# vim /etc/nginx/sites-available/psis
|
|
|
|
|
|
|
|
|
|
โดยมีข้อมูลดังนี้
|
|
|
|
|
|
|
|
|
|
server {
|
|
|
|
|
listen 80;
|
|
|
|
|
server_name psisapp.com psis.opec.go.th;
|
|
|
|
|
|
|
|
|
|
access_log /opt/psis-v2/log/nginx_access.log;
|
|
|
|
|
error_log /opt/psis-v2/log/nginx_error.log;
|
|
|
|
|
|
|
|
|
|
root /opt/psis-v2/static/;
|
|
|
|
|
location ~* \.html$ {
|
|
|
|
|
expires -1;
|
|
|
|
|
}
|
|
|
|
|
location ~* \.(css|js|gif|jpe?g|png)$ {
|
|
|
|
|
expires 168h;
|
|
|
|
|
add_header Pragma public;
|
|
|
|
|
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
|
|
|
|
|
}
|
|
|
|
|
location /media/ {
|
|
|
|
|
# if asset versioning is used
|
|
|
|
|
if ($query_string) {
|
|
|
|
|
expires max;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
location /static/ {
|
|
|
|
|
# if asset versioning is used
|
|
|
|
|
if ($query_string) {
|
|
|
|
|
expires max;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
location / {
|
|
|
|
|
proxy_pass_header Server;
|
|
|
|
|
proxy_set_header Host $http_host;
|
|
|
|
|
proxy_redirect off;
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
proxy_set_header X-Scheme $scheme;
|
|
|
|
|
proxy_connect_timeout 15;
|
|
|
|
|
proxy_read_timeout 45;
|
|
|
|
|
proxy_pass http://localhost:8000/;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
จากนั้นจะต้องสร้าง symbolic link ไปยัง `/etc/nginx/sites-enabled/` เพื่อให้ `nginx` ได้ทำงานตามที่เราต้องการ
|
|
|
|
|
|
|
|
|
|
# ln -s /etc/nginx/sites-available/psis /etc/nginx/sites-enabled/psis
|
|
|
|
|
|
|
|
|
|
จากนั้นเราสามารถตรวจสอบว่าไฟล์ที่เราทำนั้นมีความถูกต้องหรือไม่จาก
|
|
|
|
|
|
|
|
|
|
# service nginx configtest
|
|
|
|
|
|
|
|
|
|
เมื่อตรวจสอบแล้วไม่พบข้อผิดพลาดใดๆ จะขึ้นว่า `Testing nginx configuration: nginx.` และจากนั้นก็สามารถทดสอบได้จากคำสั่ง
|
|
|
|
|
|
|
|
|
|
# service nginx reload
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### ติดตั้งส่วนฐานข้อมูล
|
|
|
|
|
|
|
|
|
|
ระบบ PSIS v2 นั้นจะใช้ฐานข้อมูล 2 ชนิดด้วยกันคือ
|
|
|
|
|
|
|
|
|
|
PostgreSQL ซึ่งจะเป็นฐานข้อมูลหลักสำหรับข้อมูลปัจจุบันทั้งหมด
|
|
|
|
|
MongoDB ใช้สำหรับเก็บข้อมูลที่ได้ประมวลผลแล้ว
|
|
|
|
|
|
|
|
|
|
__PostgreSQL__
|
|
|
|
|
|
|
|
|
|
หลังจากติดตั้งไปแล้วในส่วนติดตั้งเพื่อความพร้อมของระบบปฏิบัติการ การเปิดใช้งานก็จะใช้คำสั่งง่ายๆ คือ
|
|
|
|
|
|
|
|
|
|
# service postgresql start
|
|
|
|
|
|
|
|
|
|
__MongoDB__
|
|
|
|
|
|
|
|
|
|
หลังจากติดตั้งไปแล้วในส่วนติดตั้งเพื่อความพร้อมของระบบปฏิบัติการ การเปิดใช้งานก็จะใช้คำสั่งง่ายๆ คือ
|
|
|
|
|
|
|
|
|
|
# service mongodb start
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### ติดตั้งส่วน upstart
|
|
|
|
|
|
|
|
|
|
ในส่วนนี้จะเป็นส่วนที่ทำให้เราสามารถเปิดปิดการทำงานของระบบ PSIS v2 ได้โดยคำสั่งง่ายๆ ดังนี้
|
|
|
|
|
|
|
|
|
|
# start psis_app
|
|
|
|
|
# stop psis_app
|
|
|
|
|
|
|
|
|
|
ส่วนที่เกี่ยวข้องสำหรับ `upstart` นั้นจะมี 2 ส่วน คือ script สำหรับเรียก `gnuicorn` และ `upstart` script ของระบบปฏิบัติการในไดเรกทอรี่ /etc/init/
|
|
|
|
|
|
|
|
|
|
ส่วนแรก คือ ส่วนไฟล์สคริปสำหรับ `gunicorn` คือ แอปพริเคชันสำหรับเรียกใช้งาน `wsgi` โดยสร้าง bash script ดังนี้
|
|
|
|
|
|
|
|
|
|
# vim /opt/psis-v2/run_app.sh
|
|
|
|
|
|
|
|
|
|
โดยจะมีรายละเอียดดังนี้
|
|
|
|
|
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
set -e
|
|
|
|
|
LOGFILE=gunicorn_django.log
|
|
|
|
|
LOGDIR=$(dirname $LOGFILE)
|
|
|
|
|
NUM_WORKERS=3 #recommended formula here is 1 + 2 * NUM_CORES
|
|
|
|
|
|
|
|
|
|
VENV_DIR=/home/psisapp/.virtualenvs/psis
|
|
|
|
|
DJANGO_DIR=/opt/psis-v2/app
|
|
|
|
|
#we don't want to run this as root..
|
|
|
|
|
USER=psisapp
|
|
|
|
|
GROUP=psisapp
|
|
|
|
|
|
|
|
|
|
cd $DJANGO_DIR
|
|
|
|
|
source $VENV_DIR/bin/activate
|
|
|
|
|
test -d $LOGDIR || mkdir -p $LOGDIR
|
|
|
|
|
|
|
|
|
|
#exec gunicorn_django -w $NUM_WORKERS -b 0.0.0.0:8000
|
|
|
|
|
exec gunicorn core.wsgi:application -w $NUM_WORKERS -b 0.0.0.0:8000
|
|
|
|
|
--log-level=debug
|
|
|
|
|
--log-file=$LOGFILE 2>>$LOGFILE
|
|
|
|
|
--user=$USER --group=$GROUP
|
|
|
|
|
|
|
|
|
|
ในส่วนของไฟล์ `upstart` จะต้องสร้างไฟล์ `psis_app.conf`
|
|
|
|
|
|
|
|
|
|
# vim /etc/init/psis_app.conf
|
|
|
|
|
|
|
|
|
|
โดยจะมีรายละเอียดเป็นดังนี้
|
|
|
|
|
|
|
|
|
|
description "PSIS v2 Application"
|
|
|
|
|
start on runlevel [2345]
|
|
|
|
|
stop on runlevel [06]
|
|
|
|
|
respawn
|
|
|
|
|
respawn limit 10 5
|
|
|
|
|
exec /opt/psis-v2/run_app.sh
|
|
|
|
|
|
|
|
|
|
ข้างต้นจะเป็นวิธีทั้งหมดในการติดตั้งระบบ PSIS v2 เพื่อให้ใช้งานได้จากคำสั่ง 2 คำสั่งง่ายๆ
|
|
|
|
|
|
|
|
|
|
$ sudo start psis_app
|
|
|
|
|
$ sudo stop psis_app
|
|
|
|
|
|
|
|
|
|
ซึ่งในการใช้งานจริงอาจจะใช้ `crontab` โดย root เพื่อทำให้ระบบ PSIS v2 ทำงานได้อัตโนมัติ เช่น
|
|
|
|
|
|
|
|
|
|
@reboot start psis_app
|