nuxt.js项目部署到服务器
项目打包
yarn build或者npm build
需要上传的文件
1. .nuxt目录
2. package.json
3. nuxt.config.js
4. static
5. server目录 (不传会报错ERROR Renderer is loaded but not all resources are unavailable! Please check /www/wwwroot/sanwei/.nuxt/dist/server existence.)
项目打包后上传到OSS
1.需要创建一个deploy.js
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({ region: 'oss的地理位置', accessKeyId: ' accessKeyId', accessKeySecret: ' accessKeySecret', bucket: 'bucket名字' }) /** *获取文件目录并删除 * @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文件夹名 */ 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("dist"); //指定oss目录
2.在package.json中添加deploy.js
"scripts": { "dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server", "build": "nuxt build", "deploy": "node deploy.js", "start": "cross-env NODE_ENV=production node server/index.js", "generate": "nuxt generate" },
3.在nuxt.config.js中设置publicPath

4.上传文件
npm deploy
服务器(以下部分都是在服务器端操作)
yum install gcc gcc-c++
安装node,npm环境
wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
tar -xvf node-v10.14.1-linux-x64.tar.gz
mv node-v10.14.1-linux-x64 node
配置环境变量
vim /etc/profile #set for nodejs export NODE_HOME=/usr/local/node (需要替换成自己的Node安装目录) export PATH=$NODE_HOME/bin:$PATH
生效配置文件
source /etc/profile node -v npm -v
安装项目依赖
npm i --production
安装pm2
npm i -g pm2
设置开机自启动
pm2 startup pm2 save
使用pm2启动你的nuxt.js
pm2 start npm --name "my-nuxt" -- run start
pm2常用命令
pm2 list # 查看当前正在运行的进程 pm2 start all # 启动所有应用 pm2 restart all # 重启所有应用 pm2 stop all # 停止所有的应用程序 pm2 delete all # 关闭并删除所有应用 pm2 logs # 控制台显示所有日志 pm2 start 0 # 启动 id为 0的指定应用程序 pm2 restart 0 # 重启 id为 0的指定应用程序 pm2 stop 0 # 停止 id为 0的指定应用程序 pm2 delete 0 # 删除 id为 0的指定应用程序 pm2 logs 0 # 控制台显示编号为0的日志 pm2 show 0 # 查看执行编号为0的进程 pm2 monit my-nuxt # 监控名称为my-nuxt的进程
pm2 list

pm2 logs

配置Nginx
首先在nginx conf目录下新建一个conf文件我的是在 /www/server/nginx/conf/
配置规则
touch sanwei.conf vi sanwei.conf
map $sent_http_content_type $expires { "text/html" epoch; "text/html; charset=utf-8" epoch; default off; } server { listen 80; # the port nginx is listening on server_name sanwei.suanliutudousi.com; # setup your domain here gzip on; gzip_types text/plain application/xml text/css application/javascript; gzip_min_length 1000; location / { expires $expires; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 1m; proxy_connect_timeout 1m; proxy_pass http://127.0.0.1:3000; # set the adress of the Node.js instance here } }
保存退出,然后再在 nginx.conf文件的http中添加 刚才创建的sanwei.conf

重启nginx
启动代码格式:nginx安装目录地址 -c nginx配置文件地址(下面需要替换成你的nginx文件目录)
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
遇到的问题(2019/06/05)
安装的时候node版本太低 ,通过n来管理node版本
npm install -g n n stable node -v
n切换版本的时候失效
vi ~/.bash_profile 添加 export N_PREFIX=/usr/local/bin/node #根据你的安装路径而定 export PATH=$N_PREFIX/bin:$PATH
source .bash_profile
n stable node -v
遇到的问题(2020/12/07)
nginx配置问题,页面白屏,js、css和img404,原有nginx配置有如下,去除如下即可。
location ~ .*.(js|css)?$ { expires 12h; error_log off; - access_log /dev/null; } location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; error_log off; access_log /dev/null; }
参考: