# 更新系统并安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl nano unzip git
代码示例(Debian 11/12):
# 下载并安装Microsoft GPG密钥
wget https://packages.microsoft.com/config/debian/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# 安装.NET 8.0 SDK(生产环境可替换为runtime)
sudo apt update
sudo apt install -y dotnet-sdk-8.0
# 验证安装
dotnet --info # 输出应包含.NET 8.0版本
注释解析:
$(lsb_release -rs)
动态获取Debian版本,适配不同发行版。packages-microsoft-prod.deb
确保包源可信,避免依赖冲突。# 在本地开发环境执行(以WebAPI为例)
dotnet publish -c Release -o ./publish
# 传输到Debian服务器(假设IP为192.168.1.100)
scp -r ./publish/* [email protected]:/var/www/myapp/
# 进入部署目录
cd /var/www/myapp
# 赋予执行权限(关键步骤!)
sudo chmod +x ./myapp.dll
# 验证运行(调试模式)
dotnet ./myapp.dll
注释解析:
chmod +x
确保DLL可执行,避免“command not found”错误。# 创建systemd服务文件
sudo nano /etc/systemd/system/myapp.service
服务配置代码:
[Unit]
Description=My ASP.NET Core Web API
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/myapp.dll
Restart=always
RestartSec=10
SyslogIdentifier=myapp
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
注释解析:
User=www-data
使用专用用户运行,提升安全性。Restart=always
确保崩溃后自动重启。Environment
设置生产环境变量。# 重载systemd配置
sudo systemctl daemon-reload
# 启动服务并设置开机自启
sudo systemctl enable myapp
sudo systemctl start myapp
# 查看日志(关键调试步骤)
sudo journalctl -u myapp -f
sudo apt install -y nginx
# 创建Nginx配置文件
sudo nano /etc/nginx/sites-available/myapp.conf
Nginx配置代码:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:5000; # Kestrel默认端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
注释解析:
proxy_pass
指向本地Kestrel端口。proxy_set_header
确保WebSockets等协议正常工作。# 安装Certbot
sudo apt install -y certbot python3-certbot-nginx
# 申请并配置SSL证书
sudo certbot --nginx -d yourdomain.com
# 自动续期配置
sudo systemctl enable certbot.timer
注释解析:
certbot --nginx
自动更新Nginx配置为HTTPS。certbot.timer
确保证书自动续期。# 开放HTTP/HTTPS及SSH端口
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用防火墙
sudo ufw enable
sudo ufw status
// 在appsettings.Production.json中配置
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:5000"
},
"Https": {
"Url": "https://0.0.0.0:5001",
"Certificate": {
"Path": "/etc/letsencrypt/live/yourdomain.com/fullchain.pem",
"KeyPath": "/etc/letsencrypt/live/yourdomain.com/privkey.pem"
}
}
}
}
}
注释解析:
0.0.0.0
监听所有IP,确保Nginx反向代理可达。# 安装缺失的系统库(如libicu)
sudo apt install -y libc6 libgcc1 libgssapi-krb5-2 libicu72 libssl3 libstdc++6 zlib1g
# 若使用System.Drawing.Common需额外安装
sudo apt install -y libgdiplus
# 检查端口占用
sudo netstat -tulnp | grep 5000
# 杀死占用进程(如PID=1234)
sudo kill -9 1234
# 手动安装ARM64版本.NET SDK
wget https://dotnetcli.blob.core.windows.net/dotnet/Sdk/8.0.100/dotnet-sdk-8.0.100-linux-arm64.tar.gz
tar zxf dotnet-sdk-8.0.100-linux-arm64.tar.gz -C ~/dotnet
# 设置环境变量
echo 'export DOTNET_ROOT=$HOME/dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$HOME/dotnet' >> ~/.bashrc
source ~/.bashrc
注释解析:
package main
import (
"os/exec"
"fmt"
)
func main() {
commands := []string{
"apt update && apt upgrade -y",
"wget https://packages.microsoft.com/config/debian/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb",
"dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb",
"apt install -y dotnet-sdk-8.0 nginx certbot ufw",
// ...(其他步骤)
}
for _, cmd := range commands {
_, err := exec.Command("bash", "-c", cmd).Output()
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
}
fmt.Println("部署完成!")
}
注释解析:
go run deploy.go
一键执行全流程。