文章内容

2020/10/10 18:20:09,作 者: 黄兵

Ubuntu部署Jp项目

目录:

  1. JPProject.IdentityServer4.SSO项目介绍
  2. JPProject.IdentityServer4.SSO数据库还原
  3. Ubuntu部署Jp项目
  4. 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项目

分享到:

发表评论

评论列表