From 3cf85f9bbbec0f20cad233f056e0296b20ffd473 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Tue, 6 May 2025 14:03:45 +0300 Subject: [PATCH] =?UTF-8?q?url=20de=C4=9Fi=C5=9Fimi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/README.md | 7 +- .../PublicApi/PublicApiAppService.cs | 4 +- .../Seeds/ListFormsSeeder.cs | 2 +- .../Seeds/NotificationRuleSeeder.cs | 6 +- .../Seeds/PlatformIdentityDataSeeder.cs | 2 +- .../Seeds/SeederData.Dev.json | 2 +- .../Seeds/SeederData.Production.json | 2 +- .../Seeds/SeederData.json | 12 +-- .../appsettings.Dev.json | 12 +-- .../appsettings.Production.json | 12 +-- .../Kurs.Platform.DbMigrator/appsettings.json | 4 +- .../PlatformConsts.cs | 2 +- .../appsettings.Dev.json | 14 +-- .../appsettings.Production.json | 14 +-- .../appsettings.json | 8 +- .../DynamicDataRepository_Tests.cs | 4 +- configs/deployment/README.md | 92 +++++++++--------- configs/deployment/configs/nginx-devops.conf | 18 ++-- configs/deployment/configs/nginx.dev.conf | 18 ++-- .../deployment/configs/nginx.production.conf | 18 ++-- configs/deployment/docker-compose-app.dev.yml | 2 +- .../docker-compose-app.production.yml | 2 +- configs/deployment/docker-compose-app.yml | 8 +- .../docker-compose-devops-forgejo.yml | 2 +- configs/deployment/docker-compose-devops.yml | 6 +- configs/deployment/scripts/1-devops-api.sh | 8 +- .../deployment/scripts/1-devops-migrator.sh | 8 +- configs/deployment/scripts/1-devops-ui.sh | 8 +- configs/docker/docker-compose-n8n.yml | 2 +- ui/.env | 2 +- ui/.env.dev | 10 +- ui/.env.production | 10 +- ui/dev-dist/sw.js | 2 +- ui/index.html | 4 +- ui/public/img/others/cto.png | Bin 0 -> 95934 bytes .../components/layouts/AuthLayout/Cover.tsx | 6 +- ui/src/components/layouts/AuthLayout/Side.tsx | 6 +- ui/src/components/template/AiAssistant.tsx | 4 +- ui/src/views/Home.tsx | 4 +- ui/src/views/admin/chart/ChartEdit.tsx | 4 +- ui/src/views/admin/identity/Roles/Roles.tsx | 4 +- ui/src/views/admin/identity/Users/Details.tsx | 4 +- ui/src/views/admin/identity/Users/Users.tsx | 4 +- ui/src/views/admin/listForm/Wizard.tsx | 4 +- ui/src/views/admin/listForm/edit/FormEdit.tsx | 4 +- .../organization-unit/OrganizationUnits.tsx | 4 +- .../views/admin/tenant-management/Tenants.tsx | 4 +- ui/src/views/ai/Assistant.tsx | 2 +- ui/src/views/chart/Chart.tsx | 4 +- ui/src/views/form/FormEdit.tsx | 4 +- ui/src/views/form/FormNew.tsx | 4 +- ui/src/views/form/FormView.tsx | 4 +- ui/src/views/list/Grid.tsx | 4 +- ui/src/views/list/Pivot.tsx | 4 +- ui/src/views/settings/Settings.tsx | 4 +- ui/vite.config.ts | 2 +- 56 files changed, 207 insertions(+), 204 deletions(-) create mode 100644 ui/public/img/others/cto.png diff --git a/api/README.md b/api/README.md index 7e9de4ab..33ca42ba 100644 --- a/api/README.md +++ b/api/README.md @@ -17,6 +17,9 @@ `dotnet ef migrations remove` `dotnet ef database update "20240822114716_ABP_822"` +- SQL Veritabanını Entity Class oluştur. + `dotnet ef dbcontext scaffold "Server=SERVERNAME;Database=DBNAME;User ID=USERNAME;Password=PASSWORD;TrustServerCertificate=True;" Microsoft.EntityFrameworkCore.SqlServer --context MyDbContext --output-dir Models --data-annotations --force` + # Public Api ``` @@ -25,7 +28,7 @@ POST /connect/token HTTP/1.1 Host: localhost:44344 Content-Type: application/x-www-form-urlencoded -username=sedat%40kadifeteks.com +username=system%40sozsoft.com &password=... &grant_type=password &client_id=Platform_PublicApi @@ -36,7 +39,7 @@ username=sedat%40kadifeteks.com - Normal facebook üyeliği yapılır. - https://developers.facebook.com/ sitesinden yeni developer üyeliği oluşturulur. Developer üyeliği seçilir. -- CreateApp butonu ile yeni uygulama oluşturulur. Uygulama adı belirlenir. 'Sozsoft Messenger' +- CreateApp butonu ile yeni uygulama oluşturulur. Uygulama adı belirlenir. 'Kurs Messenger' - AppType olarak İşletme seçilir ve App oluşturulur. - Add Products kısmında WhatsApp seçilir ve Business Account oluşturulur. - 3 noktadan (menüden) WhatsApp Manager sayfasına gidilir. Manage Templates seçilir, istenirse yeni template oluşturulur. 'hello_world' diff --git a/api/src/Kurs.Platform.Application/PublicApi/PublicApiAppService.cs b/api/src/Kurs.Platform.Application/PublicApi/PublicApiAppService.cs index b2be846b..6f00fbd0 100644 --- a/api/src/Kurs.Platform.Application/PublicApi/PublicApiAppService.cs +++ b/api/src/Kurs.Platform.Application/PublicApi/PublicApiAppService.cs @@ -209,7 +209,7 @@ POST /connect/token HTTP/1.1 Host: localhost:44344 Content-Type: application/x-www-form-urlencoded -username=sedat%40kadifeteks.com +username=system%40sozsoft.com &password=... &grant_type=password &client_id=Platform_PublicApi @@ -257,8 +257,8 @@ string Params = [ ] string Sql -> SELECT * FROM VSatislar WHERE MusteriId = @MusteriId AND StartDate >= @StartDate string Permissions = [ + { ResourceType: 'User', ResourceId: 'system' }, { ResourceType: 'User', ResourceId: 'sedat' }, - { ResourceType: 'User', ResourceId: 'vedat' }, ] Query Parameter diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs index da9fa045..c9097643 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/ListFormsSeeder.cs @@ -53,7 +53,7 @@ public class ListFormsSeeder : IDataSeedContributor, ITransientDependency var lookupQueryLanguage = $"SELECT \"{DbTablePrefix}LanguageKey\".\"Key\", CONCAT(\"{DbTablePrefix}LanguageKey\".\"Key\", ' (', \"{DbTablePrefix}LanguageText\".\"Value\", ')') AS \"Name\" FROM \"{DbTablePrefix}LanguageKey\" LEFT OUTER JOIN \"{DbTablePrefix}LanguageText\" ON \"{DbTablePrefix}LanguageKey\".\"Key\" = \"{DbTablePrefix}LanguageText\".\"Key\" AND \"{DbTablePrefix}LanguageKey\".\"ResourceName\" = \"{DbTablePrefix}LanguageText\".\"ResourceName\" WHERE \"{DbTablePrefix}LanguageKey\".\"IsDeleted\" = 'false' AND \"{DbTablePrefix}LanguageText\".\"IsDeleted\" = 'false' AND \"{DbTablePrefix}LanguageText\".\"CultureName\" = 'tr' ORDER BY \"{DbTablePrefix}LanguageKey\".\"Key\";"; var lookupQueryCulture = $"SELECT \"CultureName\" AS \"Key\", \"DisplayName\" AS \"Name\", \"CreationTime\" FROM \"{DbTablePrefix}Language\" WHERE \"IsEnabled\" = 'true' and \"IsDeleted\" = 'false'"; - var adminUser = _identityUserManager.FindByNameAsync("admin"); + var adminUser = _identityUserManager.FindByNameAsync(PlatformConsts.AbpIdentity.User.AdminEmailDefaultValue); string roleId = null; string userId = null; diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/NotificationRuleSeeder.cs b/api/src/Kurs.Platform.DbMigrator/Seeds/NotificationRuleSeeder.cs index 4500bd75..22766df5 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/NotificationRuleSeeder.cs +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/NotificationRuleSeeder.cs @@ -27,7 +27,7 @@ public class NotificationRuleSeeder : IDataSeedContributor, ITransientDependency new() { NotificationType = NotificationTypes.YeniSiparis, RecipientType = NotificationRecipientTypes.Role, - RecipientId = "admin", + RecipientId = PlatformConsts.AbpIdentity.User.AdminRoleName, Channel = NotificationChannels.UiActivity, IsActive = true, IsFixed = false, @@ -36,7 +36,7 @@ public class NotificationRuleSeeder : IDataSeedContributor, ITransientDependency new() { NotificationType = NotificationTypes.SiparisPasla, RecipientType = NotificationRecipientTypes.Role, - RecipientId = "admin", + RecipientId = PlatformConsts.AbpIdentity.User.AdminRoleName, Channel = NotificationChannels.Desktop, IsActive = true, IsFixed = false, @@ -45,7 +45,7 @@ public class NotificationRuleSeeder : IDataSeedContributor, ITransientDependency new() { NotificationType = NotificationTypes.YeniKullanici, RecipientType = NotificationRecipientTypes.Role, - RecipientId = "admin", + RecipientId = PlatformConsts.AbpIdentity.User.AdminRoleName, Channel = NotificationChannels.Rocket, IsActive = true, IsFixed = false, diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/PlatformIdentityDataSeeder.cs b/api/src/Kurs.Platform.DbMigrator/Seeds/PlatformIdentityDataSeeder.cs index 0bfa05d2..c8b26173 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/PlatformIdentityDataSeeder.cs +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/PlatformIdentityDataSeeder.cs @@ -83,7 +83,7 @@ public class PlatformIdentityDataSeeder : IdentityDataSeeder adminUser.SetEmailConfirmed(true); adminUser.SetIsVerified(true); - adminUser.SetRocketUsername("sedat.ozturk"); + adminUser.SetRocketUsername(PlatformConsts.AbpIdentity.User.AdminEmailDefaultValue); adminUser.SetPhoneNumber(PlatformConsts.AbpIdentity.User.AdminPhoneNumberDefaultValue, true); (await UserManager.CreateAsync(adminUser, adminPassword, validatePassword: false)).CheckErrors(); diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Dev.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Dev.json index 78bde8cc..958b3576 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Dev.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Dev.json @@ -3,7 +3,7 @@ { "code": "Default", "dataSourceType": 2, - "connectionString": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Platform;" + "connectionString": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Demo;" } ] } diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Production.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Production.json index 78bde8cc..958b3576 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Production.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.Production.json @@ -3,7 +3,7 @@ { "code": "Default", "dataSourceType": 2, - "connectionString": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Platform;" + "connectionString": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Demo;" } ] } diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json index dcc93f15..d43e47f5 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json @@ -4080,7 +4080,7 @@ { "code": "Default", "dataSourceType": 2, - "connectionString": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Platform;" + "connectionString": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Demo;" }, { "code": "KIM", @@ -4191,7 +4191,7 @@ "code": "App.SiteManagement.General.NewMemberNotificationEmails", "nameKey": "App.SiteManagement.General.NewMemberNotificationEmails", "descriptionKey": "App.SiteManagement.General.NewMemberNotificationEmails.Description", - "defaultValue": "sedat@sozsoft.com", + "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, "providers": ["G", "D"], "isInherited": false, @@ -4207,7 +4207,7 @@ "code": "App.SiteManagement.General.TimedLoginEmails", "nameKey": "App.SiteManagement.General.TimedLoginEmails", "descriptionKey": "App.SiteManagement.General.TimedLoginEmails.Description", - "defaultValue": "sedat@sozsoft.com", + "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, "providers": ["G", "D"], "isInherited": false, @@ -4335,7 +4335,7 @@ "code": "App.Sender.Rocket.Url", "nameKey": "App.Sender.Rocket.Url", "descriptionKey": "App.Sender.Rocket.Url.Description", - "defaultValue": "https://chat.sozsoft.net/api/v1", + "defaultValue": "https://chat.sozsoft.com/api/v1", "isVisibleToClients": false, "providers": ["G", "D", "T"], "isInherited": false, @@ -4399,7 +4399,7 @@ "code": "Abp.Mailing.DefaultFromAddress", "nameKey": "Abp.Mailing.DefaultFromAddress", "descriptionKey": "Abp.Mailing.DefaultFromAddress.Description", - "defaultValue": "sedat@sozsoft.com", + "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, "providers": ["G", "D", "T"], "isInherited": false, @@ -4415,7 +4415,7 @@ "code": "Abp.Mailing.Smtp.UserName", "nameKey": "Abp.Mailing.Smtp.UserName", "descriptionKey": "Abp.Mailing.Smtp.UserName.Description", - "defaultValue": "sedat@sozsoft.com", + "defaultValue": "system@sozsoft.com", "isVisibleToClients": false, "providers": ["G", "D", "T"], "isInherited": false, diff --git a/api/src/Kurs.Platform.DbMigrator/appsettings.Dev.json b/api/src/Kurs.Platform.DbMigrator/appsettings.Dev.json index e319ceb5..e0f26cf2 100644 --- a/api/src/Kurs.Platform.DbMigrator/appsettings.Dev.json +++ b/api/src/Kurs.Platform.DbMigrator/appsettings.Dev.json @@ -1,7 +1,7 @@ { "ConnectionStrings": { - // "Default": "Server=sql;Database=Platform;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" - "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Platform;" + // "Default": "Server=sql;Database=Demo;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" + "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Demo;" }, "Redis": { "IsEnabled": "true", @@ -12,21 +12,21 @@ "Platform_Web": { "ClientId": "Platform_Web", "ClientSecret": "1q2w3e*", - "RootUrl": "https://platform-dev-api.sozsoft.net" + "RootUrl": "https://platform-dev-api.sozsoft.com" }, "Platform_App": { "ClientId": "Platform_App", - "RootUrl": "https://platform-dev.sozsoft.net", + "RootUrl": "https://platform-dev.sozsoft.com", "TokenLifeTime": 2, "RefreshTokenLifeTime": 8760 }, "Platform_Swagger": { "ClientId": "Platform_Swagger", - "RootUrl": "https://platform-dev-api.sozsoft.net" + "RootUrl": "https://platform-dev-api.sozsoft.com" }, "Platform_PublicApi": { "ClientId": "Platform_PublicApi", - "RootUrl": "https://platform-dev.sozsoft.net", + "RootUrl": "https://platform-dev.sozsoft.com", "TokenLifeTime": 2, "RefreshTokenLifeTime": 8760 } diff --git a/api/src/Kurs.Platform.DbMigrator/appsettings.Production.json b/api/src/Kurs.Platform.DbMigrator/appsettings.Production.json index 39b485ff..c19ca14c 100644 --- a/api/src/Kurs.Platform.DbMigrator/appsettings.Production.json +++ b/api/src/Kurs.Platform.DbMigrator/appsettings.Production.json @@ -1,7 +1,7 @@ { "ConnectionStrings": { - // "Default": "Server=sql;Database=Platform;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" - "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Platform;" + // "Default": "Server=sql;Database=Demo;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" + "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Demo;" }, "Redis": { "IsEnabled": "true", @@ -12,21 +12,21 @@ "Platform_Web": { "ClientId": "Platform_Web", "ClientSecret": "1q2w3e*", - "RootUrl": "https://platform-api.sozsoft.net" + "RootUrl": "https://platform-api.sozsoft.com" }, "Platform_App": { "ClientId": "Platform_App", - "RootUrl": "https://platform.sozsoft.net", + "RootUrl": "https://platform.sozsoft.com", "TokenLifeTime": 2, "RefreshTokenLifeTime": 8760 }, "Platform_Swagger": { "ClientId": "Platform_Swagger", - "RootUrl": "https://platform-api.sozsoft.net" + "RootUrl": "https://platform-api.sozsoft.com" }, "Platform_PublicApi": { "ClientId": "Platform_PublicApi", - "RootUrl": "https://platform.sozsoft.net", + "RootUrl": "https://platform.sozsoft.com", "TokenLifeTime": 2, "RefreshTokenLifeTime": 8760 } diff --git a/api/src/Kurs.Platform.DbMigrator/appsettings.json b/api/src/Kurs.Platform.DbMigrator/appsettings.json index 1ec94d20..7330671a 100644 --- a/api/src/Kurs.Platform.DbMigrator/appsettings.json +++ b/api/src/Kurs.Platform.DbMigrator/appsettings.json @@ -1,8 +1,8 @@ { "Seed": false, "ConnectionStrings": { - // "Default": "Server=localhost;Database=Platform;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" - "Default": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Platform;" + // "Default": "Server=localhost;Database=Demo;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" + "Default": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Demo;" }, "Redis": { "IsEnabled": "true", diff --git a/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs b/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs index b79754f4..43ce7a4c 100644 --- a/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs +++ b/api/src/Kurs.Platform.Domain.Shared/PlatformConsts.cs @@ -64,7 +64,7 @@ public static class PlatformConsts public const string AdminRoleName = "admin"; public const string AdminNameDefaultValue = "Sedat"; public const string AdminSurNameDefaultValue = "ÖZTÜRK"; - public const string AdminEmailDefaultValue = "sedat@sozsoft.com"; + public const string AdminEmailDefaultValue = "system@sozsoft.com"; public const string AdminPasswordDefaultValue = "1q2w3E*"; public const string AdminPhoneNumberDefaultValue = "05449476346"; } diff --git a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json index e79116a5..9d3786b9 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json +++ b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Dev.json @@ -1,22 +1,22 @@ { "App": { - "SelfUrl": "https://platform-dev-api.sozsoft.net", - "ClientUrl": "https://platform-dev.sozsoft.net", - "CorsOrigins": "https://platform-dev.sozsoft.net", - "RedirectAllowedUrls": "https://platform-dev.sozsoft.net,https://platform-dev.sozsoft.net/authentication/callback", + "SelfUrl": "https://platform-dev-api.sozsoft.com", + "ClientUrl": "https://platform-dev.sozsoft.com", + "CorsOrigins": "https://platform-dev.sozsoft.com", + "RedirectAllowedUrls": "https://platform-dev.sozsoft.com,https://platform-dev.sozsoft.com/authentication/callback", "AttachmentsPath": "/etc/api/mail-queue/attachments", "CdnPath": "/etc/api/cdn" }, "ConnectionStrings": { - // "Default": "Server=sql;Database=Platform;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" - "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Platform;" + // "Default": "Server=sql;Database=Demo;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" + "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Demo;" }, "Redis": { "IsEnabled": "true", "Configuration": "redis:6379,abortConnect=false,connectTimeout=30000,responseTimeout=30000" }, "AuthServer": { - "Authority": "https://platform-dev-api.sozsoft.net", + "Authority": "https://platform-dev-api.sozsoft.com", "RequireHttpsMetadata": false, "SwaggerClientId": "Platform_Swagger" }, diff --git a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json index a2069996..aaa561c2 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json +++ b/api/src/Kurs.Platform.HttpApi.Host/appsettings.Production.json @@ -1,22 +1,22 @@ { "App": { - "SelfUrl": "https://platform-api.sozsoft.net", - "ClientUrl": "https://platform.sozsoft.net", - "CorsOrigins": "https://platform.sozsoft.net", - "RedirectAllowedUrls": "https://platform.sozsoft.net,https://platform.sozsoft.net/authentication/callback", + "SelfUrl": "https://platform-api.sozsoft.com", + "ClientUrl": "https://platform.sozsoft.com", + "CorsOrigins": "https://platform.sozsoft.com", + "RedirectAllowedUrls": "https://platform.sozsoft.com,https://platform.sozsoft.com/authentication/callback", "AttachmentsPath": "/etc/api/mail-queue/attachments", "CdnPath": "/etc/api/cdn" }, "ConnectionStrings": { - // "Default": "Server=sql;Database=Platform;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" - "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Platform;" + // "Default": "Server=sql;Database=Demo;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" + "Default": "User ID=sa;Password=NvQp8s@l;Host=postgres;Port=5432;Database=Demo;" }, "Redis": { "IsEnabled": "true", "Configuration": "redis:6379,abortConnect=false,connectTimeout=30000,responseTimeout=30000" }, "AuthServer": { - "Authority": "https://platform-api.sozsoft.net", + "Authority": "https://platform-api.sozsoft.com", "RequireHttpsMetadata": false, "SwaggerClientId": "Platform_Swagger" }, diff --git a/api/src/Kurs.Platform.HttpApi.Host/appsettings.json b/api/src/Kurs.Platform.HttpApi.Host/appsettings.json index e46bba54..c45f4d1a 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/appsettings.json +++ b/api/src/Kurs.Platform.HttpApi.Host/appsettings.json @@ -4,13 +4,13 @@ "ClientUrl": "http://localhost:3000", "CorsOrigins": "http://localhost,http://localhost:3000,http://localhost:4200,http://localhost:5173", "RedirectAllowedUrls": "http://localhost:4200,http://localhost:4200/authentication/callback", - "AttachmentsPath": "C:\\Projects\\kurs\\kurs-platform\\configs\\mail-queue\\attachments", - "CdnPath": "C:\\Projects\\kurs\\kurs-platform\\configs\\docker\\data\\cdn", + "AttachmentsPath": "C:\\Private\\Projects\\kurs-platform\\configs\\mail-queue\\attachments", + "CdnPath": "C:\\Private\\Projects\\kurs-platform\\configs\\docker\\data\\cdn", "Version": "1.0.4" }, "ConnectionStrings": { - // "Default": "Server=localhost;Database=Platform;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" - "Default": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Platform;" + // "Default": "Server=localhost;Database=Demo;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;" + "Default": "User ID=sa;Password=NvQp8s@l;Host=localhost;Port=5432;Database=Demo;" }, "Redis": { "IsEnabled": "true", diff --git a/api/test/Kurs.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs b/api/test/Kurs.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs index 25dadbdd..48fe9db0 100644 --- a/api/test/Kurs.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs +++ b/api/test/Kurs.Platform.EntityFrameworkCore.Tests/DynamicDataRepository_Tests.cs @@ -16,8 +16,8 @@ public class DynamicDataRepository_Tests : PlatformEntityFrameworkCoreTestBase { private readonly DbContext _context; private readonly DbContext _context2; - private readonly string ConnectionString = "Server=localhost;Database=PlatformTests;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;"; - private readonly string ConnectionString2 = "Server=localhost;Database=PlatformTests2;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;"; + private readonly string ConnectionString = "Server=localhost;Database=DemoTests;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;"; + private readonly string ConnectionString2 = "Server=localhost;Database=DemoTests2;User Id=sa;password=NvQp8s@l;Trusted_Connection=False;TrustServerCertificate=True;"; public DynamicDataRepository_Tests() { diff --git a/configs/deployment/README.md b/configs/deployment/README.md index 42c24b9b..b788e0ca 100644 --- a/configs/deployment/README.md +++ b/configs/deployment/README.md @@ -19,19 +19,19 @@ Host PlatformProd # 2. Altyapı 1. DevOps - - devops.sozsoft.net + - devops.sozsoft.com - 192.168.1.6 - kurs:ChatR+... 1. Dev - - platform-dev-cdn.sozsoft.net - - platform-dev-api.sozsoft.net - - platform-dev.sozsoft.net + - platform-dev-cdn.sozsoft.com + - platform-dev-api.sozsoft.com + - platform-dev.sozsoft.com - 192.168.1.106 - kurs:ChatR+... 1. Prod - - platform-cdn.sozsoft.net - - platform-api.sozsoft.net - - platform.sozsoft.net + - platform-cdn.sozsoft.com + - platform-api.sozsoft.com + - platform.sozsoft.com - 192.168.1.137 - kurs:ChatR+... @@ -63,22 +63,22 @@ Buradaki maddeler tüm makinalarda başlangıçta yapılır. ## 3.3. Sertifika alma -certbot ile otomatik sertifika bu şekilde alınıyor. Ancak 3 ayda bir aşağıdaki komutları manuel çalıştırıp üretilen txt yi DNS sozsoft.net domaine eklememiz gerekiyor. Bu işlemi otomatize edilebilecek şekilde reha bey ile görüşülecektir. +certbot ile otomatik sertifika bu şekilde alınıyor. Ancak 3 ayda bir aşağıdaki komutları manuel çalıştırıp üretilen txt yi DNS sozsoft.com domaine eklememiz gerekiyor. Bu işlemi otomatize edilebilecek şekilde reha bey ile görüşülecektir. ``` sudo apt-get remove certbot sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot -sudo certbot certonly --manual --preferred-challenges=dns --email sedat@sozsoft.com --agree-tos -d sozsoft.net -d *.sozsoft.net +sudo certbot certonly --manual --preferred-challenges=dns --email system@sozsoft.com --agree-tos -d sozsoft.com -d *.sozsoft.com sudo su cd /etc/letsencrypt/archive -chgrp docker -R sozsoft.net -chown kurs -R sozsoft.net +chgrp docker -R sozsoft.com +chown kurs -R sozsoft.com ``` Sertifika ortam makinalarına manuel olarak kopyalanır -- DevOps makinasından sertifikalar indirilir (indirmek için sudo su, cp -R /etc/letsencrypt/archive/sozsoft.net /home/kurs) +- DevOps makinasından sertifikalar indirilir (indirmek için sudo su, cp -R /etc/letsencrypt/archive/sozsoft.com /home/kurs) - Ortam makinasına /home/kurs klasörüne yüklenir # 4. DevOps Makina Kurulumu @@ -102,7 +102,7 @@ DevOps platformu olarak, Forgejo, Gitea, OneDev, Harness gibi alternatifler değ "uuid": "8407f0f8-f296-46af-adba-5ee88ffdfccd", "name": "devops", "token": "39f9af97febdd8ea131a3a65c4710e7682a79635", - "address": "https://devops.sozsoft.net", + "address": "https://devops.sozsoft.com", "labels": ["devops:docker://code.forgejo.org/oci/alpine:3"] } ``` @@ -118,7 +118,7 @@ DevOps platformu olarak, Forgejo, Gitea, OneDev, Harness gibi alternatifler değ - daemon.json ~/forgejo-runner klasörüne kopyalanmalı ```json { - "insecure-registries": ["devops.sozsoft.net"] + "insecure-registries": ["devops.sozsoft.com"] } ``` - ardından docker-compose-forgejo-runner.yml içerisine docker-in-docker kısmına şu volume eklenmeli @@ -131,8 +131,8 @@ DevOps platformu olarak, Forgejo, Gitea, OneDev, Harness gibi alternatifler değ ```ini [server] APP_DATA_PATH = /data/gitea - DOMAIN = devops.sozsoft.net - SSH_DOMAIN = devops.sozsoft.net + DOMAIN = devops.sozsoft.com + SSH_DOMAIN = devops.sozsoft.com DISABLE_SSH = false SSH_PORT = 222 SSH_LISTEN_PORT = 22 @@ -141,7 +141,7 @@ DevOps platformu olarak, Forgejo, Gitea, OneDev, Harness gibi alternatifler değ OFFLINE_MODE = true PROTOCOL=https HTTP_PORT = 443 - ROOT_URL = https://devops.sozsoft.net/ + ROOT_URL = https://devops.sozsoft.com/ CERT_FILE = /etc/ssl/cert1.pem KEY_FILE = /etc/ssl/privkey1.pem ``` @@ -151,27 +151,27 @@ DevOps platformu olarak, Forgejo, Gitea, OneDev, Harness gibi alternatifler değ - Base image build ve push ```sh -docker build -t devops.sozsoft.net/sozsoft/base-image:latest -f Kurs.WorkflowBaseImage.Dockerfile . -docker push devops.sozsoft.net/sozsoft/base-image:latest +docker build -t devops.sozsoft.com/kurs/base-image:latest -f Kurs.WorkflowBaseImage.Dockerfile . +docker push devops.sozsoft.com/kurs/base-image:latest ``` -- Docker login işlemi "bot" kullanıcı ile yapılır. SSH yapılır. `docker login devops.sozsoft.net` +- Docker login işlemi "bot" kullanıcı ile yapılır. SSH yapılır. `docker login devops.sozsoft.com` - Git kurulumu - Aşağıdaki komut ile SSH anahtarı oluşturulur. Passphrase boş geçilerek oluşturulabilir. ```sh cd ~/ - ssh-keygen -t ed25519 -C "platformdev/prod@sozsoft.net" + ssh-keygen -t ed25519 -C "platformdev/prod@sozsoft.com" ``` - - Yukarıdaki komutun çıktısı olan ".pub" dosyasıdır. Bu dosyanın içeriği devops.sozsoft.net repository nin Deploy key sekmesine eklenir. + - Yukarıdaki komutun çıktısı olan ".pub" dosyasıdır. Bu dosyanın içeriği devops.sozsoft.com repository nin Deploy key sekmesine eklenir. `cat ~/.ssh/id_ed25519.pub` - - https://devops.sozsoft.net/Sozsoft/kurs-platform/settings/keys kısmına Add New Key diyerek yapıştırılır. + - https://devops.sozsoft.com/Kurs/kurs-platform/settings/keys kısmına Add New Key diyerek yapıştırılır. - Aşağıdaki komutlar sırasıyla çalıştırılır. ```sh - git clone ssh://git@devops.sozsoft.net:222/Sozsoft/kurs-platform.git + git clone ssh://git@devops.sozsoft.com:222/Kurs/kurs-platform.git git config http.sslVerify false # Eğer lazım olursa kullanılabilir ``` @@ -188,7 +188,7 @@ docker push devops.sozsoft.net/sozsoft/base-image:latest # CERT_FILE = /etc/ssl/cert1.pem # KEY_FILE = /etc/ssl/privkey1.pem ``` -- Kurulumdan sonra default olarak Starter Plan ile başlıyor. https://chat.sozsoft.net/admin/subscription adresine giderek "Cancel Subscription"a basılmalı, böylece Community Edition kullanılamya başlanacaktır. +- Kurulumdan sonra default olarak Starter Plan ile başlıyor. https://chat.sozsoft.com/admin/subscription adresine giderek "Cancel Subscription"a basılmalı, böylece Community Edition kullanılamya başlanacaktır. - Setup Wizard'da admin kullanıcı olarak sedat.ozturk ve 1q... parolası seçilmiştir. # 5. Dev - Prod Ortam Makinaları Kurulumu @@ -199,7 +199,7 @@ Yeni bir ortam makina kurulumunda bir defaya mahsus yapılacaktır. - docker-compose-dev/production.yml dosyası hazırlanır. - ui için env.dev/production hazırlanır. - Yukarıda **Git Kurulumu** maddesinde adımlar izlenir. -- Docker login işlemi "bot" kullanıcı ile yapılır. SSH yapılır. `docker login devops.sozsoft.net` +- Docker login işlemi "bot" kullanıcı ile yapılır. SSH yapılır. `docker login devops.sozsoft.com` - cd ~/kurs-platform/configs/deployment klasöründe komut çalıştırılır. `docker compose -f ./docker-compose-data.yml up -d` # 6. Deployment @@ -238,26 +238,26 @@ git checkout master/branch git fetch && git pull cd ~/kurs-platform/api docker build \ --t devops.sozsoft.net/sozsoft/kurs-platform-api:1.0.0 \ --t devops.sozsoft.net/sozsoft/kurs-platform-api:latest \ +-t devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 \ +-t devops.sozsoft.com/kurs/kurs-platform-api:latest \ -f Kurs.Platform.HttpApi.Host.Dockerfile . -docker push devops.sozsoft.net/sozsoft/kurs-platform-api:1.0.0 -docker push devops.sozsoft.net/sozsoft/kurs-platform-api:latest +docker push devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 +docker push devops.sozsoft.com/kurs/kurs-platform-api:latest docker build \ --t devops.sozsoft.net/sozsoft/kurs-platform-migrator:1.0.0 \ --t devops.sozsoft.net/sozsoft/kurs-platform-migrator:latest \ +-t devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 \ +-t devops.sozsoft.com/kurs/kurs-platform-migrator:latest \ -f Kurs.Platform.DbMigrator.Dockerfile . -docker push devops.sozsoft.net/sozsoft/kurs-platform-migrator:1.0.0 -docker push devops.sozsoft.net/sozsoft/kurs-platform-migrator:latest +docker push devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 +docker push devops.sozsoft.com/kurs/kurs-platform-migrator:latest cd ~/kurs-platform/ui docker build \ --t devops.sozsoft.net/sozsoft/kurs-platform-ui:1.0.0 \ --t devops.sozsoft.net/sozsoft/kurs-platform-ui:latest \ +-t devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 \ +-t devops.sozsoft.com/kurs/kurs-platform-ui:latest \ -f Kurs.Platform.Ui.Dockerfile --build-arg ENV=dev . -docker push devops.sozsoft.net/sozsoft/kurs-platform-ui:1.0.0 -docker push devops.sozsoft.net/sozsoft/kurs-platform-ui:latest +docker push devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 +docker push devops.sozsoft.com/kurs/kurs-platform-ui:latest ``` ### Dev-Prod Ortam Makinaları @@ -280,16 +280,16 @@ docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml up -d ## 7.1.Komutlar -- docker build -t devops.sozsoft.net/sozsoft/kurs-platform-api:1.0.0 -f Kurs.Platform.HttpApi.Host.Dockerfile . -- docker build -t devops.sozsoft.net/sozsoft/kurs-platform-migrator:1.0.0 -f Kurs.Platform.DbMigrator.Dockerfile . -- docker build -t devops.sozsoft.net/sozsoft/kurs-platform-ui:1.0.0 -f Kurs.Platform.Ui.Dockerfile --build-arg ENV=dev . +- docker build -t devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 -f Kurs.Platform.HttpApi.Host.Dockerfile . +- docker build -t devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 -f Kurs.Platform.DbMigrator.Dockerfile . +- docker build -t devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 -f Kurs.Platform.Ui.Dockerfile --build-arg ENV=dev . - docker run -it --entrypoint /bin/sh kurs-platform-api - docker run -it --entrypoint /bin/sh --network kurs-platform_default kurs-platform-api --env ASPNETCORE_ENVIRONMENT=Development --port 8080:80 - docker run -it --entrypoint /bin/sh --network kurs-platform_default --env ASPNETCORE_ENVIRONMENT=Development kurs-platform-migrator -- docker login devops.sozsoft.net -- docker push devops.sozsoft.net/sozsoft/kurs-platform-api:1.0.0 -- docker push devops.sozsoft.net/sozsoft/kurs-platform-migrator:1.0.0 -- docker push devops.sozsoft.net/sozsoft/kurs-platform-ui:1.0.0 +- docker login devops.sozsoft.com +- docker push devops.sozsoft.com/kurs/kurs-platform-api:1.0.0 +- docker push devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 +- docker push devops.sozsoft.com/kurs/kurs-platform-ui:1.0.0 ## 7.2. SSL olmayan registry'e bağlanma @@ -297,7 +297,7 @@ docker compose -f docker-compose-app.yml -f docker-compose-app.dev.yml up -d cd ~/ touch daemon.json { - "insecure-registries": ["devops.sozsoft.net"] + "insecure-registries": ["devops.sozsoft.com"] } sudo cp daemon.json /etc/docker sudo systemctl stop docker diff --git a/configs/deployment/configs/nginx-devops.conf b/configs/deployment/configs/nginx-devops.conf index e6632d38..2b071ae8 100644 --- a/configs/deployment/configs/nginx-devops.conf +++ b/configs/deployment/configs/nginx-devops.conf @@ -9,10 +9,10 @@ server { server { listen 443 ssl http2; - server_name devops.sozsoft.net; + server_name devops.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://forgejo; @@ -29,10 +29,10 @@ server { server { listen 443 ssl; - server_name chat.sozsoft.net; + server_name chat.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://rocket_chat; @@ -49,10 +49,10 @@ server { server { listen 443 ssl; - server_name ai.sozsoft.net; + server_name ai.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://n8n:5678; diff --git a/configs/deployment/configs/nginx.dev.conf b/configs/deployment/configs/nginx.dev.conf index 763affc0..a9cf3726 100644 --- a/configs/deployment/configs/nginx.dev.conf +++ b/configs/deployment/configs/nginx.dev.conf @@ -1,12 +1,12 @@ server { listen 80; listen 443 ssl http2; - server_name platform-dev.sozsoft.net; + server_name platform-dev.sozsoft.com; underscores_in_headers on; ignore_invalid_headers off; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://ui; @@ -19,10 +19,10 @@ server { server { listen 80; listen 443 ssl; - server_name platform-dev-api.sozsoft.net; + server_name platform-dev-api.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://api:8080/; @@ -35,10 +35,10 @@ server { server { listen 80; listen 443 ssl; - server_name platform-dev-cdn.sozsoft.net; + server_name platform-dev-cdn.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://cdn:8080; diff --git a/configs/deployment/configs/nginx.production.conf b/configs/deployment/configs/nginx.production.conf index b10749e5..d5245c5e 100644 --- a/configs/deployment/configs/nginx.production.conf +++ b/configs/deployment/configs/nginx.production.conf @@ -1,12 +1,12 @@ server { listen 80; listen 443 ssl http2; - server_name platform.sozsoft.net; + server_name platform.sozsoft.com; underscores_in_headers on; ignore_invalid_headers off; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://ui; @@ -19,10 +19,10 @@ server { server { listen 80; listen 443 ssl; - server_name platform-api.sozsoft.net; + server_name platform-api.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://api:8080/; @@ -35,10 +35,10 @@ server { server { listen 80; listen 443 ssl; - server_name platform-cdn.sozsoft.net; + server_name platform-cdn.sozsoft.com; - ssl_certificate /etc/ssl/sozsoft.net/cert1.pem; - ssl_certificate_key /etc/ssl/sozsoft.net/privkey1.pem; + ssl_certificate /etc/ssl/sozsoft.com/cert1.pem; + ssl_certificate_key /etc/ssl/sozsoft.com/privkey1.pem; location / { proxy_pass http://cdn:8080; diff --git a/configs/deployment/docker-compose-app.dev.yml b/configs/deployment/docker-compose-app.dev.yml index c88968ed..fae9efe7 100644 --- a/configs/deployment/docker-compose-app.dev.yml +++ b/configs/deployment/docker-compose-app.dev.yml @@ -12,7 +12,7 @@ services: environment: - ASPNETCORE_ENVIRONMENT=Dev ui: - image: devops.sozsoft.net/sozsoft/kurs-platform-ui:dev-latest + image: devops.sozsoft.com/kurs/kurs-platform-ui:dev-latest restart: always cdn: restart: always diff --git a/configs/deployment/docker-compose-app.production.yml b/configs/deployment/docker-compose-app.production.yml index bedd4be4..927d98bb 100644 --- a/configs/deployment/docker-compose-app.production.yml +++ b/configs/deployment/docker-compose-app.production.yml @@ -12,7 +12,7 @@ services: environment: - ASPNETCORE_ENVIRONMENT=Production ui: - image: devops.sozsoft.net/sozsoft/kurs-platform-ui:production-latest + image: devops.sozsoft.com/kurs/kurs-platform-ui:production-latest restart: always cdn: restart: always diff --git a/configs/deployment/docker-compose-app.yml b/configs/deployment/docker-compose-app.yml index 80a52c37..f65477d1 100644 --- a/configs/deployment/docker-compose-app.yml +++ b/configs/deployment/docker-compose-app.yml @@ -12,7 +12,7 @@ volumes: services: migrator: - image: devops.sozsoft.net/sozsoft/kurs-platform-migrator:latest + image: devops.sozsoft.com/kurs/kurs-platform-migrator:latest profiles: ["migrator"] environment: - ASPNETCORE_ENVIRONMENT=Dev @@ -21,7 +21,7 @@ services: - kurs-platform-data_db - kurs-platform-data_log api: - image: devops.sozsoft.net/sozsoft/kurs-platform-api:latest + image: devops.sozsoft.com/kurs/kurs-platform-api:latest profiles: ["app"] environment: - ASPNETCORE_ENVIRONMENT=Dev @@ -33,7 +33,7 @@ services: - cdn:/etc/api/cdn - api-keys:/root/.aspnet/DataProtection-Keys ui: - image: devops.sozsoft.net/sozsoft/kurs-platform-ui:latest + image: devops.sozsoft.com/kurs/kurs-platform-ui:latest profiles: ["app"] networks: - default @@ -56,4 +56,4 @@ services: - 443:443 volumes: - ./configs/nginx.conf:/etc/nginx/conf.d/default.conf - - ~/sozsoft.net:/etc/ssl/sozsoft.net:ro + - ~/sozsoft.com:/etc/ssl/sozsoft.com:ro diff --git a/configs/deployment/docker-compose-devops-forgejo.yml b/configs/deployment/docker-compose-devops-forgejo.yml index 545c4d88..2b0bc60a 100644 --- a/configs/deployment/docker-compose-devops-forgejo.yml +++ b/configs/deployment/docker-compose-devops-forgejo.yml @@ -19,7 +19,7 @@ services: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro - - /etc/letsencrypt/archive/sozsoft.net:/etc/ssl:ro + - /etc/letsencrypt/archive/sozsoft.com:/etc/ssl:ro ports: - "80:80" - "443:443" diff --git a/configs/deployment/docker-compose-devops.yml b/configs/deployment/docker-compose-devops.yml index 110b3f0f..d793390c 100644 --- a/configs/deployment/docker-compose-devops.yml +++ b/configs/deployment/docker-compose-devops.yml @@ -26,7 +26,7 @@ services: - 443:443 volumes: - ./configs/nginx-devops.conf:/etc/nginx/conf.d/default.conf - - ~/sozsoft.net:/etc/ssl/sozsoft.net:ro + - ~/sozsoft.com:/etc/ssl/sozsoft.com:ro depends_on: - forgejo - rocket_mongodb @@ -59,7 +59,7 @@ services: environment: MONGO_URL: "mongodb://bot:JT74Sb2Tb3@rocket_mongodb:27017/rocketchat?authSource=admin&replicaSet=rs0" MONGO_OPLOG_URL: "mongodb://bot:JT74Sb2Tb3@rocket_mongodb:27017/local?authSource=admin&replicaSet=rs0" - ROOT_URL: https://chat.sozsoft.net + ROOT_URL: https://chat.sozsoft.com PORT: 80 DEPLOY_METHOD: docker depends_on: @@ -98,7 +98,7 @@ services: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=NvQp8s@l - - N8N_HOST=ai.sozsoft.net + - N8N_HOST=ai.sozsoft.com - N8N_PORT=5678 - NODE_ENV=production - GENERIC_TIMEZONE=Europe/Istanbul diff --git a/configs/deployment/scripts/1-devops-api.sh b/configs/deployment/scripts/1-devops-api.sh index c013e2c8..7b8ddeb6 100644 --- a/configs/deployment/scripts/1-devops-api.sh +++ b/configs/deployment/scripts/1-devops-api.sh @@ -10,8 +10,8 @@ VERSION=$(cat ~/kurs-platform/api/src/Kurs.Platform.HttpApi.Host/appsettings.jso | sed 's/"//g') docker build \ --t devops.sozsoft.net/sozsoft/kurs-platform-api:${VERSION} \ --t devops.sozsoft.net/sozsoft/kurs-platform-api:latest \ +-t devops.sozsoft.com/kurs/kurs-platform-api:${VERSION} \ +-t devops.sozsoft.com/kurs/kurs-platform-api:latest \ -f Kurs.Platform.HttpApi.Host.Dockerfile . -docker push devops.sozsoft.net/sozsoft/kurs-platform-api:${VERSION} -docker push devops.sozsoft.net/sozsoft/kurs-platform-api:latest +docker push devops.sozsoft.com/kurs/kurs-platform-api:${VERSION} +docker push devops.sozsoft.com/kurs/kurs-platform-api:latest diff --git a/configs/deployment/scripts/1-devops-migrator.sh b/configs/deployment/scripts/1-devops-migrator.sh index d1c8b4c2..ecd30a56 100644 --- a/configs/deployment/scripts/1-devops-migrator.sh +++ b/configs/deployment/scripts/1-devops-migrator.sh @@ -4,8 +4,8 @@ git fetch && git pull cd api docker build \ --t devops.sozsoft.net/sozsoft/kurs-platform-migrator:1.0.0 \ --t devops.sozsoft.net/sozsoft/kurs-platform-migrator:latest \ +-t devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 \ +-t devops.sozsoft.com/kurs/kurs-platform-migrator:latest \ -f Kurs.Platform.DbMigrator.Dockerfile . -docker push devops.sozsoft.net/sozsoft/kurs-platform-migrator:1.0.0 -docker push devops.sozsoft.net/sozsoft/kurs-platform-migrator:latest +docker push devops.sozsoft.com/kurs/kurs-platform-migrator:1.0.0 +docker push devops.sozsoft.com/kurs/kurs-platform-migrator:latest diff --git a/configs/deployment/scripts/1-devops-ui.sh b/configs/deployment/scripts/1-devops-ui.sh index 25d4a7dd..028623d7 100644 --- a/configs/deployment/scripts/1-devops-ui.sh +++ b/configs/deployment/scripts/1-devops-ui.sh @@ -12,8 +12,8 @@ VERSION=$(cat package.json \ | sed 's/^.* //' \ | sed 's/"//g') docker build \ --t devops.sozsoft.net/sozsoft/kurs-platform-ui:${ENV}-${VERSION} \ --t devops.sozsoft.net/sozsoft/kurs-platform-ui:${ENV}-latest \ +-t devops.sozsoft.com/kurs/kurs-platform-ui:${ENV}-${VERSION} \ +-t devops.sozsoft.com/kurs/kurs-platform-ui:${ENV}-latest \ -f Kurs.Platform.Ui.Dockerfile --build-arg ENV=${ENV} . -docker push devops.sozsoft.net/sozsoft/kurs-platform-ui:${ENV}-${VERSION} -docker push devops.sozsoft.net/sozsoft/kurs-platform-ui:${ENV}-latest +docker push devops.sozsoft.com/kurs/kurs-platform-ui:${ENV}-${VERSION} +docker push devops.sozsoft.com/kurs/kurs-platform-ui:${ENV}-latest diff --git a/configs/docker/docker-compose-n8n.yml b/configs/docker/docker-compose-n8n.yml index 2de07184..5cb2979b 100644 --- a/configs/docker/docker-compose-n8n.yml +++ b/configs/docker/docker-compose-n8n.yml @@ -11,7 +11,7 @@ services: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=NvQp8s@l - - N8N_HOST=api.sozsoft.net + - N8N_HOST=api.sozsoft.com - N8N_PORT=5678 - NODE_ENV=production - GENERIC_TIMEZONE=Europe/Istanbul diff --git a/ui/.env b/ui/.env index 817c2a6e..07a197e1 100644 --- a/ui/.env +++ b/ui/.env @@ -11,4 +11,4 @@ VITE_API_URL='https://localhost:44344/' API_ROOTNAMESPACE='Kurs.Platform' VITE_CDN_URL='http://localhost:4005' VITE_REACT_APP_VERSION=$npm_package_version -VITE_AI_URL='https://ai.sozsoft.net/webhook/' \ No newline at end of file +VITE_AI_URL='https://ai.sozsoft.com/webhook/' \ No newline at end of file diff --git a/ui/.env.dev b/ui/.env.dev index fb294e5e..0bcc9a81 100644 --- a/ui/.env.dev +++ b/ui/.env.dev @@ -1,12 +1,12 @@ -APPLICATION_BASEURL='https://platform-dev.sozsoft.net' +APPLICATION_BASEURL='https://platform-dev.sozsoft.com' APPLICATION_NAME='Platform' APPLICATION_LOGOURL='' -OAUTH_ISSUER='https://platform-dev-api.sozsoft.net' -OAUTH_REDIRECTURI='https://platform-dev.sozsoft.net' +OAUTH_ISSUER='https://platform-dev-api.sozsoft.com' +OAUTH_REDIRECTURI='https://platform-dev.sozsoft.com' OAUTH_CLIENTID='Platform_App' OAUTH_RESPONSETYPE='code' OAUTH_SCOPE='offline_access Platform' OAUTH_REQUIREHTTPS=true -VITE_API_URL='https://platform-dev-api.sozsoft.net/' +VITE_API_URL='https://platform-dev-api.sozsoft.com/' API_ROOTNAMESPACE='Kurs.Platform' -VITE_CDN_URL='https://platform-dev-cdn.sozsoft.net' \ No newline at end of file +VITE_CDN_URL='https://platform-dev-cdn.sozsoft.com' \ No newline at end of file diff --git a/ui/.env.production b/ui/.env.production index 483040fb..a9df45a0 100644 --- a/ui/.env.production +++ b/ui/.env.production @@ -1,12 +1,12 @@ -APPLICATION_BASEURL='https://platform.sozsoft.net' +APPLICATION_BASEURL='https://platform.sozsoft.com' APPLICATION_NAME='Platform' APPLICATION_LOGOURL='' -OAUTH_ISSUER='https://platform-api.sozsoft.net' -OAUTH_REDIRECTURI='https://platform.sozsoft.net' +OAUTH_ISSUER='https://platform-api.sozsoft.com' +OAUTH_REDIRECTURI='https://platform.sozsoft.com' OAUTH_CLIENTID='Platform_App' OAUTH_RESPONSETYPE='code' OAUTH_SCOPE='offline_access Platform' OAUTH_REQUIREHTTPS=true -VITE_API_URL='https://platform-api.sozsoft.net/' +VITE_API_URL='https://platform-api.sozsoft.com/' API_ROOTNAMESPACE='Kurs.Platform' -VITE_CDN_URL='https://platform-cdn.sozsoft.net' \ No newline at end of file +VITE_CDN_URL='https://platform-cdn.sozsoft.com' \ No newline at end of file diff --git a/ui/dev-dist/sw.js b/ui/dev-dist/sw.js index 1fb6ffe1..8012ae98 100644 --- a/ui/dev-dist/sw.js +++ b/ui/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.jp130trvbeg" + "revision": "0.85ufv4pqo4o" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/ui/index.html b/ui/index.html index 08323ea1..b5e7f3e2 100644 --- a/ui/index.html +++ b/ui/index.html @@ -5,8 +5,8 @@ - - KursPlatform + + Kurs Platform
diff --git a/ui/public/img/others/cto.png b/ui/public/img/others/cto.png new file mode 100644 index 0000000000000000000000000000000000000000..cc92e0c8cae9b7bdc8d76c2ea42590b46c8255e2 GIT binary patch literal 95934 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

