随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。ASP.NET Core 作为一个跨平台、高性能的框架,非常适合在 Linux 环境中运行。本篇博客将详细介绍如何在 Linux 服务器上部署 ASP.NET Core Web API 应用,包括部署准备、应用发布、配置反向代理(Nginx)、设置系统服务以及日志管理等步骤。
在开始之前,请确保你具备以下条件:
sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql
登录MySQL以确认安装成功。
sudo mysql -u root -p
MySQL默认密码是root,直接登录即可。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
这里我们用SQL语句把项目需要的数据库建好即可。
首先,需要在你的 Linux 服务器上安装 .NET 运行环境(如果选择框架依赖部署)或 .NET SDK(如果需要编译代码)。
# 安装所需的依赖
sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common
# 下载并安装微软的公钥
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
# 安装 ASP.NET Core 运行时
sudo apt-get install -y aspnetcore-runtime-8.0
注意:根据你的应用所使用的 .NET 版本,调整安装的运行时版本。
dotnet --version
你应该会看到已安装的 .NET 版本号,如 8.0.x
。
在本地开发环境中,使用 visual studio
发布应用。
选择框架依赖部署(FDD)或自包含部署(SCD):
保存发布配置,点击发布。
发布成功。
发布后的项目在目标位置里:D:\DCO\dco_ll\bin\Release\net8.0
将文件夹内所有内容复制到服务器上的预发布项目目录上。
其中,应用涉及的配置信息一般在
appsettings.json
里。
切换到项目目录,指定端口启动项目。
cd xxxx #你的项目在服务器上的部署路径
sudo dotnet DCOWebhook.dll --urls "http://0.0.0.0:80"
到这里,程序已经用公网IP访问了。
Nginx 将作为反向代理,将来自客户端的请求转发到 ASP.NET Core 应用,处理 SSL、负载均衡等任务。
如果你的项目端口监听的不是默认80端口(比如5000端口),那么可以通过 Nginx 监听80端口进行转发,访问80端口的请求会自动转发到5000端口上。
sudo apt-get update
sudo apt-get install -y nginx
创建一个新的 Nginx 配置文件,或修改默认配置。
sudo nano /etc/nginx/sites-available/default
修改为以下内容:
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;
}
}
# 创建符号链接以启用配置
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 应用配置为服务,确保应用在服务器启动时自动运行,并在崩溃后自动重启。
sudo nano /etc/systemd/system/dcowebhook.service
添加以下内容:
[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
注意:
WorkingDirectory
:你的应用所在的目录。ExecStart
:启动应用的命令。根据你的发布方式(FDD 或 SCD)调整路径和参数。User
和Group
:推荐使用非 root 用户(如www-data
)运行服务,提升安全性。
sudo systemctl daemon-reload
sudo systemctl start dcowebhook.service #如果是修改配置需要刷新则写restart
sudo systemctl enable dcowebhook.service
sudo systemctl status dcowebhook.service
你应该会看到服务正在运行,并监听指定的端口。
确保服务器的防火墙允许 HTTP(80)和 HTTPS(443)端口的流量。
使用 UFW 配置防火墙。
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
注意:
Nginx Full
配置包括 HTTP 和 HTTPS 端口。
如果项目依然无法访问,可以查看日志分析问题所在。
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/dcowebhook/log-*.txt
偶尔会遇到端口被占用的问题,我们要先查看是哪个进程在占用这个端口。
sudo lsof -i 5000 #换成你需要查的端口
再来杀死这个进程。
sudo kill -9 76681 #换成上一步查到的进程的pid
这样这个端口就释放出来了。
通过本文的步骤,你已经成功在 Linux 服务器上部署了 ASP.NET Core Web API 应用。你不仅配置了应用的发布和运行,还设置了 Nginx 作为反向代理,确保了应用的高可用性和安全性。此外,配置日志记录帮助你更好地监控和维护应用。根据实际需求,你还可以进一步优化配置,如启用 HTTPS、配置负载均衡等。部署成功后,建议定期检查应用和服务器的性能,及时更新和维护,以确保应用的稳定运行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。