防 spam e-mail

大家應該有一種經驗,就是在網路上留下e-mail,很容易被掃去寄發廣告信,
在此我們介紹以圖檔方式,來顯示e-mail,不僅美觀,且還有著防止被機器人掃信的特性。

這套線上工具,稱之為: e-mail icon generator (中文為:電子郵件圖示產生器)

1. 瀏覽器開啟: http://services.nexodyne.com/email/

2. 填入您的e-mail ,請選擇相對應的免費點郵,並點下 Generate 。

3. 比如說,我們用 hello@gmail.com 則會產生相對應的icon 為: http://services.nexodyne.com/email/icon/0izXcr4%3D/BV2oKjY%3D/R01haWw%3D/0/image.png   , 也就是: 

4. 如果沒有相對應的e-mail可選,請改點選 Provider not available? Chick here! 

 

如何在同一台機器執行兩個mysql資料庫的程式?

這個需求是這樣子產生的:某一個客戶需要客製化my.cnf檔。但是my.cnf檔的設定又會一次套用到所有的客戶上。

我查詢的關鍵字是 running multiple mysql instances on one server

參考資料 ( 這個參考資料只能當參考,我實測之後,有許多細節不同。)

修改的步驟:
(1) mkdir /var/lib/mysql2
chown mysql.mysql /var/lib/mysql2

(2) cp /etc/my.cnf /etc/my2.cnf
修改/etc/my2.cnf 的內容:
datadir=/var/lib/mysql2
port=3307

(3) cp /etc/init.d/mysql /etc/init.d/mysql2
修改/etc/init.d/mysql2 的內容:

  • 有mysqld_safe的這一行必須特別修改:       $bindir/mysqld_safe –datadir=”$datadir” –socket=”/var/lib/mysql2/mysql.sock” –pid-file=”$mysqld_pid_file_path” –port=”3307″ $other_args >/dev/null 2>&1 &
  • 修改所有的my.cnf 這個字串成為 my2.cnf
  • 修改 datadir=/var/lib/mysql 為 datadir=/var/lib/mysql2
  • 修改 lock_file_path=”$lockdir/mysql” 為 lock_file_path=”$lockdir/mysql2″

(4) chkconfig –add mysql2

(5) 理論上,要用mysql_install_db的指令來安裝新的default mysql database
mysql_install_db –datadir=/var/lib/mysql2 –defaults-file=/etc/my2.cnf –user=mysql
但是,實際上,我這樣子做之後,還是有問題,所以我後來沒使用這個指令。我把/var/lib/mysql2 這個資料夾清空之後,

cp -a /var/lib/mysql/performance_schema /var/lib/mysql2
cp -a /var/lib/mysql/mysql /var/lib/mysql2

(6) service mysql2 start

(7) mysql -h127.0.0.1 -P3307
如果可以順利登入的話,
mysql> show databases;

理論上,如果是只出現
mysql
information_schema
performance_schema

三個資料庫的話,這樣子就代表設置成功了!

主機負載太高造成死當的解法

#!/bin/sh
# Bash script that checks apache:
# – If server load is higher than 20, kill web server
#
# Script to be ran as cronjob (every 5 minutes)
# */2 * * * * /path/to/httpd_check >> /path/to/httpd_check.log

echo “httpd checker running at ” `date`
check=`uptime | sed ‘s/\./ /g’ | awk ‘{print $10}’`
if [ $check -gt 20 ]
then
echo “Server load too high ($check), kill all the following program: httpd, php, mysqld”
killall httpd
killall php
killall mysqld
else
echo “Server load OK ($check)”
fi

echo “—————-“

如何設定cpanel單一帳戶的遠端自動備份?

cpanel有提供可以從外部呼叫的API,如果活用這些API,就可以做到:定時將帳戶的內容備分到遠端的ftp主機中。

實作方法:

(1) 準備好用來作遠端備分的ftp,並且在ftp的登入目錄裡,加上 /backup/AAA這個目錄,建議AAA的部分,取有意義一點的名稱,最好和網站的名稱相關。

(2)  在cpbackup.php 這個檔案之中,要先做對應的修改,總共需要改九行

