我正在以root身份运行Ubuntu 22.04容器。
在Windows机器上创建了一个.net 8.0 web应用程序API,我将app.urls设置为容器IP
app.Urls.Add("https://10.0.0.242:7000");
字符串
使用便携式的发布配置目标运行时发布了应用程序,
已将发布的文件夹复制到Ubuntu容器。
运行nginx代理管理器docker容器。使用我们的域名设置代理主机,使用Ubuntu机器的IP地址和端口7000将方案设置为https。启用阻止常见漏洞和WebSocket支持。获取SSL letsencrypt证书启用强制SSL和HTTP/2支持。
我去ubuntu机器并运行dotnet FRTOOLS.WebhookListener.dll
应用程序运行,我收到POST和GET请求到我们的代理域url预期。
所以现在我想运行应用程序作为一个服务,所以如果事情重新启动或什么。我创建了一个.service文件
[Unit]
Description=Web API App Listening for Channel Advisor Webhook responses on Linux
[Service]
WorkingDirectory=/usr/www/data/publish
ExecStart=/usr/bin/dotnet /usr/www/data/publish/FRTOOLS.WebhookListener.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-webapi
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
型
做了
systemctl start webhooklistener
型
我的日志显示错误Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date. To generate a developer certificate run 'dotnet dev-certs https'.
因此,故障排除,与dotnet证书信任和每一个人的堆栈溢出建议的错误没有修复。
chmod chown这文件夹以便www-data有权限.仍然不工作?
我不明白为什么应用程序将为我工作时,运行应用程序在命令行与dotnet
,但不是作为一个服务?
1条答案
按热度按时间lndjwyie1#
这就是我最终解决问题的方法。我不确定这种方法是否是公认的标准,但它确实有效。
一旦我意识到在dotnet web应用程序的构建过程中实际发生了什么,根据这里的文档https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-8.0#default-configuration,我现在明白了,我可以在appsettings.json文件中添加.pem服务器证书和kestrel服务器设置的url设置。
字符串
在nginx代理管理器中创建LetsEncrypt证书后,我将解压缩的文件放在我的Web Apps发布项目文件夹中,因此当通过sftp将文件传输到Ubuntu机器时,它会带来.pem证书。
my .pem的路径是我的Web应用程序在Ubuntu计算机中存储的文件夹位置。
这里的stackoverflow问题
Using appsettings.json to configure Kestrel listen port Dotnet core 2 preview 2
部分引导我找到答案。
获取证书并将它们放在正确的位置让我感到困惑。使用nginx代理管理器并能够导出证书使这个过程对我来说变得更加容易,我不需要使用certbot然后使用openssl来创建一个.pfx文件,然后将这些文件从一个容器复制到另一个容器。
但是有一个警告,这个证书没有密码保护!另一个未来的问题是,当我需要在90天内更新证书时,我们将看到这种方法所涉及的困难。