Files
TakeoutSaaS.Docs/scripts/watch-adminapi.ps1
2026-01-29 01:58:15 +00:00

69 lines
2.7 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<#
用法:在 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 "Swaggerhttp://localhost:$hostPort/swagger"