// Credentials for cPanel account ( 這邊填原始,要被備分的cpanel account相關資訊 )
$source_server_ip = “”; // Server IP or domain name eg: 212.122.3.77 or cpanel.domain.tld
$cpanel_account = “”; // cPanel username
$cpanel_password = “”; // cPanel password
// Credentials for FTP remote site ( 這邊填遠端的ftp資訊 )
$ftphost = “”; // FTP host IP or domain name
$ftpacct = “”; // FTP account
$ftppass = “”; // FTP password
$email_notify = “”; // Email address for backup notification
//
// Delete any other backup before create new backup
$conn_id = ftp_connect($ftphost);
$login_result = ftp_login($conn_id, $ftpacct, $ftppass);
$logs_dir = “/backup/AAA“;
ftp_chdir($conn_id, $logs_dir);
$files = ftp_nlist($conn_id, “.”);
foreach ($files as $file){
    ftp_delete($conn_id, $file);
}
ftp_close($conn_id);
$api_args = array(
                           ‘passiveftp’,
                           $ftphost,
                           $ftpacct,
                           $ftppass,
                           $email_notify,
                            21,
                            /backup/AAA
                         );

(3) 用ftp 上傳檔案
在account的public_html  下,放上這兩個檔案,( 檔案在此可以下載,選cpbackup script )
xmlapi.php
cpbackup.php

在這邊要特別注意一點:
backup這個功能,因為相對消耗資源,放在public_html下,是說可以透過browser來啟動,很方便。但是,如果是很容易被攻擊的網址。就最好不要放在這麼明顯的地方。

(4) 此處,有兩種方法可以執行這個php來做檔案的備分:
(a)  在browser上, http://你的域名/cpbackup.php
(b)  用該account的id/pw ( 不要用root的 )   ssh 登入這個account, 然後下指令     php -q /home/你的帳戶名稱/public_html/cpbackup.php 

理論上,出現的message應該是長成這樣子:

