在 DEBIAN 11 上安装 dotnet core 并启用 Serenity

Posted on 2022-05-02 in how-to

本配置在 debian 11 下测试通过,默认环境为全新安装,仅安装 SSH, 创建了一个普通用户 recozo,该用户开启 sudo 功能。

参见:

一、安装 DOTNET

使用以下命令安装 dotnet sdk

$ sudo apt intalll wget
$ wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ rm packages-microsoft-prod.deb
$ sudo apt update
$ sudo apt install -y apt-transport-https
$ sudo apt install -y dotnet-sdk-6.0
# 由于目前 serenity 还是使用 aspnetcore 5,暂时还要安装这个
$ sudo apt install -y aspnetcore-runtime-5.0
$ dotnet --list-sdks
$ dotnet --list-runtimes

二、创建测试网站(参照)

创建一个 aspnetcore 网站

$ dotnet new globaljson -o MySolution/MyProject
$ dotnet new web -o MySolution/MyProject/
$ dotnet new sln -o MySolution/
$ dotnet sln MySolution add MySolution/MyProject
$ cd MySolution/
# 以下二条语句怎么不能成功执行了,好像成功执行过的
$ dotnet run
$ dotnet run --urls="http://0.0.0.0:5001"
# 现在要求必须指定项目
$ dotnet run --project MyProject --urls="http://0.0.0.0:5000;https://0.0.0.0:5001"

生成网站发布代码,一般会将网站代码部署在 /var/www 目录下

$ dotnet publish --configuration Release
$ dotnet MyProject/bin/Release/net6.0/publish/MyProject.dll
$ sudo cp -a ~/MySolution/MyProject/bin/Release/net6.0/publish/ /var/www/web02.rcz.cn/

在实际操作中发现一下问题,就是上面第二句 dotnet MyProject/bin/Release/net6.0/publish/MyProject.dll ,如果是 serenity ,由于默认要读取当前目录下的配置文件,但是由于运行时所在目录与工作目录不一致时,导致出错。 怎么解决??? TODO...

三、自动运行网站 ::

创建该网站 daemon ,以确保重启服务器或出错后能够自动运行网站

$ sudo vi /etc/systemd/system/web02.rcz.cn.service
$ sudo systemctl enable web02.rcz.cn.service
$ sudo systemctl start web02.rcz.cn.service
$ systemctl status web02.rcz.cn.service

web02.rcz.cn.server 代码

[Unit]
Description=web02.rcz.cn is a demo website template

[Service]
WorkingDirectory=/var/www/web02.rcz.cn/
ExecStart=/usr/bin/dotnet /var/www/web02.rcz.cn/MyProject.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=web02.rcz.cn-identifier
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Development
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_URLS=http://localhost:5001

[Install]
WantedBy=multi-user.target

请根据实际情况修改,默认 aspnetcore 网站分别使用 5000 和 5001 作为网站的 http 与 https 访问端口, 如果要运行多个网站时,可以通过指定 ASPNETCORE_URLS 指定端口。由于我们使用 nginx 反向代理, 不需要 https 。

四、启用 nginx

使用以下命令安装 nginx

$ sudo apt install nginx
$ systemctl status nginx

启用网站的反向代理

$ sudo vi /etc/nginx/sites-available/web02.rcz.cn
$ sudo ln -s /etc/nginx/sites-available/web02.rcz.cn /etc/nginx/sites-enabled
$ sudo nginx -T
$ sudo nginx -s reload

注意:创建软链接时,必须使用完整路径; nginx 必须进行重新载入才能生效网站配置

五、对网站启用 HTTPS

使用以下命令安装 certbot

$ sudo apt install snapd
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
# 以下软链接是否有必要,退出再登录后,发现路径中已经加入了 /snap/bin
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

使用以下命令获取证书并自动网站配置(需要事先进行域名配置,防火墙上进行公网 IP 与内网服务器 IP 的映射, 简单来说,就要保证能事先通过域名以 HTTP 方式访问网站)

$ sudo certbot --nginx
$ cat /etc/nginx/sites-enabled/web02.rcz.cn

六、常用故障检测命令

$ sudo journalctl -fu web02.rcz.cn.service
$ sudo ss -tulp
$ sudo vi /var/log/nginx/error.log

七、在 Debian 环境下运行 serenity 网站

1、安装并配置 postgresql 数据库,参见 POSTGRESQL 学习。 以下假设数据库为 demo_db ,角色密码分别为 demo_role 和 demo_password;

2、修改项目文件以启用 postgresql。 在项目中使用 NUGET, Registering Npgsql Provider; 修改项目文件, Open the Startup.cs file under /Initialization/ and register PostgreSQL DbProviderFactory; 修改数据库连接串, 即在 .Net Core appsettings.json 中,Setting Connection Strings; 修改完成后,测试运行。

3、在 visual studio 2022 中生成发布代码并上传至网站服务器的 /var/www/demo_serenity.rcz.cn;

4、参照以上步骤设置网站域名、自动重启、反射代理以及数字证书等。