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 |
|||
{ |
|||
[DependsOn(typeof(AbpEventBusAbstractionsModule))] |
|||
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 |
|||
{ |
|||
@ -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' |
|||
|
|||
services: |
|||
admin-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30010:80" |
|||
identity-server-sts: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/identityserver |
|||
volumes: |
|||
- /var/opt/abp/logs/ids-sts:/app/Logs |
|||
restart: always |
|||
|
|||
identity-server-admin: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30015:80" |
|||
build: |
|||
context: ./aspnet-core/services/Publish/identityserver4-admin |
|||
volumes: |
|||
- /var/opt/abp/logs/ids-admin:/app/Logs |
|||
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: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30030:80" |
|||
build: |
|||
context: ./aspnet-core/services/Publish/localization |
|||
volumes: |
|||
- /var/opt/abp/logs/localization:/app/Logs |
|||
restart: always |
|||
|
|||
platform-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30025:80" |
|||
|
|||
messages-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30020:80" |
|||
|
|||
identity-server-sts: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "44385:80" |
|||
build: |
|||
context: ./aspnet-core/services/Publish/platform |
|||
volumes: |
|||
- /var/opt/abp/logs/platform:/app/Logs |
|||
- /var/opt/abp/data/platform:/app/file-blob-storing |
|||
depends_on: |
|||
- identity-server-sts |
|||
restart: always |
|||
|
|||
messages-service: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/messages |
|||
volumes: |
|||
- /var/opt/abp/logs/messages:/app/Logs |
|||
depends_on: |
|||
- identity-server-sts |
|||
restart: always |
|||
|
|||
apigateway-admin-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30001:80" |
|||
build: |
|||
context: ./aspnet-core/services/Publish/apigateway-admin |
|||
volumes: |
|||
- /var/opt/abp/logs/apigateway-admin:/app/Logs |
|||
depends_on: |
|||
- identity-server-sts |
|||
- admin-service |
|||
restart: always |
|||
|
|||
apigateway-host-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30000:80" |
|||
build: |
|||
context: ./aspnet-core/services/Publish/apigateway-host |
|||
volumes: |
|||
- /var/opt/abp/logs/apigateway-host:/app/Logs |
|||
depends_on: |
|||
- identity-server-sts |
|||
- apigateway-admin-service |
|||
restart: always |
|||
|
|||
abp-vue-admin-client: |
|||
ports: |
|||
- "40000:80" |
|||
build: |
|||
context: ./aspnet-core/services/Publish/client |
|||
restart: always |
|||
|
|||
volumes: |
|||
dbdata: |
|||
|
|||
networks: |
|||
linyun-abp: |
|||
|
|||
@ -1,84 +1,62 @@ |
|||
version: '3.4' |
|||
|
|||
services: |
|||
identity-server-sts: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/identityserver |
|||
volumes: |
|||
- /var/opt/abp/logs/ids-sts:/app/Logs |
|||
restart: always |
|||
admin-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30010:80" |
|||
|
|||
identity-server-admin: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/identityserver4-admin |
|||
volumes: |
|||
- /var/opt/abp/logs/ids-admin:/app/Logs |
|||
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 |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30015:80" |
|||
|
|||
localization-service: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/localization |
|||
volumes: |
|||
- /var/opt/abp/logs/localization:/app/Logs |
|||
restart: always |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30030:80" |
|||
|
|||
platform-service: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/platform |
|||
volumes: |
|||
- /var/opt/abp/logs/platform:/app/Logs |
|||
- /var/opt/abp/data/platform:/app/file-blob-storing |
|||
depends_on: |
|||
- identity-server-sts |
|||
restart: always |
|||
|
|||
messages-service: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/messages |
|||
volumes: |
|||
- /var/opt/abp/logs/messages:/app/Logs |
|||
depends_on: |
|||
- identity-server-sts |
|||
restart: always |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30025:80" |
|||
|
|||
messages-service: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30020:80" |
|||
|
|||
identity-server-sts: |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "44385:80" |
|||
|
|||
apigateway-admin-service: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/apigateway-admin |
|||
volumes: |
|||
- /var/opt/abp/logs/apigateway-admin:/app/Logs |
|||
depends_on: |
|||
- identity-server-sts |
|||
- admin-service |
|||
restart: always |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30001:80" |
|||
|
|||
apigateway-host-service: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/apigateway-host |
|||
volumes: |
|||
- /var/opt/abp/logs/apigateway-host:/app/Logs |
|||
depends_on: |
|||
- identity-server-sts |
|||
- apigateway-admin-service |
|||
restart: always |
|||
environment: |
|||
- ASPNETCORE_ENVIRONMENT=Production |
|||
- ASPNETCORE_URLS=http://0.0.0.0:80 |
|||
ports: |
|||
- "30000:80" |
|||
|
|||
abp-vue-admin-client: |
|||
build: |
|||
context: ./aspnet-core/services/Publish/client |
|||
restart: always |
|||
|
|||
volumes: |
|||
dbdata: |
|||
|
|||
networks: |
|||
linyun-abp: |
|||
ports: |
|||
- "40000:80" |
|||
|
|||
Loading…
Reference in new issue