searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

C#进阶-在Ubuntu上部署ASP.NET Core Web API应用

2025-02-06 03:02:10
0
0
 
随着云计算和容器化技术的普及,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
```
 
```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
```
 
### 2. 安装 .NET 运行环境
 
```bash
# 安装 ASP.NET Core 运行时
sudo apt-get install -y aspnetcore-runtime-8.0
```
 
 
> **注意**:根据你的应用所使用的 .NET 版本,调整安装的运行时版本。
 
### 3. 验证安装
 
```bash
dotnet --version
```
 
你应该会看到已安装的 .NET 版本号,如 `8.0.x`。
 
 
---
## 四、发布 ASP.NET Core 应用
### 1. Visual Studio 发布应用
 
在本地开发环境中,使用 `visual studio` 发布应用。
 
 
选择框架依赖部署(FDD)或自包含部署(SCD):
 
- **框架依赖部署(FDD)**:目标服务器需要预先安装 .NET 运行环境。
- **自包含部署(SCD)**:应用程序包含了所有必要的运行时文件,无需在服务器上安装 .NET。
 
 
保存发布配置,点击发布。
 
发布成功。
 
发布后的项目在目标位置里:D:\DCO\dco_ll\bin\Release\net8.0
 
### 2. 复制发布后的内容到服务器目录
 
将文件夹内所有内容复制到服务器上的预发布项目目录上。
 
> 其中,应用涉及的配置信息一般在 `appsettings.json` 里。
 
 
---
 
## 五、启动项目
 
切换到项目目录,指定端口启动项目。
 
```bash
cd xxxx #你的项目在服务器上的部署路径
sudo dotnet DCOWebhook.dll --urls "http://0.0.0.0:80" 
```
 
 
到这里,程序已经用公网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
```
 
 
 
修改为以下内容:
 
```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
```
 
> **注意**:
> - `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
```
 
你应该会看到服务正在运行,并监听指定的端口。
 
---
## 八、配置防火墙
 
确保服务器的防火墙允许 HTTP(80)和 HTTPS(443)端口的流量。
 
使用 UFW 配置防火墙。
 
```bash
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
```
 
> **注意**:`Nginx Full` 配置包括 HTTP 和 HTTPS 端口。
---
## 九、查看日志
 
如果项目依然无法访问,可以查看日志分析问题所在。
 
### 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
```
这样这个端口就释放出来了。
 
 
---
## 十一、总结
 
通过本文的步骤,你已经成功在 Linux 服务器上部署了 ASP.NET Core Web API 应用。你不仅配置了应用的发布和运行,还设置了 Nginx 作为反向代理,确保了应用的高可用性和安全性。此外,配置日志记录帮助你更好地监控和维护应用。根据实际需求,你还可以进一步优化配置,如启用 HTTPS、配置负载均衡等。部署成功后,建议定期检查应用和服务器的性能,及时更新和维护,以确保应用的稳定运行。
0条评论
0 / 1000
Damon小智
19文章数
0粉丝数
Damon小智
19 文章 | 0 粉丝
原创

C#进阶-在Ubuntu上部署ASP.NET Core Web API应用

2025-02-06 03:02:10
0
0
 
随着云计算和容器化技术的普及,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
```
 
```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
```
 
### 2. 安装 .NET 运行环境
 
```bash
# 安装 ASP.NET Core 运行时
sudo apt-get install -y aspnetcore-runtime-8.0
```
 
 
> **注意**:根据你的应用所使用的 .NET 版本,调整安装的运行时版本。
 
### 3. 验证安装
 
```bash
dotnet --version
```
 
你应该会看到已安装的 .NET 版本号,如 `8.0.x`。
 
 
---
## 四、发布 ASP.NET Core 应用
### 1. Visual Studio 发布应用
 
在本地开发环境中,使用 `visual studio` 发布应用。
 
 
选择框架依赖部署(FDD)或自包含部署(SCD):
 
- **框架依赖部署(FDD)**:目标服务器需要预先安装 .NET 运行环境。
- **自包含部署(SCD)**:应用程序包含了所有必要的运行时文件,无需在服务器上安装 .NET。
 
 
保存发布配置,点击发布。
 
发布成功。
 
发布后的项目在目标位置里:D:\DCO\dco_ll\bin\Release\net8.0
 
### 2. 复制发布后的内容到服务器目录
 
将文件夹内所有内容复制到服务器上的预发布项目目录上。
 
> 其中,应用涉及的配置信息一般在 `appsettings.json` 里。
 
 
---
 
## 五、启动项目
 
切换到项目目录,指定端口启动项目。
 
```bash
cd xxxx #你的项目在服务器上的部署路径
sudo dotnet DCOWebhook.dll --urls "http://0.0.0.0:80" 
```
 
 
到这里,程序已经用公网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
```
 
 
 
修改为以下内容:
 
```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
```
 
> **注意**:
> - `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
```
 
你应该会看到服务正在运行,并监听指定的端口。
 
---
## 八、配置防火墙
 
确保服务器的防火墙允许 HTTP(80)和 HTTPS(443)端口的流量。
 
使用 UFW 配置防火墙。
 
```bash
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
```
 
> **注意**:`Nginx Full` 配置包括 HTTP 和 HTTPS 端口。
---
## 九、查看日志
 
如果项目依然无法访问,可以查看日志分析问题所在。
 
### 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
```
这样这个端口就释放出来了。
 
 
---
## 十一、总结
 
通过本文的步骤,你已经成功在 Linux 服务器上部署了 ASP.NET Core Web API 应用。你不仅配置了应用的发布和运行,还设置了 Nginx 作为反向代理,确保了应用的高可用性和安全性。此外,配置日志记录帮助你更好地监控和维护应用。根据实际需求,你还可以进一步优化配置,如启用 HTTPS、配置负载均衡等。部署成功后,建议定期检查应用和服务器的性能,及时更新和维护,以确保应用的稳定运行。
文章来自个人专栏
开发技术分享
19 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0