在讀這篇文檔時,但願你對 nuxt 及 pm2,有簡單的瞭解html
$ npm i pm2 -g
$ npx create-nuxt-app <項目名>
複製代碼
$ ssh-copy-id root@1.2.3.4
# 把本機的 SSH 祕鑰添加至服務器,配置成功後,之後就不須要再執行這條 SSH 命令了
複製代碼
$ pm2 ecosystem
複製代碼
運行後會在項目根目錄生成 ecosystem.config.js 文件node
module.exports = {
apps: [
{
name: "my-app",
autorestart: true,
script: "server/index.js",
env: {
NODE_ENV: "development"
},
env_production: {
NODE_ENV: "production"
}
}
],
deploy: {
dev: {
// 服務器操做用戶
user: "root",
// 服務器ip
host: "1.2.3.4",
ref: "origin/master",
repo: "https://github.com/faner11/angular-case.git",
path: "/root/my-app",
"post-deploy":
"rm -rf node_modules && npm install && npm run build && pm2 startOrReload ecosystem.config.js --env production"
}
};
複製代碼
post-deploy
中作了哪些操做git
rm -rf node_modules
刪除 node_modulesnpm install
從新安裝包npm run build
運行打包pm2 startOrReload ecosystem.config.js --env production
pm2 啓動應用pm2 deploy dev setup
,命令中的dev
是在上面配置文件中寫的部署環境的名稱。git push origin master
將代碼提交至遠程倉庫。pm2 deploy dev
,這個命令執行後服務器把前面從本機提交至 git 倉庫上的最新代碼拉下拉,而且運行post-deploy
中的命令。通常沒什麼問題的話,通過這幾步操做,就能部署成功了。參考文檔github
.nuxt/dist/client
上傳至 cdn在根目錄新建upload.js
文件npm
const OSS = require("ali-oss");
const fs = require("fs");
const path = require("path");
const os = require("os");
const PUBLIC_PATH = path.join(__dirname, "/");
const client = new OSS({
accessKeyId: "your access key",
accessKeySecret: "your access secret",
bucket: "your bucket name",
region: "oss-cn-hangzhou"
});
/** *獲取文件目錄並刪除 * @param {*} dir //文件目錄 */
async function deleteDir(dir) {
let result = await client.list({
prefix: dir + "/",
delimiter: "/"
});
if (result.objects) {
let aa = [];
result.objects.forEach(function(obj) {
aa.push(obj.name);
});
try {
await client.deleteMulti(aa, {
quiet: true
});
console.log("刪除成功");
} catch (e) {
console.log("文件刪除失敗", e);
}
}
}
/** * 遍歷文件夾遞歸上傳 * @param {path} src 本地路徑 * @param {string} dist oos文件夾名 www|kouzi */
function addFileToOSSSync(src, dist) {
let docs = fs.readdirSync(src);
docs.forEach(function(doc) {
let _src = src + "/" + doc,
_dist = dist + "/" + doc;
let st = fs.statSync(_src);
// 判斷是否爲文件
if (st.isFile() && doc !== ".DS_Store") {
putOSS(_src, _dist);
}
// 若是是目錄則遞歸調用自身
else if (st.isDirectory()) {
addFileToOSSSync(_src, _dist);
}
});
}
/** *單個文件上傳至oss */
async function putOSS(src, dist) {
try {
await client.put("/" + dist, src);
} catch (e) {
console.log("上傳失敗".e);
}
}
/** *上傳文件啓動 *@param {string} dirName 將要上傳的文件名 */
async function upFile(dirName) {
try {
await deleteDir(dirName);
await addFileToOSSSync(PUBLIC_PATH + ".nuxt/dist/client", dirName);
console.log(dirName + "上傳oss成功");
} catch (err) {
console.log(dirName + "上傳oss成功失敗", err);
}
}
upFile("www");
複製代碼
package.json
將scripts
中的build
改成以下:json
{
"scripts": {
"build": "nuxt build && node upload.js"
}
}
複製代碼
nuxt.config.js
export default {
build: {
publicPath: "https://cdn.nuxtjs.org"
}
};
複製代碼
至此咱們的自動化部署加文件自動上傳阿里雲 oss 就完成了。 之後只需執行pm2 deploy dev
就能夠了。api