最近研究nuxt服務端渲染的時候,看到nuxt的幾種部署方式,由於nuxt打包的靜態文件能夠直接放在GitHub上面,而後 TravisCI跟GitHub又很親切,就選擇了TravisCI部署。而後就走上了研究TravisCI的不歸路。html
在研究nuxt的這一篇文章 《如何部署至GitHub Pages?》的時候,全部操做都按照文章提示來,發現怎麼部署都失敗,而後仔細看本身頁面資源引用的路徑,並無實現文章中的router base 的路徑配置。前端
router: { base: '/<repository-name>/' }
而後本身反覆上傳驗證,終於發現問題。在官網給出的TravisCI配置中:node
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分支的打包了。不知道是否是還有別的解決方法,剛接觸也不是特別瞭解。nginx
能夠參考這篇文章Travis CI 自動化部署博客git
搞完GitHub Pages靜態部署,而後就想部署服務端,畢竟接觸nuxt的目的就是實現服務端渲染。
而後找了一個比較坑的文章... 每次Travis部署後,都要求輸入一個密碼。卡在了免密登陸的地方卡了好久好久... 在此多謝 @X1nFLY 的幫忙,很耐心的幫我解決了問題。github
其實免密登陸跟trvais並無什麼關係,原理就是私鑰公鑰的加密解密(有興趣能夠自行去搜索),只要你本地 ssh鏈接實現免密登陸,那Travis部署也能夠的。npm
須要在終端輸入:json
ssh-copy-id username@your-server-ip
ssh-copy-id 將本機的公鑰複製到遠程機器的authorized_keys文件中,ssh-copy-id也能讓你有到遠程機器的home, ~./ssh , 和 ~/.ssh/authorized_keys的權利,這時候只要你終端輸入:segmentfault
ssh username@your-server-ip
再次鏈接就不用再輸入密碼啦~服務器
下面到了最關鍵的時刻,部署成功後after_success:
怎麼處理?
對於一個前端(沒怎麼接觸事後臺)來講,確實一臉懵逼,要操做 一些經常使用Linux命令。
下面我就總結幾個我碰到的:
由於nuxt靜態資源是打包到 /dist 文件夾下的,因此咱們只須要把/dist文件夾 拷貝到服務端對應的文件夾便可。
after_success: - rsync -az --delete ./dist/* root@123.123.123.123:/data/html/nuxt # copy dist文件夾下的全部文件
打包對應文件夾是.nuxt 文件,可是須要服務端啓動服務,因此須要安裝各類依賴以及啓動配置。
因此須要將 .nuxt
nuxt.config.js
package.json
static
文件或文件夾都拷貝到服務器上,並對其安裝依賴,啓動服務。
after_success: - rsync -az --delete .nuxt nuxt.config.js package.json root@123.123.123.123:/data/ssr - ssh root@123.123.123.123 '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", },
對於須要拉取遠程代碼的工程,如今服務器 git init
初始化,而後指定遠程分支,綁定默認分支,就能夠直接在ci裏 git pull
代碼了。
after_success: - ssh root@123.123.123.123 'cd /data/node/ && git pull && npm install && npm run prd'
package.json
文件 npm run prd
配置:
"scripts": { "prd": "pm2 start bin/www", },
npm command not found
.這個很奇怪,本身ssh登陸服務器的時候,直接 npm -v
是能夠直接打印出來版本信息的。
可是CI 自動部署的時候就找不到命令,本身也不是特別清楚這環境配置這方面的東西,只好採用指定npm變量的方法。export PATH=/root/nvm/versions/node/v10.15.1/bin:$PATH
採用你當前服務器安裝的版本,能夠去對應目錄看下。
after_success: - ssh root@123.123.123.123 'cd /data/node/ && git pull && export PATH=/root/nvm/versions/node/v10.15.1/bin:$PATH && npm install && npm run prd'
部署成功後,發現打開頁面並無效果。
首先要配置好 nginx 轉發,而後須要在阿里雲平臺,打開你的服務器信息,找到防火牆,開啓對應的端口就能夠訪問啦。