--- 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