- build-adminapi-forlinux.sh: 添加 HTTP_PROXY/HTTPS_PROXY 构建参数 - watch-adminapi-forlinux.sh: 添加代理环境变量和 --restart=always - watch-tenantapi-forlinux.sh: 添加代理环境变量和 --restart=always - 代理默认启用,可通过 USE_PROXY=0 禁用 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
58 lines
2.6 KiB
Bash
Executable File
58 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 用法:在 Linux 终端执行本脚本,自动构建并重启 AdminApi 容器。
|
||
# 前置:已安装并运行 Docker。
|
||
set -euo pipefail
|
||
# 0. 遇到异常时输出错误信息,方便查看
|
||
trap 'echo "发生错误:${BASH_COMMAND}" >&2' ERR
|
||
# 1. 基本变量(脚本位于 repo_root/scripts,下移一层再上跳到仓库根)
|
||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
repo_root="$(cd "${script_dir}/.." && pwd)"
|
||
image_name="${IMAGE_NAME:-takeout.api.admin:dev}"
|
||
container_name="${CONTAINER_NAME:-takeout.api.admin}"
|
||
build_configuration="${BUILD_CONFIGURATION:-Release}"
|
||
docker_network="${DOCKER_NETWORK:-web_apps}"
|
||
dockerfile_path="${repo_root}/src/Api/TakeoutSaaS.AdminApi/Dockerfile"
|
||
echo "工作目录:${repo_root}"
|
||
|
||
docker_build_args=()
|
||
if [ "${NO_CACHE:-0}" = "1" ]; then
|
||
docker_build_args+=(--no-cache)
|
||
fi
|
||
|
||
# 3. 代理配置(用于 docker build 阶段访问 nuget.org)
|
||
proxy_host="172.18.0.1"
|
||
proxy_port="7890"
|
||
if [ "${USE_PROXY:-1}" = "1" ]; then
|
||
docker_build_args+=(--build-arg "HTTP_PROXY=http://${proxy_host}:${proxy_port}")
|
||
docker_build_args+=(--build-arg "HTTPS_PROXY=http://${proxy_host}:${proxy_port}")
|
||
echo "已启用代理:http://${proxy_host}:${proxy_port}"
|
||
fi
|
||
|
||
# 2. 先构建镜像(减少停机时间;同时避免每次都删除镜像导致缓存失效)
|
||
echo "开始构建镜像:${image_name} (Configuration=${build_configuration})"
|
||
docker build -f "${dockerfile_path}" -t "${image_name}" --build-arg "BUILD_CONFIGURATION=${build_configuration}" "${docker_build_args[@]}" "${repo_root}"
|
||
|
||
# 3. 停止并删除旧容器
|
||
if docker ps -a --format '{{.Names}}' | grep -qx "${container_name}"; then
|
||
echo "发现旧容器,正在移除:${container_name}"
|
||
docker rm -f "${container_name}" >/dev/null
|
||
fi
|
||
|
||
# 4. 运行新容器并映射端口
|
||
run_args=()
|
||
if [ -n "${docker_network}" ]; then
|
||
if ! docker network inspect "${docker_network}" >/dev/null 2>&1; then
|
||
echo "Docker network 不存在,正在创建:${docker_network}"
|
||
docker network create "${docker_network}" >/dev/null
|
||
fi
|
||
run_args+=(--network "${docker_network}")
|
||
fi
|
||
|
||
echo "运行新容器:${container_name} (端口映射 7801:7801,环境 Development,网络 ${docker_network})"
|
||
docker run -d --name "${container_name}" "${run_args[@]}" --restart=always -e ASPNETCORE_ENVIRONMENT=Development -p 7801:7801 "${image_name}"
|
||
echo "完成。镜像:${image_name},容器:${container_name}。Swagger 访问:http://localhost:7801/swagger"
|
||
# 6. 交互式终端下暂停,方便查看输出
|
||
if [ -t 0 ]; then
|
||
read -r -p "按回车关闭窗口" _
|
||
fi
|