C# webapi發布到linux云服務器上最簡教程[玩服務器]
- 新建dotnet core webapi項目 為方便后面訪問項目,修改appsettings.json文件,增加配置 "urls":"http://*:5000"
- 在云服務器上修改防火墻 允許外部訪問上面你指定的端口(如:5000)
sudo ufw allow 5000/tcp
sudo ufw reload
這里我使用的是在云服務器管理界面 設置防火墻
- 使用dotnet publish 命令發布項目 由于我這里不希望再在云服務器上安裝dotnet環境 故這里選擇了Self-Contained Deployment 自包含部署 且 選擇了單文件發布
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true -o ./publish
參考:【譯】.NET Core 3.0 發布小尺寸 self-contained 單體可執行程序
執行完會在 ./publish 目錄下生成應用程序
- 將publish目錄上傳到linux云服務器上(這里上傳的方式多種多樣 比如使用xshell工具的遠程傳輸功能)
- 給應用程序文件賦權限
chmod 777 ./appname(你的應用名)
- ./appname 運行你的webapi應用
- 在瀏覽器中輸入 http://ip:5000 就可以訪問了
以上便完成了應用從創建到發布的流程;
BUT 如果你希望應用以服務方式啟動,則需要多做一些工作:
- 在 /etc/systemd/system 目錄下創建一個服務文件 myapi.service
nano /etc/systemd/system/myapi.service
給文件中粘貼下面內容 其中 WorkingDirectory是指你將應用程序放到了哪個目錄下
[Unit]
Description=bigboss .NET Core WebAPI App
[Service]
WorkingDirectory=/usr/local/bin/publish
ExecStart=/usr/local/bin/publish/yourappname
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
按CTRL+O 然后再按Enter 保存文件 最后按CTRL+X 退出
- 啟動服務并設置開機自啟
sudo systemctl start myapi
sudo systemctl enable myapi
- 如何查看服務是否已經啟動
systemctl status myapi
# 或者 使用下面查看服務啟動日志
journalctl -u myapi
如果沒有發現錯誤信息 表示服務已啟動,但是我的服務沒有正常啟動,我在服務啟動日志中發現了 錯誤信息
DOTNET_BUNDLE_EXTRACT_BASE_DIR is not set, and a read-write cache directory couldn't be created.
這個錯誤信息表明你的 .NET 應用程序在運行時需要提取單文件發布(Single File Publish)中的內容,但無法找到合適的目錄來緩存這些提取的文件。具體原因是環境變量 DOTNET_BUNDLE_EXTRACT_BASE_DIR 未設置,且無法創建可讀寫的緩存目錄。
解決方法
- 創建了緩存目錄
mkdir -p /usr/local/bin/cache/mywebapi
- 給目錄賦予權限
chown -R root /usr/local/bin/cache/mywebapi
# 查看目錄權限
ls -ld /usr/local/bin/cache/mywebapi
- 最后修改了服務配置文件
nano /etc/systemd/system/myapi.service
添加了緩存目錄
Unit]
Description=bigboss .NET Core WebAPI App
[Service]
WorkingDirectory=/usr/local/bin/publish
ExecStart=/usr/local/bin/publish/yourappname
Restart=always
RestartSec=10
Environment=DOTNET_BUNDLE_EXTRACT_BASE_DIR=/usr/local/bin/cache/mywebapi
[Install]
WantedBy=multi-user.target
- 重新啟動服務
systemctl daemon-reload
systemctl restart mywebapi.service
最后我的服務成功啟動 通過外網ip我可以在任何地方訪問到發布的webapi了!!!

浙公網安備 33010602011771號