Ubuntu 24服务器部署abp vnext应用程序的完整教程

一、服务器配置

1、安装Nginx

2、安装.NetCore SDK 或.NetCore 运行时

以上两步参考

Ubuntu+Nginx+Supervisord部署.net core web应用程序_nginx部署netcore-CSDN博客

二、abp vnext程序部署

1、程序发布

使用VS进行发布

2、程序上传

使用winSCP工具

3、openiddict.pfx证书文件生成

参考《正式部署abp vnext应用程序时,如何生成openiddict.pfx证书文件-CSDN博客

4、创建数据库,配置appsetting.json并运行程序

以MySql数据库为例

(1)使用Navicat Premium Lite 17连接MySql数据库服务器,创建数据库。

(2)修改appsetting.json配置,如:

复制代码
{
   "Kestrel": {
      "Endpoints": {
         "Http": {
            "Url": "http://127.0.0.1:5000"    //指定运行的端口
         }
      }
   },
   "App": {
      "SelfUrl": "http://127.0.0.1:5000",
      "CorsOrigins": "http://localhost:5777,http://localhost:4200",
      "DisablePII": false,
      "HealthCheckUrl": "/health-status"
   },
   "DatabaseType": "MySql", //SqlServer、MySql、Sqlite
   "ConnectionStrings": {
      "Default": "Server=127.0.0.1;Port=3306;Database=数据库名;Uid=root;Pwd=密码;",
   },
   "AuthServer": {
      "Authority": "http://127.0.0.1:5000",
      "RequireHttpsMetadata": true,
      "SwaggerClientId": "Workon_Swagger",
      "CertificatePassPhrase": "069470e1-5189-4aa6-b920-0ada0b556980"
   },
   "RemoteServices": {
      "Base": {
         "BaseUrl": "http://127.0.0.1:5000"
      }
   },
   "Settings": {
      "Abp.Localization.DefaultLanguage": "zh-Hans",
      "Abp.Identity.Password.RequireNonAlphanumeric": "False", //密码是否包含特殊符号
      "Abp.Identity.Password.RequiredLength": 6, //密码最小长度
      "Abp.Identity.Password.RequireLowercase": "False", //要求小写字母
      "Abp.Identity.Password.RequireUppercase": "False", //要求大写字母
      "Abp.Identity.Password.RequireDigit": "False", //要求数字
      "Abp.Identity.Password.RequiredUniqueChars": "1" //要求唯一字符数量
   },
   "BlobSetting": {
      "DefaultContainerBasePath": "E:\\workspace\\Workon\\workon-service\\CommonAttach"
   },
   "StringEncryption": {
      "DefaultPassPhrase": "WYv70MGSuIMTNlGZ"
   },
   "OpenIddict": {
      "Applications": {
         "Workon_App": {
            "ClientId": "Workon_App",
            "RootUrl": "http://localhost:4200"
         },
         "Workon_Swagger": {
            "ClientId": "Workon_Swagger",
            "RootUrl": "http://127.0.0.1:5000"
         },
         "Workon_Web": {
            "ClientId": "Workon_Web",
            "ClientSecret": "1q2w3e*",
            "RootUrl": "http://localhost:8081/"
         },
         "Workon_Blazor": {
            "ClientId": "Workon_Blazor",
            "RootUrl": "http://localhost:44307"
         }
      }
   }
}

(3)运行程序

进入到程序发布的目录,并执行:

bash 复制代码
dotnet your-app.dll

检查运行结果,查看日志,确认程序能正常运行。若程序正常运行,则程序日志未显示错误,且数据库会自动迁移(前提:程序配置数据库自动迁移处理)。

5、nginx反向代理配置

安装完毕 Nginx后,请修改 /etc/nginx/nginx.conf 配置文件。

在Ubuntu服务器上的Nginx配置目录中,图中所画的红色框内的几个文件夹有各自的用途:

  1. conf.d/: 这个文件夹用来存储额外的Nginx配置片段。在这个文件夹里的每个文件都会被自动加载并入主配置文件nginx.conf中。这样可以方便地将不同的配置项分离出来,使得主配置文件更加简洁易读。
  2. modules-available/: 这个文件夹用于存放可用的Nginx模块。在这里面的文件通常是模块的配置文件,当需要启用某个模块时,可以将相应的文件符号链接到modules-enabled文件夹中。
  3. modules-enabled/: 这个文件夹用于存放启用的Nginx模块的符号链接。只有在这个文件夹中的模块才会被Nginx加载和使用。通过这种方式,可以灵活地控制哪些模块会被启用。
  4. sites-available/: 这个文件夹用于存放所有的虚拟主机配置文件。每个文件代表一个网站的配置信息。这个文件夹本身并不直接参与Nginx的运行,而是作为一个配置仓库。
  5. sites-enabled/: 这个文件夹也用于存放虚拟主机配置文件的符号链接。与modules-enabled类似,只有在这个文件夹中的配置文件才会被Nginx加载和使用。通过这种方式,可以方便地管理和切换不同网站的配置。

要在Ubuntu服务器上使用Nginx部署一个网站并配置反向代理,你通常会在以下文件夹中进行操作:

  • /etc/nginx/sites-available/: 在这个文件夹中,你会创建一个新的配置文件来定义你的网站设置和反向代理规则。这个文件通常以你的域名命名,例如 example.com.conf。

