มีอยู่ 2 วิธีนะครับ ลองเอาไปใช้กันดูได้
link_to 'nutjang blog', "http://nutjang.blogspot.com", :target => '_blank'
link_to "nutjang popup", { :action => "busy" }, :popup => ['new_window','height=300,width=600']
เล่าเรื่องการทำเว็บไซต์ด้วย Ruby on Rails จ้า พร้อมวิธีการปรับแต่ง Server จำพวก FreeBSD, debian จากประสบการณ์ในการทำงาน Admin
วันศุกร์ที่ 25 มิถุนายน พ.ศ. 2553
วันพุธที่ 23 มิถุนายน พ.ศ. 2553
ปรับปรุงประสิทธิภาพ mysql
หน้าที่ของ ผู้ดูแลระบบ ต้องดูแลให้ เครื่องเซิฟเวอร์ทำงานอย่างมีประสิทธิภาพสูงสุด ในกรณีนี่เป็น ไฟล์คอนฟิกขั้นต้นสำหรับเซิฟเวอร์ ที่กำหนดค่า resource ของระบบให้ mysql
my-huge.cnf For systems with more than 1GB memory that are mostly dedicated to MySQL.
my-large.cnf For systems with at least 512MB memory that are mostly dedicated to MySQL.
my-medium.cnf For systems with at least 32MB memory dedicated entirely to MySQL or with at least 128MB on a machine that serves multiple purposes (such as a dual web/database server).
my-small.cnf For systems with less than 64MB memory where MySQL cannot take up too much of the resources.
หลังจากนั้นก็ต้องไป ปรับจูนละเอียดกันอีกที
my-huge.cnf For systems with more than 1GB memory that are mostly dedicated to MySQL.
my-large.cnf For systems with at least 512MB memory that are mostly dedicated to MySQL.
my-medium.cnf For systems with at least 32MB memory dedicated entirely to MySQL or with at least 128MB on a machine that serves multiple purposes (such as a dual web/database server).
my-small.cnf For systems with less than 64MB memory where MySQL cannot take up too much of the resources.
หลังจากนั้นก็ต้องไป ปรับจูนละเอียดกันอีกที
ติดตั้ง FreeRadius บน FreeBSD
FreeRadius เป็นโปรแกรมที่ผมต้องใช้บ่อยๆ เพราะใช้สำหรับจัดการระบบ authentication ให้กับ user ซึ่งอาจจะมีเพื่อนๆที่ต้องการใช้งานอย่างผมบ้าง ก็เลยจะขออธิบายไว้ ณ ที่นี้
การติดตั้ง FreeRadius ผ่าน ports
ก่อนการติดตั้งโปรแกรมผ่าน ports ทุกครั้ง ควรที่จะ อัพเดต ports ให้ล่าสุดก่อน ด้วยคำสั่ง cvsup
# cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/example/cvsup/port-supfile
FreeRadius ที่มีอยู่ใน ports นั้นจะมีอยู่ 2 เวอร์ชั่น คือ 1.x กับ 2.x ถ้าเอาตามความคุ้นเคยแล้ว ก็ยังงคงเลือก 1.x ครับ เพราะ Feature อื่นๆ และ โครงสร้างของ 2.x นั้นเปลี่ยนไป และยังไม่ได้ไปอ่านเลย
# whereis freeradius
/usr/ports/net/freeradius
# cd /usr/ports/net/freeradius
# make install clean
หลังจากติดตั้งเสร็จเรียบร้อยแล้ว ก็มาทดลองอย่าง คร่าวๆ นะครับ คือ start radius service ด้วยมือ ในโหมด debug
# /usr/local/sbin/radius -X
ถัดไปก็คือการ จำลอง client หรือ ใช้โปรแกรมทดสอบ ลองส่ง packet login ดู (ด้วย username, password ของ user ที่มีอยู่ใน FreeBSD system นั่นเหละ) ถ้าสำเร็จก็แปลว่า การติดตั้ง FreeRadius นั้นเสร็จเรียบร้อยครับ
การติดตั้ง FreeRadius ผ่าน ports
ก่อนการติดตั้งโปรแกรมผ่าน ports ทุกครั้ง ควรที่จะ อัพเดต ports ให้ล่าสุดก่อน ด้วยคำสั่ง cvsup
# cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/example/cvsup/port-supfile
FreeRadius ที่มีอยู่ใน ports นั้นจะมีอยู่ 2 เวอร์ชั่น คือ 1.x กับ 2.x ถ้าเอาตามความคุ้นเคยแล้ว ก็ยังงคงเลือก 1.x ครับ เพราะ Feature อื่นๆ และ โครงสร้างของ 2.x นั้นเปลี่ยนไป และยังไม่ได้ไปอ่านเลย
# whereis freeradius
/usr/ports/net/freeradius
# cd /usr/ports/net/freeradius
# make install clean
หลังจากติดตั้งเสร็จเรียบร้อยแล้ว ก็มาทดลองอย่าง คร่าวๆ นะครับ คือ start radius service ด้วยมือ ในโหมด debug
# /usr/local/sbin/radius -X
ถัดไปก็คือการ จำลอง client หรือ ใช้โปรแกรมทดสอบ ลองส่ง packet login ดู (ด้วย username, password ของ user ที่มีอยู่ใน FreeBSD system นั่นเหละ) ถ้าสำเร็จก็แปลว่า การติดตั้ง FreeRadius นั้นเสร็จเรียบร้อยครับ
วันอังคารที่ 22 มิถุนายน พ.ศ. 2553
Apache + SSL ตอนที่ 2 สร้าง Cert และ Config Apache
** ต้องผ่านตอนที่ 1 มาก่อนนะครับ ถ้ายังไม่ผ่านตอนที่ 1 ให้กลับไปตรวจสอบจนครบก่อนค่อยมา **
ขั้นตอนการสร้าง SSL request
# cd ~root/sslCA
# openssl req -new -nodes \
-out jjthai-req.pem \
-keyout private/jjthai-key.pem \
-config /etc/ssl/openssl.cnf
จะได้ผลลัพธ์ประมาณนี้ (ในช่วงท้ายจะมีการ ถาม challenge password ให้ เคาะ enter ผ่านเลย - คือไม่มี password เพราะ ถ้าใส่ challenge password ทุกครั้งที่ start apache มันจะขึ้น prompt เพื่อถาม password)
-------------------------------------------------
Generating a 1024 bit RSA private key
.............................++++++
.............................++++++
writing new private key to 'private/jjthai-key.pem'
-----
You are about to be asked to enter information that
will be incorporated
into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave
some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TH]:
State or Province Name (full name) [NE]:
Locality Name (eg, city) [JJthai]:
Organization Name (eg, company) []: JJthai
Organizational Unit Name (eg, section) []: Development
Common Name (eg, YOUR name) []: JJthai
Email Address []: support@jjthai.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
-------------------------------------------------
ขั้นตอนการสร้าง SSL Certificate
# openssl ca
-config /etc/ssl/openssl.cnf
-out jjthai-cert.pem \
-infiles jjthai-req.pem
มันจะถาม password ของ CA (ที่บอกให้จำ password ในตอนที่ 1)
-------------------------------------------------
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /root/sslCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4096 (0x1000)
Validity
Not Before: Aug 5 02:51:42 2006 GMT
Not After : Aug 2 02:51:42 2007 GMT
Subject:
countryName = TH
stateOrProvinceName = NE
organizationName = JJthai
commonName = JJthai
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
8B:48:A5:3A:C7:EA:9A:B3:61:9F:AC:B9
X509v3 Authority Key Identifier:
keyid:F8:D3:77:0C:78:6D:87:20:00:BF
DirName:/C=TH/ST=NE/L=JJthai
/O=JJthai
/CN=JJthai
serial:E5:A5:39:3F:6E:63:FA:7E
Certificate is to be certified until
Aug 2 02:51:42 2007 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
-------------------------------------------------
สร้างไดเรคทอรี่เพื่อเก็บ Certificate
# mkdir /etc/ssl/crt
# mkdir /etc/ssl/key
# cp ~/sslCA/jjthai-cert.pem /etc/ssl/crt
# cp ~/sslCA/private/jjthai-key.pem /etc/ssl/key
กำหนดค่า Apache 2.2 ให้ใช้งาน SSL
ในไฟล์ httpd.conf ด้านล่างๆ มันจะ มี comment ในการ include ไฟล์ ไว้ ให้มองหาบรรทัดนี้แล้วเอา comment ออก (ไดเรคทอรี่อาจจะมีไม่ตรงกันบ้างขึ้นอยู่กับวิธีการติดตั้ง Apache ของแต่ละคน)
# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf
จากนั้นก็เข้าไปแก้ไขไฟล์ /usr/local/etc/apache22/extra/httpd-ssl.conf concept หลักๆ ก็คือ ตัวเข้มที่ต้องชี้ ตำแหน่ง cert, key ให้ถูกต้อง
SSLCertificateFile /etc/ssl/crt/jjthai-cert.pem
SSLCertificateKeyFile /etc/ssl/key/jjthai-key.pem
หากในเครื่องมีหลายเว็บ แล้วแต่ละเว็บก็ต้องใช้ SSL คนละอันก็ต้องกำหนดค่า ของ แต่ละ virtualhost ให้ถูกแค่นั้นเอง ข้างล่างนี้เป็นตัวอย่าง (ยังไม่ได้ทดลองนะครับ อาจจะ work หรือ ไม่ work ก็ต้องไปลองแก้กันดู)
-------------------------------------------------
ServerName ssl.jjthai.net
SSLEngine on
SSLCertificateFile /etc/ssl/crt/jjthai-cert.pem
SSLCertificateKeyFile /etc/ssl/key/jjthai-key.pem
DocumentRoot /usr/local/www/apache22/data
CustomLog /usr/local/www/logs/ssl-access_log combined
ErrorLog /usr/local/www/logs/ssl-error_log
-------------------------------------------------
จากนั้นให้ รีสตาร์ท apache service แล้วลอง ใช้ browser เรียก https:// เพื่อทดสอบ จะต้องใช้งานได้ ถ้าไม่ได้ แต่ทำตามขั้นตอนข้างบนทุกอย่างแล้ว ก็อาจจะเป็นที่ Firewall ที่ปิดพอร์ต หรือไม่ก็ Browser ที่ block certificate อยู่ แค่นั้นเอง
ขั้นตอนการสร้าง SSL request
# cd ~root/sslCA
# openssl req -new -nodes \
-out jjthai-req.pem \
-keyout private/jjthai-key.pem \
-config /etc/ssl/openssl.cnf
จะได้ผลลัพธ์ประมาณนี้ (ในช่วงท้ายจะมีการ ถาม challenge password ให้ เคาะ enter ผ่านเลย - คือไม่มี password เพราะ ถ้าใส่ challenge password ทุกครั้งที่ start apache มันจะขึ้น prompt เพื่อถาม password)
-------------------------------------------------
Generating a 1024 bit RSA private key
.............................++++++
.............................++++++
writing new private key to 'private/jjthai-key.pem'
-----
You are about to be asked to enter information that
will be incorporated
into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave
some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TH]:
State or Province Name (full name) [NE]:
Locality Name (eg, city) [JJthai]:
Organization Name (eg, company) []: JJthai
Organizational Unit Name (eg, section) []: Development
Common Name (eg, YOUR name) []: JJthai
Email Address []: support@jjthai.net
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
-------------------------------------------------
ขั้นตอนการสร้าง SSL Certificate
# openssl ca
-config /etc/ssl/openssl.cnf
-out jjthai-cert.pem \
-infiles jjthai-req.pem
มันจะถาม password ของ CA (ที่บอกให้จำ password ในตอนที่ 1)
-------------------------------------------------
Using configuration from /etc/ssl/openssl.cnf
Enter pass phrase for /root/sslCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 4096 (0x1000)
Validity
Not Before: Aug 5 02:51:42 2006 GMT
Not After : Aug 2 02:51:42 2007 GMT
Subject:
countryName = TH
stateOrProvinceName = NE
organizationName = JJthai
commonName = JJthai
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
8B:48:A5:3A:C7:EA:9A:B3:61:9F:AC:B9
X509v3 Authority Key Identifier:
keyid:F8:D3:77:0C:78:6D:87:20:00:BF
DirName:/C=TH/ST=NE/L=JJthai
/O=JJthai
/CN=JJthai
serial:E5:A5:39:3F:6E:63:FA:7E
Certificate is to be certified until
Aug 2 02:51:42 2007 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
-------------------------------------------------
สร้างไดเรคทอรี่เพื่อเก็บ Certificate
# mkdir /etc/ssl/crt
# mkdir /etc/ssl/key
# cp ~/sslCA/jjthai-cert.pem /etc/ssl/crt
# cp ~/sslCA/private/jjthai-key.pem /etc/ssl/key
กำหนดค่า Apache 2.2 ให้ใช้งาน SSL
ในไฟล์ httpd.conf ด้านล่างๆ มันจะ มี comment ในการ include ไฟล์ ไว้ ให้มองหาบรรทัดนี้แล้วเอา comment ออก (ไดเรคทอรี่อาจจะมีไม่ตรงกันบ้างขึ้นอยู่กับวิธีการติดตั้ง Apache ของแต่ละคน)
# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf
จากนั้นก็เข้าไปแก้ไขไฟล์ /usr/local/etc/apache22/extra/httpd-ssl.conf concept หลักๆ ก็คือ ตัวเข้มที่ต้องชี้ ตำแหน่ง cert, key ให้ถูกต้อง
SSLCertificateFile /etc/ssl/crt/jjthai-cert.pem
SSLCertificateKeyFile /etc/ssl/key/jjthai-key.pem
หากในเครื่องมีหลายเว็บ แล้วแต่ละเว็บก็ต้องใช้ SSL คนละอันก็ต้องกำหนดค่า ของ แต่ละ virtualhost ให้ถูกแค่นั้นเอง ข้างล่างนี้เป็นตัวอย่าง (ยังไม่ได้ทดลองนะครับ อาจจะ work หรือ ไม่ work ก็ต้องไปลองแก้กันดู)
-------------------------------------------------
ServerName ssl.jjthai.net
SSLEngine on
SSLCertificateFile /etc/ssl/crt/jjthai-cert.pem
SSLCertificateKeyFile /etc/ssl/key/jjthai-key.pem
DocumentRoot /usr/local/www/apache22/data
CustomLog /usr/local/www/logs/ssl-access_log combined
ErrorLog /usr/local/www/logs/ssl-error_log
-------------------------------------------------
จากนั้นให้ รีสตาร์ท apache service แล้วลอง ใช้ browser เรียก https:// เพื่อทดสอบ จะต้องใช้งานได้ ถ้าไม่ได้ แต่ทำตามขั้นตอนข้างบนทุกอย่างแล้ว ก็อาจจะเป็นที่ Firewall ที่ปิดพอร์ต หรือไม่ก็ Browser ที่ block certificate อยู่ แค่นั้นเอง
Apache + SSL ตอนที่ 1 ตั้งตัวเองเป็น CA
มีหลายๆครั้งที่ การใช้งานเว็บเซิฟเวอร์ก็ต้องการในส่วนของ SSL (Secure Socket Layer) ซึ่งใน การตั้งเซิฟเวอร์ production จริงๆ ก็จะใช้วิธีการ ซื้อ Cert มาจาก CA แล้วนำมาคอนฟิก ทีนี้แล้วถ้าเราจะทำการทดสอบเฉยๆ หรือ เป็นการใช้งานภายในองค์กร (ซึ่งอาจจะไม่ได้ใช้ IP จริง และ ไม่ได้เชื่อมต่ออินเตอร์เน็ต) จะทำยังไงหล่ะทีนี้ ?
หากว่าคุณซื้อไม่ได้ก็ไม่ต้องซื้อครับ ตั้งตัวเองเป็น CA ขึ้นมาเลย (บทความนี้ Assume ว่าคุณติดตั้ง FreeBSD + Apache 2.2 + openssl เรียบร้อยแล้วนะครับ)
ขั้นตอนแรก แก้ไขไฟล์ /etc/ssl/openssl.cnf ให้แก้อยู่ 2 ตำแหน่งคือ ตำแหน่งที่เก็บ Signature ต่างๆ และ วันหมดอายุของ Cert (อย่าลืมสร้างไดเรคทอรี่ /root/sslCA)
# vi /etc/ssl/openssl.cnf
-------------------------------------------
dir = /root/sslCA
default_days = 3650
-------------------------------------------
และถ้าคุณต้องการสร้าง Cert เยอะ ให้หลายๆเซิฟเวอร์ คุณอาจจะแก้ไขไฟล์ /etc/ssl/openssl.cnf ในส่วนของค่า Default อื่นๆได้เช่น
contryName_default = TH
stateOrProvinceName_default = NE
localityName_default = JJthai
ขั้นตอนต่อไปก็คือการสร้างไดเรคทอรี่ที่จำเป็น เพื่อเป็นการประหยัดเวลา และ เพื่อความเข้าใจที่ตรงกัน ก็ให้เซฟ shell script ข้างล่างนี้ไปรัน
createCA.sh
-------------------------------------------
#!/bin/sh
##############################################
# CA Creator
# http://www.freebsdmadeeasy.com/
#
# This Script creates a certificate of authority
# using OpenSSL. It was written and tested on
# FreeBSD 6.1-RELEASE Use at your own risk
#
#
##############################################
echo "Setting up the directories"
mkdir ~/sslCA
echo "sslCA"
mkdir ~/sslCA/certs
echo "sslCA/certs"
mkdir ~/sslCA/private
echo "sslCA/private"
mkdir ~/sslCA/newcerts
echo "sslCA/newcerts"
cd ~/sslCA
echo 1000 > serial
touch index.txt
echo "Setting the permission to 700 on sslCA"
chmod -R 700 ~/sslCA
echo "Creating the CA"
echo "Use a strong password and keep it safe!"
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -config /etc/ssl/openssl.cnf
more ~/sslCA/cacert.pem
more ~/sslCA/private/cakey.pem
echo "sslCA/cacert.pem"
echo "sslCA/private/cakey.pem"
echo "All Done!"
-------------------------------------------
เพื่อความปลอดภัย เมื่อรัน script เสร็จ ให้ เปลี่ยนสิทธิ์ในการเข้าถึง เป็น 700 ด้วย (ให้ root เข้าได้คนเดียว)
# cd /root
# chmod 700 sslCA
ถัดไปเป็นคำสั่ง ตั้งตัวเองเป็น CA
# cd ~root/sslCA
# openssl req -new -x509 -days 3650 -extensions v3_ca \
-keyout private/cakey.pem \
-out cacert.pem -config /etc/ssl/openssl.cnf
ผลลัพธ์ที่ได้จะออกมาเป็นประมาณนี้ (มีอยู่ช่วงนึงต้องใส่ password ห้ามลืม password อันนี้นะ เพราะมันคือ password ของ ca)
-------------------------------------------
Generating a 1024 bit RSA private key
...................++++++
.....................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that
will be incorporated
into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TH]:
State or Province Name (full name) [NE]:
Locality Name (eg, city) [JJthai]:
Organization Name (eg, company) []: JJthai
Organizational Unit Name (eg, section) []: Developemnt
Common Name (eg, YOUR name) []: JJthai
Email Address []: support@jjthai.net
-------------------------------------------
เมื่อเสร็จเรียบร้อย สิ่งที่ควรจะได้ก็คือ 2 ไฟล์นี้
/root/sslCA/cacert.pem
/root/sslCA/private/cakey.pem
เท่านี้ก็ให้ไปอ่าน ตอนที่ 2 ซึ่งเป็นการ Gen Cert และตั้งค่า Apache + SSL ได้แล้ว
หากว่าคุณซื้อไม่ได้ก็ไม่ต้องซื้อครับ ตั้งตัวเองเป็น CA ขึ้นมาเลย (บทความนี้ Assume ว่าคุณติดตั้ง FreeBSD + Apache 2.2 + openssl เรียบร้อยแล้วนะครับ)
ขั้นตอนแรก แก้ไขไฟล์ /etc/ssl/openssl.cnf ให้แก้อยู่ 2 ตำแหน่งคือ ตำแหน่งที่เก็บ Signature ต่างๆ และ วันหมดอายุของ Cert (อย่าลืมสร้างไดเรคทอรี่ /root/sslCA)
# vi /etc/ssl/openssl.cnf
-------------------------------------------
dir = /root/sslCA
default_days = 3650
-------------------------------------------
และถ้าคุณต้องการสร้าง Cert เยอะ ให้หลายๆเซิฟเวอร์ คุณอาจจะแก้ไขไฟล์ /etc/ssl/openssl.cnf ในส่วนของค่า Default อื่นๆได้เช่น
contryName_default = TH
stateOrProvinceName_default = NE
localityName_default = JJthai
ขั้นตอนต่อไปก็คือการสร้างไดเรคทอรี่ที่จำเป็น เพื่อเป็นการประหยัดเวลา และ เพื่อความเข้าใจที่ตรงกัน ก็ให้เซฟ shell script ข้างล่างนี้ไปรัน
createCA.sh
-------------------------------------------
#!/bin/sh
##############################################
# CA Creator
# http://www.freebsdmadeeasy.com/
#
# This Script creates a certificate of authority
# using OpenSSL. It was written and tested on
# FreeBSD 6.1-RELEASE Use at your own risk
#
#
##############################################
echo "Setting up the directories"
mkdir ~/sslCA
echo "sslCA"
mkdir ~/sslCA/certs
echo "sslCA/certs"
mkdir ~/sslCA/private
echo "sslCA/private"
mkdir ~/sslCA/newcerts
echo "sslCA/newcerts"
cd ~/sslCA
echo 1000 > serial
touch index.txt
echo "Setting the permission to 700 on sslCA"
chmod -R 700 ~/sslCA
echo "Creating the CA"
echo "Use a strong password and keep it safe!"
openssl req -new -x509 -days 3650 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -config /etc/ssl/openssl.cnf
more ~/sslCA/cacert.pem
more ~/sslCA/private/cakey.pem
echo "sslCA/cacert.pem"
echo "sslCA/private/cakey.pem"
echo "All Done!"
-------------------------------------------
เพื่อความปลอดภัย เมื่อรัน script เสร็จ ให้ เปลี่ยนสิทธิ์ในการเข้าถึง เป็น 700 ด้วย (ให้ root เข้าได้คนเดียว)
# cd /root
# chmod 700 sslCA
ถัดไปเป็นคำสั่ง ตั้งตัวเองเป็น CA
# cd ~root/sslCA
# openssl req -new -x509 -days 3650 -extensions v3_ca \
-keyout private/cakey.pem \
-out cacert.pem -config /etc/ssl/openssl.cnf
ผลลัพธ์ที่ได้จะออกมาเป็นประมาณนี้ (มีอยู่ช่วงนึงต้องใส่ password ห้ามลืม password อันนี้นะ เพราะมันคือ password ของ ca)
-------------------------------------------
Generating a 1024 bit RSA private key
...................++++++
.....................++++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that
will be incorporated
into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [TH]:
State or Province Name (full name) [NE]:
Locality Name (eg, city) [JJthai]:
Organization Name (eg, company) []: JJthai
Organizational Unit Name (eg, section) []: Developemnt
Common Name (eg, YOUR name) []: JJthai
Email Address []: support@jjthai.net
-------------------------------------------
เมื่อเสร็จเรียบร้อย สิ่งที่ควรจะได้ก็คือ 2 ไฟล์นี้
/root/sslCA/cacert.pem
/root/sslCA/private/cakey.pem
เท่านี้ก็ให้ไปอ่าน ตอนที่ 2 ซึ่งเป็นการ Gen Cert และตั้งค่า Apache + SSL ได้แล้ว
ย้ายตำแหน่งเก็บ database mysql
ปัญหาที่จะพบอยู่เรื่อยๆสำหรับมือใหม่ที่ใช้ Mysql บน FreeBSD ตำแหน่งที่เก็บฐานข้อมูล ซึ่งเก็บอยู่ที่ /var/db ซึ่ง /var เนี่ย ถ้าตอนลง FreeBSD กดแบ่ง partition แบบ auto มันจะแบ่งเนื้อที่ไว้ค่อนข้างน้อย ซึ่งถ้าใช้งานไปเรื่อยๆ ก็จะเกิดปัญหาทำให้ /var เต็ม ดังนั้น Admin ที่ดีก็ควรจะหมั่นตรวจสอบอยู่เรื่อยๆว่า /var เต็ม หรือไม่ และเต็มด้วยสาเหตุอะไร
หากพบว่ามันเต็มเพราะ ข้อมูล database เริ่มมีขนาดใหญ่ ก็ควรจะย้าย ฐานข้อมูลออกไปเก็บไว้ที่อื่น ซึ่งเป็นไปได้ 2 วิธีคือ
1. ย้ายแบบเปลี่ยน ตำแหน่งเห็บฐานข้อมูล ใน Config ไฟล์ ของ Mysql
2. สร้าง logincal link ขึ้นมาเพื่อชี้ไปยังตำแหน่งเก็บฐานข้อมูลใหม่ (วิธีนี้มันจะไม่แก้ Config ไฟล์)
ในรอบนี้จะอธิบายเป็นวิธีที่ 2 นะครับ ขั้นตอนแรกก่อนอื่นก็ต้องปิด service ก่อนเพราะระหว่างการย้ายไม่ควรจะมีการใช้งาน database จากนั้นก็สร้าง Logical link ด้วยคำสั่ง ln -s
# /usr/local/etc/rc.d/mysql-server stop
# cd /var/db
# mv mysql /usr/local
# ln -s /usr/local/mysql mysql
ย้ายฐานข้อมูลเสร็จแล้วก็ เปลี่ยนสิทธิ์ให้เป็นของ mysql ให้เรียบร้อย
# cd /usr/local
# chown -R mysql mysql <- mysql แรกคือชื่อ user 'mysql' ส่วนอันหลัง คือ ชื่อ โฟลเดอร์
จากนั้นก็เปิด Service ใหม่อีกครั้งแล้วทดลองใช้งาน
# /usr/local/etc/rc.d/mysql-server start
หากพบว่ามันเต็มเพราะ ข้อมูล database เริ่มมีขนาดใหญ่ ก็ควรจะย้าย ฐานข้อมูลออกไปเก็บไว้ที่อื่น ซึ่งเป็นไปได้ 2 วิธีคือ
1. ย้ายแบบเปลี่ยน ตำแหน่งเห็บฐานข้อมูล ใน Config ไฟล์ ของ Mysql
2. สร้าง logincal link ขึ้นมาเพื่อชี้ไปยังตำแหน่งเก็บฐานข้อมูลใหม่ (วิธีนี้มันจะไม่แก้ Config ไฟล์)
ในรอบนี้จะอธิบายเป็นวิธีที่ 2 นะครับ ขั้นตอนแรกก่อนอื่นก็ต้องปิด service ก่อนเพราะระหว่างการย้ายไม่ควรจะมีการใช้งาน database จากนั้นก็สร้าง Logical link ด้วยคำสั่ง ln -s
# /usr/local/etc/rc.d/mysql-server stop
# cd /var/db
# mv mysql /usr/local
# ln -s /usr/local/mysql mysql
ย้ายฐานข้อมูลเสร็จแล้วก็ เปลี่ยนสิทธิ์ให้เป็นของ mysql ให้เรียบร้อย
# cd /usr/local
# chown -R mysql mysql <- mysql แรกคือชื่อ user 'mysql' ส่วนอันหลัง คือ ชื่อ โฟลเดอร์
จากนั้นก็เปิด Service ใหม่อีกครั้งแล้วทดลองใช้งาน
# /usr/local/etc/rc.d/mysql-server start
วันจันทร์ที่ 21 มิถุนายน พ.ศ. 2553
FreeBSD การตั้งค่าให้รับ syslog มาจาก เครื่องอื่น
บางครั้งเราก็ต้องการทำ Centralize Log Server นะครับก็คือการเก็บ Log ที่มาจากเครื่องอื่นๆ มาไว้ที่เครื่องศูนย์การที่เดียว ซึ่งในกรณีนี้จะเครื่องศูนย์กลางเราจะใช้เป็น FreeBSD ซึ่งมีวิธีการ config ง่ายๆด้งนี้ครับ
แก้ไขไฟล์ /etc/syslog.conf (หากต้องการเก็บแยก log สำหรับแต่ละ เซิฟเวอร์ให้ใส่ +ip เข้าไปก่อน)
-----------------------------------------
+192.168.1.200
*.* /var/log/192.168.1.200.log
+192.168.1.201
*.* /var/log/192.168.1.201.log
-----------------------------------------
แก้ไขไฟล์ /etc/rc.conf โดยตั้งค่าให้ syslog เริ่มทำงานตั้งแต่บูตเครื่อง และ กำหนดให้ syslog รับค่า log ที่มาจาก เครื่องอื่นๆได้ด้วย การกำหนดค่า flag เป็น ค่าว่างๆ
-----------------------------------------
syslog_enable="YES"
syslogd_flags=""
-----------------------------------------
แก้ไขไฟล์ /etc/syslog.conf (หากต้องการเก็บแยก log สำหรับแต่ละ เซิฟเวอร์ให้ใส่ +ip เข้าไปก่อน)
-----------------------------------------
+192.168.1.200
*.* /var/log/192.168.1.200.log
+192.168.1.201
*.* /var/log/192.168.1.201.log
-----------------------------------------
แก้ไขไฟล์ /etc/rc.conf โดยตั้งค่าให้ syslog เริ่มทำงานตั้งแต่บูตเครื่อง และ กำหนดให้ syslog รับค่า log ที่มาจาก เครื่องอื่นๆได้ด้วย การกำหนดค่า flag เป็น ค่าว่างๆ
-----------------------------------------
syslog_enable="YES"
syslogd_flags=""
-----------------------------------------
วันเสาร์ที่ 19 มิถุนายน พ.ศ. 2553
การลง FreeBSD พื้นฐาน STEP 2 - FAMP
พื้นฐานของการลงโปรแกรมเครื่องเซิฟเวอร์ในกรณีทั่วๆไป มักจะต้องลงเว็บเซิฟเวอร์นะครับ ดังนั้นจึงมีสูตรสำหรับลงโปรแกรมเป็น FAMP (FreeBSD Apache, MySQL, PHP) ซึ่งก็ให้ลงเรียงลำดับไปเลย สำหรับตอนนี้เอาแค่ Apache กับ MySQL ก่อน ที่เหลือเอาไว้ตอนหน้า
Apache Web Server
# whereis apache22
apache22: /usr/ports/www/apache22
# cd /usr/ports/www/apache22
# make install clean
เมื่อติดตั้งเสร็จ ให้ไปแก้ไข /etc/rc.conf โดยเพิ่มบรรทัดนี้เข้าไป (เพื่อให้ apache เริ่มสตาร์ท service เมื่อบูตเครื่อง)
----------------------------------------------
apache22_enable="YES"
----------------------------------------------
หากต้องการสตาร์ท Apache Service ด้วยมือให้ใช้คำสั่งต่อไปนี้
# cd /usr/local/etc/rc.d
# ./apache22 [start|stop|restart] <- เลือกเอาอย่างใดอย่างหนึ่ง
หากติดตั้งถูก จะต้องเปิดเว็บเพจทดสอบได้ แล้วพบข้อความว่า "It work!"
http://x.x.x.x <- ip เครื่องเซิฟเวอร์
วิธีการติดตั้ง MySQL
# cd /usr/ports/database/mysql51-server
# make WITH_CHARSET=tis620 WITH_XCHARSET=all \
WITH_COLLATION=tis620_thai_ci WITH_OPENSSL=yes \
install clean
หรือ (กรณีต้องการ ให้ support ndb, ทำเป็น sql api node)
# cd /usr/ports/database/mysql51-server
# make WITH_CHARSET=tis620 WITH_XCHARSET=all \
WITH_COLLATION=tis620_thai_ci WITH_OPENSSL=yes \
WITH_NDB=yes install clean
# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# chown root:sys /etc/my.cnf
# chmod 0644 /etc/my.cnf
เมื่อติดตั้งเสร็จ ให้ไปแก้ไข /etc/rc.conf โดยเพิ่มบรรทัดนี้เข้าไป (เพื่อให้ mysql เริ่มสตาร์ท service เมื่อบูตเครื่อง)
----------------------------------------------
mysql_enable="YES"
----------------------------------------------
เพื่อความชัวร์ รีสตาร์ท 1 ครั้ง จานั้นให้กำหนดค่า password สำหหรับ root ของ mysql (คนละ root ของ FreeBSD นะ)
# mysqladmin -u root password newpassword
จากนั้น ทดลอง Login โดยใช้คำสั่งดังต่อไปนี้ (-p คือ ให้ขึ้น prompt เพื่อถาม password) ถ้า login สำเร็จก็หมายความว่า การติดตั้ง mysql สมบูรณ์ใช้ง้ายได้แล้วครับ
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.22
Type 'help' for help.
mysql>
Apache Web Server
# whereis apache22
apache22: /usr/ports/www/apache22
# cd /usr/ports/www/apache22
# make install clean
เมื่อติดตั้งเสร็จ ให้ไปแก้ไข /etc/rc.conf โดยเพิ่มบรรทัดนี้เข้าไป (เพื่อให้ apache เริ่มสตาร์ท service เมื่อบูตเครื่อง)
----------------------------------------------
apache22_enable="YES"
----------------------------------------------
หากต้องการสตาร์ท Apache Service ด้วยมือให้ใช้คำสั่งต่อไปนี้
# cd /usr/local/etc/rc.d
# ./apache22 [start|stop|restart] <- เลือกเอาอย่างใดอย่างหนึ่ง
หากติดตั้งถูก จะต้องเปิดเว็บเพจทดสอบได้ แล้วพบข้อความว่า "It work!"
http://x.x.x.x <- ip เครื่องเซิฟเวอร์
วิธีการติดตั้ง MySQL
# cd /usr/ports/database/mysql51-server
# make WITH_CHARSET=tis620 WITH_XCHARSET=all \
WITH_COLLATION=tis620_thai_ci WITH_OPENSSL=yes \
install clean
หรือ (กรณีต้องการ ให้ support ndb, ทำเป็น sql api node)
# cd /usr/ports/database/mysql51-server
# make WITH_CHARSET=tis620 WITH_XCHARSET=all \
WITH_COLLATION=tis620_thai_ci WITH_OPENSSL=yes \
WITH_NDB=yes install clean
# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# chown root:sys /etc/my.cnf
# chmod 0644 /etc/my.cnf
เมื่อติดตั้งเสร็จ ให้ไปแก้ไข /etc/rc.conf โดยเพิ่มบรรทัดนี้เข้าไป (เพื่อให้ mysql เริ่มสตาร์ท service เมื่อบูตเครื่อง)
----------------------------------------------
mysql_enable="YES"
----------------------------------------------
เพื่อความชัวร์ รีสตาร์ท 1 ครั้ง จานั้นให้กำหนดค่า password สำหหรับ root ของ mysql (คนละ root ของ FreeBSD นะ)
# mysqladmin -u root password newpassword
จากนั้น ทดลอง Login โดยใช้คำสั่งดังต่อไปนี้ (-p คือ ให้ขึ้น prompt เพื่อถาม password) ถ้า login สำเร็จก็หมายความว่า การติดตั้ง mysql สมบูรณ์ใช้ง้ายได้แล้วครับ
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.22
Type 'help' for help.
mysql>
การลง FreeBSD พื้นฐาน STEP 1 - เริ่มต้น
1.ลง FreeBSD ในแบบ minimum
2.ลง cvsup ผ่าน pkg_add
สาเหตุที่ต้องลงแบบ pkg_add ก็เพราะว่า ตอนลงครั้งแรกจะยังไม่ได้อัพเดต ports collection ดังนั้น ถ้าลงผ่าน port ก็อาจจจะลง โปรแกรมอื่นๆ ที่เกี่ยวข้อง ที่เป็นเวอร์ชั่นเก่าได้ ดังนั้น จึงลง cvsup ในแบบ binary ดีกว่า
# pkg_add -r cvsup-without-gui
3.อัพเดต ports ด้วยคำสั่ง cvsup
# /usr/local/bin/cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile
4.เปลี่ยนไปใช้ bash shell
เนื่องจากความเคนชินนะครับ โปรแกรมแรกที่จะต้องลง หลังจากลง OS และ อัพเดต ports เสร็จใหม่ๆ ก็คือ bash
# whereis bash
/usr/ports/shell/bash
# cd /usr/ports/shell/bash
# make install clean
สำหรับ STEP แรก เอาแค่นี้ก่อน
2.ลง cvsup ผ่าน pkg_add
สาเหตุที่ต้องลงแบบ pkg_add ก็เพราะว่า ตอนลงครั้งแรกจะยังไม่ได้อัพเดต ports collection ดังนั้น ถ้าลงผ่าน port ก็อาจจจะลง โปรแกรมอื่นๆ ที่เกี่ยวข้อง ที่เป็นเวอร์ชั่นเก่าได้ ดังนั้น จึงลง cvsup ในแบบ binary ดีกว่า
# pkg_add -r cvsup-without-gui
3.อัพเดต ports ด้วยคำสั่ง cvsup
# /usr/local/bin/cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile
4.เปลี่ยนไปใช้ bash shell
เนื่องจากความเคนชินนะครับ โปรแกรมแรกที่จะต้องลง หลังจากลง OS และ อัพเดต ports เสร็จใหม่ๆ ก็คือ bash
# whereis bash
/usr/ports/shell/bash
# cd /usr/ports/shell/bash
# make install clean
สำหรับ STEP แรก เอาแค่นี้ก่อน
วันศุกร์ที่ 11 มิถุนายน พ.ศ. 2553
JJThai.net Ver 3.0
ตั้งต้นกันใหม่กับ JJThai.net Ver 3.0 ที่จะต้องคิดถึงการวางโรดแมพกันใหม่ คิดว่าเวอร์ชั่นนี้จะมีการปรับปรุงและเปลี่ยนแปลงในรายละเอียดหลายเรื่อง เช่น การกำหนดพันธกิจ, การกำหนดเป้าหมายที่ต้องการสร้างรายได้, การประชาสัมพันธ์ และ การวางแผนทางการตลาดที่ต้องลงมือทำจริงๆ ส่วนเรื่อง Feature ที่จะเพิ่มขึ้นมาก็จะเป็นในส่วนของการอำนวยความสดวก และ ง่ายต่อการใช้งาน
- กำหนด พันธกิจของ JJThai.net
- ระบบ การสร้างรายได้ ที่มาจากช่องทางอื่นๆ นอกจาก Adsense
- แผนการทำการตลาด และการขายที่มีรายละเอียด และลงมือปฏิบัติได้
+ ข้อมูลสถิติเว็บไซต์
+ ต้องมี Sale โทรไปคุย
+ มีการให้ทดลองใช้งาน Banner, Smart Classified 2 สัปดาห์
- ปรับปรุง GUI การลงประกาศขายสินค้า
- เพิ่มในส่วนของการรับคำแนะนำ ติชม
- การปรับปรุง Layout โดยศึกษาแนวทางจากเว็บไซต์ที่ประสบความสำเร็จแล้ว
- เพิ่ม Feature การค้นหา
- กำหนด พันธกิจของ JJThai.net
- ระบบ การสร้างรายได้ ที่มาจากช่องทางอื่นๆ นอกจาก Adsense
- แผนการทำการตลาด และการขายที่มีรายละเอียด และลงมือปฏิบัติได้
+ ข้อมูลสถิติเว็บไซต์
+ ต้องมี Sale โทรไปคุย
+ มีการให้ทดลองใช้งาน Banner, Smart Classified 2 สัปดาห์
- ปรับปรุง GUI การลงประกาศขายสินค้า
- เพิ่มในส่วนของการรับคำแนะนำ ติชม
- การปรับปรุง Layout โดยศึกษาแนวทางจากเว็บไซต์ที่ประสบความสำเร็จแล้ว
- เพิ่ม Feature การค้นหา
การใช้งาน Rack ในแบบ test, production
ตามปกติเวลาเราใช้คำสั่ง rake ใน Rails ก็มักจะใช้คำสั่งห้วนๆ ตัวอย่างเช่น rake สร้าง database หรือ การ migrate database
$ rake db:create
$ rake db:migrate
ซึ่งคำสั่งดังกล่าวก็จะสร้างให้กับ Environment development เพียงอย่างเดียว ทีนี้ก็เกิดคำถามว่า ถ้าเราต้องการทำใน Environment อื่นๆ เช่น test , production จะทำยังไง ?
วิธีแก้ไขง่ายๆ ก็คือ การเพิ่มตัวแปร RAILS_ENV=environment เข้าไป ด้งตัวอย่างต่อไปนี้
$ rake db:create RAILS_ENV=production
$ rake db:migrate RAILS_ENV=production
ซึ่งก็คือการสร้าง Database และ การ Migrate Database ให้กับ Rails ภายใน Environment Production นั่นเองครับ
$ rake db:create
$ rake db:migrate
ซึ่งคำสั่งดังกล่าวก็จะสร้างให้กับ Environment development เพียงอย่างเดียว ทีนี้ก็เกิดคำถามว่า ถ้าเราต้องการทำใน Environment อื่นๆ เช่น test , production จะทำยังไง ?
วิธีแก้ไขง่ายๆ ก็คือ การเพิ่มตัวแปร RAILS_ENV=environment เข้าไป ด้งตัวอย่างต่อไปนี้
$ rake db:create RAILS_ENV=production
$ rake db:migrate RAILS_ENV=production
ซึ่งก็คือการสร้าง Database และ การ Migrate Database ให้กับ Rails ภายใน Environment Production นั่นเองครับ
วันเสาร์ที่ 5 มิถุนายน พ.ศ. 2553
สึกออกมาเรียบร้อยแล้ว
หลังจากไปบวชมา 15 + 1 วัน ก็เป็นอันเสร็จภาระกิจการบวชเป็นพระ ได้เรียนรู้อะไรหลายๆอย่างภายในวัดเยอะ
สมัครสมาชิก:
บทความ (Atom)