文章内容
2020/10/10 18:20:09,作 者: 黄兵
Ubuntu部署Jp项目
目录:
- JPProject.IdentityServer4.SSO项目介绍
- JPProject.IdentityServer4.SSO数据库还原
- Ubuntu部署Jp项目
- JPProject.IdentityServer4.AdminUI部署
上一篇文章介绍了数据迁移,这篇文章介绍如何部署Jp项目。
这里使用两台Ubuntu服务器部署Jp项目,一台运行Jp.Api.Management项目和Angular前端项目。
另外一台运行Jp.UI.SSO项目。
Ubuntu服务器安装Nginx,具体命令如下:
apt-get install nginx
之后安装dotnet运行环境,可以参考这篇文章:在 Ubuntu 上安装 .NET Core SDK 或 .NET Core 运行时,这篇文章已经介绍的很详细,在此不再赘述。
再Visual Studio 2019中发布Jp.Api.Management和Jp.UI.SSO项目:
由于需要再Ubuntu服务器上运行,所以这里“目标运行时”设置的是linux-x64。
之后将发布的文件上传到Ubuntu服务器的/var/publish/目录。
还有一个Angular项目,本来我这里经常使用WebStorm,所以再WebStorm打开项目,修改src/environments/environment.prod.ts
配置:
ResourceServer: "https://accounts.domain-name.com/", AuthorityUri: "https://passport.domain-name.com", RequireHttps: true, Uri: "https://management.domain-name.com",
这里的ResourceServer就是第一节介绍的资源服务器,填写资源服务器的域名;
AuhtorityUri这里是设置认证服务器的域名,也就是SSO服务器的域名;
最后一个Uri是访问前端的地址。
设置好后,在终端输入ng build --prod
,发布项目。
发布完成之后,将dist复制到Ubuntu服务器的/var/目录下面。
按照这篇文章设置项目Nginx以及将项目做一个服务的方式运行:使用 Nginx 在 Linux 上托管 ASP.NET Core,文章已经介绍的很详细。
这里三个项目都使用三个不同的子域名,一个是方便管理,第二是在nginx里面匹配路径,容易出错。
在部署Jp.Api.Management这个项目还需要注意的一点是:
由于Jp.UI.SSO和Jp.Api.Management不在一个服务器上,因此无法本地通信,需要修改Jp.Api.Management项目的appsettings.json
文件中的ApplicationSettings
节:
"ApplicationSettings": { //"RecaptchaKey": "", "DatabaseType": "MySql", "Authority": "https://passport.domain-name.com", "Cors": "http://*.teste.work", "UserManagementURL": "http://localhost:4200", "IS4AdminUi": "http://localhost:4300", "ResourceServerURL": "https://localhost:5002" }
这里重设了Authority服务器的地址,也就是SSO服务器的地址。
还有一个需要重点介绍一下的是:SSO服务器的Nginx部署。
SSO服务是单独的一个服务器,这里需要将/.well-known/openid-configuration
做一下匹配:
location /.well-known/openid-configuration { proxy_cache_key "$scheme$proxy_host$request_uri$http_origin"; proxy_pass http://sso_app; }
当时由于没有做这个规则的匹配,在Jp.Api.Management服务器上一直提示:
[07:11:30 ERR] IDX20803: Unable to obtain configuration from: 'https://localhost:5000/.well-known/openid-configuration'.
截图如下:
点击图片可放大。
但是搞了很久这个问题也没有解决,之后参考了\JPProject.IdentityServer4.SSO-master\JPProject.IdentityServer4.SSO-master\nginx\nginx-jpproject-net.conf
文件才解决问题的。
这个文件对于SSO在Nginx的写法如下:
location /.well-known/openid-configuration { proxy_cache_key "$scheme$proxy_host$request_uri$http_origin"; proxy_pass http://jpproject-sso; } location /connect/introspect { # specific cache options proxy_cache_methods POST; proxy_cache_key "$request_uri|$request_body"; proxy_ignore_headers Cache-Control Expires; proxy_cache_valid 5m; add_header X-Cached $upstream_cache_status; proxy_pass http://jpproject-sso; } location /connect/token { # specific cache options proxy_cache_methods POST; proxy_cache_key "$request_uri|$request_body"; proxy_ignore_headers Cache-Control Expires; add_header X-Cached $upstream_cache_status; proxy_pass http://jpproject-sso; } location /.well-known/acme-challenge { proxy_cache off; allow all; root /var/www/html/shared; }
这里适配了4个位置,我只用到了一个,其他三个是做什么用的,以后慢慢发掘。
所有项目的部署完成之后就可以运行项目了。
最后作者同时部署了一个在线Demo,地址:https://user.jpproject.net/login
参考资料:
1、在 Ubuntu 上安装 .NET Core SDK 或 .NET Core 运行时
2、使用 Nginx 在 Linux 上托管 ASP.NET Core
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - Ubuntu部署Jp项目
评论列表