DigitalOcean上使用Tornado+MongoDB+Nginx+Supervisor+DnsPod快速搭建個人博客


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM