1
0
Code Issues Pull Requests Actions Packages Projects Releases Wiki Activity Security Code Quality

Compare commits

..

5 Commits

7 changed files with 193 additions and 25 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,4 @@
# ---> Ansible # ---> Ansible
*.retry *.retry
/env-file/*.env /env-file/*.env
/containers/*.container
/vars/*.yml /vars/*.yml

View File

@@ -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

View File

@@ -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

15
containers/seq.container Normal file
View File

@@ -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

124
env-file/appsettings.json Normal file
View File

@@ -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
}
}

4
pods/crm-server.pod Normal file
View File

@@ -0,0 +1,4 @@
[Pod]
PublishPort=5000:8080
PublishPort=5431:8081
PublishPort=8081:80

View File

@@ -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 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 - name: Pull image from ECR for crm-client
containers.podman.podman_image: shell: >
name: "{{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-client" podman pull {{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-client:latest
state: present
register: pulled_image_crm_client_result register: pulled_image_crm_client_result
- name: Pull image from ECR for crm-server - name: Pull image from ECR for crm-server
containers.podman.podman_image: shell: >
name: "{{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-server" podman pull {{ aws_account_id }}.dkr.ecr.{{ aws_region }}.amazonaws.com/prod/crm-server:latest
state: present
register: pulled_image_crm_server_result 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 - name: Copy crm-server.container file if image was pulled
ansible.builtin.copy: ansible.builtin.copy:
src: containers/crm-server.container src: containers/crm-server.container
dest: "{{ ansible_env.HOME }}/.config/containers/systemd/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 - name: Copy seq.container
ansible.builtin.systemd: ansible.builtin.copy:
name: crm-client src: containers/seq.container
state: restarted dest: "{{ ansible_env.HOME }}/.config/containers/systemd/seq.container"
scope: user
daemon_reload: yes - name: Copy crm-server.pod
when: copy_crm_client_container_file_result.changed 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 - name: Restart crm-server systemd service if container file was copied
ansible.builtin.systemd: ansible.builtin.systemd:
name: crm-server name: crm-server-pod
state: restarted state: restarted
scope: user scope: user
daemon_reload: yes daemon_reload: yes
when: copy_crm_server_container_file_result.changed