随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。ASP.NET Core 作为一个跨平台、高性能的框架,非常适合在 Linux 环境中运行。本篇博客将详细介绍如何在 Linux 服务器上部署 ASP.NET Core Web API 应用,包括部署准备、应用发布、配置反向代理(Nginx)、设置系统服务以及日志管理等步骤。
一、部署准备
在开始之前,请确保你具备以下条件:
- 一台运行 Linux(如 Ubuntu 20.04)的服务器,具有 SSH 访问权限。
- ASP.NET Core Web API 项目,并确保在本地能够正常运行。
二、安装 MySQL(如需)
1. 安装MySQL服务器
bash
sudo apt install mysql-server -y
2. 启动并设置MySQL开机自启
bash
sudo systemctl start mysql
sudo systemctl enable mysql
3. 验证MySQL安装
登录MySQL以确认安装成功。
bash
sudo mysql -u root -p
MySQL默认密码是root,直接登录即可。
4. 修改初始密码
bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
5. 创建库和表
这里我们用SQL语句把项目需要的数据库建好即可。
三、安装 .NET 运行环境
首先,需要在你的 Linux 服务器上安装 .NET 运行环境(如果选择框架依赖部署)或 .NET SDK(如果需要编译代码)。
1. 添加 Microsoft 包存储库
bash
# 安装所需的依赖
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
![](https://i-blog.csdnimg.cn/direct/9916030cbabb49eab92890d001bd503f.png)
bash
# 下载并安装微软的公钥
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
# 更新包索引
sudo apt-get update
![](https://i-blog.csdnimg.cn/direct/07f50c3e8e304d1f806aa098b82f7b61.png)
2. 安装 .NET 运行环境
bash
# 安装 ASP.NET Core 运行时
sudo apt-get install -y aspnetcore-runtime-8.0
![](https://i-blog.csdnimg.cn/direct/67ab490bda9f4565b75f655c4fb87b1d.png)
注意:根据你的应用所使用的 .NET 版本,调整安装的运行时版本。
3. 验证安装
bash
dotnet --version
你应该会看到已安装的 .NET 版本号,如 8.0.x
。
![](https://i-blog.csdnimg.cn/direct/3ffb227d0dbb41efb2630f3a3aeadb7f.png)
四、发布 ASP.NET Core 应用
1. Visual Studio 发布应用
在本地开发环境中,使用 visual studio
发布应用。
![](https://i-blog.csdnimg.cn/direct/ff95e21ba4a34c738ee8d9f149817490.png)
选择框架依赖部署(FDD)或自包含部署(SCD):
- 框架依赖部署(FDD):目标服务器需要预先安装 .NET 运行环境。
- 自包含部署(SCD):应用程序包含了所有必要的运行时文件,无需在服务器上安装 .NET。
![](https://i-blog.csdnimg.cn/direct/2f2af1a7400d46068d9aff76a13a6397.png)
保存发布配置,点击发布。
![](https://i-blog.csdnimg.cn/direct/b70dfd694afc404dadb60a7e306ad7b9.png)
发布成功。
![](https://i-blog.csdnimg.cn/direct/9869e6ace43d44fb82ed8a2b08666b79.png)
发布后的项目在目标位置里:D:\DCO\dco_ll\bin\Release\net8.0
![](https://i-blog.csdnimg.cn/direct/ae79cfd209f74f368af14c57e8375927.png)
2. 复制发布后的内容到服务器目录
将文件夹内所有内容复制到服务器上的预发布项目目录上。
![](https://i-blog.csdnimg.cn/direct/e9b2d35bd96841b198b1f6c216626e7e.png)
其中,应用涉及的配置信息一般在
appsettings.json
里。
五、启动项目
切换到项目目录,指定端口启动项目。
bash
cd xxxx #你的项目在服务器上的部署路径
sudo dotnet DCOWebhook.dll --urls "http://0.0.0.0:80"
![](https://i-blog.csdnimg.cn/direct/a54605accaa245b59b140c054c697416.png)
到这里,程序已经用公网IP访问了。
六、配置 Nginx 作为反向代理(可选)
Nginx 将作为反向代理,将来自客户端的请求转发到 ASP.NET Core 应用,处理 SSL、负载均衡等任务。
如果你的项目端口监听的不是默认80端口(比如5000端口),那么可以通过 Nginx 监听80端口进行转发,访问80端口的请求会自动转发到5000端口上。
1. 安装 Nginx
bash
sudo apt-get update
sudo apt-get install -y nginx
2. 配置 Nginx
创建一个新的 Nginx 配置文件,或修改默认配置。
bash
sudo nano /etc/nginx/sites-available/default
![](https://i-blog.csdnimg.cn/direct/43539f9d1c39433eb600d5d08ff4b131.png)
修改为以下内容:
json
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name dco021.atomgit.net; # 替换为你的域名或服务器IP
location / {
proxy_pass http://localhost:5000; # 替换为你的应用监听的端口
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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
3. 启用配置并重启 Nginx
bash
# 创建符号链接以启用配置
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
# 测试 Nginx 配置是否正确
sudo nginx -t
# 重启 Nginx
sudo systemctl restart nginx
七、设置系统服务(可选)
使用 systemd
将你的 ASP.NET Core 应用配置为服务,确保应用在服务器启动时自动运行,并在崩溃后自动重启。
1. 创建 systemd 服务文件
bash
sudo nano /etc/systemd/system/dcowebhook.service
添加以下内容:
bash
[Unit]
Description=DCOWebhook ASP.NET Core Web API
After=network.target
[Service]
WorkingDirectory=/var/www/dco
ExecStart=/usr/bin/dotnet /var/www/dco/DCOWebhook.dll --urls "http://0.0.0.0:5000" #换成需要监听的端口
Restart=always
# 用户和组
User=www-data
Group=www-data
# 环境变量
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
![](https://i-blog.csdnimg.cn/direct/fad631a298a54bc49b7a1578a47dfdf1.png)
注意:
WorkingDirectory
:你的应用所在的目录。ExecStart
:启动应用的命令。根据你的发布方式(FDD 或 SCD)调整路径和参数。User
和Group
:推荐使用非 root 用户(如www-data
)运行服务,提升安全性。
2. 重新加载 systemd 并启动服务
bash
sudo systemctl daemon-reload
sudo systemctl start dcowebhook.service #如果是修改配置需要刷新则写restart
sudo systemctl enable dcowebhook.service
3. 检查服务状态
bash
sudo systemctl status dcowebhook.service
你应该会看到服务正在运行,并监听指定的端口。
![](https://i-blog.csdnimg.cn/direct/7bb52a58fb884158ac8d424bd2033229.png)
八、配置防火墙
确保服务器的防火墙允许 HTTP(80)和 HTTPS(443)端口的流量。
使用 UFW 配置防火墙。
bash
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
注意 :
Nginx Full
配置包括 HTTP 和 HTTPS 端口。
![](https://i-blog.csdnimg.cn/direct/35e90ba19f8f4b048c942513f288ea99.png)
九、查看日志
如果项目依然无法访问,可以查看日志分析问题所在。
1. 查看 Nginx 错误日志
bash
sudo tail -f /var/log/nginx/error.log
2. 查看 ASP.NET Core 应用日志
bash
sudo tail -f /var/log/dcowebhook/log-*.txt
十、常见问题
1. 解决端口占用
偶尔会遇到端口被占用的问题,我们要先查看是哪个进程在占用这个端口。
bash
sudo lsof -i 5000 #换成你需要查的端口
再来杀死这个进程。
bash
sudo kill -9 76681 #换成上一步查到的进程的pid
![](https://i-blog.csdnimg.cn/direct/189bf7c27e2c46b5b7031a9f9aff3e81.png)
这样这个端口就释放出来了。
十一、总结
通过本文的步骤,你已经成功在 Linux 服务器上部署了 ASP.NET Core Web API 应用。你不仅配置了应用的发布和运行,还设置了 Nginx 作为反向代理,确保了应用的高可用性和安全性。此外,配置日志记录帮助你更好地监控和维护应用。根据实际需求,你还可以进一步优化配置,如启用 HTTPS、配置负载均衡等。部署成功后,建议定期检查应用和服务器的性能,及时更新和维护,以确保应用的稳定运行。