最近研究nuxt服务端渲染的时候,看到nuxt的几种部署方式,因为nuxt打包的静态文件可以直接放在GitHub上面,然后 TravisCI跟GitHub又很亲切,就选择了TravisCI部署。然后就走上了研究TravisCI的不归路。
Travis CI 部署到GitHub项目gh-pages分支上,打开页面发现引用资源404?
在研究nuxt的这一篇文章 《如何部署至GitHub Pages?》的时候,所有操作都按照文章提示来,发现怎么部署都失败,然后仔细看自己页面资源引用的路径,并没有实现文章中的router base 的路径配置。
router: {
base: '//'
}
然后自己反复上传验证,终于发现问题。在官网给出的TravisCI配置中:
language: node_js
node_js:
- "8"
cache:
directories:
- "node_modules"
branches:
only:
- master
install:
- npm install
- npm run generate # 这个需要改为npm run generate:gh-pages
script:
- echo "Skipping tests"
deploy:
provider: pages
skip-cleanup: true
github-token: $GITHUB_ACCESS_TOKEN # Set in travis-ci.org dashboard, marked secure https://docs.travis-ci.com/user/deployment/pages/#Setting-the-GitHub-token
target-branch: gh-pages
local-dir: dist
on:
branch: master
需要把install中的 npm run generate
改为npm run generate:gh-pages
,这样就可以走gh-page分支的打包了。不知道是不是还有别的解决方法,刚接触也不是特别了解。
Travis CI 如何部署服务器?
可以参考这篇文章Travis CI 自动化部署博客
Travis CI 部署服务器如何实现免密登录?
搞完GitHub Pages静态部署,然后就想部署服务端,毕竟接触nuxt的目的就是实现服务端渲染。
然后找了一个比较坑的文章... 每次Travis部署后,都要求输入一个密码。卡在了免密登录的地方卡了很久很久... 在此多谢 @X1nFLY 的帮忙,很耐心的帮我解决了问题。
其实免密登录跟trvais并没有什么关系,原理就是私钥公钥的加密解密(有兴趣可以自行去搜索),只要你本地 ssh连接实现免密登录,那Travis部署也可以的。
需要在终端输入:
ssh-copy-id username@your-server-ip
ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利,这时候只要你终端输入:
ssh username@your-server-ip
再次连接就不用再输入密码啦~
Travis CI 部署怎么启动 nuxt服务,node服务?
下面到了最关键的时刻,部署成功后after_success:
怎么处理?
对于一个前端(没怎么接触过后台)来说,确实一脸懵逼,要操作 一些常用Linux命令。
下面我就总结几个我碰到的:
部署nuxt静态资源到服务器。
因为nuxt静态资源是打包到 /dist 文件夹下的,所以我们只需要把/dist文件夹 拷贝到服务端对应的文件夹即可。
after_success:
- rsync -az --delete ./dist/* [email protected]:/data/html/nuxt # copy dist文件夹下的所有文件
部署nuxt服务端渲染应用到服务器。
打包对应文件夹是.nuxt 文件,但是需要服务端启动服务,所以需要安装各种依赖以及启动配置。
所以需要将 .nuxt
nuxt.config.js
package.json
static
文件或文件夹都拷贝到服务器上,并对其安装依赖,启动服务。
after_success:
- rsync -az --delete .nuxt nuxt.config.js package.json [email protected]:/data/ssr
- ssh [email protected] 'cd /data/ssr/ && npm install && npm run prd'
npm run prd
采用pm2启动服务,保证服务关闭终端也可以运行。
我的package.json
文件配置:
"scripts": {
"prd": "pm2 restart ssr || pm2 start npm --watch --name ssr -- run start",
},
部署node应用服务器。
对于需要拉取远程代码的工程,现在服务器 git init
初始化,然后指定远程分支,绑定默认分支,就可以直接在ci里 git pull
代码了。
after_success:
- ssh [email protected] 'cd /data/node/ && git pull && npm install && npm run prd'
package.json
文件 npm run prd
配置:
"scripts": {
"prd": "pm2 start bin/www",
},
Travis CI 部署服务器,出现 npm command not found
.
这个很奇怪,自己ssh登录服务器的时候,直接 npm -v
是可以直接打印出来版本信息的。
但是CI 自动部署的时候就找不到命令,自己也不是特别清楚这环境配置这方面的东西,只好采用指定npm变量的方法。export PATH=/root/nvm/versions/node/v10.15.1/bin:$PATH
采用你当前服务器安装的版本,可以去对应目录看下。
after_success:
- ssh [email protected] 'cd /data/node/ && git pull && export PATH=/root/nvm/versions/node/v10.15.1/bin:$PATH && npm install && npm run prd'
Travis CI部署阿里云服务器打不开。
部署成功后,发现打开页面并没有效果。
首先要配置好 nginx 转发,然后需要在阿里云平台,打开你的服务器信息,找到防火墙,开启对应的端口就可以访问啦。