如何部署自己的应用?

写在前面

前端工程师应不应该了解一些运维方面的知识呢,我的个人看法是有时间有精力当然可以学习一下,因为当我们做出很cool的东西后总不可能一直运行在localhost下自己看吧~买个服务器将自己的项目部署上去,让身边的小伙伴看到你很cool的项目。

Step By Step

购买服务器

首先感谢各大厂商对大学生的优惠政策,让我们花一顿饭钱就能拥有一个性能不错的服务器,这里我选择的是阿里云的服务器ESC,系统选Ubuntu 14.04 64位,安全设置一定要选设置密码,然后输入登录此台服务器的密码,详细配置如下图:
image

登录服务器

服务器买好之后,在控制台下找到服务器公网Ip复制下来,打开自己电脑(local)下的终端,输入ssh root@公网Ip,首次登录需要键入yes以确认,然后输入购买服务器时设置的root密码,输密码的时候光标是不会动的,但是并不是你没输入,只是linux下隐藏了你的键入记录,如图:
image

如果你有zsh

如果我们每次登录服务器都要手动键入ssh root@公网Ip会是件很麻烦的事情,聪明的程序员怎么会忍受这种重复枯燥的任务呢?

  • 我们在自己电脑(local)下更改zshrc的文件,设置一个快捷指令,local下终端输入vi .zshrc,然后光标移动到最下面
  • 输入一段alias ssh_ser3_root="ssh root@公网ip"
  • 如图所示,保存退出,然后输入source .zshrc让.zshrc生效
  • 然后你就可以通过输入ssh_ser3_root的快速登录到你的服务器。
  • emmmmm,如果你不熟悉vim编辑器的话,还是建议你google一下vim的基本操作。

image

new一个马仔

在服务器下每次都用root访问是很危险的,因为root在服务器下的权限是很大的,稍微不注意root就可能删库跑路了,这个时候就需要用一个没那么大权利的用户来访问服务器,也就是找一个马仔给你做事,既能让他做一些基本的操作,又能保证系统不被玩坏,岂不是美滋滋~

  • 用root登录服务器,在服务器(server)终端键入adduser 马仔账户添加一个账户(我的马仔叫vince),这个账户就是你的马仔账户,然后按照系统提示,给马仔账号设置密码,然后一路回车。
  • 这个时候马仔是没有什么权限的,但是有时候又需要马仔做一下需要权限的事情,这个时候我们就给马仔配置一些权限,在server中输入gpasswd -a 马仔账号 sudo,这个时候马仔就是有权限的马仔了。
  • 然后我们具体给马仔什么权限呢?输入sudo visudo,找到如图位置,输入马仔账号 ALL=(ALL:ALL) ALL,具体是什么权限我也不太清楚,总之够用了,感兴趣的小伙伴可以深入Linux的学习,退出编辑。

image

  • 这个时候,你就可以用你的马仔账号登录你的服务器了,试一试,在local终端输入ssh vince@公网ip登录服务器,输入你设置马仔的密码,这个时候就可以安全地用马仔账号登录服务器啦,同样按照上一步设置zshrc快捷指令,省去多余的键入。

用ssh来避免一万次的输密码操作

如果每次登录服务器都要输入一段长长的密码,这种重复性的操作聪明的程序员是无法接受的,那么我们利用ssh来无药登录服务器。

  • 马仔账号登录服务器,输入ssh-keygen -t rsa -b 4096 -C "你的邮箱"生成server下的ssh,一路回车,如果出现下面结果,那就说明ssh生成成功。
    image
  • 输入eval "$(ssh-agent -s)"将ssh代理运行起来,然后在键入ssh-add ~/.ssh/id_rsa将id_rsa加入到ssh服务中。
  • 这个时候我们自己电脑想不输入密码登录服务器,那么就要在服务器下将我们自己电脑(local)加入“诚信列表”,进入.ssh文件夹键入vi .ssh/authorized_keys创建这么一个诚信列表authorized_keys。
  • 回到我们自己的电脑(local),查看自己电脑.ssh下的id_rsa.pub,复制下来,粘贴到server里面的authorized_keys去。
  • 做到这里还没完,我们将authorized_keys授权,输入chmod 600 authorized_keys,然后键入sudo service ssh restart重启ssh服务。
  • 现在我们再次在local下登录这个服务器,就不再需要输入密码了,

安装Node环境

  • 用马仔账号登录服务器,安装软件前最好键入sudo apt-get update更新一下,然后键入sudo apt-get install vim openssh build-essential libssl-dev wget curl git安装这些常用软件。
  • 安装node版本管理工具nvm,到nvm下获取下载链接,键入wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash,安装nvm
  • nvm安装好后,启动nvm的时候发现无法启动,看err发现nvm建议我们新开一个终端来执行,那我们就再次登录服务器来启动nvm。
  • 键入nvm install v6.9.5来安装node版本,安装完毕后,键入nvm use v6.9.5使用6.9.5版本的node,我们默认使用这个版本的话就键入nvm alias default v6.9.5来设置默认node版本,键入node -v查看node安装是否成功。
  • npm在国内下载是非常慢的,我们切换npm的淘宝源,键入npm --registry=https://registry.npm.taobao.org install -g npm
  • 下载源改变后,我们键入echo fs.inotify.max_user_watches==524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p确保稳定性。

这个时候我们node配置好了,就可以做一些你一直想做的事情了,部署一个别人可以访问的项目吧。在根目录文件下键入vi app.js,然后粘贴一下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const http = require('http');

const homePage=`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Nice to meet you ~</h1>
</body>
</html>
`

http.createServer((req,res) => {
res.statusCode = 200;
res.setHeader('Content-Type','text/html')
res.end(homePage)
})
.listen(3004,()=>{
console.log('Server Runing At 3004')
})

这段代码就是简单的建立一个http服务,访问端口是3004,用node启动它node app.js,然后回到我们电脑浏览器,输入公网ip:3004,但是…发现是访问不进去的,为什么呢?

因为阿里云的服务器非常安全,在你买服务器的时候,他就默认设置好了安全组,这个时候我们进入阿里云服务器,查看服务器的安全组,如图:
image

然后我们点击配置规则,然后进入如下界面,点击快熟创建规则,然后如图所示,我们之前部署的那个app.js是部署在3004端口下的,所以我们将3004列入可访问规则,3004/3004是表示3004这一个端口开放,如果我们设置3000/3100的话,那就是从3000端口到3100端口都开放访问,但是这样做并不安全,一般我们需要用哪些端口就开哪些端口。
image

好啦,然后我们再次访问我们刚刚那个地址,这个时候就发现可以访问了,惊不惊喜,

image

是不是觉得自己快要成为全栈工程师了?哈哈,那是不存在的,距离全栈还有很久很久很久。。。

总结

总算是写完了,为啥要写这篇文章呢?因为配置环境确实很麻烦,而且一个步骤都不能少不能乱,写这篇文章的时候我已经配置第四遍了,才能记下来所有的步骤并且总结每个步骤怎么操作才最安全快捷,希望这篇文章能帮助您上线自己很cool的项目。

做到这里并没有完成,当更新迭代速度快时候,这样部署效率显然太低,请关注我的另外一篇关于PM2快速部署的博文~

nice to meet you :)