以下是在/etc/nginx/sites-available/文件夹下配置新站点和反向代理的基本步骤:

(1)创建一个新的配置文件:

bash 复制代码
sudo nano /etc/nginx/sites-available/example.com.conf

(2)在打开的编辑器中,添加以下配置内容作为示例:

bash 复制代码
server {
    listen 80; # 或者你想要监听的端口,例如 443 用于 HTTPS
 
    server_name example.com www.example.com; # 你的域名
 
    location / {
        proxy_pass http://backend-server; # 反向代理到后端服务器的地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
 
    # 其他可能的配置,例如 SSL、日志、错误页面等
}

请确保将proxy_pass指令中的http://backend-server替换为你的实际后端服务器地址

(3)保存并关闭文件:ctrl+X =>Y=>enter

(4)创建一个从sites-available到sites-enabled的符号链接,以便Nginx加载这个配置:

bash 复制代码
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

(5)测试Nginx配置文件是否有语法错误:

bash 复制代码
sudo nginx -t

(6)如果配置测试成功,重新加载Nginx以应用新的配置:

bash 复制代码
sudo systemctl reload nginx

现在,Nginx应该已经配置为反向代理你的网站,将请求转发到指定的后端服务器。记得替换上述示例中的example.com和http://backend-server为你的实际域名和后端服务器地址

6、SSL证书配置

参考以下文章:

使用Let's Encrypt申请免费HTTPS证书_let's encrypt-CSDN博客

申请 Let's Encrypt 通配符 HTTPS 证书 - 小水滴18 - 博客园

以Ubuntu24服务器、nginx反向代理为例。

(1)安装Certbot

bash 复制代码
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx # 如果你使用的是Nginx

(2)申请证书

安装完Certbot后,你可以使用以下命令来申请证书。以下命令以Nginx为例。

申请具体域名证书
bash 复制代码
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

这个命令会启动Certbot的Nginx插件,自动配置Nginx以使用HTTPS,并申请证书。你需要按照提示输入你的邮箱地址(用于接收续订和安全通知),并同意Let's Encrypt的条款。

申请泛域名证书
bash 复制代码
sudo certbot --nginx -d *.wzlinux.com

出现如下图所示时,需要做一条 TXT 的 DNS 解析。

TXT 的 DNS 解析,以啊里云服务器为例:

打开啊里云域名解析界面,添另一条TXT解析,如下图:

然后按"Enter"键继续。

(3)配置nginx

我们这里以 nginx 服务为例,配置证书,nginx 的配置文件为下:

bash 复制代码
server
        {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name  bbs.wzlinux.com bbs1.wzlinux.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /usr/share/nginx/html/;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/wzlinux.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/wzlinux.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/ssl/dhparam.pem 2048
        #ssl_dhparam /usr/local/nginx/ssl/dhparam.pem;


}

server
        {
        listen 80;
        server_name bbs.wzlinux.com;
        return 301 https://$server_name$request_uri;
}

(4)设置自动续期

可以使用指令certbot renew进行更新,添加一个定时任务。

Let's Encrypt的证书有效期为90天,但你可以通过Certbot的自动续期功能来确保证书始终有效。你可以通过运行以下命令来设置自动续期(以Cron作业为例):

bash 复制代码
sudo certbot renew --dry-run # 测试自动续期
# 将以下行添加到Cron作业中以定期执行自动续期
0 0,12 * * * sudo certbot renew

可以使用指令certbot renew进行更新

7、systemd设置进程守护及开机自动启动

参考《Linux系统(如Ubuntu)后台运行.NET Core应用程序_linux运行dotnet程序-CSDN博客

三、防火墙TCP端口设置

参考《Ubuntu+Nginx+Supervisord部署.net core web应用程序_nginx部署netcore-CSDN博客》的防火墙设置

四、程序更新及维护

1、上传更新的程序

2、重启.netcore程序

bash 复制代码
ps -ef | grep dotnet  #查看

kill -s 9 PID  #关掉程序进行



#等待systemd自动重启.netcore程序
相关推荐
SuperW24 分钟前
Linxu实验五——NFS服务器
运维·服务器
promise52427 分钟前
JVM之jcmd命令详解
java·linux·运维·服务器·jvm·bash·jcmd
Bruce_Liuxiaowei40 分钟前
Day 5:Warp高级定制与自动化
运维·warp
溜达的大象1 小时前
docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤
运维·docker·容器
果子⌂1 小时前
Linux系统入门第十二章 --Shell编程之正则表达式
linux·运维·服务器
海尔辛1 小时前
学习黑客5 分钟读懂Linux Filesystem Interaction Continued
linux·服务器·学习
学习2年半1 小时前
服务器mysql连接我碰到的错误
运维·服务器·mysql
涛涛6号1 小时前
轻量服务器与宝塔
运维·服务器
奋斗者1号2 小时前
浏览器自动化与网络爬虫实战:工具对比与选型指南
运维·爬虫·自动化
是垚不是土2 小时前
Kolla-Ansible搭建与扩容OpenStack私有云平台
linux·运维·服务器·云计算·ansible·openstack