diff --git a/Data.sql b/Data.sql new file mode 100644 index 0000000..2ff2525 --- /dev/null +++ b/Data.sql @@ -0,0 +1,71 @@ +DO +$do$ +BEGIN + +IF (SELECT count(*) FROM "Clients" WHERE "Id" = 1) = 0 THEN INSERT INTO "Clients" ("Id", "AbsoluteRefreshTokenLifetime", "AccessTokenLifetime", "AccessTokenType", "AllowAccessTokensViaBrowser", "AllowOfflineAccess", "AllowPlainTextPkce", "AllowRememberConsent", "AlwaysIncludeUserClaimsInIdToken", "AlwaysSendClientClaims", "AuthorizationCodeLifetime", "BackChannelLogoutSessionRequired", "BackChannelLogoutUri", "ClientClaimsPrefix", "ClientId", "ClientName", "ClientUri", "ConsentLifetime", "Created", "Description", "DeviceCodeLifetime", "EnableLocalLogin", "Enabled", "FrontChannelLogoutSessionRequired", "FrontChannelLogoutUri", "IdentityTokenLifetime", "IncludeJwtId", "LogoUri", "NonEditable", "PairWiseSubjectSalt", "ProtocolType", "RefreshTokenExpiration", "RefreshTokenUsage", "RequireClientSecret", "RequireConsent", "RequirePkce", "SlidingRefreshTokenLifetime", "UpdateAccessTokenClaimsOnRefresh") OVERRIDING SYSTEM VALUE VALUES (1, 2592000, 3600,0, false, true, false, true, false, true, 300, true, NULL, NULL, N'UserManagementClient', N'User Management Client', NULL, NULL, current_date, N'User Management Client OICD Client', 3600, true, true, true, NULL, 300, false, NULL, true, NULL, N'oidc', 1, 1, true, true, false, 1296000, true); END IF; + +PERFORM setval('"Clients_Id_seq"', (SELECT MAX("Id") FROM "Clients")+1); + +IF (SELECT count(*) FROM "ClientGrantTypes" WHERE "Id" = 1) = 0 THEN INSERT INTO "ClientGrantTypes" ("Id", "ClientId", "GrantType") OVERRIDING SYSTEM VALUE VALUES (1, 1, N'password'); END IF; + +PERFORM setval('"ClientGrantTypes_Id_seq"', (SELECT MAX("Id") FROM "ClientGrantTypes")+1); + +IF (SELECT count(*) FROM "ClientScopes" WHERE "Id" = 1) = 0 THEN INSERT INTO "ClientScopes" ("Id", "ClientId", "Scope") OVERRIDING SYSTEM VALUE VALUES (1, 1, N'profile'); END IF; +IF (SELECT count(*) FROM "ClientScopes" WHERE "Id" = 2) = 0 THEN INSERT INTO "ClientScopes" ("Id", "ClientId", "Scope") OVERRIDING SYSTEM VALUE VALUES (2, 1, N'openid'); END IF; +IF (SELECT count(*) FROM "ClientScopes" WHERE "Id" = 3) = 0 THEN INSERT INTO "ClientScopes" ("Id", "ClientId", "Scope") OVERRIDING SYSTEM VALUE VALUES (3, 1, N'identity-management'); END IF; +IF (SELECT count(*) FROM "ClientScopes" WHERE "Id" = 4) = 0 THEN INSERT INTO "ClientScopes" ("Id", "ClientId", "Scope") OVERRIDING SYSTEM VALUE VALUES (4, 1, N'task-management'); END IF; +IF (SELECT count(*) FROM "ClientScopes" WHERE "Id" = 5) = 0 THEN INSERT INTO "ClientScopes" ("Id", "ClientId", "Scope") OVERRIDING SYSTEM VALUE VALUES (5, 1, N'habitica-provider'); END IF; +IF (SELECT count(*) FROM "ClientScopes" WHERE "Id" = 6) = 0 THEN INSERT INTO "ClientScopes" ("Id", "ClientId", "Scope") OVERRIDING SYSTEM VALUE VALUES (6, 1, N'settings-service'); END IF; + +PERFORM setval('"ClientScopes_Id_seq"', (SELECT MAX("Id") FROM "ClientScopes")+1); + +IF (SELECT count(*) FROM "ClientSecrets" WHERE "Id" = 1) = 0 THEN INSERT INTO "ClientSecrets" ("Id", "ClientId", "Created", "Description", "Expiration", "Type", "Value") OVERRIDING SYSTEM VALUE VALUES (1, 1, current_date, N'User Management Client', NULL, N'SharedSecret', N'UD6fn+ADIk5ieMKjcIBT75XFgaM4mxw7tQK+YXL6hc4='); END IF; + +PERFORM setval('"ClientSecrets_Id_seq"', (SELECT MAX("Id") FROM "ClientSecrets")+1); + +IF (SELECT count(*) FROM "IdentityResources" WHERE "Id" = 1) = 0 THEN INSERT INTO "IdentityResources" ("Id", "Created", "Description", "DisplayName", "Emphasize", "Enabled", "Name", "NonEditable", "Required", "ShowInDiscoveryDocument") OVERRIDING SYSTEM VALUE VALUES (1, current_date, NULL, N'Your user identifier', false, true, N'openid', true, true, true); END IF; +IF (SELECT count(*) FROM "IdentityResources" WHERE "Id" = 2) = 0 THEN INSERT INTO "IdentityResources" ("Id", "Created", "Description", "DisplayName", "Emphasize", "Enabled", "Name", "NonEditable", "Required", "ShowInDiscoveryDocument") OVERRIDING SYSTEM VALUE VALUES (2, current_date, N'Your user profile information (first name, last name, etc.)', N'User profile', true, true, N'profile', true, false, true); END IF; + +PERFORM setval('"IdentityResources_Id_seq"', (SELECT MAX("Id") FROM "IdentityResources")+1); + +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 1) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (1, 1, N'sub'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 2) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (2, 2, N'name'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 3) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (3, 2, N'family_name'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 4) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (4, 2, N'given_name'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 5) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (5, 2, N'middle_name'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 6) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (6, 2, N'nickname'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 7) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (7, 2, N'preferred_username'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 8) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (8, 2, N'profile'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 9) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (9, 2, N'picture'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 10) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (10, 2, N'website'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 11) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (11, 2, N'gender'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 12) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (12, 2, N'birthdate'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 13) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (13, 2, N'zoneinfo'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 14) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (14, 2, N'locale'); END IF; +IF (SELECT count(*) FROM "IdentityClaims" WHERE "Id" = 15) = 0 THEN INSERT INTO "IdentityClaims" ("Id", "IdentityResourceId", "Type") OVERRIDING SYSTEM VALUE VALUES (15, 2, N'updated_at'); END IF; + +PERFORM setval('"IdentityClaims_Id_seq"', (SELECT MAX("Id") FROM "IdentityClaims")+1); + +IF (SELECT count(*) FROM "ApiResources" WHERE "Id" = 1) = 0 THEN INSERT INTO "ApiResources" ("Id", "Created", "Description", "DisplayName", "Enabled", "Name", "NonEditable") OVERRIDING SYSTEM VALUE VALUES (1, current_date, N'Identity Management Service', N'Identity Management Service API', true, N'identity-api', true); END IF; +IF (SELECT count(*) FROM "ApiResources" WHERE "Id" = 2) = 0 THEN INSERT INTO "ApiResources" ("Id", "Created", "Description", "DisplayName", "Enabled", "Name", "NonEditable") OVERRIDING SYSTEM VALUE VALUES (2, current_date, N'Task Management Service', N'Task Management Service API', true, N'task-api', true); END IF; +IF (SELECT count(*) FROM "ApiResources" WHERE "Id" = 3) = 0 THEN INSERT INTO "ApiResources" ("Id", "Created", "Description", "DisplayName", "Enabled", "Name", "NonEditable") OVERRIDING SYSTEM VALUE VALUES (3, current_date, N'Habitica Task Provider Service', N'Habitica Task Provider Service API', true, N'habitica-api', true); END IF; +IF (SELECT count(*) FROM "ApiResources" WHERE "Id" = 4) = 0 THEN INSERT INTO "ApiResources" ("Id", "Created", "Description", "DisplayName", "Enabled", "Name", "NonEditable") OVERRIDING SYSTEM VALUE VALUES (4, current_date, N'Settings Service', N'Settings Service API', true, N'settings-api', true); END IF; + +PERFORM setval('"ApiResources_Id_seq"', (SELECT MAX("Id") FROM "ApiResources")+1); + +IF (SELECT count(*) FROM "ApiScopes" WHERE "Id" = 1) = 0 THEN INSERT INTO "ApiScopes" ("Id", "ApiResourceId", "Description", "DisplayName", "Emphasize", "Name", "Required", "ShowInDiscoveryDocument") OVERRIDING SYSTEM VALUE VALUES (1, 1, N'Identity Management Service Default Scope', N'Identity Management Service Default Scope', false, N'identity-management', false, true); END IF; +IF (SELECT count(*) FROM "ApiScopes" WHERE "Id" = 2) = 0 THEN INSERT INTO "ApiScopes" ("Id", "ApiResourceId", "Description", "DisplayName", "Emphasize", "Name", "Required", "ShowInDiscoveryDocument") OVERRIDING SYSTEM VALUE VALUES (2, 2, N'Task Management Service Default Scope', N'Task Management Service Default Scope', false, N'task-management', false, true); END IF; +IF (SELECT count(*) FROM "ApiScopes" WHERE "Id" = 3) = 0 THEN INSERT INTO "ApiScopes" ("Id", "ApiResourceId", "Description", "DisplayName", "Emphasize", "Name", "Required", "ShowInDiscoveryDocument") OVERRIDING SYSTEM VALUE VALUES (3, 3, N'Habitica Task Provider Service Default Scope', N'Habitica Task Provider Service Default Scope', false, N'habitica-provider', false, true); END IF; +IF (SELECT count(*) FROM "ApiScopes" WHERE "Id" = 4) = 0 THEN INSERT INTO "ApiScopes" ("Id", "ApiResourceId", "Description", "DisplayName", "Emphasize", "Name", "Required", "ShowInDiscoveryDocument") OVERRIDING SYSTEM VALUE VALUES (4, 4, N'Settings Service Default Scope', N'Settings Service Default Scope', false, N'settings-service', false, true); END IF; + +PERFORM setval('"ApiScopes_Id_seq"', (SELECT MAX("Id") FROM "ApiScopes")+1); + +IF (SELECT count(*) FROM "ApiSecrets" WHERE "Id" = 1) = 0 THEN INSERT INTO "ApiSecrets" ("Id", "ApiResourceId", "Description", "Created", "Expiration", "Type", "Value") OVERRIDING SYSTEM VALUE VALUES (1, 1, NULL, current_date, NULL, N'SharedSecret', N'IlM2emwvAOUundGVXqrYSbgWsSgBdFiUBEFNm+zkZLw='); END IF; +IF (SELECT count(*) FROM "ApiSecrets" WHERE "Id" = 2) = 0 THEN INSERT INTO "ApiSecrets" ("Id", "ApiResourceId", "Description", "Created", "Expiration", "Type", "Value") OVERRIDING SYSTEM VALUE VALUES (2, 2, NULL, current_date, NULL, N'SharedSecret', N'SwU06eRABG2C0MK+UuJGdLL064+6wIvtojzDZX+aE7o='); END IF; +IF (SELECT count(*) FROM "ApiSecrets" WHERE "Id" = 3) = 0 THEN INSERT INTO "ApiSecrets" ("Id", "ApiResourceId", "Description", "Created", "Expiration", "Type", "Value") OVERRIDING SYSTEM VALUE VALUES (3, 3, NULL, current_date, NULL, N'SharedSecret', N'26O1szHj4CXM1nc/5Pi/K/l7AT751uN9/24QGNiZb70='); END IF; +IF (SELECT count(*) FROM "ApiSecrets" WHERE "Id" = 4) = 0 THEN INSERT INTO "ApiSecrets" ("Id", "ApiResourceId", "Description", "Created", "Expiration", "Type", "Value") OVERRIDING SYSTEM VALUE VALUES (4, 4, NULL, current_date, NULL, N'SharedSecret', N'26O1szHj4CXM1nc/5Pi/K/l7AT751uN9/24QGNiZb70='); END IF; + +PERFORM setval('"ApiSecrets_Id_seq"', (SELECT MAX("Id") FROM "ApiSecrets")+1); + +END; +$do$; diff --git a/ExportSampleData.ps1 b/ExportSampleData.ps1 new file mode 100644 index 0000000..bfed1f9 --- /dev/null +++ b/ExportSampleData.ps1 @@ -0,0 +1,13 @@ +Import-Module -Name Mdbc + +Connect-Mdbc -ConnectionString 'mongodb://root:Xq5xrtzEKj44ueyd@localhost:27017' + +$db = Get-MdbcDatabase -Name 'Settings' + +$collection = Get-MdbcCollection -Name 'DefaultSettings' -Database $db + +Get-MdbcData | Export-MdbcData -Path SampleDefaultSettings.json + +$collection = Get-MdbcCollection -Name 'UserSettings' -Database $db + +Get-MdbcData | Export-MdbcData -Path SampleUserSettings.json \ No newline at end of file diff --git a/ImportSampleData.ps1 b/ImportSampleData.ps1 new file mode 100644 index 0000000..08de84b --- /dev/null +++ b/ImportSampleData.ps1 @@ -0,0 +1,13 @@ +Import-Module -Name Mdbc + +Connect-Mdbc -ConnectionString 'mongodb://root:Xq5xrtzEKj44ueyd@localhost:27017' + +$db = Get-MdbcDatabase -Name 'SettingsService' + +$collection = Get-MdbcCollection -Name 'DefaultSettings' -Database $db + +Import-MdbcData -Path SampleDefaultSettings.json | Set-MdbcData -Collection $collection -Add + +$collection = Get-MdbcCollection -Name 'UserSettings' -Database $db + +Import-MdbcData -Path SampleUserSettings.json | Set-MdbcData -Collection $collection -Add diff --git a/Kubernetes/Deploy.ps1 b/Kubernetes/Deploy.ps1 new file mode 100644 index 0000000..c5fe648 --- /dev/null +++ b/Kubernetes/Deploy.ps1 @@ -0,0 +1,8 @@ +param( + [Parameter(Mandatory=$true)] + [string]$EnvironmentName, + [Parameter(Mandatory=$true)] + [string]$NamespaceName +) + +Invoke-psake -buildFile ./DeploymentTasks.ps1 -taskList DeployToEnvironment -parameters @{ EnvironmentName = $EnvironmentName; NamespaceName = $NamespaceName } diff --git a/Kubernetes/DeploymentTasks.ps1 b/Kubernetes/DeploymentTasks.ps1 new file mode 100644 index 0000000..f00571a --- /dev/null +++ b/Kubernetes/DeploymentTasks.ps1 @@ -0,0 +1,56 @@ +Properties { + Import-Module -Name PSKubectl + + $config = Get-KubeConfig + $envCount = $config.Contexts.Where({$_.Name -eq $EnvironmentName}).Count + + Assert ( $envCount -gt 0 ) "Environment '$EnvironmentName' is not configured yet." +} + +Task DeployToEnvironment -depends DeployIdentityManagementService, DeployTaskManagementService, DeployHabiticaTaskProviderService + +Task DeployIdentityManagementService -depends DeployRabbitMQ, DeployPostgres, DeployMicroserviceConfigMap + +Task DeployTaskManagementService -depends DeployRabbitMQ, DeployMongoDB, DeployMicroserviceConfigMap + +Task DeployHabiticaTaskProviderService -depends DeployRabbitMQ, DeployMongoDB, DeployRedis, DeployMicroserviceConfigMap + +Task DeployMicroserviceConfigMap + +Task DeployRabbitMQ -depends SelectNamespace { + Exec { kubectl apply -f ./rabbitmq-PVC.yml --namespace $Script:NamespaceName } + Exec { kubectl apply -f ./rabbitmq-deployment.yml --namespace $Script:NamespaceName } +} + +Task DeployPostgres -depends SelectNamespace + +Task DeployRedis -depends SelectNamespace { + Exec { kubectl apply -f ./redis-deployment.yml --namespace $Script:NamespaceName } + Exec { kubectl apply -f ./redis-service.yml --namespace $Script:NamespaceName } +} + +Task DeployMongoDB -depends SelectNamespace { + Exec { kubectl apply -f ./mongo-service.yml --namespace $Script:NamespaceName } + Exec { kubectl apply -f ./mongo-statefulset.yml --namespace $Script:NamespaceName } +} + +Task SelectNamespace -depends CreateNamespaces{ + Import-Module -Name PSKubectl + + $ns = Get-KubeNamespace -Name $NamespaceName + + Assert ( $ns -ne $null ) "Namespace '$NamespaceName' does not exist." + Assert ( $ns.Status.Phase -eq 'Active' ) "Namespace '$NamespaceName' is not active." + + $Script:NamespaceName = $ns.Name + + Exec { kubectl config use-context $EnvironmentName --namespace $Script:NamespaceName } +} + +Task CreateNamespaces -depends SelectEnvironment { + Exec { kubectl apply -f ./Namespaces.yml } +} + +Task SelectEnvironment { + Exec { kubectl config use-context $EnvironmentName } +} diff --git a/Kubernetes/Namespaces.yml b/Kubernetes/Namespaces.yml new file mode 100644 index 0000000..460190a --- /dev/null +++ b/Kubernetes/Namespaces.yml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: lionize-development + labels: + app: lionize + confinement: development \ No newline at end of file diff --git a/Kubernetes/mongo-service.yml b/Kubernetes/mongo-service.yml new file mode 100644 index 0000000..c34c832 --- /dev/null +++ b/Kubernetes/mongo-service.yml @@ -0,0 +1,15 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: mongo + labels: + name: mongo +spec: + ports: + - port: 27017 + targetPort: 27017 + clusterIP: None + selector: + role: mongo +... \ No newline at end of file diff --git a/Kubernetes/mongo-statefulset.yml b/Kubernetes/mongo-statefulset.yml new file mode 100644 index 0000000..b04a265 --- /dev/null +++ b/Kubernetes/mongo-statefulset.yml @@ -0,0 +1,48 @@ +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mongo +spec: + serviceName: "mongo" + replicas: 1 + selector: + matchLabels: + app: mongo + template: + metadata: + labels: + role: mongo + app: mongo + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: mongo + image: mongo + command: + - mongod + - "--replSet" + - rs0 + ports: + - containerPort: 27017 + volumeMounts: + - name: mongo-persistent-storage + mountPath: /data/db + - name: mongo-sidecar + image: cvallance/mongo-k8s-sidecar + env: + - name: MONGO_SIDECAR_POD_LABELS + value: "role=mongo,environment=test" + volumeClaimTemplates: + - metadata: + name: mongo-persistent-storage + annotations: + volume.beta.kubernetes.io/storage-class: "standard" + spec: + accessModes: + - ReadWriteOnce + storageClassName: "standard" + resources: + requests: + storage: 1Gi +... diff --git a/Kubernetes/rabbitmq-PVC.yml b/Kubernetes/rabbitmq-PVC.yml new file mode 100644 index 0000000..81ca814 --- /dev/null +++ b/Kubernetes/rabbitmq-PVC.yml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app: rabbit-mq-data + name: rabbit-mq-data +spec: + accessModes: + - ReadWriteOnce + storageClassName: "standard" + resources: + requests: + storage: 1Gi \ No newline at end of file diff --git a/Kubernetes/rabbitmq-deployment.yml b/Kubernetes/rabbitmq-deployment.yml new file mode 100644 index 0000000..ea81770 --- /dev/null +++ b/Kubernetes/rabbitmq-deployment.yml @@ -0,0 +1,22 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: rabbit-mq + name: rabbit-mq +spec: + replicas: 1 + selector: + matchLabels: + app: rabbit-mq + template: + metadata: + labels: + app: rabbit-mq + spec: + containers: + - image: rabbitmq:3.8.1-management + name: rabbit-mq + ports: + - containerPort: 15671 + - containerPort: 5671 diff --git a/Kubernetes/redis-deployment.yml b/Kubernetes/redis-deployment.yml new file mode 100644 index 0000000..667396f --- /dev/null +++ b/Kubernetes/redis-deployment.yml @@ -0,0 +1,31 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-master + labels: + app: redis +spec: + selector: + matchLabels: + app: redis + role: master + tier: backend + replicas: 1 + template: + metadata: + labels: + app: redis + role: master + tier: backend + spec: + containers: + - name: master + image: redis + resources: + requests: + cpu: 100m + memory: 100Mi + ports: + - containerPort: 6379 +... diff --git a/Kubernetes/redis-service.yml b/Kubernetes/redis-service.yml new file mode 100644 index 0000000..0468490 --- /dev/null +++ b/Kubernetes/redis-service.yml @@ -0,0 +1,18 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: redis-master + labels: + app: redis + role: master + tier: backend +spec: + ports: + - port: 6379 + targetPort: 6379 + selector: + app: redis + role: master + tier: backend +... diff --git a/README.md b/README.md index 82916c1..e499cfa 100644 --- a/README.md +++ b/README.md @@ -1 +1,33 @@ -# Scripts \ No newline at end of file +# Scripts + +## Prerequisites + +#### .NET Core SDK + +[Install .NET Core SDK](https://dotnet.microsoft.com/download) + +#### PowerShell Core + +[Get PowerShell](https://github.com/PowerShell/PowerShell#get-powershell) + +#### NodeJS + +[Install NodeJS](https://nodejs.org/en/download/) + +### Windows + +#### Chocolatey + +[Installing Chocolatey](https://chocolatey.org/install) + +#### Docker Desktop + +[Install](https://hub.docker.com/editions/community/docker-ce-desktop-windows) + +### Setup + +Run PowerShell Core as administrator + +```PowerShell +./Setup.ps1 +``` diff --git a/SampleDefaultSettings.json b/SampleDefaultSettings.json new file mode 100644 index 0000000..0ec0dae --- /dev/null +++ b/SampleDefaultSettings.json @@ -0,0 +1,2 @@ +{ "_id" : "750922732", "path" : ["MainPagePagination"], "data" : { "PageSize" : 25 } } +{ "_id" : "180134001", "path" : ["SettingsPagePagination"], "data" : { } } diff --git a/SampleUserSettings.json b/SampleUserSettings.json new file mode 100644 index 0000000..a31201a --- /dev/null +++ b/SampleUserSettings.json @@ -0,0 +1 @@ +{ "_id" : { "settingId" : "750922732", "userId" : "7b803e2d-ee0e-4213-a025-9db732bcbb2e" }, "data" : { "PageSize" : 50 } } diff --git a/Setup.ps1 b/Setup.ps1 new file mode 100644 index 0000000..0e82eef --- /dev/null +++ b/Setup.ps1 @@ -0,0 +1,34 @@ +Install-Module -Name psake +Install-Module -Name PsHosts +Install-Module -Name PSKubectl +Install-Module -Name SimplySql + +dotnet tool install --global smite-cli +dotnet tool update --global smite-cli + +$IsFedora = $false +$IsUbuntu = $false + +if ($IsLinux) { + $release = Get-Content -Path /etc/os-release + $release = $release.Split([Environment]::NewLine) | Where-Object { $_.StartsWith("ID=") } + $release = $release.Substring(3) + + $IsFedora = ($release -eq "Fedora") + $IsUbuntu = ($release -eq "Ubuntu") +} +if ($IsWindows) { + choco install kubernetes-cli + + Add-HostEntry -Name postgres -Loopback -Force + Add-HostEntry -Name mongo -Loopback -Force +} +elseif ($IsFedora) { + sudo dnf -y install docker-compose +} +elseif ($IsUbuntu) { + sudo apt -y install docker-compose +} +else { + Write-Error "OS and/or distribution is not supported" +} \ No newline at end of file diff --git a/docker-compose-tasks.ps1 b/docker-compose-tasks.ps1 new file mode 100644 index 0000000..4ae83d9 --- /dev/null +++ b/docker-compose-tasks.ps1 @@ -0,0 +1,48 @@ +Properties { + # +} + +Task Teardown { + Exec { docker-compose -f (Resolve-Path "docker-compose/dependencies.yml").Path -f (Resolve-Path "docker-compose/microservices.yml").Path down } +} + +Task Stop { + Exec { docker-compose -f (Resolve-Path "docker-compose/dependencies.yml").Path -f (Resolve-Path "docker-compose/microservices.yml").Path stop } +} + +Task Status { + Exec { docker-compose -f (Resolve-Path "docker-compose/dependencies.yml").Path -f (Resolve-Path "docker-compose/microservices.yml").Path ps } +} + +Task Pull -precondition { -not $SkipPulling } { + Exec { docker-compose -f (Resolve-Path "docker-compose/dependencies.yml").Path -f (Resolve-Path "docker-compose/microservices.yml").Path pull } +} + +Task Run -depends Pull { + Exec { docker-compose -f (Resolve-Path "docker-compose/dependencies.yml").Path -f (Resolve-Path "docker-compose/microservices.yml").Path up -d } +} + +Task ApplyScript -depends Run { + + $connectionString = "Server=localhost;Port=5432;Database=IdentityManagement;User Id=postgres;Password=IYmv5OcqEoANcO7s;" + + Import-Module -Name SimplySql + + try { + Open-PostGreConnection -ConnectionString $connectionString + + try { + $sqlFilePath = (Resolve-Path "./Data.sql").Path + $query = Get-Content -Path $sqlFilePath; + Invoke-SqlUpdate -Query $query + } + finally { + Close-SqlConnection + } + } + catch { + throw + } +} + +Task Setup -depends ApplyScript, Run diff --git a/docker-compose/dependencies.yml b/docker-compose/dependencies.yml new file mode 100644 index 0000000..d3a2f55 --- /dev/null +++ b/docker-compose/dependencies.yml @@ -0,0 +1,64 @@ +version: '3.7' + +services: + + postgres: + image: postgres:latest + hostname: postgres + domainname: postgres + environment: + POSTGRES_PASSWORD: IYmv5OcqEoANcO7s + ports: + - 5432:5432 + networks: + - lionize + + mongo: + image: mongo:latest + hostname: mongo + domainname: mongo + environment: + - MONGO_INITDB_ROOT_USERNAME=root + - MONGO_INITDB_ROOT_PASSWORD=Xq5xrtzEKj44ueyd + ports: + - "27017:27017" + networks: + - lionize + + redis: + image: "redis:alpine" + command: redis-server --requirepass UmimfRKpdTj1VJjK + ports: + - "6379:6379" + networks: + - lionize + + rabbitmq: + image: rabbitmq:management-alpine + hostname: rabbitmq + domainname: rabbitmq + environment: + - RABBITMQ_DEFAULT_USER=rabbit + - RABBITMQ_DEFAULT_PASS=EvtNt7PKZqNNT06T + ports: + - 5672:5672 + - 15672:15672 + networks: + - lionize + + seq: + image: datalust/seq:latest + hostname: seq + domainname: seq + environment: + - ACCEPT_EULA=Y + ports: + - 80:80 + - 5341:5341 + networks: + - lionize + +networks: + lionize: + name: lionize + driver: bridge \ No newline at end of file diff --git a/docker-compose/microservices.yml b/docker-compose/microservices.yml new file mode 100644 index 0000000..ea1dc77 --- /dev/null +++ b/docker-compose/microservices.yml @@ -0,0 +1,81 @@ +version: '3.7' + +services: + + identity: + image: tiksn/lionize-identity-management-service:latest + hostname: identity + domainname: identity + ports: + - "8081:80" + env_file: + - variables.env + environment: + - ConnectionStrings__Users=Host=postgres;Port=5432;Database=IdentityManagement;User Id=postgres;Password=IYmv5OcqEoANcO7s; + - ConnectionStrings__Configuration=Host=postgres;Port=5432;Database=IdentityManagement;User Id=postgres;Password=IYmv5OcqEoANcO7s; + - ConnectionStrings__Operational=Host=postgres;Port=5432;Database=IdentityManagement;User Id=postgres;Password=IYmv5OcqEoANcO7s; + - ApiResource__ApiName=identity-api + - ApiResource__ApiSecret=Iu+LZ8RCoUcrv6XNFcg+eEyHPBYeeLyBfmkex++Apqvn/dnrSsZx1r/rw7gvJAY7s4V7Lleh9qozCehaI9pYqg== + networks: + - lionize + + tasks: + image: tiksn/lionize-task-management-service:latest + hostname: tasks + domainname: tasks + ports: + - "8083:80" + env_file: + - variables.env + environment: + - Services__Identity__BaseAddress=http://identity + - ConnectionStrings__Mongo=mongodb://root:Xq5xrtzEKj44ueyd@mongo:27017/TaskManagementService?authSource=admin + - ApiResource__ApiName=task-api + - ApiResource__ApiSecret=B01SeaEDdDBGDLeqUCHuPSUhuSXsa8VEsvvEp6bfb804hLcVZ1bcJkZDB/crtsSG2xzzgiRxjZuHDsalPs2JZg== + - Account__ClientId=UserManagementClient + - Account__ClientSecret=G4QJrKZSRQ4PO6yDX/WxY7OxZbGol7hPO7u/hv1kt1cRwn34+wOHJ26jL+kBRk9mmSIXn98HMoTLunHrkr4Qqw== + networks: + - lionize + + habitica: + image: tiksn/lionize-habitica-task-provider-service:latest + hostname: habitica + domainname: habitica + ports: + - "8085:80" + env_file: + - variables.env + environment: + - ConnectionStrings__Redis=redis:6379,password=UmimfRKpdTj1VJjK + - ConnectionStrings__Mongo=mongodb://root:Xq5xrtzEKj44ueyd@mongo:27017/HabiticaTaskProviderService?authSource=admin + - ApiResource__ApiName=habitica-api + - ApiResource__ApiSecret=43xoIIj2QFyvFNevScaPvOFUWNQa4unVwT75TOlG5cmwFyAwcI+BFW4mpkeN52jXSAHbUya58gCTkl5K/PNyaQ== + networks: + - lionize + + settings: + image: tiksn/lionize-settings-service:latest + hostname: settings + domainname: settings + ports: + - "8087:8080" + env_file: + - variables.env + environment: + - ConnectionStrings__Mongo=mongodb://root:Xq5xrtzEKj44ueyd@mongo:27017/SettingsService?authSource=admin + - ApiResource__ApiName=settings-api + - ApiResource__ApiSecret=43xoIIj2QFyvFNevScaPvOFUWNQa4unVwT75TOlG5cmwFyAwcI+BFW4mpkeN52jXSAHbUya58gCTkl5K/PNyaQ== + networks: + - lionize + + web-ui: + image: ashotnazaryan45/lionize-web-ui:latest + ports: + - "8080:80" + networks: + - lionize + +networks: + lionize: + name: lionize + driver: bridge diff --git a/docker-compose/variables.env b/docker-compose/variables.env new file mode 100644 index 0000000..c27e7ca --- /dev/null +++ b/docker-compose/variables.env @@ -0,0 +1,5 @@ +Cors__Origins__0=http://localhost:4200 +Cors__Origins__1=http://localhost:8080 +Services__Identity__BaseAddress=http://identity +ConnectionStrings__RabbitMQ=amqp://rabbit:EvtNt7PKZqNNT06T@rabbitmq +Logs__Seq__BaseAddress=http://seq \ No newline at end of file diff --git a/run-in-docker.ps1 b/run-in-docker.ps1 new file mode 100644 index 0000000..c97fad3 --- /dev/null +++ b/run-in-docker.ps1 @@ -0,0 +1,8 @@ +[CmdletBinding()] +param ( + [Parameter()] + [switch] + $SkipPulling +) + +Invoke-psake -buildFile .\docker-compose-tasks.ps1 -taskList Setup -nologo -parameters @{"SkipPulling" = $SkipPulling.IsPresent } diff --git a/show-docker-status.ps1 b/show-docker-status.ps1 new file mode 100644 index 0000000..d22b050 --- /dev/null +++ b/show-docker-status.ps1 @@ -0,0 +1 @@ +Invoke-psake -buildFile .\docker-compose-tasks.ps1 -taskList Status -nologo \ No newline at end of file diff --git a/stop-docker-containers.ps1 b/stop-docker-containers.ps1 new file mode 100644 index 0000000..f51c030 --- /dev/null +++ b/stop-docker-containers.ps1 @@ -0,0 +1 @@ +Invoke-psake -buildFile .\docker-compose-tasks.ps1 -taskList Stop -nologo \ No newline at end of file diff --git a/teardown-docker-containers.ps1 b/teardown-docker-containers.ps1 new file mode 100644 index 0000000..2ceaff6 --- /dev/null +++ b/teardown-docker-containers.ps1 @@ -0,0 +1 @@ +Invoke-psake -buildFile .\docker-compose-tasks.ps1 -taskList Teardown -nologo \ No newline at end of file