.net core服务程序在centos7上的部署

最近因为项目上的需要,使用.net core写了一个服务,用于指定word模板文件与数据,完成数据的填充(word读写使用npoi)与格式转换(使用aspose,将word转pdf)。之所以选择用.net core就是考虑到跨平台部署的问题。

1、打开powershell,使用ssh登录到服务器(以172.16.170.41为例):

  ssh root@172.16.170.41 

  输入密码即可登录;

2、安装.net core3.1(我们的服务是使用3.1版本开发的):

  sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

  sudo yum install dotnet-sdk-3.1

  安装完了运行dotnet --version,如果能查看版本说明安装成功;

3、将我们本地编译发布好的服务文件copy到服务器上

  在本地powershell里输入:scp -r C:pdfservice  root@172.16.170.41:/var/www/pdfservice

  这条命令表示拷贝本地C:pdfservice下的所有文件,到41服务器的/var/www/pdfservice目录下(会自动创建pdfservice目录);

4、安装jexus。jexus是一款国产开源免费应用服务器,功能与Nginx类似,但是更加能够发挥.net core程序的优势。

  curl https://jexus.org/release/x64/install.sh | sudo sh

  完成后,会生成/usr/jexus目录。其中/usr/jexus/siteconf目录下用来存放jexus的配置文件。

5、配置jexus。

  进入/usr/jexus/siteconf目录下

  vi pdfservice新建一个配置文件(也可以使用默认配置文件default)

  输入“i”进入编辑模式, copy以下内容:

  

########################################

port=5555
root=/ /var/www/pdfservice/
hosts=* #OR your.com,*.your.com

# User=www-data

# AspNet.Workers=2 # Set the number of asp.net worker processes. Defauit is 1.

# addr=0.0.0.0
# CheckQuery=false
NoLog=true

AppHost={
cmd=dotnet /var/www/pdfservice/CATSTI.PdfService.dll;
root=/var/www/pdfservice/;
port=0;
}

# NoFile=/index.aspx
# Keep_Alive=false
# UseGZIP=false

# UseHttps=true
# ssl.certificate=/x/xxx.crt #or pem
# ssl.certificatekey=/x/xxx.key
# ssl.protocol=TLSv1.0 # TLSv1.1 or TLSv1.2...
# ssl.ciphers=

# DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24
# AllowFrom=192.168.*.*
# DenyDirs=~/cgi, ~/upfiles
# indexes=myindex.aspx

# Deny asp ...
# rewrite=^/.+?.(asp|cgi|pl|sh|bash|dll)(?.*|)$ /.deny->$1
# rewrite=.*/editor/.+ /.deny->editor
# reproxy=/bbs/ http://192.168.1.112/bbs/
# host.Redirect=abc.com www.abc.com 301
# ResponseHandler.Add=myKey:myValue


# Jexus php fastcgi address is '/var/run/jexus/phpsvr'
#######################################################
# fastcgi.add=php|socket:/var/run/jexus/phpsvr

  其中:

  port=5555 表示jexus监听5555端口;

  root=/ /var/www/pdfservice/  表示服务的根目录;

  AppHost={
      cmd=dotnet /var/www/pdfservice/CATSTI.PdfService.dll;
      root=/var/www/pdfservice/;
      port=0;
      }

  中的=dotnet /var/www/pdfservice/CATSTI.PdfService.dll 表示服务的入口是使用.net把CATSTI.PdfService.dll启动起来;

  修改完成后,按“esc”键返回浏览模式,再按“:”键,输入wq保存退出;如果输入q!表示不保存退出。

 

6、重启jexus服务并在centos的防火墙中放开5555端口

  重启jexus:service jexus restart

  放开5555端口:firewall-cmd --zone=public --add-port=5555/tcp --permanent

  重启防火墙:firewall-cmd --reload

7、如果顺利,服务就可以正式使用了。如果不顺利,就百度吧(:P)

8、安装字体。由于我们的服务使用word作为模板, 用到的字体在服务器上不一定全,因此需要把涉及到的字体安装到服务器。可以参考这个帖子做:https://www.cnblogs.com/qize/p/12522886.html

~~采坑更新~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

实际现场实施过程中,同事发现,当使用多文档合并输出pdf时,会发生错误“The type initializer for 'SkiaSharp.SKAbstractManagedStream' threw an exception”。

百度有说到aspose的.net core版本会使用SkiaSharp来处理图像,SkiaSharp是微软官方用于在.net core下进行图像处理的中间件。而在centos环境下报错的“原因是linux下skiasharp依赖libSkiaSharp.so,而如果系统中没有libSkiaSharp.so,就会报这个错”。而我们发布的安装包里确实没有这个文件。

最后程序猿MM通过如下方式解决了:

1、替换文件SkiaSharp.dll

2、新增文件libSkiaSharp.so下载地址:https://github.com/mono/SkiaSharp/releases/tag/v1.59.3

3、赋权限chmod77libSkiaSharp.so

4、lddlibSkiaSharp.sotoinspectdependencies

5、yuminstallfontconfig

6、yuminstalllibGL

给我们的程序猿MM手动点赞!

原文地址:https://www.cnblogs.com/coldlight/p/13051051.html