DigitalOcean
之前買了個便宜的VPS並且在上面搭建了我自己寫的博客程序,后來VPS里運行MongoDB經常自己掛掉就索性沒理了。直到現在VPS已經過期,服務器被強制關掉了。周末在家索性想着把這個博客程序重新搭建起來。
所以准備換一個VPS。選擇Linode還是雲主機(阿里雲等等)?阿里雲貌似有些貴,而且還有一堆備案的流程。Linode最近推出SSD服務,20刀/月的價格,加量不加價,很是吸引人。但無奈還是花的有些心疼。忽然另外一個VPS服務DigitalOcean(鏈接含refcode喔)被我無意發現。DigitalOcean是一家IaaS服務提供商,其特色就是提供快速的固態硬盤服務器,該公司宣稱可在55秒之內搭建好一台雲服務器,所有的服務器均擁有1G的網絡接口,每月基礎套餐為1TB,最低套餐費用僅為5美元/月。
每個月20刀的配置和Linode的20刀的配置幾乎一樣。但是DigitalOcean提供了最低5美元/月的配置,而且如果使用優惠碼注冊,還能免費送10美元。相當於免費使用2個月。於是我選擇了5美元的配置,Google了一把優惠碼,並且非常順利的找到了能用的。Google搜索:digitalocean coupon。我是在這里找到: http://www.retailmenot.com/view/digitalocean.com
注冊,填入優惠碼,選擇5$的主機類型,主機位置我選了舊金山(美國西部,據說比其他的穩定),操作系統選擇了Ubuntu 14.04 x64。一切都非常順利,正如他們的廣告所說的,55秒內,一台熱乎乎的VPS送到了我的手上。
有興趣的同學可以用我的推薦鏈接注冊哦,免費送10美元。注冊鏈接:DigitalOcean
用到哪天不想用了,DigitalOcean還提供了生成一個鏡像(Image)的功能,然后你取消掉VPS服務器(Droplets),之后將不收取費用。哪天忽然又想用了再開通它,用之前的鏡像一還原,馬上就恢復了之前的環境,很是方便。
VPS安裝必要的軟件
sudo apt-get install git
sudo apt-get install python-pip
sudo apt-get install nginx
sudo apt-get install supervisor
sudo pip install tornado
sudo pip install pymongo
sudo pip install beautifulsoup4
(我安裝了beautifulsoup是因為我做了個工具把博客園的博客導入過來。)
mongodb 安裝:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
博客程序
之前我用python+tornado+pymongo寫了一套博客程序,只是給我自己使用,所以我放在了私有倉庫bitbucket上。
網站程序一般放在/var/www目錄里。所以我用git clone把我的代碼放到了/var/www/coderzh
sudo mkdir /var/www
cd /var/www
git clone https://xxxxx.xxxx.xxx
MongoDB
由於我的程序沒有使用MongoDB默認的端口27017,所以我需要修改端口的設置。找到MongoDB的配置文件,修改port字段:
vim /etc/mongodb.conf
修改port=27017部分
停止和重啟mongodb:
sudo service mongodb stop
sudo service mongodb start
運行博客程序
博客程序運行需要的環境已經基本配置好,這時運行博客程序看是否能正常起來:
sudo python /var/www/coderzh/main.py --port 8001
打開瀏覽器試試能不能訪問: http://服務器IP:8001 OK,太棒了,一起正常。
Supervisor
停掉剛才的main.py,這時候要上一個好東西。它就是Supervisor,它是一個進程監控守護程序。它負責開機時自動啟動你配置好的程序,並且在你的程序莫名其妙掛掉時,Supervisor會自動去重啟他們。可以說,它是網站穩定運行的后勤保障啊。
新建一個Supervisor配置文件,放到/ect/supervisor/conf.d目錄下,因為/etc/supervisor/supervisord.conf里配置了自動讀取conf.d目錄下的文件:
vim /ect/supervisor/conf.d/coderzh.conf
編輯coderzh.conf
[program:coderzh]
command=python /var/www/coderzh/main.py --port=8001
directory=/var/www/coderzh
autorestart=true
redirect_stderr=true
重載配置,重啟Supervisior:
supervisorctl reload
supervisorctl start all
再次訪問: http://服務器IP:8001 試試,嗯,一起正常。Supervisor工作了。
Nginx
接下來上Nginx,它是一個HTTP和反向代理服務器。最終網站的訪問經過域名解析到服務器后,都要通過Nginx將訪問請求轉到main.py中處理。理解Nginx的配置文件很重要,好吧,說實話,我當初摸Nginx,Apache之類的東西時都是一頭霧水的。Nginx的主要配置文件路徑在:/etc/nginx/nginx.conf
為了讓Nginx支持多域名,多Web服務。我修改/etc/nginx/nginx.conf 內容如下:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
types_hash_max_size 2048;
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
keepalive_timeout 65;
proxy_read_timeout 200;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain application/x-javascript text/css application/xml;
include /etc/nginx/conf.d/*;
}
注意最后一行:include /etc/nginx/conf.d/*,所以在conf.d目錄里,可以為每個網站都配置一個.conf文件。我為博客程序生成的配置:vim /etc/nginx/conf.d/coderzh.conf
upstream coderzh {
server 127.0.0.1:8001;
}
server {
listen 80;
server_name coderzh.com www.coderzh.com;
location = /favicon.ico {
rewrite (.*) /static/favicon.ico;
}
location = /robots.txt {
rewrite (.*) /static/robots.txt;
}
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_pass http://coderzh;
}
}
重新啟動nginx
service nginx restart
這時已經可以用80端口訪問了。
DnsPod
接下來就是通過DnsPod將域名解析到這台VPS服務器。應該不是什么問題,有問題可以查看DnsPod幫助。
部署完成
執行導入工具,將博客園的博客導入進來。訪問:http://blog.coderzh.com/。HOHO,大功告成。
VPS注冊鏈接:DigitalOcean