소스 검색

:wrench: merge v2 deployment roles

Jeremy Zheng 1 년 전
부모
커밋
cb4d6fcf3a
31개의 변경된 파일744개의 추가작업 그리고 4개의 파일을 삭제
  1. 1 0
      .gitignore
  2. 1 0
      dashboard-v4/dashboard/.gitignore
  3. 1 0
      deploy/.gitignore
  4. 2 0
      deploy/README.md
  5. 6 4
      deploy/group_vars/all.yml
  6. 51 0
      deploy/mint.yml
  7. 32 0
      deploy/roles/mint-dashboard-v4-build/tasks/main.yml
  8. 15 0
      deploy/roles/mint-frontend-assets-build/tasks/main.yml
  9. 6 0
      deploy/roles/mint-v2/tasks/antd-v4.yml
  10. 145 0
      deploy/roles/mint-v2/tasks/laravel-v8.yml
  11. 25 0
      deploy/roles/mint-v2/tasks/lily.yml
  12. 43 0
      deploy/roles/mint-v2/tasks/main.yml
  13. 17 0
      deploy/roles/mint-v2/tasks/morus.yml
  14. 65 0
      deploy/roles/mint-v2/tasks/queue-workers.yml
  15. 44 0
      deploy/roles/mint-v2/tasks/tulip.yml
  16. 18 0
      deploy/roles/mint-v2/templates/v1/config.js.j2
  17. 67 0
      deploy/roles/mint-v2/templates/v1/config.php.j2
  18. 95 0
      deploy/roles/mint-v2/templates/v2/env.j2
  19. 1 0
      deploy/roles/mint-v2/templates/v2/lily/config.toml.j2
  20. 15 0
      deploy/roles/mint-v2/templates/v2/lily/services/server.service.j2
  21. 15 0
      deploy/roles/mint-v2/templates/v2/lily/services/worker.service.j2
  22. 15 0
      deploy/roles/mint-v2/templates/v2/morus.service.j2
  23. 15 0
      deploy/roles/mint-v2/templates/v2/queue-worker.service.j2
  24. 9 0
      deploy/roles/mint-v2/templates/v2/scheduler.service.j2
  25. 10 0
      deploy/roles/mint-v2/templates/v2/scheduler.timer.j2
  26. 13 0
      deploy/roles/mint-v2/templates/v2/tulip/config.php.j2
  27. 1 0
      deploy/roles/mint-v2/templates/v2/tulip/db/env.j2
  28. 15 0
      deploy/roles/mint-v2/templates/v2/tulip/service.conf.j2
  29. 0 0
      deploy/roles/opensearch/tasks/main.yml
  30. 0 0
      deploy/roles/opensearch/templates/server.service.j2
  31. 1 0
      deploy/roles/ubuntu/tasks/main.yml

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 /tmp/
+/.ansible/
 /.vscode/launch.json

+ 1 - 0
dashboard-v4/dashboard/.gitignore

@@ -3,6 +3,7 @@
 
 # production
 /build/
+/dist-*/
 
 # misc
 .env

+ 1 - 0
deploy/.gitignore

@@ -2,3 +2,4 @@
 /tmp/
 /roles/mint/files/dashboard/
 *.log
+*.xz

+ 2 - 0
deploy/README.md

@@ -23,6 +23,8 @@ peony -i clients/CLUSTER ping.yml
 peony -i clients/CLUSTER ec2.yml
 # setup redis cluster nodes
 peony -i clients/CLUSTER redis.yml -l redis