k>B{Njoh2hL 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�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

@kHVJBO$(?(b3(wUTxob4TV?X7!{Nrd`>t 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 { Jump start your project with Elstar

- Kurs’ fabrics are designed to meet all international quality - and safety-standards and customer requirements. Our products - are tested both in house and in internationally accredited laboratories. + From interactive desktop applications to immersive web and mobile + solutions, we exist to meet your needs today and ensure continued + success tomorrow.

diff --git a/ui/src/components/layouts/AuthLayout/Side.tsx b/ui/src/components/layouts/AuthLayout/Side.tsx index 7e6a1951..47811355 100644 --- a/ui/src/components/layouts/AuthLayout/Side.tsx +++ b/ui/src/components/layouts/AuthLayout/Side.tsx @@ -23,15 +23,15 @@ const Side = ({ children, content, ...rest }: SideProps) => {
Sedat ÖZTÜRK
- CTO, Onward + CTO

- Kurs’ fabrics are designed to meet all international quality and safety-standards and customer requirements. Our products are tested both in house and in internationally accredited laboratories. + From interactive desktop applications to immersive web and mobile solutions, we exist to meet your needs today and ensure continued success tomorrow.

diff --git a/ui/src/components/template/AiAssistant.tsx b/ui/src/components/template/AiAssistant.tsx index c7cf02e4..61cc30a9 100644 --- a/ui/src/components/template/AiAssistant.tsx +++ b/ui/src/components/template/AiAssistant.tsx @@ -11,9 +11,9 @@ const AiAssistant = () => { return ( <>
{ return ( <>
diff --git a/ui/src/views/admin/identity/Roles/Roles.tsx b/ui/src/views/admin/identity/Roles/Roles.tsx index dedb03d0..a5271380 100644 --- a/ui/src/views/admin/identity/Roles/Roles.tsx +++ b/ui/src/views/admin/identity/Roles/Roles.tsx @@ -37,9 +37,9 @@ const Roles = () => { return ( <>