netnr 2026-05-07

方案一:本地构建 Tar 包 + SCP 上传

场景:Windows/Mac 开发机,远程 Linux 服务器,本地无 Docker

使用 ContainerArchiveOutputPath 参数直接输出 .tar.gz 文件。

dotnet publish Netnr.Proxy/Netnr.Proxy.csproj \
    -c Release \
    -r linux-x64 \
    /t:PublishContainer \
    --self-contained true \
    -p:PublishSingleFile=true \
    -p:PublishTrimmed=true \
    -p:TrimMode=partial \
    -p:ContainerArchiveOutputPath=bin/Release/x-linux-x64/netnr-proxy.tar.gz

上传 Tar 包到远程服务器

scp Netnr.Proxy/bin/Release/x-linux-x64/netnr-proxy.tar.gz root@local.host:/tmp/netnr-proxy.tar.gz

清理旧容器并加载新镜像

docker stop nproxy -t 0; \
docker rm nproxy; \
docker rmi netnr/proxy:latest; \
docker load -i /tmp/netnr-proxy.tar.gz && \
rm -f /tmp/netnr-proxy.tar.gz

启动新容器

docker run -d -p 7718:7718 --name nproxy netnr/proxy:latest

方案二:Docker CLI SSH Context 直连

场景:局域网内高速连接或镜像体积非常小,本地有 Docker CLI (非容器服务)
https://download.docker.com/win/static/stable/x86_64/

配置 Docker Context (一次性设置)

docker context create remote-host --docker host=ssh://root@local.host
docker context use remote-host

直接发布并推送到远程 Daemon

dotnet publish Netnr.Proxy/Netnr.Proxy.csproj \
    -c Release \
    -r linux-x64 \
    /t:PublishContainer \
    --self-contained true \
    -p:PublishSingleFile=true \
    -p:PublishTrimmed=true \
    -p:TrimMode=partial

.csproj 项目配置文件

<PropertyGroup>
    <ContainerFamily>noble-chiseled</ContainerFamily>
    <ContainerUser>root</ContainerUser>
    <ContainerImageName>netnr/proxy</ContainerImageName>
    <ContainerImageTag>latest</ContainerImageTag>
</PropertyGroup>
<ItemGroup Label="Container">
    <ContainerPort Include="7718" Type="tcp" />
    <ContainerFileExclusion Include="**/*.dbg" />
    <ContainerEnvironmentVariable Include="TZ" Value="Asia/Shanghai" />
    <ContainerEnvironmentVariable Include="ASPNETCORE_URLS" Value="http://+:7718" />
    <ContainerEnvironmentVariable Include="Urls" Value="http://+:7718" />
</ItemGroup>

建议配置 SSH Key 免密登录,以便在 CI/CD 流水线或脚本中自动化执行 scpssh 命令。

登录写评论