一:本地终端连接到阿里云服务器 (ubuntu,其他系统步骤可能稍有出入,但是方法一致)
-
首先我们要保证我们终端能够连接到服务器,如果忘记阿里云服务器 root 登录密码,可以如下重置。
使用
terminal
终端进行远程连接
ssh root@100.100.100.100
然后输入我们刚刚重置的实例密码。
- 让
terminal
能够默认长时间连接,不因为一小段时间未操作,就断开连接。
编辑服务器
/etc/ssh/sshd_config
,最后增加
ClientAliveInterval 60
ClientAliveCountMax 60
表示每 60 秒向客户端发起一次心跳,如果客户端无回应,则最多累计发送 60 次。
- 每次远程登录如果需要输入密码略显复杂,接下来配置 ssh 免密登陆。
- 安装 ssh:
sudo apt-get install ssh
- 生成公钥私钥:
ssh-keygen -t rsa
(一路Enter
回车键到底)cd ~/.ssh
文件,会发现多了如下三个文件authorized_keys id_rsa id_rsa.pub
- 将本地机器上的
id_rsa.pub
文件里面的公钥,拷贝到 服务器的authorized_keys
文件中- 最后在服务端运行
service ssh restart
重启即可配置完成。再次运行ssh root@100.100.100.100
就可以不需要输入密码直接登录了。
二:搭建环境
- 安装 nvm 这是一个 node 的版本控制器
- 升级
sudo apt-get update
保证 apt-get 是最新版。sudo apt-get install vim openssl build-essential libssl-dev wget curl git
安装一些环境必要包curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.4/install.sh | bash
安装 0.31.4 版本的 nvm,有时候因为网络原因会失败,可以多试几次。- 重启终端,然后用
nvm
命令测试安装是否成功。
- 安装指定版本的 node
nvm install v8.15.1
安装指定版本nvm use 8.15.1
当前环境使用指定版本nvm alias default 8.15.1
指定默认 node 版本
- 查看并更换 npm,npm 是 node 的包管理器,会随着 node 自动安装
- 作为国内开发,需要查看 npm 的源:
npm config get registry
- 如果源不是淘宝的,需换成淘宝源:
npm config set registry https://registry.npm.taobao.org/
- 安装 nginx,因为 egg.js 需要使用 nginx 来做反向代理。
sudo apt-get install nginx
sudo /etc/init.d/nginx start
启动 nginxcurl http://localhost/
ping 一下这个地址,返回Welcome to nginx!
表示安装成功。
- 为什么外网不能访问我们的首页呢?这是因为阿里云服务器有个安全组配置,我们需要去打开 80 端口。
三:上传 egg.js 代码到服务器
- 使用 腾讯 git 代码管理平台,上传自己的代码
- 将我们阿里云远程服务器中 ~/.ssh/ 目录下的 id_rsa.pub 公钥加入到代码管理的 ssh 中。让远程服务器能访问我们的 git 代码仓库。
- git clone xxxx代码地址xxxx 即可。
四:利用 nginx 实现 egg.js 的反向代理,并且支持 https
前期提条件:有一个备案好的域名。
-
去 阿里云的 SSL 控制台,申请个人免费 SSL ,每个有效期只有一年,目前有完全免费的。
-
然后点击
下载
,会看到如下页面。
点击帮助,根据 nginx 帮助内容配置 nginx。
期间遇到任何问题,个人超过一个小时未解决,可以提交工单,你是阿里云付费用户,阿里云会有人帮你解决问题的。很强大!
- 几个部署 SSL 需要用到的命令
tar zcvf cer.tar.gz cer
将本地证书打包成cer.tar.gz
压缩文件scp local_file remote_username@remote_ip:remote_folder
将本地文件传递到服务器tar xvf cer.tar.gz
服务端解压缩文件rm -rf cer.tar.gz
删除多余的压缩文件
确保 cer 目录放在 /etc/nginx/
下,然后在 /etc/nginx/conf.d
文件夹下创建 myprogram-7001.conf
文件,并且填入一下内容
# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。
server {
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name mt-app.runduck.cn; #将localhost修改为您证书绑定的域名,例如:www.example.com。
root html;
index index.html index.htm;
ssl_certificate cer/3670617_mt-app.runduck.cn.pem; #将domain name.pem替换成您证书的文件名。
ssl_certificate_key cer/3670617_mt-app.runduck.cn.key; #将domain name.key替换成您证书的密钥文件名。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:7001;
}
}
server {
listen 80;
server_name mt-app.runduck.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
注释掉 /etc/nginx/nginx.conf
文件内的 #include /etc/nginx/sites-enabled/*;
防止额外配置影响我们自己的配置。
- 配置完成后用
sudo nginx -t
命令检查我们 conf 里面的配置是否正确。输出syntax is ok
。sudo service nginx reload
重启 nginx 服务器
五:再安装一个 pm2,有部分 nodejs 代码需要用 pm2 执行
npm i pm2 -g
pm2 start app.js --name="api"
# 启动应用程序并命名为 "api"