Nestjs+Nuxtjs+docker服务器部署教程

2020.02.13 13:02:08
145
阅读约 3 分钟
Scroll down

前后端分离项目docker部署,首先我们需要在服务器上安装必要的依赖,然后通过命令集的方式,创建相应的镜像以及服务,并通过反向代理将请求代理到相应的端口,这样我们的项目的部署就不会污染到服务器的环境,而且部署速度也相当的快。
img

docker环境配置(linux) #

首先我们在宿主机上安装一些需要用到的依赖

yum install yum-utils device-mapper-persistent-data lvm2 -y
// 添加docker远程库
//  yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce docker-ce-cli containerd.io -y
// 开机启动 docker
systemctl start docker
systemctl enable docker
docker run hello-world
yum install epel-release -y
// 安装一下git
yum install git -y

在后面会用到docker-compose,所以提前安装一下

curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
// 添加可执行权限
chmod +x /usr/local/bin/docker-compose

拉取项目 #

我们可以将项目拉取到一个新的目录mnt

cd /mnt
git clone <项目名>

docker-compose文件 #

docker-compose.yml文件创建一个nest服务,其中包括一个nest、mysql、以及myadmin镜像。

version: '3'

services:
  nest:
    build: .
    ports:
      - 3001:3001
    links:
      - mysql:mysql
    volumes:
      - ../../uploads:/usr/src/app/uploads
  mysql:
    image: mysql:${MYSQL_VERSION}
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
    // 数据持久化,将数据存储到目录之外
      - ../../db:/var/lib/mysql
  myadmin:
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      PMA_HOST: mysql

在创建服务的过程中,我们还需要给nest服务创建一个dockerfile,接下来它会根据dockerfile文件在镜像中通过npm命令生成一个对应的dist文件夹。

FROM node:12.13.0
WORKDIR /usr/src/app
COPY . . 
COPY production.env .env 

RUN npm config set registry https://registry.npm.taobao.org
RUN npm install
RUN npm run build 
// 暴露一个地址用来请求
EXPOSE 3001
// nestjs的守护进程开启方式
CMD ["npm","run","start:prod"]

docker-compose.yml所在目录下,执行以下命令后会生成对应的服务

docker-compose -f docker-compose.yml build
// 服务生成之后还需要运行
docker-compose -f docker-compose.yml up -d

我们还需要给项目配置环境变量env文件,用来设置mysql的管理员账号密码。
例如:

# Docker Compose
MYSQL_VERSION=5.7

MYSQL_DATABASE=nest
MYSQL_USER=nest
MYSQL_ROOT_PASSWORD=root
MYSQL_PASSWORD=password

# TypeORM
TYPEORM_CONNECTION =mysql  
TYPEORM_HOST =192.168.99.100
TYPEORM_PORT =3306 
TYPEORM_USERNAME =nest  
TYPEORM_PASSWORD =password  
TYPEORM_DATABASE =nest  
TYPEORM_SYNCHRONIZE =true 
TYPEORM_LOGGING =true 
TYPEORM_ENTITIES =./src/**/*.entity.ts

对于前端也需要运行服务,同样的,还需要给nuxt项目创建一个服务,创建一个docker-compose.yml文件,运行命令后会生成一个nuxt服务

version: '3'

services:
  nuxt:
    build: .
    ports:
      - 3000:3000

以及它的dockfile

FROM node:12.13.0
WORKDIR /usr/src/nuxt
ENV HOST 0.0.0.0
COPY . . 
COPY production.env .env

RUN npm config set registry https://registry.npm.taobao.org
RUN npm install
RUN npm run build 

EXPOSE 3000
CMD ["npm","start"]

运行完上面的命令,可以看到我们的服务现在已经暴露了对应的端口。
img

nginx配置 #

在服务创建完成之后,还需要将请求代理到对应的地址。

先将80端口代理到前端的3000地址,这里为了方便,我用bt面板来设置
img

然后将后端请求代理到3001端口,在配置文件中加入下面的代码

  location /api/ {
    #代理后端服务(后端接口地址)
    proxy_pass http://localhost:3001/api/;
}
阅读:145 . 字数:687 发布于 8 个月前
Copyright 2018-2020 Siques