学习 docker部署之day01

235 阅读3分钟

准备工作

docker和安装docker-compose安装教程网上大把,这里不细说了

docker-cmpose部署umi项目

按照官网新建umi项目

将打包后的文件dist上传到服务器,并新建docker-compose.yml文件

创建docker-compose.yml

::: code-group

# docker-compose.yml
version: '3.1'
services:
    db:
        image: postgres
        volumes:
            - ../postgres:/var/lib/postgresql/data
        restart: always
        ports:
            - 5432:5432
        networks: # 容器网络
            - laoyang-net
        environment:
            - POSTGRES_USER=root
            - POSTGRES_PASSWORD=******

    adminer:
        image: adminer
        restart: always
        ports:
            - 8008:8080
    ly_server:
        build: # 制作镜像
            context: . # 当前目录,Dockerfile 所在的目录(单“.”表示当前目录)
            dockerfile: Dockerfile # dockerfile文件名称
        container_name: nestjs
        restart: on-failure:3
        ports:
            - 3000:3000
        networks: # 容器网络
            - laoyang-net
        environment:
            - DATABASE_URL="mysql://账户:密码@101.43.20.171:3306/dev"
        depends_on: # 依赖项
            - db # 容器名

    nginx:
        image: nginx:latest
        container_name: nginx
        restart: always
        ports:
            - 8080:80
        volumes:
            - ../nginx.conf:/etc/nginx/nginx.conf # 配置ngix.conf 转发处理后端(nest.js)请求
            - ../ly-admin/dist:/usr/share/nginx/html
        depends_on: # 依赖项
            - ly_server # 容器名
        networks: # 容器网络
            - laoyang-net
networks:
    laoyang-net:
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
    listen       80;
    server_name  101.43.20.171;
    charset utf-8;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ $uri.html /index.html =404;
        allow all;
    }

    location /api/ {
        proxy_pass http://101.43.20.171:3000/;
		proxy_set_header Host $proxy_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        allow all;
        proxy_set_header Origin "";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    }

}

其中 db为数据库服务 adminer为数据库管理工具 ly_server为后端服务 nginx 为静态资源服务器 前端dist文件压缩后放在ly-admin文件夹下然后解压 :::

目录结构

.
├─ ly-admin    # 前端目录
│  ├─ dist
├─ ly-server   # 后端目录
│  └─ src
│  ├─ prisma
│  └─ package.json
│  ├─ docker-compose.yml
│  └─ Dockerfile
│  └─ ...
└─ nginx.conf

部署步骤

上传dist压缩包到ly-admin目录, 进入ly-admin目录

cd ly-admin

解压dist

unzip -d dist dist.zip

进入到docker-compose.yml所在目录 即ly-server目录

cd ../ly-server

启动服务

docker-compose up -d

前端部署完成 查看容器启动情况 都为runing 则正常启动

docker ps

docker-cmpose部署nest项目

docker-compose.yml放在后端项目的根目录下 尝试过打包部署 prima 初始化总有问题 暂时没找到原因,后修改为上传整个项目到服务器部署

部署步骤

git下载最新代码压缩包 解压压缩包后修改文件夹名为ly-server后压缩(仅仅便于服务器上解压) 上传到 ly-server文件夹所在目录下

删除旧文件代码

rm -rf ly-server

解压压缩包

unzip -d ly-server ly-server.zip

进入ly-server目录

cd ly-server

启动服务

docker-compose up -d

此时以Dockerfile构建镜像

# 使用 Node.js 镜像作为基础镜像
FROM node

# 设置工作目录
WORKDIR /code-blog

#安装pnpm
RUN npm install -g pnpm

#复制依赖文件到容器工作目录
COPY package*.json .

#复制prisma到容器工作目录
COPY prisma ./prisma/

#复制prisma的环境变量文件到容器工作目录(未解决prisma读取环境变量失败的问题)
# COPY .env ./prisma/.env

# 安装项目依赖
RUN pnpm install

# 将docker-compose.yml所在目录的所有文件复制到容器工作目录
COPY . .

# RUN npm install -g prisma
# 执行prisma 初始化脚

# RUN npm run build
# 暴露 Node.js 服务端口

EXPOSE 3000

# 运行 Node.js 服务
CMD ["npm", "start"]

后端项目部署完成 查看容器启动情况 都为runing 则正常启动

docker ps

docker-cmpose部署vitepress

vitepress部署参考umi部署

如果部署后发现服务器样式错乱 请检查nginx.conf 和项目配置文件中的base 路径是否正确

部署步骤

由于本人vitepress 单独部署到了另一个nginx容器上,且还涉及到权限问题,可能导致无法上传压缩包到指定目录

可先上传到未涉及到权限的目录,如/laoyang/code-blog

cd /laoyang/code-blog

使用sudo命令复制压缩包到涉及到权限指定目录

sudo cp dist.zip /usr/local/nginx

进入到vitepress部署目录

cd /usr/local/nginx

删除旧的vitepress代码

sudo rm -rf dist

解压压缩包到指定目录

sudo unzip -d www dist.zip

重启nginx服务

docker restart nginx-test