Home
avatar

.Wang

我的项目是如何打包上线的

在开始的项目上线采用最原生的 ftp 的形式,前端将将项目压缩成 zip 包上传到服务器,然后解压到指定目录,然后使用 nginx 进行配置,最后将项目上线。

后来觉得这样的形式有点麻烦,不太智能,后期采用 ci/cd 进行项目上线,最常见的就是 jenkins 进行项目上线,jenkins 集成了各种插件,等待项目需要上线的时候,只需要在 jenkins 中触发构建,就可以自动进行项目构建、测试、发布、部署等等。

但是有个问题就是 jenkins的 docker 容器在服务器上的 cpu 比较高,如何服务器负载过高,那么就会导致 jenkins 的 docker 容器变慢,解决这个问题就很简单,就是将 jenkins 的 docker 容器迁移到其他的服务器上,这样就可以避免服务器负载过高导致 jenkins 的 docker 容器变慢的问题, 在者就是扩容。

不过对我这小用户自己的项目玩玩来讲,没必要非要搞成企业那样的,这样我的钱包也不支持。

于是我将jenkins容器卸载掉了,该用shell脚本 + 定时任务执行,我的定时任务是每天凌晨执行一次。当然也可以在服务器上手动执行对应的shell脚本

我的项目分为俩种:

  1. 开源的项目
  2. 自己私有的项目

不过,每个项目都有Dockerfile文件。

Dockerfile

# 定义一个通用的构建阶段模板
ARG NODE_VERSION=node:20-alpine
# docker.1ms.run 镜像仓库
FROM docker.1ms.run/library/${NODE_VERSION} AS builder
WORKDIR /opt/apps/app

# 安装基础依赖和构建工具
RUN npm config set registry https://registry.npmmirror.com && npm install -g pnpm

# 拷贝统一构建脚本
COPY ./build.sh ./build.sh
RUN chmod +x ./build.sh

# 构建 web-home, web-home 是我的项目名
FROM builder AS build-web-home
COPY web-home/package.json ./package.json
COPY web-home/pnpm-lock.yaml ./pnpm-lock.yaml
RUN pnpm install
COPY web-home .
RUN sh ./build.sh


# 最终镜像阶段, 我是将所有的前端项目全部放在一起, 例如 /usr/share/nginx/html/test, /usr/share/nginx/html/B 等, 每个目录代表一个项目
FROM docker.1ms.run/library/nginx:alpine
COPY --from=build-web-home /opt/apps/app/dist /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

docker-compose.yml

# version: "3"
services:
  # web-apps, 前端项目
  web-apps:
    build: ./
    image: web-apps
    ports:
      - "8899:80"
    restart: unless-stopped

  # service-api, 后端项目
  service-api:
    build: ./service-api
    image: service-api
    ports:
      - "9999:9999"
    restart: unless-stopped

服务器的脚本文件

#!/bin/bash

# github url

GITHUB_URL="github.com"

# github token
GITHUB_TOKEN=""

# user name
GITHUB_USER_NAME=""

# 部署容器
NODE_CONTAINER="node_project_container"


# 私人项目
PRIVATE_URL_DIR=""
PRIVATE_URL="https://${GITHUB_TOKEN}@${GITHUB_URL}/${GITHUB_USER_NAME}/${PRIVATE_URL_DIR}.git"


# sim-admin
SIM_ADMIN_DIR=""
SIM_ADMIN_URL="https://${GITHUB_TOKEN}@${GITHUB_URL}/${GITHUB_USER_NAME}/${SIM_ADMIN_DIR}.git"


if [ -d "$PRIVATE_URL_DIR" ]; then

    cd "$PRIVATE_URL_DIR"

    echo "正在准备更新 ${PRIVATE_URL_DIR} 代码"

    if git pull; then
        echo "✅ ${PRIVATE_URL_DIR} 代码更新完成"



        if [ -d "$SIM_ADMIN_DIR" ]; then
            cd "$SIM_ADMIN_DIR"

            echo ""
            echo "正在准备更新 ${SIM_ADMIN_DIR} 代码"

            if git pull; then
                echo "✅ ${SIM_ADMIN_DIR} 代码更新完成"
            fi
        fi

    else
        echo "❌ ${PRIVATE_URL_DIR} 代码更新失败"
    fi

else

    echo "开始拉取 ${PRIVATE_URL}"

    if git clone "$PRIVATE_URL"; then
        echo "✅ git clone ${PRIVATE_URL} 成功"


        cd "$PRIVATE_URL_DIR"
        if git clone "$SIM_ADMIN_URL"; then
            echo "✅ git clone ${SIM_ADMIN_DIR} 成功"
        else
            echo "❌ git clone ${SIM_ADMIN_DIR} 失败"
            exit 1
        fi
    else
        echo "❌ git clone ${PRIVATE_URL} 失败"
        exit 1
    fi

fi


cd  /opt/apps
cd "$PRIVATE_URL_DIR"

# 镜像打包
docker-compose up -d --build

手动执行

想要手动执行,你需要使用ssh username@ip, 回车之后,你需要输入密码,然后输入cd /opt/apps(我的脚本文件放在这个目录下),然后执行./xx.sh,例如图片:

X

服务器/运营