學習的工作

可能我們剛出來工作,80%是為了理想,而隨著生存的逼使、上司的壓力、工作的進度等等,這個比例數會越來越少,隨之增加的是更多與現實掛鉤的比例。這本是無可奈何的事。

但這個世代,有些人不知道為什麼就來面試這份工作,而不是對這份工作有什麼熱誠或者憧憬,然後就跟面試官說,“請多指教,我沒經驗但是我肯學”,這種情況假如我是面試官的話,我想我已經把這人ban掉一大半。換位思考,你來工作給你薪酬,是我來求你請你能夠獨立把事情做好,假如在工作過程你遇到問題,請你自己去學,薪酬是讓你負責來幫我,而不是負責我來教你。口語即是“你來做嘢,唔係學嘢”,在工作的過程當中如果能學到東西的話那是bonus,而你一來就說是來學,那等於你是沒心做事吧。

所以我是不喜歡說是我教人做什麼或者吩咐人做什麼,因為我自己都在摸索當中,我有什麼資格教別人呢?就算有個人很熱心地說要教你,我認為也要思考到底他說的到底對不對,他的做法或許適合他,但適不適合自己呢?而我覺得真正厲害的人,不會用口來教你,而是會用行動來教你的。

在VPS(Centos6)上搭建OpenVPN

由於各式各樣的原因,VPN這種東西在某個國家的需求其實是特別大的。那怎樣在VPS或者獨立服務器上搭建適用範圍比較大的OpenVPN服務器呢?

首先當然是要準備安裝程序的安裝包。接下來我們要安裝三樣東西,一是lzo,二是OpenVPN,三是證書文件。現在lzo的版本是2.06,OpenVPN的版本是2.3.2,那麼接下來就動手吧。以下是用root來登錄,為了省卻很多麻煩。

cd /usr/local/src
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.06.tar.gz
wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.2.tar.gz
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
tar xzf lzo-2.06.tar.gz
tar xzf openvpn-2.3.2.tar.gz
cd lzo-2.06
./configure
make && make install

cd ..
cd openvpn-2.3.2
./configure
make && make install

如無意外,這樣軟件就安裝完成了,如果出錯就自己看哪裡報錯吧。然後把下載下來的證書文件解壓縮,複製到相應的位置,再往下就是配置設置了。

複製文件、生成證書

cd /usr/local/src
unzip master.zip
mkdir /etc/openvpn
ls -ld /etc/openvpn
cp -ip /usr/local/src/openvpn/sample-config-files/server.conf /etc/openvpn/
cp -ip /usr/local/src/easy-rsa-master/easy-rsa /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa/2.0
. ./vars
./clean-all
./build-ca
中途會讓你填寫證書的一些內容,就根據自己的需要更改就好

./build-key-server server
跟上面一樣,只是其中一項
A challenge password []: 這裡建議留空


./build-key client1
./build-key client2
這樣就生成了2個用戶使用證書

./build-dh
這個要等些少時間的

/usr/local/sbin/openvpn --genkey --secret /etc/openvpn/easy-rsa/2.0/keys/ta.key

配置服務器

vi /etc/openvpn/server.conf
根據下面更改
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

添加OpenVPN自啟動並啟動

vi /etc/rc.local
添加
openvpn --daemon --config /etc/openvpn/server.conf
保存並退出

然後先手動啟動一下
openvpn --daemon --config /etc/openvpn/server.conf

如果使用了防火牆,則在防火牆添加規則

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -m state --state NEW -o eth0 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

service iptables save
service iptables restart

這樣OpenVPN服務器端應該就已經正常運作。然後自己想辦法把之前生成的證書下載到本地先。然後自己新建一個文本文件

client
tls-auth ta.key 1
dev tun
proto udp
remote [你的服務器IP] 1194
ca ca.crt
cert client1.crt
key client1.key
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3

另存為client.ovpn。然後吧客戶端需要用到的文件保存到一個文件夾內,就是

client.ovpn
ca.crt
client1.crt
client1.key
ta.key

然後就自己用客戶端去連自己的OpenVPN去做這樣或那樣的事情吧。

PHP Framework的選擇

我想大多創作者都不喜歡重複性的工作。例如從小學開始學習英文的時候,老師總是要我們抄單詞表,學習漢字的時候好像也有抄過,但是印象就不那麼深了。我不否認抄有其作用,世界上沒有做任何一件事是無用功來的,但是不喜歡就是不喜歡。因為重複性的機械工作,在這個時代交給計算機、機械去做不就好了嘛?

所以很多programmer就想到了Framework框架這樣東西。

Framework核心精神就是加速開發程式,將很多一般程式開發初始的基礎架構已經包含在框架裡,以及避免讓開發者在程式架構設計出現錯誤,至少安全性上面 Framework都做的很好,當然這只是一個工具,使用者的好壞才能決定工具的好壞。現行擁有很多開源的PHP框架,隨便在google上都能搜得到。而我用得比較多的就是CodeIgniter(簡稱CI)、CakePHP,還有就是對CI的其中一批開發人員再添加上他們自己的理念後開發出來的FuelPHP也了解了一下。一般人都有先入為主的習慣,所以我也無法判定哪個比哪個更好。我為什麼用以上兩個,就是因為簡單易用吧。反正學習是要舉一反三的,學習好簡單的架構,之後跳到其它 Framework 的時候,或許就可以減少很多摸索時間了。