阿里云 CentOS 环境下 Node 环境搭建

最近在学习微信开发,为了方便调试以及后期部署决定买一个轻量的服务器和域名折腾一下。毕竟对于以后的学习来说,一个域名和一个云服务器还是很必要的。大概折腾了一天吧,终于把这个环境搭好了,不过安全方面可能还有很大问题,现在在这篇文章里记录一下目前的成果,对于和我一样的不大懂 Linux 操作又想折腾云服务器的小白来说还是很有参考价值的。

云服务器的选择与购买:

因为一直对阿里这个企业有好感,我就毫不犹豫地选择了阿里云这一平台。此外,为了降低学习的成本,选择了阿里云里可以说最便宜的轻量应用服务器(后来听说还有学生版,感觉亏了一波)。

服务器的详细配置如下(对于我这种为了学习而使用的服务器来说足够了):

- 系统镜像:CentOS 7.3
- CPU:1 核
- 内存:1 GB
- 带宽:1 Mbps
- SSD:20 GB

aliyun

购买之后,就可以进入控制台了,这里建议大家把服务器的公网域名在记事本上记录一下,方便以后查阅。

远程登录云服务器:

在控制台中进入远程登录服务器页面下,进入客户端选项卡,选择客户端使用账号密码进行连接,点击设置密码,即可设置登录服务器时的 root 用户登录密码。设置成功后即可利用该密码登录远程云服务器。

本地通过 SSH 登录云服务器

打开本地终端,使用 root 用户登录云服务器:
ssh root@[云服务器 ip 地址]

之后在提示输入密码的命令下,输入上一步中在阿里云控制台中配置的 root 用户登录密码,正确输入后,即可进入云服务器。

在命令行下,输入 exit 即可登出云服务器。

sshroot

那每次都要输入服务器的 ip 地址,无疑大大增加了记忆成本,这里我们通过修改 .zshrc 文件的配置,来设置快捷命令。

首先在命令行下,执行命令 cd && vi .zshrc 打开 .zshrc 文件。
修改 Example aliaes 部分。

在注释后输入 alias ssh_aliyun="ssh root [阿里云服务器 ip 地址]"

zsh

修改后,别忘了在命令行中启用这个命令,执行 source .zshrc

之后再执行 ssh_aliyun 命令,就可以看见命令行中直接提示你输入密码了,是不是简便许多?
当然这还不算终极的解决方案,之后我们会用 ssh-key 的方法,直接免密码登录。

CentOS 下创建用户

刚买下来的云服务器是没有普通用户角色的,只有一个 root 用户,由于 Linux 下的 root 用户权限很高,很容易误操作,所以我们需要在云服务器上创建一个新用户,之后的项目部署操作等等都通过这个用户完成。

首先登录阿里云服务器,执行如下命令:

adduser [你希望创建的用户名] — 添加用户

passwd [上一步创建的用户名] — 为新用户设置登录密码(需要重复输入两次)

到此,我们的新用户就创建出来了。但是这个就像我们的新员工一样,刚来报道,权限较低。只可以在本用户 home 下有完整权限,其他目录则需要授权。而经常需要 root 用户的权限,这时候可以使用 sudo 命令暂时化身为 root 来操作。新创建的用户并不能使用sudo命令,需要给他添加授权。

CentOS 下 sudo 命令的授权管理是放在 sudoers 文件中的。

该文件路径通过下图命令可以查到是 /etc/sudoers ,且我们可以发现,只有 root 用户对该文件有操作权限(默认是只读权限)。

为了修改这个文件,需要进行权限修改 chomod -v u+w /etc/sudoers

sudoers

修改权限后,进入 vim 编辑器打开该文件 vi /etc/sudoers
找到如下位置进行修改,并保存退出:

## Allow root to run any commands anywher
root    ALL=(ALL)       ALL
[你创建的用户名]  ALL=(ALL)     ALL  #这个是新增的用户,追加这一行

保存后别忘了把该文件的写权限收回 chmod -v u-w /etc/sudoers

