所有文章搬运自我的个人主页:sheilasun.me

刚刚成功把自己的ghost博客部署到Linode VPS上了,在这里回顾并顺便整理一下从购买域名到部署代码到服务器的整个过程。

购买域名

万网或者Godaddy都可以购买,我是在后者购买的。最想要的名字全拼形式的域名已经被注册掉了,只好随便选了一个,sheilasun.me,全年收费9.99刀,还是比较实惠哒。

![godaddyorder][2]

购买VPS

如果VPS买在大陆的话是需要备案的,比如阿里云的使用须知里就有说:

Tips:大陆地区作为网站服务器的ECS,必须完成备案接入之后方可通过域名访问。大陆之外地区暂不需要备案。

为什么我会知道呢?因为之前我就急吼吼地买了一个月阿里云,看了使用须知才后知后觉还有这回事。。。。。。当时的想法是,我马上就要看到博客布上去长什么样子,等不了了!现在!立刻!于是只好转去了国外的Linode,因为只有香港和国外的VPS是不需要备案的。

我购买Linode时选的是Fremont的机房,据说是除了东京机房以外对于国内来说速度最快的了(我买的时候压根就没有"东京机房"供选择),但就目前使用情况来看还是觉得偏慢,后面还是打算备案搬到国内VPS上。

我选了个最便宜的1024套餐,月付10刀。跟之前买的阿里云(CPU1核、内存1GB)上海区68的价格差不多,不过建议在阿里云下单前可以查查有没有优惠活动,比如说我就找到了一个九折码哈哈。

绑定域名和IP

我们都知道,每次我们访问一个网页,在浏览器中输入网址按下回车之后,浏览器得先去找DNS(Domain Name System)把域名“翻译”成ip,然后根据ip向真正的web服务器发出http请求。

关于“输入网址敲下回车之后发生了什么事情”这个问题,可以参考这篇文章在浏览器输入网址,Enter之后发生了什么?或者观看这个视频从URI到页面展现发生了什么

Godaddy有自己的DNS服务,但是据说国内访问不太稳定,如果买了Linode,可以改用Linode的DNS服务。具体做法:

Linode端:

  • 登陆Linode,进入DNS Manager

  • 点击"Add a domain zone"

  • 填写在Godaddy买的域名、email后提交

Godaddy端:

  • 登陆Godaddy,进入name server

  • 将Linode的几组DNS服务添加进去

这样就完成DNS和ip的绑定了。

接下来就是操作系统的安装和运行环境的搭建了。

安装操作系统

Linode官方推荐安装Ubuntu 14.04 LTS,详细安装可以参考官网deploying-an-image,需要注意的是,root密码一定要记好,之后在本地终端或借助putty(windows下)用SSH登录到你的linode时候需要它。

安装需要一点时间,装好之后在本地用root登录试试:

sunjingdeMacBook-Pro:demo sunjing$ ssh root@45.79.97.45
root@45.79.97.45's password:
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 4.0.4-x86_64-linode57 x86_64)

可以创建一个新用户testuser,按提示输入:

