Fork me on GitHub

koa学习-项目的部署和上线-8

简单配置 PM2 环境 和发布脚本

1
2
3
HTTP 请求 Nginx -> 静态资源 location dist/html js css
动态数据请求 proxy Nodejs API Server

我们上服务器配置好一堆线上发布的东西:

  • 安装moongod
  • 安装node
  • 安装pm2
  • 安装nginx

然后在本地配置好发布的脚本:

在根目录下创建deploy.yaml来作为传文件的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apps:
- script: ./server/index.js
name: 'Koa2'
env:
COMMON_VARIABLE: true
env_production:
NODE_ENV: production
deploy:
production:
user: root
host:
- zoomdong.xin
port: 22
ref: origin/master
repo:
https://github.com/fireairforce/koa-learning.git
path:
/www/koa/production
ssh_options: StrictHostKeyChecking=no
pre-deploy: git fetch --all
post-deploy: 'npm install && npm run build && pm2 startOrRestart deploy.yaml --env production'
env:
NODE_ENV: production

这个地方使用root 用户主要是因为我自己创建的用户的root权限一直拿不到,这个bug后续我可以去研究一下。

这里使用 root 当然要记得配置一下node的路由:
先使用拿到 node 存储的地址

1
npm prefix -g

然后我们把这个路径添加到/etc/profile文件里去

1
2
export NODE_HOME=/usr/local/node/bin
export PATH=$NODE_HOME:$PATH

然后运行一下就可以了source /etc/profile

然后配置一个私钥对儿.

可以参考一波 github的文档,

我们先利用自己的邮箱在服务器上面配置一个私钥对儿:

1
ssh-keygen -t rsa -b 4096 -C "1344492820@qq.com"

之后在将私钥加入进去:

1
2
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

然后我们把这个私钥对儿拷贝一下粘贴到我们的github里面去:

1
cat .ssh/id_rsa.pub

然后在服务器上面尝试clone一下仓库:

1
git clone https://github.com/fireairforce/koa-learning.git

如果能 clone 成功则证明没有问题.

然后去服务器上面创建我们对应的文件夹

1
2
3
4
5
sudo mkdir www
cd www
mkdir koa
cd koa
mkdir production

就这么简单文件就创建好了,这里之后要server里面引用中间价的地方 parcel 给移除掉,然后使用 git 命令将本地的代码推到远程的仓库里面去.

推完之后,使用pm2脚本来完成发布.

1
pm2 deploy deploy.yaml production setup

这样就把项目部署到了服务器上面。

先进行第一步,把项目部署到服务器上面,然后我们去服务器上面看看.

production/current目录下可以看到项目的代码已经全部被拉取上去了。

然后我们将服务跑起来:

1
pm2 deploy deploy.yaml production update

这之后然后我遇见了一个问题,类似于这里,然后仔细了研究了一下issue,虽然没有很看懂,但是我上服务器上面查看了一下node的版本是v8.9.0,然后由于我在服务器上面管理node版本的工具是nvm,于是我用nvm安装了10.13.0版本,然后重新运行pm2的脚本命令,发现同样的错误还是会报,于是这个时候我切出服务器然后再上去,node -v输出node版本的时候发现node的版本还是停留在8.9.0的时代,这个时候我发现可能是nvm的问题,于是在往上搜了一波之后,发现服务器每次退出的时候,nvm都会将node版本退回到一个默认的版本,我才直达这个时候要自己设置一波默认的量,于是使用了nvm alias default v10.13.0 让默认的node版本为10.13.0,这个时候这个问题就解决了.

上线完成中重新,刷了一次之前的babel版本,实在是感觉以前的babel版本太低太低了….

大概是这样的,把package.json 里面和babel 相关的东西全部删除了。然后安装新的依赖,配置比大概是这样的.:

1
2
3
4
5
6
7
8
9
10
11
12
13
"dependencies": {
"@babel/polyfill": "^7.4.4",
"@babel/register": "^7.5.5",
"@babel/core": "^7.5.5",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-proposal-decorators": "^7.4.4",
"@babel/plugin-transform-runtime": "^7.5.5",
"@babel/preset-env": "^7.5.5",
"@babel/preset-react": "^7.0.0",
},
"devDependencies": {
}

算了,后面打包过程中发现了因为前后端代码耦合在一起导致有些依赖包找不到,所以把依赖全部放在生产环境里面。

中途也遇到puppeteer在服务器上面装不上去的问题,直接去github的issue区域找到了解决办法。
装不上去可以使用这样的手法来安装:

1
sudo npm install -g puppeteer --unsafe-perm=true

中途遇见sass的问题,可以参考安装sasssass安装中遇见的bugruby安装sass过程中遇见的坑

重点第三篇,里面有cenos 下面的一些解决办法。

部署上去之后,去配置一下nginx:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 服务器均衡负载的配置
upstream Koa2{
server 127.0.0.1:1238;
}
server{
listen 80;
server_name koa2.zoomdong.xin;
location / {
root /var/www/koa/production/current/dist;
index index.html;
}
location /api {
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://koa2;
proxy_redirect off;
}
location ~* ^.+\.(html|jpg|jpeg|gif|png|ico|css|js|pdf|txt){
root /var/www/koa/production/current/dist;
}
}

这样便部署完成了.

-------------本文结束感谢您的阅读-------------