1Panel运行的.net程序无法读取系统字体(因为使用了docker)
问题来源
我之前都是使用的宝塔面板,之前我也部署过我的程序,就没有什么问题,但是上次我部署我的程序的时候,就提示无法找到字体Arial。
我的程序中使用该字体生成验证码。
我多次安装了微软的字体包,但是依旧没有效果。
直到今天,我再次配置一个新的ubuntu系统。
(上一个ubuntu系统已经被我改为windows系统使用了)
缘故
今天又重试了之前的操作,依旧是不行。但我想到了1panel可能是因为使用了docker的缘故。.net 程序跑在docker中,默认的操作当然读取不到系统的文件。
事实上,就是这个缘故。
我在系统上直接执行,没有任何问题。
解决方案
虽然,有的解决方案是说,让使用FontCollection 添加系统的字体路径,但是我还是不想这么做。
于是我还是使用了之前使用的supervisor来配置一个进程守护。
supervisor的使用可以参照Linux进程守护—Supervisor(ubuntu)_linux守护进程工具-CSDN博客
我之前配置的时候参照的这个,这次我问的gpt。
给我的配置中少了一个参数。
directory
导致程序无法正常运行,总是提示在95行有问题。
该路径是程序读取文件的相对路径。没有设置这个,程序读取 appsetting.production.json文件就会出现问题。
基本使用
Supervisor
一个用 Python 写的进程管理工具,专门用来管理和监控多个后台进程。它可以自动重启程序,支持日志管理,配置简单,非常适合部署多个程序。
-
安装:
sudo apt install supervisor
-
配置示例
-
(
/etc/supervisor/conf.d/myapp.conf
):[program:mydotnetapp] command=/usr/bin/dotnet /path/to/yourapp.dll directory=/path/to/workingdir autostart=true autorestart=true stderr_logfile=/var/log/mydotnetapp.err.log stdout_logfile=/var/log/mydotnetapp.out.log user=youruser
我的程序的配置最终如下
-
[program:ai_server] command=dotnet /webs/Turbo-Auth.dll directory=/webs/ autostart=true autorestart=true stderr_logfile=/var/log/ai_server.err.log stdout_logfile=/var/log/ai_server.out.log user=root
-
启动和管理:
sudo supervisorctl reread sudo supervisorctl update
查询状态
sudo supervisorctl status