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

DigitalOcean上使用Tornado+MongoDB+Nginx+Supervisor+DnsPod快速搭建个人博客的更多相关文章

  1. 在GitLab pages上快速搭建Jekyll博客

    前一段时间将我的Jekyll静态博客从github pages镜像部署到了 zeit.co(现vercel)上了一份,最近偶然发现gitlab pages也不错,百度也会正常抓取,于是动手倒腾,将gi ...

  2. 烂泥:使用nginx利用虚拟主机搭建WordPress博客

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近开始打算学习nginx web服务器,既然是学习还是以实用为目的的.我们在此以搭建WordPress博客为例. 搭建WordPress博客,我们需要 ...

  3. 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)

    <差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...

  4. 利用Octopress在github pages上搭建个人博客

    利用Octopress在github pages上搭建个人博客 SEP 29TH, 2013 在GitHub Pages上用Octopress搭建博客,需要安装ruby环境.git环境等.本人在Fed ...

  5. 在vps上搭建hexo博客

    最近更换了服务器,需要把自己的Hexo Next重新部署到新服务器上,本文记录一下在vps上搭建hexo博客的过程. 在vps上搭建hexo博客需要下面这些工具: Nginx: 用于博客展示 SSH: ...

  6. hexo在git上搭建个人博客

    公司实习第一天接到的任务是:搭建一个基于Nodejs的开源项目的开发环境,接到任务时以为不是很困难,后来才知道该项目已于去年被废弃,搭配环境的时候遇到了不少问题,折腾了两天还是没有最终完成... 不过 ...

  7. 使用jekyll在GitHub Pages上搭建个人博客【转】

    网上有不少资源,但大多是“授人以鱼”,文中一步一步的告诉你怎么做,却没有解释为什么,以及他是如何知道的.他们默认着你知道种种专业名词的含义,默认着你掌握着特定技能.你折腾半天,查资料,看教程,一步步下 ...

  8. 史上最详细“截图”搭建Hexo博客并部署到Github

    http://jingyan.baidu.com/article/d8072ac47aca0fec95cefd2d.html 大家也搭建过博客,很多时候,按着教程来做就可以了,但是我当时为了搭建Hex ...

  9. 史上最详细“截图”搭建Hexo博客——For Windows

    http://angelen.me/2015/01/23/2015-01-23-%E5%8F%B2%E4%B8%8A%E6%9C%80%E8%AF%A6%E7%BB%86%E2%80%9C%E6%88 ...

随机推荐

  1. 十步图解CSS的position

    CSS的positon,我想做为一个Web制作者来说都有碰到过,但至于对其是否真正的了解呢?那我就不也说了,至少我自己并不非常的了解其内核的运行.今天在Learn CSS Positioning in ...

  2. yii学习第一课 《命名空间》

    <?php namespace a\b\c; class Apple { function getInfo() { echo 'this is a<br>'; } } <?ph ...

  3. Quartus调用modelsim

    1.Quartus 调用modelsim Test Bench Name :是test bench的文件名 Top Level module in test bench:test bench文件内的m ...

  4. java.net.MalformedURLException: Illegal character in URL

    在进行接口测试时,意外发现返回结果报java.net.MalformedURLException: Illegal character in URL,意思是“在URL中的非法字符”,我的参数是经过ba ...

  5. Notepad++ 快捷键 大全

    Notepad++ 快捷键 大全Ctrl+C 复制Ctrl+X 剪切Ctrl+V 粘贴Ctrl+Z 撤消Ctrl+Y 恢复Ctrl+A 全选Ctrl+F 键查找对话框启动Ctrl+H 查找/替换对话框 ...

  6. 钩子机制(hook)

    钩子是编程惯用的一种手法,用来解决一种或多种特殊情况的处理. 简单来说,钩子就是适配器原理,或者说是表驱动原理,我们预先定义了一些钩子,在正常的代码逻辑中使用钩子去适配一些特殊的属性,样式或事件,这样 ...

  7. 第一章 Mybtais的两种启动方式

    Mybatis的两种启动方式如下: 1.xml实现: xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现. 首先是创建Config ...

  8. Browser默认书签加载过程

    Browser配置默认书签——string.xml中<string-array name="bookmarks" translatable="false" ...

  9. Redis 集群方案- 主从切换测试

    大约一年多前,公司同事开始使用Redis,不清楚是配置,还是版本的问题,当时的Redis经常在使用一段时间后,连接爆满且不释放.印象中,Redis 2.4.8以下的版本由于设计上的主从库同步问题,就会 ...

  10. js之函数

    1.倒计时定时器 timename=setTimeout("function()",delaytime); clearTimeout(timename); 2.循环定时器 time ...