diff --git a/.gitignore b/.gitignore index 850701d..83a9e73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ # ---> Ansible *.retry /env-file/*.env -/containers/*.container /vars/*.yml diff --git a/containers/crm-client.container b/containers/crm-client.container new file mode 100644 index 0000000..3e5ad1b --- /dev/null +++ b/containers/crm-client.container @@ -0,0 +1,17 @@ +[Unit] +Description=crm-client server + +[Service] +ContainerName=crm-client +Restart=always + +[Container] +Image=746819106135.dkr.ecr.ap-southeast-1.amazonaws.com/prod/crm-client:latest +PublishPort=3000:80 +AutoUpdate=registry +Environment=VITE_API_ENDPOINT=https://api.cosmos-tropical.com +Environment=VITE_API_TIMEOUT=3600 +Environment=VITE_APPLICATION_DEFAULT_OPEN_SIDEBAR=false + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/containers/crm-server.container b/containers/crm-server.container new file mode 100644 index 0000000..c4a5f57 --- /dev/null +++ b/containers/crm-server.container @@ -0,0 +1,19 @@ +[Unit] +Description=crm-server server + +[Service] +ContainerName=crm-server +Restart=always + +[Container] +Pod=crm-server.pod +Image=746819106135.dkr.ecr.ap-southeast-1.amazonaws.com/prod/crm-server:latest +Volume=/home/cosmosplan/crm-data:/app/data +Volume=/home/cosmosplan/crm-logs:/app/logs +Volume=/home/cosmosplan/cosmos-plan-crm-ansible-deploy/env-file/appsettings.json:/app/appsettings.json +AutoUpdate=registry +EnvironmentFile=/home/cosmosplan/cosmos-plan-crm-ansible-deploy/env-file/.env +Environment=TZ=Asia/Kuala_Lumpur + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/containers/seq.container b/containers/seq.container new file mode 100644 index 0000000..17594b1 --- /dev/null +++ b/containers/seq.container @@ -0,0 +1,15 @@ +[Unit] +Description=datalust-seq container + +[Service] +ContainerName=datalust-seq +Restart=always + +[Container] +Pod=crm-server.pod +Image=docker.io/datalust/seq:2024.3 +AutoUpdate=registry +Environment=ACCEPT_EULA=Y + +[Install] +WantedBy=default.target \ No newline at end of file diff --git a/env-file/appsettings.json b/env-file/appsettings.json new file mode 100644 index 0000000..3289efc --- /dev/null +++ b/env-file/appsettings.json @@ -0,0 +1,124 @@ +{ + "ApplicationSetting": { + "SlowRunningThresholdMilliseconds": 3000, + "UploadTempPath": "data/upload/temp", + "UploadTemplatePath": "data/upload/templates", + "UploadMailMagazinePath": "data/upload/resources", + "ClientAppUrl": "https://example.com", + "UnsubscribePath": "unsubscribe" + }, + "AuthSetting": { + "DefaultPassword": "AAAAAAAA", + "JwtPublicKey": "-----BEGIN PUBLIC KEY-----\nJwtPublicKey\n-----END PUBLIC KEY-----", + "JwtPrivateKey": "-----BEGIN PRIVATE KEY -----\nJwtPrivateKey\n-----END PRIVATE KEY-----", + "JwtIssuer": "https://identity.sothink.vn", + "JwtAudience": "cosmos-plan-crm,cosmos-plan-crm-api", + "JwtExpirationInMinutes": 3, + "JwtKeyId": "cosmos-plan-crm-api", + "RefreshTokenExpirationInMinutes": 60, + "RefreshTokenMaxUsage": 5, + "RefreshTokenCookieName": "RefreshTokenCookieName" + }, + "AWS": { + "AccessKeyId": "", + "SecretAccessKey": "", + "Region": "", + "SESMailFrom": "noreply@example.com", + "SESMailServiceFrom": "noreply@example.com" + }, + "DataProtection": { + "EncryptionKey": "" + }, + "EventBus": { + "SesTopicName": "", + "TopicNamePrefix": "" + }, + "CachingSetting": { + "Mode": "Memory", + "ModeDescription": "Support modes: [\"Memory\", \"Distributed\", \"Hybrid\"]", + "DefaultTtlInSeconds": 60, + "CachingDataTtlInSeconds": 300, + "DistributedConnectionString": "", + "DistributedDatabaseName": 0 + }, + "DatabaseSetting": { + "ConnectionString": "Host=${IP};Port=${PORT};Database=${DB_NAME};Username=${DB_USER};Password=${DATA_PASSWORD};Include Error Detail=true", + "BackgroundJobConnectionString": "Host=${IP};Port=${PORT};Database=${DB_NAME};Username=${DB_USER};Password=${DATA_PASSWORD};Include Error Detail=true", + "Schema": "${SCHEMA}", + "UseMigrations": false, + "UseSeedData": true + }, + "OutboxMessageOptions": { + "IntervalInSeconds": 3, + "BatchSize": 10, + "RetryCount": 3 + }, + "Serilog": { + "Using": [ + "Serilog.Sinks.Console", + "Serilog.Sinks.File", + "Serilog.Enrichers.ClientInfo" + ], + "MinimumLevel": { + "Default": "Warning", + "Override": { + "MassTransit": "Information", + "Microsoft": "Information", + "Microsoft.EntityFrameworkCore": "Warning", + "Microsoft.EntityFrameworkCore.Database.Command": "Warning" + } + }, + "WriteTo": [ + { + "Name": "Console", + "Args": { + "formatter": "Serilog.Formatting.Compact.RenderedCompactJsonFormatter, Serilog.Formatting.Compact" + } + }, + { + "Name": "File", + "Args": { + "path": "logs/log-.json", + "rollingInterval": "Day", + "retainedFileCountLimit": 30, + "formatter": "Serilog.Formatting.Compact.RenderedCompactJsonFormatter, Serilog.Formatting.Compact" + } + }, + { + "Name": "Seq", + "Args": { + "ServerUrl": "http://localhost:5341" + } + } + ], + "Properties": { + "Application": "Cosmos Plan CRM API", + "Environment": "Production" + }, + "Enrich": [ + "FromLogContext", + "WithMachineName", + "WithThreadId", + "WithClientIp", + "WithCorrelationId", + { + "Name": "WithRequestHeader", + "Args": { + "headerName": "User-Agent" + } + } + ] + }, + "Smtp": { + "Host": "", + "Port": 0, + "From": "", + "Username": "", + "Password": "", + "UseSsl": false + }, + "Network": { + "KnownProxies": "103.205.208.186" + ,"ForwardLimit": 2 + } +} diff --git a/pods/crm-server.pod b/pods/crm-server.pod new file mode 100644 index 0000000..265023d --- /dev/null +++ b/pods/crm-server.pod @@ -0,0 +1,4 @@ +[Pod] +PublishPort=5000:8080 +PublishPort=5431:8081 +PublishPort=8081:80 \ No newline at end of file diff --git a/tasks/main.yml b/tasks/main.yml index 1432e98..d30734d 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -3,44 +3,34 @@ aws ecr get-login-password --region {{ aws_region }} | podman login --username AWS --password-stdin {{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com - name: Pull image from ECR for crm-client - containers.podman.podman_image: - name: "{{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-client" - state: present + shell: > + podman pull {{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-client:latest register: pulled_image_crm_client_result - name: Pull image from ECR for crm-server - containers.podman.podman_image: - name: "{{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-server" - state: present + shell: > + podman pull {{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-server:latest register: pulled_image_crm_server_result -- name: Copy crm-client.container file if image was pulled - ansible.builtin.copy: - src: containers/crm-client.container - dest: "{{ ansible_env.HOME }}/.config/containers/systemd/crm-client.container" - when: pulled_image_crm_client_result.changed - register: copy_crm_client_container_file_result - - name: Copy crm-server.container file if image was pulled ansible.builtin.copy: src: containers/crm-server.container dest: "{{ ansible_env.HOME }}/.config/containers/systemd/crm-server.container" - when: pulled_image_crm_server_result.changed - register: copy_crm_server_container_file_result -- name: Restart crm-client systemd service if container file was copied - ansible.builtin.systemd: - name: crm-client - state: restarted - scope: user - daemon_reload: yes - when: copy_crm_client_container_file_result.changed +- name: Copy seq.container + ansible.builtin.copy: + src: containers/seq.container + dest: "{{ ansible_env.HOME }}/.config/containers/systemd/seq.container" + +- name: Copy crm-server.pod + ansible.builtin.copy: + src: pods/crm-server.pod + dest: "{{ ansible_env.HOME }}/.config/containers/systemd/crm-server.pod" - name: Restart crm-server systemd service if container file was copied ansible.builtin.systemd: - name: crm-server + name: crm-server-pod state: restarted scope: user daemon_reload: yes - when: copy_crm_server_container_file_result.changed \ No newline at end of file