Warning: ftp_delete(): Could not delete .: Invalid argument in /home/blog66rr/public_html/cpbackup.php on line 28
Warning: ftp_delete(): Could not delete ..: Invalid argument in /home/blog66rr/public_html/cpbackup.php on line 28
{“apiversion”:”1″,”type”:”event”,”module”:”Fileman”,”func”:”fullbackup”,”source”:”module”,”data”:{“result”:””},”evenls -l /home/blog66rr/public_html/cpbakcup.php

這樣子,資料應該就會備分到你的ftp了。

另外,週期性執行不一定需要。如果說只做一次的話,就不用這麼麻煩。用這個方式,因為是透過ftp的關系,比較不會受到browser 斷線的問題。ftp比較適合處理這種大型的backup檔。

(5) 用該account的id/pw ( 不要用root的 )   ssh 登入這個account
下指令:
crontab -e

這樣子是設定每天備分:
0 0 * * *   php -q /home/你的帳戶名稱/public_html/cpbackup.php
這是每週備分
@weekly    php -q /home/你的帳戶名稱/public_html/cpbackup.php
這是每月備分
@monthly  php -q /home/你的帳戶名稱/public_html/cpbackup.php

(6) 最後還有一個但書。在用來backup的ftp這邊,會有一個問題:檔案愈積愈多。所以在用來backup的ftp主機這邊。最好也設置工作排程 ( cronjob )

find /path/to/files* -mtime +5 -exec rm {} \;

這個指令的意思是:到 /path/to/files* 這邊,找出超過5天沒有使用的檔案,將它刪除。

 

(備註:unethost.com虛擬主機,已有每日自動異地備份)

灌Memcached於Fedora 17/16, CentOS(RHEL) 6.3/5.8

在部分舊版的fedora或是CentOS上,直接用yum是沒有辦法裝memcached的。所以這種時候,必須要引入額外的repositories

(1)安裝Remi repository (Fedora 12~17, RHEL 6不需要)

## Remi Dependency on CentOS and Red Hat (RHEL)
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

(2) 安裝memcached的軟体包(package)
如果是fedora 17/16/15/14/13/12或CentOS 6.3/6.2/6.1/6

yum install memcached

如果是 CentOS 5.8

yum --enablerepo=remi install memcached

(3) 設置memcached

vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="512"
OPTIONS=""

(4) 啟動memcached

# Set Memcached to start automatically on boot
chkconfig memcached on
# Start Memcached
/etc/init.d/memcached start
## OR ##
service memcached start

(5) 檢查memcached是否正常的運作。

echo stats | nc localhost 11211
STAT pid 7599
STAT uptime 10
STAT time 1265288542
STAT version 1.4.4
STAT pointer_size 32
STAT rusage_user 0.003999
STAT rusage_system 0.052991
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 6
STAT bytes_written 0
STAT limit_maxbytes 536870912
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
END

# Try to get some value
echo get some_value | nc localhost 11211
END

# Not found, but check the stats again
echo stats | nc localhost 11211
STAT pid 7599
STAT uptime 10
STAT time 1265288542
STAT version 1.4.4
[...]
STAT cmd_get 1
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 1
STAT delete_misses 0
[...]
STAT evictions 0
END

(6) 打開firewall

加下方的 INPUT 規則:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 11211 -j ACCEPT

重新啟動 Firewall:

service iptables restart
## OR ##
/etc/init.d/iptables restart

 

msn對話重新編排

常常遇到一種情境,需要把msn的對話記錄,截取下來做為資料。

典型的MSN對話長成這樣子:

21/8/2012 PM 3:22:52 http://unethost.com QQ 其實我是希望你‧‧‧
21/8/2012 PM 3:23:13 http://unethost.com QQ 我們公司的購物車系統,叫做WHMCS 
21/8/2012 PM 3:23:21 http://unethost.com QQ 我有找到免費的影片教學 
21/8/2012 PM 3:23:30 http://unethost.com QQ 但是,這個影片教學是4.0版的

這樣子的資料,如果直接貼上的話,因為前面的日期/時間/使用者名稱太多了,造成閱讀者的困難,所以比較細心的作法,應該要改成這樣子:

我:其實我是希望你直接以錄製的方式來做 
我:我們公司的購物車系統,叫做WHMCS 
我:國外有這個的影片教學 
我:但是,這個影片教學是4.0版的

這個修改,把日期/使用者取代掉,是很容易的,因為pattern是固定的。然而,如果要取代掉幾點幾分,這個時間的部分時,就困難多了,因為pattern是不固定的。時間會一直變動。

以這個例子裡,要取代掉時間的話,需要用到正規表示法(regular expressions),以geany為例子的話,就是先按下ctrl +H 。出現「取代的視窗」,在Search for這邊填上[0-9]:[0-9][0-9]:[0-9][0-9],並且勾選 Use regualr expressions,在Replace All這邊,按下 In Document。這樣子就可以一口氣消去所有的時間。

為什麼要使用虛擬主機?

話說,自從我改行賣虛擬主機以來,還滿多人問過我這個問題的。

我想,主要就是省錢/省時間吧。先來計算一下,一般人常用的選項,用自家的pc來當server的電費成本吧:如果使用pc來當server的話,以最省電的server來計算,假設你是個有工程素養的人,可以讓server只用100瓦( 常見的電源供應器是300瓦 )。一天用大約3度電,一度電3元,一個月的電費開銷:270元。讓你的PC不用的時候就關機休息,一個月270可以租虛擬主機了。

除了電費成本之外,自己灌pc來當server的成本還有:
(1) 灌linux, 灌apache, 灌php, 灌application( 例如forum的程式 )的成本
的確,這些軟体都是免費的,但是灌這些軟体都要花時間。而時間就是成本

(2) 軟體升級的成本
這些底層的軟体每年或是每兩三年都會有升級的必要性,這也是一種成本

(3) 防駭的成本
iptables,我相信不是每個人都可以流暢地來config的。當然,你也可以考慮把server裝在防火牆後面,不過,這樣子,你還是得設定port forwarding,這個還是滿麻煩的。更糟的是,除非你用的是高級的UTM,否則,一般的防火牆都擋不住http get flood攻擊。

(4) 流量/頻寬的成本
網站小的時候差異不大,網站大的時候,一般的家庭用寬頻,是下載快上傳慢。家庭用的寬頻並不適合用來架大網站。

(5) 技術支援的成本
出問題的時候,要找誰呢?自已上網瘋狂地google嗎? 還是說,至少有個人幫你維護主機的,可以大概告訴你,程式的問題,可能是什麼?