docs: 初始化 Docs 仓库
This commit is contained in:
48
scripts/build-adminapi-forlinux.sh
Executable file
48
scripts/build-adminapi-forlinux.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/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
|
||||
|
||||
# 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[@]}" -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
|
||||
51
scripts/build-adminapi.ps1
Normal file
51
scripts/build-adminapi.ps1
Normal file
@@ -0,0 +1,51 @@
|
||||
<#
|
||||
用法:在 PowerShell 中执行本脚本,自动构建并重启 AdminApi 容器。
|
||||
如果要放到桌面双击运行,可将本文件复制到桌面后右键“使用 PowerShell 运行”。
|
||||
前置:已安装并运行 Docker Desktop。
|
||||
#>
|
||||
|
||||
# 遇到异常时停住窗口,方便查看错误
|
||||
trap {
|
||||
Write-Host "发生错误:" $_ -ForegroundColor Red
|
||||
Read-Host "按回车关闭窗口"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# 1. 基本变量(脚本位于 repo_root/scripts,下移一层再上跳到仓库根)
|
||||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$repoRoot = Split-Path -Parent $scriptDir
|
||||
$imageName = if ($env:IMAGE_NAME) { $env:IMAGE_NAME } else { 'takeout.api.admin:dev' }
|
||||
$containerName = if ($env:CONTAINER_NAME) { $env:CONTAINER_NAME } else { 'takeout.api.admin' }
|
||||
$buildConfiguration = if ($env:BUILD_CONFIGURATION) { $env:BUILD_CONFIGURATION } else { 'Release' }
|
||||
$dockerNetwork = if ($env:DOCKER_NETWORK) { $env:DOCKER_NETWORK } else { 'web_apps' }
|
||||
$dockerfilePath = Join-Path $repoRoot 'src/Api/TakeoutSaaS.AdminApi/Dockerfile'
|
||||
|
||||
Write-Host "工作目录:$repoRoot"
|
||||
|
||||
# 2. 先构建镜像(减少停机时间;同时避免每次都删除镜像导致缓存失效)
|
||||
Write-Host "开始构建镜像:$imageName (Configuration=$buildConfiguration)"
|
||||
docker build -f $dockerfilePath -t $imageName --build-arg "BUILD_CONFIGURATION=$buildConfiguration" $repoRoot
|
||||
|
||||
# 3. 停止并删除旧容器
|
||||
if ((docker ps -a --format '{{.Names}}') -contains $containerName) {
|
||||
Write-Host "发现旧容器,正在移除:$containerName"
|
||||
docker rm -f $containerName | Out-Null
|
||||
}
|
||||
|
||||
# 4. 运行新容器并映射端口
|
||||
$runArgs = @()
|
||||
if (-not [string]::IsNullOrWhiteSpace($dockerNetwork)) {
|
||||
$networkExists = (docker network ls --format '{{.Name}}') -contains $dockerNetwork
|
||||
if (-not $networkExists) {
|
||||
Write-Host "Docker network 不存在,正在创建:$dockerNetwork"
|
||||
docker network create $dockerNetwork | Out-Null
|
||||
}
|
||||
$runArgs += @('--network', $dockerNetwork)
|
||||
}
|
||||
|
||||
Write-Host "运行新容器:$containerName (端口映射 7801:7801,环境 Development,网络 $dockerNetwork)"
|
||||
docker run -d --name $containerName @runArgs -e ASPNETCORE_ENVIRONMENT=Development -p 7801:7801 $imageName
|
||||
|
||||
Write-Host "完成。镜像:$imageName,容器:$containerName。Swagger 访问:http://localhost:7801/swagger"
|
||||
63
scripts/watch-adminapi-forlinux.sh
Executable file
63
scripts/watch-adminapi-forlinux.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
# 用法:在 Linux 终端执行本脚本,后台启动 AdminApi 的 dotnet watch(开发用,不需要 docker build)。
|
||||
# 前置:已安装并运行 Docker。
|
||||
set -euo pipefail
|
||||
trap 'echo "发生错误:${BASH_COMMAND}" >&2' ERR
|
||||
|
||||
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
repo_root="$(cd "${script_dir}/.." && pwd)"
|
||||
|
||||
container_name="${CONTAINER_NAME:-takeout.api.admin}"
|
||||
docker_network="${DOCKER_NETWORK:-web_apps}"
|
||||
host_port="${HOST_PORT:-7801}"
|
||||
container_port="${CONTAINER_PORT:-7801}"
|
||||
sdk_image="${SDK_IMAGE:-mcr.microsoft.com/dotnet/sdk:10.0}"
|
||||
nuget_volume="${NUGET_VOLUME:-takeout-nuget}"
|
||||
project_path="${PROJECT_PATH:-src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj}"
|
||||
environment="${ASPNETCORE_ENVIRONMENT:-Development}"
|
||||
|
||||
echo "工作目录:${repo_root}"
|
||||
echo "使用 SDK 镜像:${sdk_image}"
|
||||
echo "容器:${container_name} 端口:${host_port}:${container_port} 网络:${docker_network}"
|
||||
|
||||
# Ensure network exists (so it can talk to other services like postgres/redis on the same network).
|
||||
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
|
||||
fi
|
||||
|
||||
# Persist NuGet cache across container restarts to speed up restore/build.
|
||||
if ! docker volume inspect "${nuget_volume}" >/dev/null 2>&1; then
|
||||
echo "NuGet volume 不存在,正在创建:${nuget_volume}"
|
||||
docker volume create "${nuget_volume}" >/dev/null
|
||||
fi
|
||||
|
||||
# Replace existing container (if any).
|
||||
if docker ps -a --format '{{.Names}}' | grep -qx "${container_name}"; then
|
||||
echo "发现旧容器,正在移除:${container_name}"
|
||||
docker rm -f "${container_name}" >/dev/null
|
||||
fi
|
||||
|
||||
run_args=()
|
||||
if [ -n "${docker_network}" ]; then
|
||||
run_args+=(--network "${docker_network}")
|
||||
fi
|
||||
|
||||
echo "启动 dotnet watch(后台运行)..."
|
||||
docker run -d --name "${container_name}" \
|
||||
"${run_args[@]}" \
|
||||
-p "${host_port}:${container_port}" \
|
||||
-v "${repo_root}":/src \
|
||||
-w /src \
|
||||
-v "${nuget_volume}":/root/.nuget/packages \
|
||||
-e ASPNETCORE_ENVIRONMENT="${environment}" \
|
||||
-e ASPNETCORE_URLS="http://+:${container_port}" \
|
||||
-e DOTNET_USE_POLLING_FILE_WATCHER=1 \
|
||||
"${sdk_image}" \
|
||||
dotnet watch --project "${project_path}" run
|
||||
|
||||
echo "已启动。查看日志:docker logs -f ${container_name}"
|
||||
echo "Swagger:http://localhost:${host_port}/swagger"
|
||||
|
||||
68
scripts/watch-adminapi.ps1
Normal file
68
scripts/watch-adminapi.ps1
Normal file
@@ -0,0 +1,68 @@
|
||||
<#
|
||||
用法:在 PowerShell 中执行本脚本,后台启动 AdminApi 的 dotnet watch(开发用,不需要 docker build)。
|
||||
前置:已安装并运行 Docker Desktop。
|
||||
#>
|
||||
|
||||
trap {
|
||||
Write-Host "发生错误:" $_ -ForegroundColor Red
|
||||
Read-Host "按回车关闭窗口"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$repoRoot = Split-Path -Parent $scriptDir
|
||||
|
||||
$containerName = if ($env:CONTAINER_NAME) { $env:CONTAINER_NAME } else { 'takeout.api.admin' }
|
||||
$dockerNetwork = if ($env:DOCKER_NETWORK) { $env:DOCKER_NETWORK } else { 'web_apps' }
|
||||
$hostPort = if ($env:HOST_PORT) { $env:HOST_PORT } else { '7801' }
|
||||
$containerPort = if ($env:CONTAINER_PORT) { $env:CONTAINER_PORT } else { '7801' }
|
||||
$sdkImage = if ($env:SDK_IMAGE) { $env:SDK_IMAGE } else { 'mcr.microsoft.com/dotnet/sdk:10.0' }
|
||||
$nugetVolume = if ($env:NUGET_VOLUME) { $env:NUGET_VOLUME } else { 'takeout-nuget' }
|
||||
$projectPath = if ($env:PROJECT_PATH) { $env:PROJECT_PATH } else { 'src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj' }
|
||||
$environment = if ($env:ASPNETCORE_ENVIRONMENT) { $env:ASPNETCORE_ENVIRONMENT } else { 'Development' }
|
||||
|
||||
Write-Host "工作目录:$repoRoot"
|
||||
Write-Host "使用 SDK 镜像:$sdkImage"
|
||||
Write-Host "容器:$containerName 端口:$hostPort`:$containerPort 网络:$dockerNetwork"
|
||||
|
||||
if (-not [string]::IsNullOrWhiteSpace($dockerNetwork)) {
|
||||
$networkExists = (docker network ls --format '{{.Name}}') -contains $dockerNetwork
|
||||
if (-not $networkExists) {
|
||||
Write-Host "Docker network 不存在,正在创建:$dockerNetwork"
|
||||
docker network create $dockerNetwork | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
$volumeExists = (docker volume ls --format '{{.Name}}') -contains $nugetVolume
|
||||
if (-not $volumeExists) {
|
||||
Write-Host "NuGet volume 不存在,正在创建:$nugetVolume"
|
||||
docker volume create $nugetVolume | Out-Null
|
||||
}
|
||||
|
||||
if ((docker ps -a --format '{{.Names}}') -contains $containerName) {
|
||||
Write-Host "发现旧容器,正在移除:$containerName"
|
||||
docker rm -f $containerName | Out-Null
|
||||
}
|
||||
|
||||
$runArgs = @()
|
||||
if (-not [string]::IsNullOrWhiteSpace($dockerNetwork)) {
|
||||
$runArgs += @('--network', $dockerNetwork)
|
||||
}
|
||||
|
||||
Write-Host "启动 dotnet watch(后台运行)..."
|
||||
docker run -d --name $containerName @runArgs `
|
||||
-p "$hostPort`:$containerPort" `
|
||||
-v "$repoRoot`:/src" `
|
||||
-w /src `
|
||||
-v "$nugetVolume`:/root/.nuget/packages" `
|
||||
-e "ASPNETCORE_ENVIRONMENT=$environment" `
|
||||
-e "ASPNETCORE_URLS=http://+:$containerPort" `
|
||||
-e "DOTNET_USE_POLLING_FILE_WATCHER=1" `
|
||||
$sdkImage `
|
||||
dotnet watch --project $projectPath run
|
||||
|
||||
Write-Host "已启动。查看日志:docker logs -f $containerName"
|
||||
Write-Host "Swagger:http://localhost:$hostPort/swagger"
|
||||
|
||||
Reference in New Issue
Block a user