补回 swagger(Swashbuckle 6.6.2 + XML 注释)、socket.html 入库、固化本机构建与服务器替换脚本
- Directory.Build.props: 生成 XML 注释供 Swagger 展示中文说明 - AdminHost/FishGameHost: 接入 Swashbuckle,路由 adminswagger / roomswagger - 后台前端 config.js 改为同源相对地址,适配反向代理 - socket.html(SignalR 协议文档)纳入仓库 - deploy/: 本机构建(容器内编译,规避杀软)、服务器替换脚本、Nginx 配置
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# ============================================================
|
||||
# 容器内编译 + 打包镜像(多阶段)
|
||||
#
|
||||
# 用途:本机构建时使用。编译发生在 Docker 的 Linux 虚拟机内,
|
||||
# Windows 上的杀软(如火绒)无法拦截中间产物 AdminApi.dll 等,
|
||||
# 可规避「dll 生成后被删除导致 MSB3030」的问题。
|
||||
#
|
||||
# 由 deploy/build-local.ps1 调用,构建上下文 = 仓库根目录:
|
||||
# docker build -f deploy/Dockerfile.build \
|
||||
# --build-arg PROJECT=<项目csproj相对路径,正斜杠> \
|
||||
# --build-arg SVC_NAME=<服务名,如 admin> \
|
||||
# --build-arg APP_DLL=<入口dll,如 AdminHost.dll> \
|
||||
# --build-arg PUBLIC_HOST=<捕鱼对外地址> \
|
||||
# -t 0524<服务名> .
|
||||
# ============================================================
|
||||
ARG SDK_IMAGE=mcr.microsoft.com/dotnet/sdk:8.0
|
||||
ARG RUNTIME_IMAGE=mcr.microsoft.com/dotnet/aspnet:8.0
|
||||
|
||||
# ---------- 阶段一:编译发布 ----------
|
||||
FROM ${SDK_IMAGE} AS build
|
||||
ARG PROJECT
|
||||
ARG SVC_NAME
|
||||
ARG PUBLIC_HOST=localhost
|
||||
|
||||
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1 \
|
||||
DOTNET_NOLOGO=1
|
||||
|
||||
WORKDIR /src
|
||||
COPY . .
|
||||
|
||||
# 编译(不依赖 PUBLIC_HOST,可复用构建缓存)
|
||||
RUN dotnet publish "${PROJECT}" -c Release -o /out --nologo
|
||||
|
||||
# 部署配置覆盖 + 对外地址替换(单独一层:日后只改地址可秒级重建,无需重编译)
|
||||
RUN set -eux; \
|
||||
# 部署版配置覆盖(各 Host 的 Config/system.json 默认不随发布输出)
|
||||
mkdir -p /out/Config; \
|
||||
cp "/src/deploy/config/${SVC_NAME}/system.json" /out/Config/system.json; \
|
||||
cp /src/nlog.config /out/nlog.config; \
|
||||
# 捕鱼对局层:替换客户端要访问的对外地址
|
||||
sed -i "s|__PUBLIC_HOST__|${PUBLIC_HOST}|g" /out/Config/system.json; \
|
||||
# 网关:ocelot 下游地址由 localhost:524x 改写为「容器名:80」
|
||||
if [ -f /out/ocelot.json ]; then \
|
||||
sed -i \
|
||||
-e 's|{ "Host": "localhost", "Port": 5241 }|{ "Host": "0524admin", "Port": 80 }|' \
|
||||
-e 's|{ "Host": "localhost", "Port": 5245 }|{ "Host": "0524user", "Port": 80 }|' \
|
||||
-e 's|{ "Host": "localhost", "Port": 5247 }|{ "Host": "0524customer", "Port": 80 }|' \
|
||||
-e 's|{ "Host": "localhost", "Port": 5242 }|{ "Host": "0524chess", "Port": 80 }|' \
|
||||
-e 's|{ "Host": "localhost", "Port": 5244 }|{ "Host": "0524fishroom", "Port": 80 }|' \
|
||||
-e 's|{ "Host": "localhost", "Port": 5248 }|{ "Host": "0524fishgame", "Port": 80 }|' \
|
||||
/out/ocelot.json; \
|
||||
fi
|
||||
|
||||
# ---------- 阶段二:运行时镜像 ----------
|
||||
FROM ${RUNTIME_IMAGE}
|
||||
ARG APP_DLL
|
||||
|
||||
ENV APP_DLL=${APP_DLL} \
|
||||
ASPNETCORE_URLS=http://+:80 \
|
||||
ASPNETCORE_ENVIRONMENT=Production \
|
||||
TZ=Asia/Shanghai
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=build /out .
|
||||
|
||||
EXPOSE 80
|
||||
ENTRYPOINT ["sh", "-c", "exec dotnet ${APP_DLL}"]
|
||||
Reference in New Issue
Block a user