all-in-one 6 (apache2+php5+mysql5+postgresql8)

Topic: 
 

apache2 + mysql5 + php5 + phpmyadmin

เตรียมสร้างไดเรกทอรี่ข้อมูลให้ apache2 และ mysql
อันนี้ลักไก่ ใช้คำสั่งเดียว แล้วสั่งหยุดบริการเลย
# aptitude install phpmyadmin mysql-server-5.0 php-apc
# /etc/init.d/apache2 stop
# /etc/init.d/mysql stop

ตัวคอนฟิกของ apache2 mysql และ php5 จะเอามาเก็บไว้ที่ /sys1/sysb
# mv /etc/apache2/ /sys1/sysb/etc/
# ln -sf /sys1/sysb/etc/apache2/ /etc
# mv /etc/mysql/ /sys1/sysb/etc/
# ln -sf /sys1/sysb/etc/mysql/ /etc
# mv /etc/php5 /sys1/sysb/etc/
# ln -sf /sys1/sysb/etc/php5 /etc

ตัวข้อมูล apache2 เอามาเก็บที่ /sys1/sysb
# mv /var/www /sys1/sysb/var/
# ln -sf /sys1/sysb/var/www /var

ตัวข้อมูลของ mysql ไม่สำรองแบบคัดลอกปกติ จึงเอามาเก็บไว้ที่ /sys1/syst แทน
# mkdir -p /sys1/syst/var/lib
# mv /var/lib/mysql /sys1/syst/var/lib
# mv /var/lib/mysql-cluster /sys1/syst/var/lib
# ln -sf /sys1/syst/var/lib/mysql /var/lib
# ln -sf /sys1/syst/var/lib/mysql-cluster /var/lib

สั่งให้บริการ
# /etc/init.d/mysql start
# /etc/init.d/apache2 start

เพิ่มผู้ใช้ admin ในระบบ
# adduser admin

ตั้งค่ารหัสผ่านของ root และผู้ใช้งาน admin
# mysql
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('********');
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '*********';
mysql> \q

postgresql-8.1 + phppgadmin

ต้องติดตั้งไปทีละตัว เพราะแพกเกจ phppgadmin ผูกกับ postgresql-7.4 ซึ่งเราไม่ต้องการ
เอา postgresql-8.1 มาก่อน แล้วหยุดการทำงาน
# aptitude install postgresql-8.1 php5-pgsql
# /etc/init.d/postgresql-8.1 stop

ย้ายคอนฟิกไป /sys1/sysb และย้ายข้อมูลไป /sys1/syst
# mv /etc/postgresql* /sys1/sysb/etc
# ln -sf /sys1/sysb/etc/postgresql* /etc
# mv /var/lib/postgresql/ /sys1/syst/var/lib
# ln -sf /sys1/syst/var/lib/postgresql/ /var/lib

