55 changed files with 650 additions and 561 deletions
@ -0,0 +1,23 @@ |
|||||
|
using Microsoft.AspNetCore.SignalR; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using System; |
||||
|
using Volo.Abp.Json.SystemTextJson; |
||||
|
|
||||
|
namespace LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json |
||||
|
{ |
||||
|
public class JsonHubProtocolOptionsSetup : IConfigureOptions<JsonHubProtocolOptions> |
||||
|
{ |
||||
|
protected IServiceProvider ServiceProvider { get; } |
||||
|
|
||||
|
public JsonHubProtocolOptionsSetup(IServiceProvider serviceProvider) |
||||
|
{ |
||||
|
ServiceProvider = serviceProvider; |
||||
|
} |
||||
|
|
||||
|
public void Configure(JsonHubProtocolOptions options) |
||||
|
{ |
||||
|
options.PayloadSerializerOptions = ServiceProvider.GetRequiredService<IOptions<AbpSystemTextJsonSerializerOptions>>().Value.JsonSerializerOptions; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,78 @@ |
|||||
|
using DotNetCore.CAP.Messages; |
||||
|
using DotNetCore.CAP.Serialization; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using System; |
||||
|
using System.Buffers; |
||||
|
using System.Text.Json; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Json.SystemTextJson; |
||||
|
|
||||
|
namespace LINGYUN.Abp.EventBus.CAP |
||||
|
{ |
||||
|
public class AbpCapSerializer : ISerializer |
||||
|
{ |
||||
|
private readonly AbpSystemTextJsonSerializerOptions _jsonSerializerOptions; |
||||
|
|
||||
|
public AbpCapSerializer(IOptions<AbpSystemTextJsonSerializerOptions> options) |
||||
|
{ |
||||
|
_jsonSerializerOptions = options.Value; |
||||
|
} |
||||
|
|
||||
|
public Task<TransportMessage> SerializeAsync(Message message) |
||||
|
{ |
||||
|
if (message == null) |
||||
|
{ |
||||
|
throw new ArgumentNullException(nameof(message)); |
||||
|
} |
||||
|
|
||||
|
if (message.Value == null) |
||||
|
{ |
||||
|
return Task.FromResult(new TransportMessage(message.Headers, null)); |
||||
|
} |
||||
|
|
||||
|
var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(message.Value, _jsonSerializerOptions.JsonSerializerOptions); |
||||
|
return Task.FromResult(new TransportMessage(message.Headers, jsonBytes)); |
||||
|
} |
||||
|
|
||||
|
public Task<Message> DeserializeAsync(TransportMessage transportMessage, Type valueType) |
||||
|
{ |
||||
|
if (valueType == null || transportMessage.Body == null) |
||||
|
{ |
||||
|
return Task.FromResult(new Message(transportMessage.Headers, null)); |
||||
|
} |
||||
|
|
||||
|
var obj = JsonSerializer.Deserialize(transportMessage.Body, valueType, _jsonSerializerOptions.JsonSerializerOptions); |
||||
|
|
||||
|
return Task.FromResult(new Message(transportMessage.Headers, obj)); |
||||
|
} |
||||
|
|
||||
|
public string Serialize(Message message) |
||||
|
{ |
||||
|
return JsonSerializer.Serialize(message, _jsonSerializerOptions.JsonSerializerOptions); |
||||
|
} |
||||
|
|
||||
|
public Message Deserialize(string json) |
||||
|
{ |
||||
|
return JsonSerializer.Deserialize<Message>(json, _jsonSerializerOptions.JsonSerializerOptions); |
||||
|
} |
||||
|
|
||||
|
public object Deserialize(object value, Type valueType) |
||||
|
{ |
||||
|
if (value is JsonElement jToken) |
||||
|
{ |
||||
|
var bufferWriter = new ArrayBufferWriter<byte>(); |
||||
|
using (var writer = new Utf8JsonWriter(bufferWriter)) |
||||
|
{ |
||||
|
jToken.WriteTo(writer); |
||||
|
} |
||||
|
return JsonSerializer.Deserialize(bufferWriter.WrittenSpan, valueType, _jsonSerializerOptions.JsonSerializerOptions); |
||||
|
} |
||||
|
throw new NotSupportedException("Type is not of type JToken"); |
||||
|
} |
||||
|
|
||||
|
public bool IsJsonType(object jsonObject) |
||||
|
{ |
||||
|
return jsonObject is JsonElement; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,51 @@ |
|||||
|
using LINGYUN.Abp.RealTime; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using Volo.Abp.EventBus; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace LINGYUN.Abp.Notifications |
||||
|
{ |
||||
|
[Serializable] |
||||
|
[GenericEventName(Prefix = "abp.realtime.")] |
||||
|
public class NotificationEto<T> : RealTimeEto<T>, IMultiTenant |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 通知标识
|
||||
|
/// 自动计算
|
||||
|
/// </summary>
|
||||
|
public long Id { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 租户
|
||||
|
/// </summary>
|
||||
|
public Guid? TenantId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 通知名称
|
||||
|
/// </summary>
|
||||
|
public string Name { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 创建时间
|
||||
|
/// </summary>
|
||||
|
public DateTime CreationTime { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 紧急级别
|
||||
|
/// </summary>
|
||||
|
public NotificationSeverity Severity { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 指定的接收用户信息集合
|
||||
|
/// </summary>
|
||||
|
/// <remarks>
|
||||
|
/// 注:<br/>
|
||||
|
/// 如果指定了用户列表,应该在事件订阅程序中通过此集合过滤订阅用户<br/>
|
||||
|
/// 如果未指定用户列表,应该在事件订阅程序中过滤所有订阅此通知的用户
|
||||
|
/// </remarks>
|
||||
|
public List<UserIdentifier> Users { get; set; } |
||||
|
public NotificationEto() : base() |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public NotificationEto(T data) : base(data) |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,8 +1,19 @@ |
|||||
using Volo.Abp.Modularity; |
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.EventBus.Abstractions; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
namespace LINGYUN.Abp.RealTime |
namespace LINGYUN.Abp.RealTime |
||||
{ |
{ |
||||
|
[DependsOn(typeof(AbpEventBusAbstractionsModule))] |
||||
public class AbpRealTimeModule : AbpModule |
public class AbpRealTimeModule : AbpModule |
||||
{ |
{ |
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
context |
||||
|
.ServiceProvider |
||||
|
.GetRequiredService<SnowflakeIdrGenerator>() |
||||
|
.Initialize(); |
||||
|
} |
||||
} |
} |
||||
} |
} |
||||
|
|||||
@ -0,0 +1,7 @@ |
|||||
|
namespace LINGYUN.Abp.RealTime |
||||
|
{ |
||||
|
public interface ISnowflakeIdrGenerator |
||||
|
{ |
||||
|
long Create(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,21 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Domain.Entities.Events.Distributed; |
||||
|
using Volo.Abp.EventBus; |
||||
|
|
||||
|
namespace LINGYUN.Abp.RealTime |
||||
|
{ |
||||
|
[Serializable] |
||||
|
[GenericEventName(Prefix = "abp.realtime.")] |
||||
|
public class RealTimeEto<T> : EtoBase |
||||
|
{ |
||||
|
public T Data { get; set; } |
||||
|
public RealTimeEto() : base() |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public RealTimeEto(T data) : base() |
||||
|
{ |
||||
|
Data = data; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,4 +1,4 @@ |
|||||
namespace LINGYUN.Abp.MessageService.Utils |
namespace LINGYUN.Abp.RealTime |
||||
{ |
{ |
||||
public class SnowflakeIdOptions |
public class SnowflakeIdOptions |
||||
{ |
{ |
||||
@ -1,7 +0,0 @@ |
|||||
namespace LINGYUN.Abp.MessageService.Utils |
|
||||
{ |
|
||||
public interface ISnowflakeIdGenerator |
|
||||
{ |
|
||||
long Create(); |
|
||||
} |
|
||||
} |
|
||||
@ -1,40 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Http; |
|
||||
using System; |
|
||||
using System.Threading.Tasks; |
|
||||
using Volo.Abp.AspNetCore.MultiTenancy; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
using Volo.Abp.Text.Formatting; |
|
||||
|
|
||||
namespace LINGYUN.Platform |
|
||||
{ |
|
||||
public class DomainTenantResolveContributor : HttpTenantResolveContributorBase |
|
||||
{ |
|
||||
public const string ContributorName = "Domain"; |
|
||||
|
|
||||
public override string Name => ContributorName; |
|
||||
|
|
||||
private static readonly string[] ProtocolPrefixes = { "http://", "https://" }; |
|
||||
|
|
||||
private readonly string _domainFormat; |
|
||||
|
|
||||
public DomainTenantResolveContributor(string domainFormat) |
|
||||
{ |
|
||||
_domainFormat = domainFormat.RemovePreFix(ProtocolPrefixes); |
|
||||
} |
|
||||
|
|
||||
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) |
|
||||
{ |
|
||||
if (!httpContext.Request.Host.HasValue) |
|
||||
{ |
|
||||
return Task.FromResult<string>(null); |
|
||||
} |
|
||||
|
|
||||
var hostName = httpContext.Request.Host.Value.RemovePreFix(ProtocolPrefixes); |
|
||||
var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, ignoreCase: true); |
|
||||
|
|
||||
context.Handled = true; |
|
||||
|
|
||||
return Task.FromResult(extractResult.IsMatch ? extractResult.Matches[0].Value : null); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,50 +0,0 @@ |
|||||
using Microsoft.AspNetCore.Http; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Logging; |
|
||||
using System; |
|
||||
using System.Collections.Generic; |
|
||||
using System.Linq; |
|
||||
using System.Threading.Tasks; |
|
||||
using Volo.Abp.AspNetCore.MultiTenancy; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace LINGYUN.Platform |
|
||||
{ |
|
||||
public class HeaderTenantResolveContributor : HttpTenantResolveContributorBase |
|
||||
{ |
|
||||
public const string ContributorName = "Header"; |
|
||||
|
|
||||
public override string Name => ContributorName; |
|
||||
|
|
||||
protected override Task<string> GetTenantIdOrNameFromHttpContextOrNullAsync(ITenantResolveContext context, HttpContext httpContext) |
|
||||
{ |
|
||||
if (httpContext.Request.Headers.IsNullOrEmpty()) |
|
||||
{ |
|
||||
return Task.FromResult((string)null); |
|
||||
} |
|
||||
|
|
||||
var tenantIdKey = context.GetAbpAspNetCoreMultiTenancyOptions().TenantKey; |
|
||||
|
|
||||
var tenantIdHeader = httpContext.Request.Headers[tenantIdKey]; |
|
||||
if (tenantIdHeader == string.Empty || tenantIdHeader.Count < 1) |
|
||||
{ |
|
||||
return Task.FromResult((string)null); |
|
||||
} |
|
||||
|
|
||||
if (tenantIdHeader.Count > 1) |
|
||||
{ |
|
||||
Log(context, $"HTTP request includes more than one {tenantIdKey} header value. First one will be used. All of them: {tenantIdHeader.JoinAsString(", ")}"); |
|
||||
} |
|
||||
|
|
||||
return Task.FromResult(tenantIdHeader.First()); |
|
||||
} |
|
||||
|
|
||||
protected virtual void Log(ITenantResolveContext context, string text) |
|
||||
{ |
|
||||
context |
|
||||
.ServiceProvider |
|
||||
.GetRequiredService<ILogger<HeaderTenantResolveContributor>>() |
|
||||
.LogWarning(text); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,66 +0,0 @@ |
|||||
using System; |
|
||||
using System.Threading.Tasks; |
|
||||
using Volo.Abp; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace LINGYUN.Platform |
|
||||
{ |
|
||||
[Dependency(Microsoft.Extensions.DependencyInjection.ServiceLifetime.Transient, ReplaceServices = true)] |
|
||||
[ExposeServices(typeof(ITenantConfigurationProvider))] |
|
||||
public class TenantConfigurationProvider : ITenantConfigurationProvider |
|
||||
{ |
|
||||
protected virtual ITenantResolver TenantResolver { get; } |
|
||||
protected virtual ITenantStore TenantStore { get; } |
|
||||
protected virtual ITenantResolveResultAccessor TenantResolveResultAccessor { get; } |
|
||||
|
|
||||
public TenantConfigurationProvider( |
|
||||
ITenantResolver tenantResolver, |
|
||||
ITenantStore tenantStore, |
|
||||
ITenantResolveResultAccessor tenantResolveResultAccessor) |
|
||||
{ |
|
||||
TenantResolver = tenantResolver; |
|
||||
TenantStore = tenantStore; |
|
||||
TenantResolveResultAccessor = tenantResolveResultAccessor; |
|
||||
} |
|
||||
|
|
||||
public virtual async Task<TenantConfiguration> GetAsync(bool saveResolveResult = false) |
|
||||
{ |
|
||||
var resolveResult = await TenantResolver.ResolveTenantIdOrNameAsync(); |
|
||||
|
|
||||
if (saveResolveResult) |
|
||||
{ |
|
||||
TenantResolveResultAccessor.Result = resolveResult; |
|
||||
} |
|
||||
|
|
||||
TenantConfiguration tenant = null; |
|
||||
if (resolveResult.TenantIdOrName != null) |
|
||||
{ |
|
||||
tenant = await FindTenantAsync(resolveResult.TenantIdOrName); |
|
||||
|
|
||||
if (tenant == null) |
|
||||
{ |
|
||||
throw new BusinessException( |
|
||||
code: "Volo.AbpIo.MultiTenancy:010001", |
|
||||
message: "Tenant not found!", |
|
||||
details: "There is no tenant with the tenant id or name: " + resolveResult.TenantIdOrName |
|
||||
); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return tenant; |
|
||||
} |
|
||||
|
|
||||
protected virtual async Task<TenantConfiguration> FindTenantAsync(string tenantIdOrName) |
|
||||
{ |
|
||||
if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)) |
|
||||
{ |
|
||||
return await TenantStore.FindAsync(parsedTenantId); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
return await TenantStore.FindAsync(tenantIdOrName); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,48 +0,0 @@ |
|||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Microsoft.Extensions.Options; |
|
||||
using System; |
|
||||
using System.Threading.Tasks; |
|
||||
using Volo.Abp.DependencyInjection; |
|
||||
using Volo.Abp.MultiTenancy; |
|
||||
|
|
||||
namespace LINGYUN.Platform |
|
||||
{ |
|
||||
[Dependency(Microsoft.Extensions.DependencyInjection.ServiceLifetime.Transient, ReplaceServices = true)] |
|
||||
[ExposeServices(typeof(ITenantResolver))] |
|
||||
public class TenantResolver : ITenantResolver |
|
||||
{ |
|
||||
private readonly IServiceProvider _serviceProvider; |
|
||||
private readonly AbpTenantResolveOptions _options; |
|
||||
|
|
||||
public TenantResolver(IOptions<AbpTenantResolveOptions> options, IServiceProvider serviceProvider) |
|
||||
{ |
|
||||
_serviceProvider = serviceProvider; |
|
||||
_options = options.Value; |
|
||||
} |
|
||||
|
|
||||
public virtual async Task<TenantResolveResult> ResolveTenantIdOrNameAsync() |
|
||||
{ |
|
||||
var result = new TenantResolveResult(); |
|
||||
|
|
||||
using (var serviceScope = _serviceProvider.CreateScope()) |
|
||||
{ |
|
||||
var context = new TenantResolveContext(serviceScope.ServiceProvider); |
|
||||
|
|
||||
foreach (var tenantResolver in _options.TenantResolvers) |
|
||||
{ |
|
||||
await tenantResolver.ResolveAsync(context); |
|
||||
|
|
||||
result.AppliedResolvers.Add(tenantResolver.Name); |
|
||||
|
|
||||
if (context.Handled || context.TenantIdOrName != null) |
|
||||
{ |
|
||||
result.TenantIdOrName = context.TenantIdOrName; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return result; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -0,0 +1,84 @@ |
|||||
|
version: '3.4' |
||||
|
|
||||
|
services: |
||||
|
identity-server-sts: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/identityserver |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\ids-sts:/app/Logs |
||||
|
restart: always |
||||
|
|
||||
|
identity-server-admin: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/identityserver4-admin |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\ids-admin:/app/Logs |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
|
admin-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/admin |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\backend-admin:/app/Logs |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
|
localization-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/localization |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\localization:/app/Logs |
||||
|
restart: always |
||||
|
|
||||
|
platform-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/platform |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\platform:/app/Logs |
||||
|
- D:\Projects\Development\Abp\Application\data\platform:/app/file-blob-storing |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
|
messages-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/messages |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\messages:/app/Logs |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
|
apigateway-admin-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/apigateway-admin |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\apigateway-admin:/app/Logs |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
- admin-service |
||||
|
restart: always |
||||
|
|
||||
|
apigateway-host-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/apigateway-host |
||||
|
volumes: |
||||
|
- D:\Projects\Development\Abp\Application\logs\apigateway-host:/app/Logs |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
- apigateway-admin-service |
||||
|
restart: always |
||||
|
|
||||
|
abp-vue-admin-client: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/client |
||||
|
restart: always |
||||
|
|
||||
|
volumes: |
||||
|
dbdata: |
||||
|
|
||||
|
networks: |
||||
|
linyun-abp: |
||||
@ -1,62 +1,84 @@ |
|||||
version: '3.4' |
version: '3.4' |
||||
|
|
||||
services: |
services: |
||||
admin-service: |
identity-server-sts: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/identityserver |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/ids-sts:/app/Logs |
||||
- "30010:80" |
restart: always |
||||
|
|
||||
identity-server-admin: |
identity-server-admin: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/identityserver4-admin |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/ids-admin:/app/Logs |
||||
- "30015:80" |
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
|
admin-service: |
||||
|
build: |
||||
|
context: ./aspnet-core/services/Publish/admin |
||||
|
volumes: |
||||
|
- /var/opt/abp/logs/backend-admin:/app/Logs |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
localization-service: |
localization-service: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/localization |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/localization:/app/Logs |
||||
- "30030:80" |
restart: always |
||||
|
|
||||
platform-service: |
platform-service: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/platform |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/platform:/app/Logs |
||||
- "30025:80" |
- /var/opt/abp/data/platform:/app/file-blob-storing |
||||
|
depends_on: |
||||
|
- identity-server-sts |
||||
|
restart: always |
||||
|
|
||||
messages-service: |
messages-service: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/messages |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/messages:/app/Logs |
||||
- "30020:80" |
depends_on: |
||||
|
- identity-server-sts |
||||
identity-server-sts: |
restart: always |
||||
environment: |
|
||||
- ASPNETCORE_ENVIRONMENT=Production |
|
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|
||||
ports: |
|
||||
- "44385:80" |
|
||||
|
|
||||
apigateway-admin-service: |
apigateway-admin-service: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/apigateway-admin |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/apigateway-admin:/app/Logs |
||||
- "30001:80" |
depends_on: |
||||
|
- identity-server-sts |
||||
|
- admin-service |
||||
|
restart: always |
||||
|
|
||||
apigateway-host-service: |
apigateway-host-service: |
||||
environment: |
build: |
||||
- ASPNETCORE_ENVIRONMENT=Production |
context: ./aspnet-core/services/Publish/apigateway-host |
||||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
volumes: |
||||
ports: |
- /var/opt/abp/logs/apigateway-host:/app/Logs |
||||
- "30000:80" |
depends_on: |
||||
|
- identity-server-sts |
||||
|
- apigateway-admin-service |
||||
|
restart: always |
||||
|
|
||||
abp-vue-admin-client: |
abp-vue-admin-client: |
||||
ports: |
build: |
||||
- "40000:80" |
context: ./aspnet-core/services/Publish/client |
||||
|
restart: always |
||||
|
|
||||
|
volumes: |
||||
|
dbdata: |
||||
|
|
||||
|
networks: |
||||
|
linyun-abp: |
||||
|
|||||
@ -1,84 +1,62 @@ |
|||||
version: '3.4' |
version: '3.4' |
||||
|
|
||||
services: |
services: |
||||
identity-server-sts: |
admin-service: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/identityserver |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/ids-sts:/app/Logs |
ports: |
||||
restart: always |
- "30010:80" |
||||
|
|
||||
identity-server-admin: |
identity-server-admin: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/identityserver4-admin |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/ids-admin:/app/Logs |
ports: |
||||
depends_on: |
- "30015:80" |
||||
- identity-server-sts |
|
||||
restart: always |
|
||||
|
|
||||
admin-service: |
|
||||
build: |
|
||||
context: ./aspnet-core/services/Publish/admin |
|
||||
volumes: |
|
||||
- /var/opt/abp/logs/backend-admin:/app/Logs |
|
||||
depends_on: |
|
||||
- identity-server-sts |
|
||||
restart: always |
|
||||
|
|
||||
localization-service: |
localization-service: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/localization |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/localization:/app/Logs |
ports: |
||||
restart: always |
- "30030:80" |
||||
|
|
||||
platform-service: |
platform-service: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/platform |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/platform:/app/Logs |
ports: |
||||
- /var/opt/abp/data/platform:/app/file-blob-storing |
- "30025:80" |
||||
depends_on: |
|
||||
- identity-server-sts |
|
||||
restart: always |
|
||||
|
|
||||
messages-service: |
messages-service: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/messages |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/messages:/app/Logs |
ports: |
||||
depends_on: |
- "30020:80" |
||||
- identity-server-sts |
|
||||
restart: always |
identity-server-sts: |
||||
|
environment: |
||||
|
- ASPNETCORE_ENVIRONMENT=Production |
||||
|
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
|
ports: |
||||
|
- "44385:80" |
||||
|
|
||||
apigateway-admin-service: |
apigateway-admin-service: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/apigateway-admin |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/apigateway-admin:/app/Logs |
ports: |
||||
depends_on: |
- "30001:80" |
||||
- identity-server-sts |
|
||||
- admin-service |
|
||||
restart: always |
|
||||
|
|
||||
apigateway-host-service: |
apigateway-host-service: |
||||
build: |
environment: |
||||
context: ./aspnet-core/services/Publish/apigateway-host |
- ASPNETCORE_ENVIRONMENT=Production |
||||
volumes: |
- ASPNETCORE_URLS=http://0.0.0.0:80 |
||||
- /var/opt/abp/logs/apigateway-host:/app/Logs |
ports: |
||||
depends_on: |
- "30000:80" |
||||
- identity-server-sts |
|
||||
- apigateway-admin-service |
|
||||
restart: always |
|
||||
|
|
||||
abp-vue-admin-client: |
abp-vue-admin-client: |
||||
build: |
ports: |
||||
context: ./aspnet-core/services/Publish/client |
- "40000:80" |
||||
restart: always |
|
||||
|
|
||||
volumes: |
|
||||
dbdata: |
|
||||
|
|
||||
networks: |
|
||||
linyun-abp: |
|
||||
|
|||||
Loading…
Reference in new issue