Travis CI 部署遇到的问题

最近研究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 转发,然后需要在阿里云平台,打开你的服务器信息,找到防火墙,开启对应的端口就可以访问啦。

你可能感兴趣的:(部署,travis-ci,node.js,nuxt.js)