用Docker中部署nuxt

2,623 阅读1分钟

node方式运行

  • 创建DockerFile

    FROM node:14.15.1-alpine
    ​
    # 创建容器内的项目存放目录
    RUN mkdir -p /home/nodeapp
    WORKDIR /home/nodeapp
    ​
    COPY . /home/nodeapp
    ​
    #COPY .nuxt /home/nodeapp
    #COPY static /home/nodeapp
    #COPY nuxt.config.js /home/nodeapp
    #COPY package.json /home/nodeapp
    #COPY ecosystem.config.js /home/nodeapp
    #COPY serverconfig.js /home/nodeapp
    #COPY pm2.json /home/nodeapp
    ​
    RUN cd /home/nodeapp 
    RUN chmod -R 777 *
    RUN npm install --registry=https://registry.npm.taobao.org
    RUN npm run build:test
    RUN ls -l -a
    ​
    # 容器对外暴露的端口号,要和node项目配置的端口号一致
    EXPOSE 8000
    ​
    # 容器启动时执行的命令
    CMD ["sh", "-c", "npm run start:$APP_ENV"]
    # npm run start:$APP_ENV
    

pm2方式运行

  • 创建pm2.json或ecossystem.config.js
    {
        "name": "tech-site",
        "exec_mode": "cluster",
        "instances": "max",
        "script": "./node_modules/nuxt/bin/nuxt.js",
        "args": "start",
        "env": {
            "NODE_ENV": "prod",
            "VUE_APP_TITLE": "prod"
        },
        "env_dev": {
            "NODE_ENV": "dev",
            "VUE_APP_TITLE": "dev"
        },
        "env_test": {
            "NODE_ENV": "dev",
            "VUE_APP_TITLE": "test"
        },
        "env_prod": {
            "NODE_ENV": "prod",
            "VUE_APP_TITLE": "prod"
        }
    }
    
  • 创建一个执行的sh文件(pm2.sh)
    #!/bin/sh
    pm2 start pm2.json --env $APP_ENV #启动pm2,$APP_ENV:docker运行时候传入的参数
    pm2 logs
    
  • DockerFile
    FROM node:14.15.1-alpine
    ​
    # 创建容器内的项目存放目录
    RUN mkdir -p /home/nodeapp
    # 设置工作目录
    WORKDIR /home/nodeapp
    # 将代码复制到容器中
    COPY . /home/nodeapp
    ​
    RUN cd /home/nodeapp
    # 添加权限,防止依赖无法安装
    RUN chmod -R 777 * 
    # 添加执行shell文件权限
    RUN chmod u+x pm2.sh
    ​
    RUN npm install --registry=https://registry.npm.taobao.org
    RUN npm i pm2 -g --registry=https://registry.npm.taobao.org
    RUN npm run build:test
    ​
    RUN ls -l -a
    ​
    # 容器对外暴露的端口号,要和node项目配置的端口号一致
    EXPOSE 8000
    ​
    # 通过shell文件来执行多条命令
    CMD ["./pm2.sh"]
    ​
    
  • 构建镜像
    docke build -t nuxt:pm2 .
    
  • 运行容器
    docker run -d -p -e APP_ENV=test 3200:8000 nuxt:pm2
    

\