测试,新开一个终端窗口输入命令
ssh [你新建的用户名]@[阿里云服务器 ip 地址]

之后根据提示输入新用户的密码,即可使用新用户进行登录。
因为我们之后不需要利用 root 登录了,所以你可以把之前配置的.zshrc 文件的快捷命令,更改为使用新用户登录时候的命令。

注:之后我们所有在服务器上的操作,都是登录的这个新用户进行的

本地和服务器生成 SSH-KEY 来完成免密码登录

为了让我们的登录过程省去输入密码这一步骤,我们使用 SSH-KEY 的方式来完成登录操作。

首先在本地终端上查看是否有 SSH-KEY

ssh

如果进入这个目录后,目录内有 id_rsaid_rsa.pub 两个文件,说明你已经生成过了 SSH-KEY

注意:如果已经配置过了就不需要重新配置一遍,否则会连不上之前配置过的一些 git 仓库

如果没有这个目录的话,在本地终端家目录下输入
ssh-keygen -t rsa -b 4096 -C '[你的某个邮箱]'
就可以生成一对 SSH 秘钥了。

本地生成秘钥后,需要把 SSH 代理开起来,执行命令
eval "$(ssh-agent -s)"

最后需要把 SSH key 加入到代理中
ssh-add ~/.ssh/id_rsa

登录阿里云服务器,在家目录下,同样生成一对 SSH 秘钥。

之后在 ~/.ssh 目录下新建一个授权文件 authorized_keys
在这个文件中把刚才在本地生成的 id_rsa.pub 文件中的内容复制过来,保存并退出,这样服务器就持有了某台电脑的公钥,那么这台电脑就可以来登录这个服务器了,而且不需要输入密码的呦。

啊对了,ssh 对目录的权限是有要求的,我们还需要把 authorized_keys 的权限修改一下 chmod 600 ~/.ssh/authorized_keys

之后启用代理 eval "$(ssh-agent -s)"
添加 SSH key ssh-add ~/.ssh/id_rsa

大功告成!
至此我们就可以通过在本地终端下输入一句命令就可以登录到远程服务器了~

sshaliyun

服务器 Node 环境搭建

在完成远程连接服务器以后,我们就完全的获取到了”自己家的钥匙了“,接下来就要好好地”装修”一下这个家了。

在服务器上配置 Node 环境和在本地上配置环境大同小异。这里我们选用 nvm 来管理 Node 版本。按照文档中的指示进行 nvm 的安装。

安装成功后,执行 nvm --version 测试是否安装成功。

如果报错没有该命令,可以新开一个命令行窗口,登录到远程服务器,再次测试,不出意外的应该 ok?

利用 nvm 安装 Node

安装 : nvm install v[你希望安装的 Node 版本号]
使用某一版本: nvm use v[你希望使用的 Node 版本号]
设置为默认版本: nvm alias default v[需要设置的默认 Node 版本号]
查看 Node 版本: node -v

nvm

部署测试

这一步我们启动一个服务器,并且让其成功跑起来,看看是否能通过外界访问。

在家目录下,新建 app.js 文件

vi app.js

// app.js
const http = require('http')

http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'})
    res.end('aliyun test!!!')
}).listen(3000)

console.log('server is listening on port 3000')
注:我们当前用户并不是 root 用户,所以无法监听 80 端口,这里我们选择监听 3000 端口进行测试

运行脚本
pm2 start app.js

阿里云为我们设置了防火墙,我们还需要在阿里云控制台中添加防火墙规则,把 3000 端口添加到规则中。

添加完成后使用浏览器访问 [阿里云公网 ip 地址:3000] 即可看到该页面。

firewall

test

Nginx 配置

在上一步中,我们通过在浏览器中访问 [阿里云服务器 ip 地址]:[端口号] 的方式成功访问到了我们的页面。但是使用端口号的访问让我们很不满意,怎么和平常浏览网站不一样呢,有没有什么方法可以不输入端口号访问呢?

