因为在医院环境下,服务器大多是离线环境,这里提供的是离线环境下部署的方式
首先请确定,以下文档都是以Centos为准,文档中出现的版本都是以Centos8为基准。
请确保Centos本身是完整版,而不是Minimal版本,否则会缺失很多基本组件导致安装失败
可以用gcc、vim等命令检查当前是否是完整版本。
gcc --version
安装包下载
可根据需要下载,如果需要在服务器进行打包开发等操作时,下载SDK,如果只是运行的话,下载Runtime即可。但ASP.NET Core Runtime都需要下载。
- Microsoft常见软件仓库包,这个rpm主要用于补足.net的依赖包,这里提供的是CentOS8的包。在这里顺便提供各版本下的下载地址,可以根据需要选择CentOS各版本
- libicu,这个包是用于解决常见的全球化部署错误的包
- libgdiplus,这个包主要是在Linux .NET下如果需要处理图片的情况下,不安装该包会报出缺失libgdiplus或者gdip的异常。如果在部署后出现该异常应该去安装该包,该包安装极其依赖网络,如果需要处理该问题时,可以参考GitHub - mono/libgdiplus: C-based implementation of the GDI+ API
安装.Net环境
检查当前环境是否存在.net
第一步首先需要检查当前环境下是否包含.net
dotnet --version
dotnet --info
如图所示,如果dotnet装好的情况下,会显示当前版本号,这里的是8.0.100,具体版本按需安装,Aegis目前都是以6.0为主的版本。
如果都已装好,版本查询也正常的情况,则可以直接跳转 到 部署项目部分。
安装Microsoft常见软件仓库和libicu
将下载好的包复制到当前工作目录下,运行以下命令来安装该包(该包是之前提到的Microsoft常见软件仓库)
sudo rpm -Uvh packages-microsoft-prod.rpm
sudo rpm -Uvh libicu-60.3-2.el8_1.x86_64.rpm
安装.Net
首先创建好dotnet将要安装的文件夹
mkdir -p /var/lib/dotnet
解压dotnet runtime,如果是sdk也一样
tar -zxf dotnet-runtime-6.0.33-linux-x64.tar.gz -C /var/lib/dotnet
解压asp net core
tar -zxf aspnetcore-runtime-6.0.33-linux-x64.tar.gz -C /var/lib/dotnet
创建软链接
ln -s /var/lib/dotnet/dotnet /usr/bin
检查环境是否安装成功
dotnet --info
部署项目
将项目文件拷贝到运行目录下(建议是/opt下或者工作用户的目录下,这里举例使用/opt,假设当前项目文件夹是在/opt/webapi下),可以在这里设置http和https运行的端口号,如果不设置会默认使用5000和5001。
dotnet /opt/webapi/Aegis.Webapi.BaseDemo.dll --urls "http://0.0.0.0:8000;https://0.0.0.0:8001"
检查是否运行成功
如果没有问题,此时项目就已经运行成功了,可以测试一下是否可连接。(可按Ctrl+C关闭)
设置为开机自启动服务
vim /usr/lib/systemd/system/webapi.service
根据具体情况编写如下内容
[Unit]
Description=WebAPI Service #服务描述
[Service]
WorkingDirectory=/opt/webapi #工作目录
ExecStart=/var/lib/dotnet/dotnet /opt/webapi/Aegis.Webapi.BaseDemo.dll --urls "http://0.0.0.0:8000;https://0.0.0.0:8001" #启动命令
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet_webapi #使用的系统日志标识符
User=root #运行用户是谁,建议根据实际情况设置运行用户
# 以下是环境变量
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target #服务所在的服务组
编写好后开启服务,如果开启失败,请检查webapi.service的内容是否存在问题
systemctl start webapi.service
检查服务状态是否开启,如果未开启,建议使用dotnet直接运行来检查项目是否正常
systemctl status webapi.service
如果一切正常,则将其设置未开机自启动服务
systemctl enable webapi.service
如果需要停止服务,可以使用以下命令(这里是停止服务,如果需要停止项目时才使用)
systemctl stop webapi.service
开放防火墙指定端口
如果其他服务器无法访问当前服务器的情况下,建议检查端口是否通畅,如果不通畅,开放服务器上的防火墙端口即可(如果还不行多半是信息科建立了端口限制,可联系信息科)
查看防火墙状态
systemctl status firewalld.service
\ 关闭防火墙,再做测试,如果可行则代表就是防火墙限制
systemctl stop firewalld.service
开启防火墙
systemctl start firewalld.service
查询指定的8000端口是否开启(运行命令后,返回yes代表已开启,返回no代表未开启)
firewall-cmd --query-port=8000/tcp
如果未开启,添加开放端口
firewall-cmd --add-port=8000/tcp --permanent
重新载入防火墙
firewall-cmd --reload
如果想要彻底禁用防火墙(慎用),则可以运行以下命令
systemctl stop firewalld.service
systemctl disbale firewalld.service