chore: 新增 build-and-push.sh 镜像构建推送脚本并更新文档
This commit is contained in:
@@ -69,12 +69,15 @@ pnpm dev
|
|||||||
|
|
||||||
## 构建与部署
|
## 构建与部署
|
||||||
|
|
||||||
本地构建:
|
构建并推送镜像:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build -t swr.cn-north-4.myhuaweicloud.com/virtheart/arcticnewone:latest .
|
./build-and-push.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
脚本从环境变量读取 SWR 凭据(`SWR_REGISTRY`、`SWR_NAMESPACE`、`SWR_USERNAME`、`SWR_PASSWORD`),
|
||||||
|
多架构(`linux/amd64,linux/arm64`)构建并推送到华为云 SWR。
|
||||||
|
|
||||||
本地启动(使用 SWR 镜像,与生产一致):
|
本地启动(使用 SWR 镜像,与生产一致):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Executable
+64
@@ -0,0 +1,64 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# =========================================================
|
||||||
|
# Arcticnewone 镜像构建与推送脚本(本地 / 部署服务器手动执行)
|
||||||
|
#
|
||||||
|
# 遵循团队部署规范:
|
||||||
|
# - 镜像推送到华为云 SWR,tag 固定为 latest
|
||||||
|
# - 多架构构建推送:linux/amd64,linux/arm64
|
||||||
|
# - 登录凭据一律从环境变量读取,绝不写入仓库
|
||||||
|
#
|
||||||
|
# 使用前先设置环境变量(示例):
|
||||||
|
# export SWR_REGISTRY="swr.cn-north-4.myhuaweicloud.com"
|
||||||
|
# export SWR_NAMESPACE="virtheart"
|
||||||
|
# export SWR_USERNAME="<SWR 用户名>"
|
||||||
|
# export SWR_PASSWORD="<SWR 密码>"
|
||||||
|
# 然后执行:
|
||||||
|
# ./build-and-push.sh
|
||||||
|
# =========================================================
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# 必填环境变量校验(缺失即报错退出)
|
||||||
|
: "${SWR_REGISTRY:?请先设置环境变量 SWR_REGISTRY(例如 swr.cn-north-4.myhuaweicloud.com)}"
|
||||||
|
: "${SWR_NAMESPACE:?请先设置环境变量 SWR_NAMESPACE(例如 virtheart)}"
|
||||||
|
: "${SWR_USERNAME:?请先设置环境变量 SWR_USERNAME(SWR 登录用户名)}"
|
||||||
|
: "${SWR_PASSWORD:?请先设置环境变量 SWR_PASSWORD(SWR 登录密码)}"
|
||||||
|
|
||||||
|
IMAGE_NAME="arcticnewone"
|
||||||
|
IMAGE_TAG="latest"
|
||||||
|
FULL_IMAGE="${SWR_REGISTRY}/${SWR_NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}"
|
||||||
|
PLATFORMS="linux/amd64,linux/arm64"
|
||||||
|
BUILDER_NAME="multiarch-builder"
|
||||||
|
|
||||||
|
# 前置检查:docker 与 buildx
|
||||||
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
|
echo "错误: 未找到 docker 命令,请先安装 Docker" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if ! docker buildx version >/dev/null 2>&1; then
|
||||||
|
echo "错误: 未找到 docker buildx,请启用 Buildx(Docker 20.10+ 默认内置)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 1. 登录 SWR(凭据来自环境变量,不写入仓库)
|
||||||
|
echo ">>> [1/4] 登录 SWR: ${SWR_REGISTRY}"
|
||||||
|
echo "${SWR_PASSWORD}" | docker login "${SWR_REGISTRY}" -u "${SWR_USERNAME}" --password-stdin
|
||||||
|
|
||||||
|
# 2. 确保支持多架构的 builder 存在
|
||||||
|
echo ">>> [2/4] 准备多架构 builder: ${BUILDER_NAME}"
|
||||||
|
if ! docker buildx inspect "${BUILDER_NAME}" >/dev/null 2>&1; then
|
||||||
|
docker buildx create --name "${BUILDER_NAME}" --use
|
||||||
|
else
|
||||||
|
docker buildx use "${BUILDER_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 多架构构建并推送
|
||||||
|
echo ">>> [3/4] 构建并推送: ${FULL_IMAGE} (${PLATFORMS})"
|
||||||
|
docker buildx build \
|
||||||
|
--platform "${PLATFORMS}" \
|
||||||
|
--push \
|
||||||
|
-t "${FULL_IMAGE}" \
|
||||||
|
.
|
||||||
|
|
||||||
|
# 4. 输出推送结果
|
||||||
|
echo ">>> [4/4] 推送完成,镜像摘要如下:"
|
||||||
|
docker buildx imagetools inspect "${FULL_IMAGE}"
|
||||||
+18
-2
@@ -13,10 +13,26 @@
|
|||||||
|
|
||||||
`namespace.yaml` 负责创建 `arcticnewone` 命名空间;deployment/service/ingress 三个 YAML 的 `metadata` 均已指定 `namespace: arcticnewone`。
|
`namespace.yaml` 负责创建 `arcticnewone` 命名空间;deployment/service/ingress 三个 YAML 的 `metadata` 均已指定 `namespace: arcticnewone`。
|
||||||
|
|
||||||
|
## 镜像构建与推送
|
||||||
|
|
||||||
|
镜像由项目根目录的 `build-and-push.sh` 构建并推送到华为云 SWR(多架构 `linux/amd64,linux/arm64`,tag 统一为 `latest`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. 设置环境变量(凭据绝不写入仓库)
|
||||||
|
export SWR_REGISTRY="swr.cn-north-4.myhuaweicloud.com"
|
||||||
|
export SWR_NAMESPACE="virtheart"
|
||||||
|
export SWR_USERNAME="<用户名>"
|
||||||
|
export SWR_PASSWORD="<密码>"
|
||||||
|
|
||||||
|
# 2. 执行构建与推送
|
||||||
|
./build-and-push.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
推送完成后镜像地址:`swr.cn-north-4.myhuaweicloud.com/virtheart/arcticnewone:latest`。
|
||||||
|
|
||||||
## 部署前置条件
|
## 部署前置条件
|
||||||
|
|
||||||
1. 镜像已构建并推送到华为云 SWR:
|
1. 镜像已构建并推送到华为云 SWR(通过项目根目录 `./build-and-push.sh` 执行,见上方「镜像构建与推送」)
|
||||||
`swr.cn-north-4.myhuaweicloud.com/virtheart/arcticnewone:latest`(多架构 `linux/amd64,linux/arm64`,tag 统一为 `latest`)
|
|
||||||
2. 集群已安装 Traefik Ingress 与 cert-manager(ClusterIssuer 名称为 `lets-encrypt`)
|
2. 集群已安装 Traefik Ingress 与 cert-manager(ClusterIssuer 名称为 `lets-encrypt`)
|
||||||
3. 域名 `personal.virtheart.com` 的 DNS 已解析到集群入口
|
3. 域名 `personal.virtheart.com` 的 DNS 已解析到集群入口
|
||||||
4. 创建私有镜像拉取 Secret(凭据从环境变量读取,绝不写入仓库;命名空间由 `namespace.yaml` 创建):
|
4. 创建私有镜像拉取 Secret(凭据从环境变量读取,绝不写入仓库;命名空间由 `namespace.yaml` 创建):
|
||||||
|
|||||||
Reference in New Issue
Block a user