Nuxt3部署上线(Docker+pm2)

1,273 阅读3分钟

环境准备

pm2部署

安装

npm install pm2 -g

常用命令

pm2 start <app>  // 启动 

pm2 restart <app> // 重启

pm2 stop <app> // 停止

pm2 list // 列出所有正在运行

pm2 logs <app> // 输出日志

pm2 delete <app> // 删除应用

pm2 show <app> // 显示详细信息

pm2 monit // 查看监控面版

配置文件

  • ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'ifai', // 应用程序名称
      port: '80', // 监听端口
      args: '', // 传递给脚本的参数
      instances: 'max', // 应用实例数
      autorestart: true, // 自动重启
      watch: false, // 监控文件变动
      exec_mode: 'cluster',
      cwd: './server', // 指定运行环境目录
      script: 'index.mjs', // 主脚本
    },
  ],
};

Docker部署

目录文件结构

image.png

  • dist
    • output(nuxt3打包后输出的文件,默认是.output,去掉.)
    • Dockerfile
    • ecosystem.config.js

附Dockerfile文件

  • Dockerfile
# 使用 Node.js 18 版本的官方镜像作为基础镜像
FROM node:18-alpine

# 设置工作目录为 /app
WORKDIR /app

# 复制当前目录下的所有文件到容器的 /app 目录中
COPY . /app

# 创建 logs 目录
RUN mkdir -p /app/logs

# 修改npm安装源
# RUN npm config set registry https://registry.npmmirror.com

# 安装pm2
RUN npm install pm2 -g

# 暴露容器80端口
EXPOSE 80

# 使用 PM2 运行 Nuxt 应用程序
CMD ["pm2-runtime", "start", "ecosystem.config.js"]

  • ecosystem.config.js 同上
  • output (nuxt3打包后输出的文件,默认是.output,去掉.)

部署

上传文件

  • 压缩dist目录,将dist.zip上传到服务器目录/home/ifai/(示例,自已选择目录),执行命令
  • 使用SSH scp进行上传
scp ./output.zip root@148.135.30.176:/home/ifai/dist
  • 连接服务器
cd /home/ifai/dist // 切到对应目录

rm -rf output // 删除旧文件夹

unzip output.zip // 解压

mv .output output // 重命名

制作镜像

  • 在Dockerfile同级目录下运行命令
docker build -t ifai-test . // <ifai-test>自已的镜像名

docker images // 制作完成后 查看已有镜像

运行容器

docker run -p 8000:80 --name ifai-fe-test -d ifai-test:latest 
// 解释
// 8000:80(容器80端口指向系统8000端口)
// <ifai-fe-test> 容器名称
// <ifai-test:latest> 依赖上一步制作好的镜像

docker ps // 运行后查看运行中的容器

测试

curl http://127.0.0.1:8000 // 看输出

后续更新

  • 将打包后的.output修改为output,压缩上传到服务器/home/ifai/dist(示例)目录下
  • 使用SSH scp进行上传
scp ./output.zip root@148.135.30.176:/home/ifai/dist
cd /home/ifai/dist // 切到对应目录

rm -rf output // 删除旧文件夹

unzip output.zip // 解压

mv .output output // 重命名

rm -r output.zip
  • 替换容器中的output
docker cp 主机路径 容器名:容器文件路径 // 后面路径是要复制到的目标路径

docker cp /home/ifai/dist/output ifai-fe-test:/app/

docker cp /home/ifai/dist/robots.txt ifai-fe-test:/app/output/public //替换robots.txt
  • 重启下容器
docker restart ifai-fe-test // <ifai-fe-test>容器名 
SSH更新
cd /home/ifai/dist // 切到对应目录

rm -r output.zip

scp ./output.zip root@148.135.30.176:/home/ifai/dist

unzip output.zip

mv .output output

cp ./robots.txt ./output/public

docker cp /home/ifai/dist/output ifai-fe-test:/app/

docker restart ifai-fe-test // 重启容器

问题

  • 查看docker容器运行日志,进行问题定位
  • 更多docker知识查看Docker部署环境

参考