root@localhost:~# adduser testuser
Adding user `testuser' ...
Adding new group `testuser' (1001) ...
Adding new user `testuser' (1001) with group `testuser' ...
Creating home directory `/home/testuser' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for testuser
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y

这里分享我遇到的一个问题,我安装完系统并在本地登录成功以后,我又把linode重装了一次,再次在本地用ssh登录就出问题了,提示错误:

...

RSA host key for 45.79.97.45 has changed and you have requested strict checking.

Host key verification failed.

...

解决办法:

执行

vi ~/.ssh/known_hosts
...
45.79.97.45 ssh-rsa AAAAB3NzaC1yc2EAAAADAQA...

删除与主机45.79.97.45 rsa相关的行即可。

安装NodeJS

sudo apt-get install nodejs

npm也会一并安装的,不用做单独安装了。查看一下node和npm的版本,确认一下安装是否成功:

root@localhost:/# node -v
v0.10.38
root@localhost:/# npm -v
1.4.28

运行

把本地写好的ghost程序复制到服务器的/var/www目录下:

scp ghost.zip sheilasun@45.79.97.45:/var/www

解压之后跑起来瞅瞅:

sheilasun@localhost:/var/www$ unzip ghost.zip

sheilasun@localhost:/var/www/ghost$ node index.js

Ghost is running in development...
Listening on 127.0.0.1:2368

看起来还是挺正常的。但是一旦访问时触发了代码里的隐含bug,网站就挂了,它没有自动重启功能,所以我们用forever来守护进程。

安装forever

npm install -g forever

用forever的好处是,用forever来启动node子进程,它会监控其运行情况,当你的程序崩溃了之后,它会帮你重新启动。

生产环境下用forever启动:

sheilasun@localhost:/var/www$ NODE_ENV=production forever start index.js
warn: --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info: Forever processing file: index.js

查看一下forever进程:

sheilasun@localhost:/var/www$ forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [2] QNdW /usr/bin/nodejs index.js 918 923 /home/sheilasun/.forever/QNdW.log 0:0:2:27.978

我们手动把进程杀死,forever马上又会启动它:

sheilasun@localhost:/var/www$ kill -9 923
sheilasun@localhost:/var/www$ forever list
info: Forever processes running
data: uid command script forever pid id logfile uptime
data: [2] QNdW /usr/bin/nodejs index.js 918 931 /home/sheilasun/.forever/QNdW.log 0:0:0:3.411

这样就可以放心地把程序跑在服务器上啦。

反向代理

现在已经可以用域名加端口访问到网站了,但是加了端口之后网址看上去一点也不简洁,怪讨厌的,如果把我们的ghost程序跑在80端口呢?那就可以直接用域名访问了,因为80是默认端口嘛。但是这一台服务器又不仅是跑这一个ghost博客的,假如这台机子上还有一个microblog网站,我们仍然希望网址可以简洁些,访问http://microblog.me 的时候进入这个网站,那就需要microblog也跑在80端口,显然不行,因为80端口已经被ghost博客程序霸占了。这个时候,就可以用nginx在前端做反向代理解决这个问题了。

安装nginx

执行:

sudo apt-get install nginx

配置nginx

在具体的配置之前,需要先简单了解一下linux中的软连接和硬连接的概念,详细地了解可参考linux软连接硬连接概念区别

首先看一下它们的定义:

硬连接:

The specific location of physical data.

软连接:

A symbolic path indicating the abstract location of another file.

在linux中,每个文件都会被分配一个inode(索引节点号),系统通过这个inode来定位每个文件。

通过硬连接(hard link),可以让多个文件名指向同一个inode,硬连接和原文件对应的是同一个inode。用ln命令创建硬连接:

ln originfile hardlinkfile

如果有为一个文件创建硬连接的话,只有删除了这个原文件以及其所有相关硬连接,这个文件才会被真正删除。

软连接(Symbolic Link, Soft link)则类似于Windows中的快捷方式,它的inode与原文件不同,但是内部包含了原文件的位置信息。通过它可以访问到原文件,但是它的删除与否不会影响到原文件。用ln -s 命令创建软连接:

ln -s originfile softlinkfile

简单了解了这两个概念,下面来做nginx的配置。

nginx安装完后,它的配置文件在/etc/nginx/nginx.conf,打开来瞅瞅:

sheilasun@localhost:/etc/nginx$ cat nginx.conf
...
http {
... include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
} ...

可以发现,在http部分底部有一行

include /etc/nginx/sites-enabled/*;

所以nginx.conf里包含了所有sites-enabled下的文件,而同时sites-enabled是连接到sites-available的。这种方式可以方便保存和应用不同站点的配置。可以为你所有的站点(在用的、停用的)各保存一个配置文件放在sites-available下,想启用某个站点配置,就在sites-enabled下为其创建一个软连接到sites-available,这样这个站点的配置内容就进入nginx.conf了,想停用了,就把这个软连接删除。

我们在sites-available下创建一个ghost的配置文件

sudo vi /etc/nginx/sites-available/ghost

拷入以下内容:

server {

    listen 0.0.0.0:80;
server_name sheilasun.me;
access_log /var/log/nginx/sheilasun.me.log; location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:2368;
proxy_redirect off;
}
}

创建软连接:

ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost

这段配置的作用是监听sheilasun.me 80端口的请求,并将它转发给http://127.0.0.1:2368 处理,也就是我们的ghost程序。这样我们只要访问http://sheilasun.me 就可以打开ghost博客了。同理,我们可以再配置一个 /etc/nginx/sites-available/microblog 文件,在其中配置http://microblog.me 80端口的请求转发给http://127.0.0.1:3000处理。

最后,重启一下nginx,让配置生效:

sudo service nginx restart

至此,Ghost就部署上啦,如有错误或不当之处,欢迎大家指正!

欢迎戳→http://sheilasun.me/

Ubuntu上部署Ghost博客的更多相关文章

  1. 在CentOS 7上部署Ghost博客

    作者:waringid 一.简介 跟静态博客不同的是,Ghost 这种轻量级的动态博客,有一个管理后台,可以直接写作和管理博客.本质上,跟 WordPress 是相通的,只是 Ghost 搭建在 No ...

  2. Coding上部署Ghost博客

    Ghost构建于Node.js平台之上.支持0.10.*版本号的Node.js. 在你的本地计算机上执行Ghost事实上非常easy,前提是你已经安装了Node.js. 什么是Node.js? 略过 ...

  3. ubuntu上部署github博客,利用hexo

    安装Node.js三种安装方法,前两种是我安装过的,后一种是 Google 到的. #####①:apt-get 安装在 终端 输入 nodejs 或者 npm ,如果没有安装会提示你进行安装,命令如 ...

  4. 在 Ubuntu 14.04 服务器上部署 Hexo 博客

    版权声明:本文由宋秉金 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/241080001487926962 来源:腾云阁  ...

  5. 在腾讯云上部署Hexo博客

    推荐理由 ----搭建个人的空间博客目前深受个人开发者的追捧,然而博客的种类和平台有很多,Hexo是一个开源的静态博客生成器.相比于其他博客而言它只要是web容器就能用.除了闷头专研技术之外,程序员还 ...

  6. 码云上部署hexo博客框架

    title: 码云上部署hexo博客框架 Hexo框架在码云上实现个人博客 本文受 https://www.jianshu.com/p/84ae2ba1c133 启发编写 本地调试 安装完Node.j ...

  7. 不再忍受龟速 Github,你也可以试试在云开发上部署个人博客!

    Hexo 是被大家广泛使用的静态博客系统, 除了在 Github Pages 部署以外,现在你有了一个新的选择,那就是使用云开发静态网站功能来部署啦! 云开发(CloudBase)是一款云端一体化的产 ...

  8. 部署ghost博客

    wget https://ghost.org/zip/ghost-0.6.4.zip npm install --production NODE_ENV=production npm start &g ...

  9. 在Azure中搭建Ghost博客并绑定自定义域名和HTTPS

    绪论 之前一直使用cnblog写博客,现在将博客迁移至Microsoft Azure上的Ghost博客上,Ghost博客使用Markdown书写博客,页面简洁,是我喜欢的风格.具体参见官网:https ...

随机推荐

  1. IOS开发—数据库的使用

    1.首先封装方法(建一个DataBase类封装) 2.实现DataBase类的方法 3.第一步先建立一个表 4.进行插入.删除.更新 插入的sql语句:@"insert into user ...

  2. WSUS目录本地迁移

    生产环境中有一台win2003 server,安装了Microsoft Windows Server Update Services 3.0,作为所有windows server的内网补丁更新服务器, ...

  3. 如何添加WebService调用时的用户认证

    场景: 当把发布好的WebService地址或WSDL提供给调用方时,需要对方先进行身份的认证通过后才允许接口的进步访问.而不是公开的谁都可以调用. 解决: 1.在IIS中设置对应网站的目录访问权限. ...

  4. perl语言书籍教程推荐

    互动出版网计算机频道.为您推荐关于perl语言的书籍教程.包括perl push.perl chomp以及perl python等perl语言内容. perl语言书籍一.<Perl语言编程 第四 ...

  5. 黄聪:jquery mobile使用form进行post提交表单没有反应,显示空白页解决方案

    jquery mobile这货会自动用Ajax方式. 所以需要在表单form标签添加data-ajax="false"这个元素. <form method="pos ...

  6. Redis应用案例,查找某个值的范围(转)

    本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就 ...

  7. PLSQL_查询已执行SQL的绑定参数(案例)

    2014-12-19 Created By BaoXinjian

  8. SG函数模板

    这篇虽然是转载的,但代码和原文还是有出入,我认为我的代码更好些. 转载自:http://www.cnblogs.com/frog112111/p/3199780.html 最新sg模板: //MAXN ...

  9. NeHe OpenGL教程 第二十五课:变形

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  10. NeHe OpenGL教程 第十五课:纹理图形字

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...