我正在尝试用Nginx在数字海洋Ubuntu 22.04中托管一个ASP.NET Core Web API。它使用SQLite。当我运行dotnet build | dotnet run
命令时,一切正常,Swagger打开,并且从数据库检索数据。
然而,在我使用dotnet publish
发布,在/etc/systemd/system
中创建一个服务并使用sudo systemctl start myapi.service
运行它之后,Swagger成功打开,但任何HTTP请求都会导致“Error 500:Internal Service Error”。
服务文件:
[Unit]
Description=My API
[Service]
WorkingDirectory=/home/myAPI/bin/Debug/net6.0/publish
ExecStart=/usr/bin/dotnet /home/myAPI/bin/Debug/net6.0/publish/myAPI.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
2条答案
按热度按时间pgpifvop1#
您有一个内部服务器错误,这不是来自服务器配置的错误。该应用程序返回500。在终端中,您可以写道:
以获取您的应用程序的最新错误。修复它,重新部署。
您还可以通过启用日志记录来查看后台正在发生的情况。以下是两份参考文件:
How can I log messages from an ASP.NET Core application to a specific file on Linux?。
Logging in .NET Core and ASP.NET Core。
希望这能对你有所帮助。
lztngnrs2#
运行该命令
帮助发现实际错误是“SQLite尝试写入只读数据库”。解决方案是在服务文件中将
User=www-data
更改为User=root
。