+# deploy mint: version(git rev-parse --short HEAD)
+peony -i clients/CLUSTER mint.yml --extra-vars "mint_version=xxx"
 ```
 
 ## System image

+ 6 - 4
deploy/group_vars/all.yml

@@ -2,10 +2,12 @@ ansible_user: "deploy"
 ansible_python_interpreter: /usr/bin/python3
 ansible_ssh_private_key_file: "{{ inventory_dir }}/.ssh/id_ed25519"
 
-app_deploy_target: "/var/www/{{ inventory_hostname }}"
+app_deploy_target: "/srv/www/{{ inventory_hostname }}/{{ mint_version }}"
 app_downloads: "{{ ansible_env.HOME }}/downloads"
 
 app_dashboard_base_path: "/pcd"
-app_postgresql_version: "15"
-open_search_version: "2.17.0"
-open_search_arch: "arm64"
+app_postgresql_version: "16"
+app_open_search_version: "2.19.0"
+app_open_search_arch: "arm64"
+
+app_dbmate_arch: "arm64"

+ 51 - 0
deploy/mint.yml

@@ -0,0 +1,51 @@
+- name: Build dashboard v4
+  hosts: 127.0.0.1
+  roles:
+    - mint-dashboard-v4-build
+    - mint-frontend-assets-build
+
+- name: Setup pali.syn
+  hosts:
+    - db
+  tasks:
+    - name: Upload pali.stop
+      become: true
+      ansible.builtin.copy:
+        dest: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/"
+        src: "{{ playbook_dir }}/../dashboard-v4/rpc/tulip/tulip/dictionary/pali.stop"
+        owner: root
+        group: root
+        mode: "0644"
+        creates: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/pali.stop"
+    - name: Upload pali.syn
+      become: true
+      ansible.builtin.copy:
+        dest: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/"
+        src: "{{ playbook_dir }}/../dashboard-v4/rpc/tulip/tulip/dictionary/pali.syn"
+        owner: root
+        group: root
+        mode: "0644"
+        creates: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/pali.syn"
+    - name: Restart postgresql server
+      become: true
+      ansible.builtin.systemd:
+        state: restarted
+        name: postgresql
+
+- name: Setup backend servers
+  hosts:
+    - web
+    - fpm
+    - task
+  roles:
+    - mint-v2
+
+- name: Setup nginx
+  hosts: web
+  roles:
+    - mint-nginx
+
+- name: Setup workers
+  hosts: tasks
+  roles:
+    - mint-workers

+ 32 - 0
deploy/roles/mint-dashboard-v4-build/tasks/main.yml

@@ -0,0 +1,32 @@
+- name: Git checkout source code
+  ansible.builtin.git:
+    repo: "https://github.com/iapt-platform/mint.git"
+    dest: "{{ playbook_dir }}/tmp/mint"
+    version: "{{ mint_version }}"
+
+- name: Extract dashboard node_modules
+  ansible.builtin.unarchive:
+    src: dashboard-20241201115354.tar.xz
+    dest: "{{ playbook_dir }}/tmp/mint/dashboard-v4/dashboard"
+    creates: "{{ playbook_dir }}/tmp/mint/dashboard-v4/dashboard/node_modules"
+
+- name: Build dashboard dist
+  ansible.builtin.shell: yarn build
+  args:
+    chdir: "{{ playbook_dir }}/tmp/mint/dashboard-v4/dashboard"
+    creates: "{{ playbook_dir }}/tmp/mint/dashboard-v4/dashboard/dist-{{ mint_version }}"
+  environment:
+    BUILD_PATH: "dist-{{ mint_version }}"
+    NODE_OPTIONS: "--max_old_space_size=4096"
+    PUBLIC_URL: "{{ app_dashboard_base_path }}"
+    REACT_APP_DEFAULT_LOCALE: "zh-Hans"
+    REACT_APP_LANGUAGES: "en-US,zh-Hans,zh-Hant"
+    REACT_APP_ENABLE_LOCAL_TOKEN: "true"
+    REACT_APP_TOKEN_KEY: "token.20250215"
+    REACT_APP_DOCUMENTS_SERVER: "{{ app_documents_server }}"
+    REACT_APP_RPC_SERVER: "{{ app_grpc_web_server }}"
+    REACT_APP_ASSETS_SERVER: "{{ app_assets_server }}"
+    REACT_APP_API_SERVER: "https://{{ inventory_hostname }}"
+    REACT_APP_ICP_CODE: "{{ app_icp_code }}"
+    REACT_APP_MPS_CODE: "{{ app_mps_code }}"
+    REACT_APP_QUESTIONNAIRE_LINK: "{{ app_questionnaire_link }}"

+ 15 - 0
deploy/roles/mint-frontend-assets-build/tasks/main.yml

@@ -0,0 +1,15 @@
+- name: Install nodejs packages for v1
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/yarn
+      - install
+  args:
+    chdir: "{{ playbook_dir }}/tmp/mint/api-v8/public"
+
+- name: Install nodejs packages for v2
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/yarn
+      - install
+  args:
+    chdir: "{{ playbook_dir }}/tmp/mint/api-v8"

+ 6 - 0
deploy/roles/mint-v2/tasks/antd-v4.yml

@@ -0,0 +1,6 @@
+- name: Upload dashboard
+  ansible.builtin.copy:
+    src: "{{ playbook_dir }}/tmp/mint/dashboard-v4/dashboard/dist-{{ mint_version }}"
+    dest: "{{ app_deploy_target }}/dashboard"
+    mode: "0755"
+    creates: "{{ app_deploy_target }}/dashboard"

+ 145 - 0
deploy/roles/mint-v2/tasks/laravel-v8.yml

@@ -0,0 +1,145 @@
+- name: Upload nodejs packages for v1
+  ansible.builtin.copy:
+    src: "{{ playbook_dir }}/tmp/mint/api-v8/public/node_modules"
+    dest: "{{ app_deploy_target }}/mint/api-v8/public/node_modules"
+    mode: "0755"
+    creates: "{{ app_deploy_target }}/mint/api-v8/public/node_modules"
+
+- name: Upload nodejs packages for v2
+  ansible.builtin.copy:
+    src: "{{ playbook_dir }}/tmp/mint/api-v8/node_modules"
+    dest: "{{ app_deploy_target }}/mint/api-v8/node_modules"
+    mode: "0755"
+    creates: "{{ app_deploy_target }}/mint/api-v8/node_modules"
+
+- name: Upload .env(v2)                                                                                                                                                      10:53:42 [82/293]
+  become: true
+  ansible.builtin.template:
+    src: v2/env.j2
+    dest: "{{ app_deploy_target }}/mint/api-v8/.env"
+    owner: www-data
+    group: www-data
+    mode: "0444"
+
+- name: Upload config.php(v1)
+  ansible.builtin.become: true
+  ansible.builtin.template:
+    src: v1/config.php.j2
+    dest: "{{ app_deploy_target }}/mint/api-v8/public/app/config.php"
+    owner: www-data
+    group: www-data
+    mode: "0444"
+
+- name: Upload config.js(v1)
+  become: true
+  template:
+    src: v1/config.js.j2
+    dest: "{{ app_deploy_target }}/mint/api-v8/public/app/config.js"
+    owner: www-data
+    group: www-data
+    mode: "0444"
+
+- name: Setup bootstrap folder for {{ ansible_user }}
+  become: true
+  ansible.builtin.file:
+    path: "{{ app_deploy_target }}/mint/api-v8/bootstrap/cache"
+    state: directory
+    owner: "{{ ansible_user }}"
+    group: "{{ ansible_user }}"
+    recurse: true
+
+- name: Auto-loader optimization for v2
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/composer
+      - update
+      - --optimize-autoloader
+      - --no-dev
+    chdir: "{{ app_deploy_target }}/api-v8"
+
+- name: Auto-loader optimization for v1
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/composer
+      - update
+      - --optimize-autoloader
+      - --no-dev
+    chdir: "{{ app_deploy_target }}/mint/api-v8/public"
+
+- name: Setup storage folder for v2 for php-fpm
+  become: true
+  ansible.builtin.file:
+    path: "{{ app_deploy_target }}/mint/api-v8/storage"
+    state: directory
+    owner: www-data
+    group: www-data
+    recurse: true
+
+- name: Caching configuration
+  become: true
+  become_user: www-data
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/php
+      - artisan
+      - config:cache
+    chdir: "{{ app_deploy_target}}/api-v8"
+
+- name: Caching events
+  become: true
+  become_user: www-data
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/php
+      - artisan
+      - event:cache
+    chdir: "{{ app_deploy_target }}/api-v8"
+
+- name: Caching routes
+  become: true
+  become_user: www-data
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/php
+      - artisan
+      - route:cache
+    chdir: "{{ app_deploy_target }}/api-v8"
+
+- name: Caching views
+  become: true
+  become_user: www-data
+  ansible.builtin.shell:
+    argv:
+      - /usr/bin/php
+      - artisan
+      - view:cache
+    chdir: "{{ app_deploy_target }}/api-v8"
+
+- name: Setup sqlite3 db for v1
+  become: true
+  ansible.builtin.file:
+    src: /var/www/shared/appdata
+    dest: "{{ app_deploy_target }}/mint/api-v8/storage/app/data"
+    state: link
+
+# https://laravel.com/docs/10.x/scheduling#running-the-scheduler
+- name: Upload scheduler service
+  become: true
+  ansible.builtin.template:
+    src: v2/scheduler.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-scheduler.service
+    owner: root
+    group: root
+    mode: "0644"
+
+- name: Setup laravel queue workers
+  ansible.builtin.import_tasks: queue-workers.yml
+
+- name: Setup morus service
+  ansible.builtin.import_tasks: morus.yml
+
+- name: Setup lily service
+  ansible.builtin.import_tasks: lily.yml
+
+- name: Setup tulip service
+  ansible.builtin.import_tasks: tulip.yml

+ 25 - 0
deploy/roles/mint-v2/tasks/lily.yml

@@ -0,0 +1,25 @@
+- name: upload lily config.toml
+  template:
+    src: v2/lily/config.toml.j2
+    dest: "{{ app_deploy_root }}/agile/rpc/lily/config.toml"
+    mode: "0644"
+
+- name: upload lily rpc server service
+  become: true
+  template:
+    src: v2/lily/services/server.service.j2
+    dest: /usr/lib/systemd/system/mint-{{ app_deploy_env }}-lily.service
+    owner: root
+    group: root
+    mode: "0644"
+
+- name: upload lily rpc worker({{ queue }}) service
+  become: true
+  template:
+    src: v2/lily/services/worker.service.j2
+    dest: /usr/lib/systemd/system/mint-{{ app_deploy_env }}-worker-{{ queue }}.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    queue: "palm.lily.tex-to-pdf"

+ 43 - 0
deploy/roles/mint-v2/tasks/main.yml

@@ -0,0 +1,43 @@
+- name: Install dbmate
+  become: true
+  ansible.builtin.get_url:
+    url: "https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-{{ app_dbmate_arch }}"
+    dest: /usr/local/bin/dbmate
+    mode: "0555"
+    creates: /usr/local/bin/dbmate
+
+- name: Create the deployment folder
+  become: true
+  ansible.builtin.file:
+    path: "{{ app_deploy_target }}"
+    state: directory
+    owner: "{{ ansible_user }}"
+    mode: "0755"
+
+- name: Create the logs folder
+  become: true
+  ansible.builtin.file:
+    path: "{{ app_deploy_target }}/logs"
+    state: directory
+    owner: "www-data"
+    group: "www-data"
+    mode: "0755"
+
+- name: Unarchive repo
+  ansible.builtin.unarchive:
+    src: https://github.com/iapt-platform/mint/archive/{{ mint_version }}.zip
+    dest: "{{ app_deploy_target }}/mint"
+    remote_src: true
+    creates: "{{ app_deploy_target }}/mint"
+
+- name: Setup dashboard
+  ansible.builtin.import_tasks: antd-v4.yml
+- name: Setup laravel
+  ansible.builtin.import_tasks: laravel-v8.yml
+- name: Setup systemd services
+  ansible.builtin.import_tasks: systemd.yml
+
+- name: Force systemd to reread configs
+  become: true
+  ansible.builtin.systemd:
+    daemon_reload: true

+ 17 - 0
deploy/roles/mint-v2/tasks/morus.yml

@@ -0,0 +1,17 @@
+- name: auto-loader optimization for morus
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/composer
+      - install
+      - --optimize-autoloader
+      - --no-dev
+    chdir: "{{ app_deploy_target }}/mint/dashboard-v4/rpc/morus/morus"
+
+- name: Upload morus rpc service
+  become: true
+  ansible.builtin.template:
+    src: v2/morus.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-morus.service
+    owner: root
+    group: root
+    mode: "0644"

+ 65 - 0
deploy/roles/mint-v2/tasks/queue-workers.yml

@@ -0,0 +1,65 @@
+- name: upload {{ action }} worker service
+  become: true
+  template:
+    src: v2/queue-worker.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-{{ action }}-worker.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    action: "discussion"
+
+- name: upload {{ action }} worker service
+  become: true
+  template:
+    src: v2/queue-worker.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-{{ action }}-worker.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    action: "pr"
+
+- name: Upload {{ action }} worker service
+  become: true
+  template:
+    src: v2/queue-worker.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-{{ action }}-worker.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    action: "progress"
+
+- name: Upload {{ action }} worker service
+  become: true
+  template:
+    src: v2/queue-worker.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-{{ action }}-worker.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    action: "wbw.analyses"
+
+- name: upload {{ action }} worker service
+  become: true
+  template:
+    src: v2/queue-worker.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-{{ action }}-worker.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    action: "export.pali.chapter"
+
+- name: upload {{ action }} worker service
+  become: true
+  template:
+    src: v2/queue-worker.service.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-{{ action }}-worker.service
+    owner: root
+    group: root
+    mode: "0644"
+  vars:
+    action: "export.article"

+ 44 - 0
deploy/roles/mint-v2/tasks/tulip.yml

@@ -0,0 +1,44 @@
+- name: auto-loader optimization for tulip
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/composer
+      - update
+      - --optimize-autoloader
+      - --no-dev
+    chdir: "{{ app_deploy_target }}/mint/dashboard-v4/rpc/tulip/tulip"
+
+- name: upload tulip db/.env
+  template:
+    src: v2/tulip/db/env.j2
+    dest: "{{ app_deploy_target }}/mint/dashboard-v4/rpc/tulip/tulip/db/.env"
+    mode: "0644"
+
+- name: upload tulip config.php
+  template:
+    src: v2/tulip/config.php.j2
+    dest: "{{ app_deploy_target }}/mint/dashboard-v4/rpc/tulip/tulip/config.php"
+    mode: "0644"
+
+- name: Setup tmp folder
+  become: true
+  ansible.builtin.file:
+    path: "{{ app_deploy_root }}/mint/dashboard-v4/rpc/tulip/tulip/tmp"
+    state: directory
+    owner: "www-data"
+    group: "www-data"
+
+- name: Upload tulip rpc service
+  become: true
+  template:
+    src: v2/tulip/service.conf.j2
+    dest: /usr/lib/systemd/system/{{ inventory_hostname }}-tulip.service
+    owner: root
+    group: root
+    mode: "0644"
+
+- name: Run tulip db migrate
+  ansible.builtin.command:
+    argv:
+      - /usr/bin/dbmate
+      - up
+    chdir: "{{ app_deploy_target }}/mint/dashboard-v4/rpc/tulip/tulip/db"

+ 18 - 0
deploy/roles/mint-v2/templates/v1/config.js.j2

@@ -0,0 +1,18 @@
+var ICP_CODE = "{{ app_icp_code }}"
+var GRPC_WEB_SERVER = "{{ app_grpc_web_server }}";
+var DOCUMENTS_SERVER = "{{ app_documents_server }}";
+var REACT_APP_QUESTIONNAIRE_LINK = "{{ app_questionnaire_link }}";
+var DASHBOARD_BASE_PATH = "{{ app_dashboard_base_path }}";
+
+/*
+  |---------------
+  |网站资源文件,非用户的图片,音频,视频
+  |---------------
+  |对应/public/tmp/ 目录 开发线可以设置为 http://127.0.0.1:8000/tmp
+  |所有文件存储在 https://drive.google.com/drive/folders/1-4dn4juD-0-lsKndDui2W9nT9wcS_Y33?usp=sharing
+  |开发线可自行下载放到/public/tmp/
+  |或直接引用离您最近的assets server
+  |------------------------
+*/
+
+var ASSETS_SERVER = "{{ app_assets_server }}";

+ 67 - 0
deploy/roles/mint-v2/templates/v1/config.php.j2

@@ -0,0 +1,67 @@
+<?php
+
+#域名设置
+define("GRPC_WEB_SERVER","{{ app_grpc_web_server}}");
+define("ASSETS_SERVER","{{ app_assets_server }}");
+define("DOCUMENTS_SERVER","{{ app_documents_server }}");
+define('APP_KEY','{{ app_secret_key }}');
+define('APP_ENV','{{ app_deploy_env }}');
+define('CORS_ALLOWED_ORIGINS', '{{ app_cors_allowed_origins }}');
+define('DASHBOARD_BASE_PATH', "{{ app_dashboard_base_path }}");
+
+/*
+电子邮件设置
+PHPMailer
+*/
+define("Email", [
+                                 "Host"=>"{{ app_smtp_host }}",//Set the SMTP server to send through
+                                 "SMTPAuth"=>true,//Enable SMTP authentication
+                                 "Username"=>'{{ app_smtp_user }}',//SMTP username
+                                 "Password"=>'{{ app_smtp_password }}',//SMTP password
+                                 "Port"=>{{ app_smtp_port }},//TCP port to connect to 465; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
+                                 "From"=>"{{ app_smtp_user }}",
+                                 "Sender"=>"webmaster"
+                                 ]);
+
+/*
+数据库设置
+*/
+define("Database",[
+        "type"=>"pgsql",
+        "server"=>"{{ app_postgresql_host }}",
+        "port"=>{{ app_postgresql_port }},
+        "name"=>"{{ app_postgresql_dbname }}",
+        "sslmode" => "disable",
+        "user" => "{{ app_postgresql_user }}",
+        "password" => "{{ app_postgresql_password }}"
+]);
+
+
+/*
+Redis 设置,
+*/
+define("Redis",[        
+        "host" => "{{ app_redis_host }}",
+        "port" => {{ app_redis_port }},
+        "password" => "",
+        "prefix"=>"{{ app_deploy_env }}://www"
+]);
+
+
+# 雪花id
+define("SnowFlake",[
+        "DatacenterId"=>{{ app_snowflake_data_center_id }},
+        "WorkerId"=>{{ app_snowflake_worker_id }}
+]);
+
+#目录设置,不能更改
+require_once __DIR__."/config.dir.php";
+
+/*
+数据表
+*/
+#表设置,此行不能更改
+require_once __DIR__."/config.table.php";
+
+
+?>

+ 95 - 0
deploy/roles/mint-v2/templates/v2/env.j2

@@ -0,0 +1,95 @@
+BASE_DIR="{{ app_deploy_target }}/mint/.env.global"
+CACHE_DIR="${BASE_DIR}/cache"
+TMP_DIR="${BASE_DIR}/tmp"
+
+APP_NAME="wikipali"
+APP_ENV={{ app_deploy_env }}
+APP_KEY={{ app_secret_key }}
+APP_DEBUG=false
+APP_URL="https://{{ inventory_hostname }}"
+
+LOG_CHANNEL=syslog
+LOG_DEPRECATIONS_CHANNEL=null
+LOG_LEVEL=debug
+
+DB_CONNECTION=pgsql
+DB_HOST={{ app_postgresql_host }}
+DB_PORT={{ app_postgresql_port }}
+DB_DATABASE={{ app_postgresql_dbname }}
+DB_USERNAME={{ app_postgresql_user }}
+DB_PASSWORD="{{ app_postgresql_password }}"
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=redis
+FILESYSTEM_DRIVER=s3
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=cookie
+SESSION_LIFETIME=120
+
+AWS_ACCESS_KEY_ID={{ app_aws_access_key }}
+AWS_SECRET_ACCESS_KEY={{ app_aws_secret_key }}
+AWS_DEFAULT_REGION={{ app_aws_region }}
+AWS_BUCKET=assets
+AWS_URL=
+AWS_ENDPOINT=https://{{ app_aws_endpoint_domain }}
+
+REDIS_HOST={{ app_redis_host }}
+REDIS_PORT={{ app_redis_port }}
+REDIS_PASSWORD=
+REDIS_DB=0
+REDIS_PREFIX="${APP_NAME}://{{ inventory_hostname }}/"
+
+REDIS_CACHE_HOST={{ app_redis_cache_host }}
+REDIS_CACHE_PORT={{ app_redis_cache_port }}
+REDIS_CACHE_PASSWORD=
+REDIS_CACHE_DB={{ app_redis_cache_db }}
+REDIS_CACHE_PREFIX="{{ inventory_hostname }}://"
+
+
+MAIL_MAILER=smtp
+MAIL_HOST={{ app_smtp_host }}
+MAIL_PORT={{ app_smtp_port }}
+MAIL_USERNAME="{{ app_smtp_user }}"
+MAIL_PASSWORD="{{ app_smtp_password }}"
+MAIL_ENCRYPTION=ssl
+MAIL_FROM_ADDRESS="{{ app_smtp_user }}"
+MAIL_FROM_NAME="wikipali"
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
+
+DASHBOARD_BASE_PATH="{{ app_dashboard_base_path }}"
+ASSETS_SERVER="{{ app_assets_server }}"
+GRPC_WEB_SERVER="{{ app_grpc_web_server }}"
+DOCUMENTS_SERVER="{{ app_documents_server }}"
+CORS_ALLOWED_ORIGINS="{{ app_cors_allowed_origins }}"
+
+MORUS_GRPC_HOST="{{ app_morus_grpc_host }}"
+MORUS_GRPC_PORT="{{ app_morus_listen_port }}"
+LILY_GRPC_HOST="{{ app_lily_grpc_host }}"
+LILY_GRPC_PORT="{{ app_lily_listen_port }}"
+TULIP_GRPC_HOST="{{ app_tulip_grpc_host }}"
+TULIP_GRPC_PORT="{{ app_tulip_listen_port }}"
+
+SNOWFLAKE_DATA_CENTER_ID={{ app_snowflake_data_center_id }}
+SNOWFLAKE_WORKER_ID={{ app_snowflake_worker_id }}
+
+RABBITMQ_HOST="{{ app_rabbitmq_host }}"
+RABBITMQ_PORT={{ app_rabbitmq_port }}
+RABBITMQ_VIRTUAL_HOST="{{ app_rabbitmq_virtual_host }}"
+RABBITMQ_USER="{{ app_rabbitmq_user }}"
+RABBITMQ_PASSWORD="{{ app_rabbitmq_password }}"
+
+CDN_URLS={{ app_cdn_urls }}
+ATTACHMENTS_TEMPORARY_BUCKET_NAME={{ app_attachments_bucket_name }}-t
+ATTACHMENTS_PERMANTENT_BUCKET_NAME={{ app_attachments_bucket_name }}-p
+
+FTP_HOST="{{ app_ftp_host }}"
+
+APP_ICP_CODE="{{ app_icp_code }}"
+APP_MPS_CODE="{{ app_mps_code }}"

+ 1 - 0
deploy/roles/mint-v2/templates/v2/lily/config.toml.j2

@@ -0,0 +1 @@
+port = {{ app_lily_listen_port }}

+ 15 - 0
deploy/roles/mint-v2/templates/v2/lily/services/server.service.j2

@@ -0,0 +1,15 @@
+[Unit]
+Description=Mint lily rpc service for {{ inventory_hostname }}
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/bin/bash lily.sh -d -c config.toml
+WorkingDirectory={{ app_deploy_target }}/mint/dashboard-v4/rpc/lily
+User=www-data
+Group=www-data
+Restart=always
+RestartSec=30s
+
+[Install]
+WantedBy=multi-user.target

+ 15 - 0
deploy/roles/mint-v2/templates/v2/lily/services/worker.service.j2

@@ -0,0 +1,15 @@
+[Unit]
+Description=Mint lily worker service for {{ inventory_hostname }}
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/bin/bash lily.sh -d -c config.toml --worker {{ queue }}
+WorkingDirectory={{ app_deploy_target }}/mint/dashboard-v4/rpc/lily
+User=www-data
+Group=www-data
+Restart=always
+RestartSec=30s
+
+[Install]
+WantedBy=multi-user.target

+ 15 - 0
deploy/roles/mint-v2/templates/v2/morus.service.j2

@@ -0,0 +1,15 @@
+[Unit]
+Description=Mint morus rpc service for {{ inventory_hostname }}
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/php server.php -p {{ app_morus_listen_port }}
+WorkingDirectory={{ app_deploy_target }}/mint/dashboard-v4/rpc/morus/morus
+User=www-data
+Group=www-data
+Restart=always
+RestartSec=30s
+
+[Install]
+WantedBy=multi-user.target

+ 15 - 0
deploy/roles/mint-v2/templates/v2/queue-worker.service.j2

@@ -0,0 +1,15 @@
+[Unit]
+Description=Mint {{ action }} worker for {{ inventory_hostname }}
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/php artisan mq:{{ action }}
+WorkingDirectory={{ app_deploy_target }}/mint
+User=www-data
+Group=www-data
+Restart=always
+RestartSec=30s
+
+[Install]
+WantedBy=multi-user.target

+ 9 - 0
deploy/roles/mint-v2/templates/v2/scheduler.service.j2

@@ -0,0 +1,9 @@
+[Unit]
+Description=Mint scheduler for {{ inventory_hostname }}
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/php artisan schedule:run
+WorkingDirectory={{ app_deploy_target }}/mint
+User=www-data
+Group=www-data

+ 10 - 0
deploy/roles/mint-v2/templates/v2/scheduler.timer.j2

@@ -0,0 +1,10 @@
+[Unit]
+Description=Runs Mint {{ inventory_hostname }} scheduler every minute
+
+[Timer]
+OnBootSec=15minutes
+OnUnitActiveSec=1minute
+Unit={{ inventory_hostname }}-scheduler.service
+
+[Install]
+WantedBy=timers.target

+ 13 - 0
deploy/roles/mint-v2/templates/v2/tulip/config.php.j2

@@ -0,0 +1,13 @@
+<?php
+
+define("Config", [
+    'port' => {{ app_tulip_listen_port }},
+    "database" => [
+        "driver" => "pgsql",
+        "host" => "{{ app_tulip_db_host }}",
+        "port" => {{ app_tulip_db_port }},
+        "name" => "{{ app_tulip_db_name }}",
+        "user" => "{{ app_tulip_db_user }}",
+        "password" => "{{ app_tulip_db_password }}",
+    ],
+]);

+ 1 - 0
deploy/roles/mint-v2/templates/v2/tulip/db/env.j2

@@ -0,0 +1 @@
+DATABASE_URL="postgres://{{ app_tulip_db_user }}:{{ app_tulip_db_password }}@{{ app_tulip_db_host}}:{{ app_tulip_db_port }}/{{ app_tulip_db_name }}?sslmode=disable"

+ 15 - 0
deploy/roles/mint-v2/templates/v2/tulip/service.conf.j2

@@ -0,0 +1,15 @@
+[Unit]
+Description=Mint tulip rpc service for {{ inventory_hostname }}
+After=network.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/php server.php
+WorkingDirectory={{ app_deploy_target }}/mint/dashboard-v4/rpc/tulip/tulip
+User=www-data
+Group=www-data
+Restart=always
+RestartSec=30s
+
+[Install]
+WantedBy=multi-user.target

+ 0 - 0
deploy/roles/open-search/tasks/main.yml → deploy/roles/opensearch/tasks/main.yml


+ 0 - 0
deploy/roles/open-search/templates/server.service.j2 → deploy/roles/opensearch/templates/server.service.j2


+ 1 - 0
deploy/roles/ubuntu/tasks/main.yml

@@ -59,6 +59,7 @@
       - certbot
       - python3-certbot-nginx
       - build-essential
+      - ninja-build
       - pkg-config
       - cmake
       - libssl-dev