文章内容
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项目
评论列表