这一步就来配置 Nginx 来完成这一目的。
其实之前一直在写前端,我对后台部署这方面也是所知寥寥。可以通俗点认为,Nginx 就是用来管理云服务器上的各个端口的大门。外界请求到我们的域名(ip 地址),Nginx 再根据配置文件,来把这个请求分发到云服务器的某个端口,让监听这个端口的后台程序去处理这个请求。这就实现了多个网站项目部署在同一台云服务器的方式。

nginxpic

安装 Nginx
sudo yum nginx
进入 Nginx 目录
cd /etc/nginx/conf.d
新建配置文件
sudo vi test-3000.conf
建议配置文件名为 [域名]-[端口号].conf

编辑配置文件

upstream test {
    server 127.0.0.1:3000;
}

server {
    listen 80;
    server_name 39.105.89.85;    # 你自己的 ip
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;

        proxy_pass http://test;        # 和 upstream 相同
        proxy_redirect off;
    }
}

保存并退出,测试配置文件
sudo nginx -t
测试成功后,重启 Nginx 服务器
sudo nginx -s reload
直接通过 ip 地址访问,即可访问到页面,可以看到返回的 response 中,我们的响应是通过 Nginx 代理的。

nginxres

域名购买与备案

折腾了这么半天,终于可以通过 ip 地址访问到我们的页面了,但是这还不是我们的最终目的,为了让所有用户能够方便的使用我们的网站,那么光使用 ip 还是不够的,并且很多开发平台,像微信公众号、七牛等都需要配置网站域名信息,他们是不支持 ip 地址配置的。种种需求吧,我们还得为我们的服务器购买一个域名。

为了图省事,我就直接在阿里云的万网下面买域名了。

购买域名很简单,推荐 .com.cn 域名,不要选择太过于个性的域名,否则后期备案比较麻烦。

购买域名后,可以直接用阿里云的域名解析服务来解析我们的域名。

进入域名解析界面后,添加一条解析记录。
这里一般我们的记录类型是 A 记录,它是将一个域名解析为一个 ip 地址。
主机记录建议先添加 www@
这样在浏览器端输入 www.breezymelon.combreezymelon.com 都可以得到解析,符合我们平时上网的习惯。点击确认后,解析记录就添加好了。

dns

等待几分钟后,我们在浏览器中输入刚才配置的域名,即可访问到我们的页面了!不过这里访问的并不是我们的 app.js 返回的页面信息,而是阿里云返回的提示页面。提示我们网站还没有备案,无法进行访问。

domain

不得不说,这一套操作真的是很麻烦,接下来进入控制台准备备案。。。

在备案之前,我们的域名需要进行实名认证,否则是不允许进入备案流程的。域名实名认证提交的材料很简单,个人的话只需要上传身份证即可。之后等待几天,即可完成域名实名认证。

实名认证后,我们就可以走备案流程了,首先需要申请一个备案服务号,申请成功后按照流程去备案即可。备案所需上传的资料还是很多的,这里需要注意几点:

1. 网站名称的规范
2. 核验单域名列表处需添加备案域名对应注册商中文名称的简称
3. 正在备案的域名需要把域名隐私保护关闭

提交材料后,一般当天就会有阿里云的工作人员联系你初审结果,如果有问题的话按照反馈邮件进行修改即可。

初审过了以后,就要办理拍照流程了,我在写这篇文章的时候就办理到这。大概就是等阿里云把幕布寄过来,拍照片上传即可,接下来就等通知就好啦!其实还是很方便的,我一直以为备案是要自己跑公安局的那种,汗?…

到这里我们的云服务器的折腾就告一段落了,之后备案 ok 后,还会继续鼓捣。比如,证书、mongodb 数据库等等,最后最后还得真正部署一个自己练习的项目啊,不然不是白折腾了!

记录完毕,第一次在平台上发文章,求轻拍,也希望能对有需求的人提供小小的参考~~~

最后附上原文链接


breezymelon
132 声望3 粉丝