ปรับให้เรียงภาษาไทยโดยการ initdb ใหม่ และปรับการอนุญาตใช้งาน
# dpkg-reconfigure locales
<--- เลือกให้มี th_TH.UTF-8
# su postgres
$ /usr/lib/postgresql/8.1/bin/initdb /var/lib/postgresql/8.1/temp --locale=th_TH.UTF-8
$ cd /var/lib/postgresql/8.1
$ cp -xa temp/* main
$ rm -rf temp

ปรับตั้งสิทธิ์
$ vi /etc/postgresql/8.1/main/pg_hba.conf

...
#local   all         all                               ident sameuser
local   all     all                             md5
host    all     all     192.168.0.0/16          md5
...

สั่งเริ่ม postgresql ใหม่ และสร้างผู้ใช้งาน phppgadmin ชื่อ admin ให้เป็น superuser
$ exit
# /etc/init.d/postgresql-8.1 start
# su -l postgres -c "createuser -s -P admin"

ส่วนของ phppgadmin
ก่อนอื่นติดตั้งแพกเกจที่ขึ้นกับ phppgadmin ก่อน เหลือแค่ตัวเดียวคือ wwwconfig-common
# aptitude install wwwconfig-common

และไปดาวน์โหลด phppgadmin รุ่นของ testing มาติดตั้งเอง
# wget http://ftp.debianclub.org/debian/pool/main/p/phppgadmin/phppgadmin_4.1.3-0.1_all.deb
# dpkg -i phppgadmin_4.1.3-0.1_all.deb

ปรับตั้ง
# dpkg-reconfigure phppgadmin

Web server to reconfigure automatically: <<<--- Apache2

ปรับให้เรียกดูได้จากเฉพาะเครือข่ายภายใน
# vi /etc/phppgadmin/apache.conf

...
order deny,allow
deny from all
allow from 127.0.0.0/255.0.0.0
allow from 192.168.0.0/16
# allow from all
...

เสร็จแล้ว

ต่อไปเป็นการปรับ apache2

ตั้งให้รากของเว็บ www.example.com อยู่ที /var/www/example.com
และของ www.example.org อยู่ที่ /var/www/example.org ตามลำดับ
# mkdir -p /var/www/{example.com,example.org}

กำหนดให้ www.example.com เป็นเว็บปริยาย
ต้องไปแก้ไขไฟล์ default ของ sites-enable
# vi /etc/apache2/sites-enable/000-default

NameVirtualHost *
<VirtualHost *>
    #ServerAdmin webmaster@localhost
    ServerAdmin webmaster@example.com
    ServerName www.example.com
    ServerAlias example.com

    DocumentRoot /var/www/example.com/
    <Directory />
        Options FollowSymLinks
        #AllowOverride None
        AllowOverride All


    </Directory>
    <Directory /var/www/example.com/>
        Options Indexes FollowSymLinks MultiViews
        #AllowOverride None
        AllowOverride All
        Order allow,deny
        allow from all
        # This directive allows us to have apache2's default start page
        # in /apache2-default/, but still have / go to the right place
        #RedirectMatch ^/$ /apache2-default/
    </Directory>
    ...

และ www.example.org ต้องปรับตั้งใหม่ โดยเอาตัวอย่างจาก default
# cd /etc/apache2/sites-available
# cp default example.org
# vi example.org

NameVirtualHost *
<VirtualHost *>
    #ServerAdmin webmaster@localhost
    ServerAdmin webmaster@example.org
    ServerName www.example.org
    ServerAlias example.org

    DocumentRoot /var/www/example.org/
    <Directory />
        Options FollowSymLinks
        #AllowOverride None
        AllowOverride All
    </Directory>
    <Directory /var/www/example.org/>
        Options Indexes FollowSymLinks MultiViews
...

สั่งให้เปิดใช้งาน example.org
# a2ensite example.org

มอดูลที่น่าจะเปิดใช้งาน
# a2enmod rewrite
# a2enmod proxy
# a2enmod userdir

ให้รองรับการเข้ารหัสภาษาไทยได้หลายแบบ
# vi /etc/apache2/conf.d/charset

#AddDefaultCharset UTF-8
AddCharset    TIS-620    .tis-620 .th
AddCharset    CP874      .cp874

เพิ่มเติมพิเศษ
สำหรับไพธอน ถ้าจะใช้งาน django ต้องติดตั้งมอดูลเพิ่ม
# aptitude install libapache2-mod-python python-psycopg python-mysqldb
# a2enmod mod_python

อีกนิดนึง ถ้าจะทำให้การใช้งานแบบ (เขียนโค๊ดเอง) ไม่ขึ้นต่อฐานข้อมูล ควรติดตั้ง adodb เพิ่ม
# aptitude install python-adodb python-psyco libphp-adodb

เริ่ม apache2 ใหม่เพื่อให้มอดูลใหม่ทำงาน
# /etc/init.d/apache2 restart

จบแล้ว

ทำสคริปต์สำรองข้อมูล

ทำสคริปต์เล็ก ๆ สำหรับสำรองข้อมูลทุกวัน (ฮาร์ดดิสก์ควรมีเนื้อที่พอสำหรับการนี้ด้วยนะครับ) ใส่ไว้ใน cron
เมื่อสำรองเสร็จแล้ว จะเก็บในชื่อ all.sql อยู่ใน /sys1/sysb/backupdb โดยแยกไปตามชื่อระบบฐานข้อมูล และให้เจ้าของเป็น admin ดูได้คนเดียว
ไฟล์เก่าของเมื่อวานจะถูก gzip เก็บไว้ในชื่อ all.sql.tar.gz (หากต้องการเก็บเกิน 2 วัน ฝากเขียนต่อเอาเองครับ)

ตั้งชื่อว่า d.cron-daily ใส่ไว้ใน /usr/local/sbin
# vi /usr/local/sbin/d.cron-daily

#!/bin/bash
#BACKUP DB 
ROOT="/sys1/sysb/backupdb"
BACKUPFILE="all.sql"

function chkfile() {
    D=$1
    U=$2
    if [ ! -d "$ROOT/$D" ]; then
        mkdir -p "$ROOT/$D"
        chmod 770 "$ROOT/$D"
        chown $DB:$DB "$ROOT/$D"
    fi
    #GZIP OLD FILE (ONLY ONE LAST)
    if [ -f "$ROOT/$D/$BACKUPFILE" ]; then
        rm $ROOT/$D/$BACKUPFILE.tar.gz
        su -l $U -c "tar cfz $ROOT/$D/$BACKUPFILE.tar.gz $ROOT/$D/$BACKUPFILE"
        rm $ROOT/$D/$BACKUPFILE
        chmod 700 "$ROOT/$D/$BACKUPFILE.tar.gz"
    fi
}

# MYSQL
if [ `which mysqldump` ]; then
    USER="admin"
    PASSWORD="MYSQL-ADMIN-PASSWORD"
    DB="mysql"
    chkfile $DB $USER
    su -l $USER -c "mysqldump -A -u$USER -p$PASSWORD > $ROOT/$DB/$BACKUPFILE"
    chmod 700 "$ROOT/$DB/$BACKUPFILE"
fi

# POSTGRESQL
if [ `which pg_dumpall` ]; then
    USER="admin"
    DB="postgres"
    chkfile $DB $USER
    su -l postgres -c "pg_dumpall > $ROOT/$DB/$BACKUPFILE"
    chown $USER "$ROOT/$DB/$BACKUPFILE"
    chmod 700 "$ROOT/$DB/$BACKUPFILE"
fi

ตั้งให้รันได้
# chmod 700 /usr/local/sbin/d.cron-daily

ทำให้รันตอนเที่ยงคืนทุกวัน
# crontab -e

...
#DAILY CRON TASK: BACKUP DB
20 0 * * *  /usr/local/sbin/d.cron-daily
...

เสร็จ

 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.