Explorar el Código

:wrench: add building on remote host support

China Kassapa hace 7 meses
padre
commit
f33761b287

+ 115 - 0
deploy/mint-deprecated.yml

@@ -0,0 +1,115 @@
+- name: Build frontend v4
+  hosts: 127.0.0.1
+  roles:
+    - mint-dashboard-v4-build
+    - openai-proxy-build
+
+- name: Setup mint repo
+  hosts:
+    - web
+    - fpm
+    - task
+    - fort
+    - ai_translate
+    - openai_proxy
+  roles:
+    - mint-v2.1
+
+- name: Setup postgresql pali t-search
+  hosts:
+    - db
+  tasks:
+    - name: Upload pali.stop
+      become: true
+      ansible.builtin.copy:
+        dest: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/"
+        src: "{{ playbook_dir }}/tsearch_data/pali.stop"
+        owner: root
+        group: root
+        mode: "0444"
+    - name: Upload pali.syn
+      become: true
+      ansible.builtin.copy:
+        dest: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/"
+        src: "{{ playbook_dir }}/tsearch_data/pali.syn"
+        owner: root
+        group: root
+        mode: "0444"
+    - name: Restart postgresql server
+      become: true
+      ansible.builtin.systemd:
+        state: restarted
+        name: postgresql
+
+- name: Start mint background workers
+  hosts:
+    - task
+  tasks:
+    - name: Start worker service
+      ansible.builtin.systemd_service:
+        name: "{{ app_container_prefix }}-{{ app_domain }}-worker-mq-{{ item }}"
+        enabled: true
+        state: restarted
+        daemon_reload: true
+        scope: user
+      loop:
+        - discussion
+        - pr
+        - progress
+        - wbw.analyses
+        - export.pali.chapter
+        - export.article
+
+- name: Start mint php-fpm
+  hosts:
+    - fpm
+  tasks:
+    - name: Start fpm service
+      ansible.builtin.systemd_service:
+        name: "{{ app_container_prefix }}-{{ app_domain }}-fpm-{{ app_php_fpm_port }}"
+        enabled: true
+        state: restarted
+        daemon_reload: true
+        scope: user
+
+- name: Start mint ai-translate worker
+  hosts:
+    - fort
+    - ai_translate
+  tasks:
+    - name: Enable ai-translate service
+      ansible.builtin.systemd_service:
+        name: "{{ app_container_prefix }}-{{ app_domain }}-worker-mq-ai.translate"
+        enabled: true
+        state: restarted
+        daemon_reload: true
+        scope: user
+
+- name: Start mint openai-proxy worker
+  hosts:
+    - openai_proxy
+  tasks:
+    - name: Enable openai-proxy service
+      ansible.builtin.systemd_service:
+        name: "{{ app_container_prefix }}-{{ app_domain }}-openai.proxy"
+        enabled: true
+        state: restarted
+        daemon_reload: true
+        scope: user
+
+- name: Setup nginx
+  hosts:
+    - web
+  roles:
+    - mint-nginx
+
+- name: Start single-node worker
+  hosts:
+    - fort
+  tasks:
+    - name: Enable schedule run timer
+      ansible.builtin.systemd_service:
+        name: "{{ app_domain }}-scheduler.timer"
+        state: restarted
+        enabled: true
+        scope: user

+ 21 - 106
deploy/mint.yml

@@ -1,115 +1,30 @@
-- name: Build frontend v4
-  hosts: 127.0.0.1
+- name: Setup deploy folder
+  hosts: all:!localhost
+  tasks:
+    - name: Create www folder
+      become: true
+      ansible.builtin.file:
+        path: "{{ app_deploy_target | dirname }}"
+        state: directory
+        owner: "{{ ansible_user }}"
+        mode: "0755"
+
+- name: Build mint package
+  hosts: building
   roles:
-    - mint-dashboard-v4-build
-    - openai-proxy-build
+    - mint-release-build
 
-- name: Setup mint repo
+- name: Build mint package
   hosts:
     - web
-    - fpm
-    - task
     - fort
-    - ai_translate
-    - openai_proxy
-  roles:
-    - mint-v2.1
-
-- name: Setup postgresql pali t-search
-  hosts:
-    - db
-  tasks:
-    - name: Upload pali.stop
-      become: true
-      ansible.builtin.copy:
-        dest: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/"
-        src: "{{ playbook_dir }}/tsearch_data/pali.stop"
-        owner: root
-        group: root
-        mode: "0444"
-    - name: Upload pali.syn
-      become: true
-      ansible.builtin.copy:
-        dest: "/usr/share/postgresql/{{ app_postgresql_version }}/tsearch_data/"
-        src: "{{ playbook_dir }}/tsearch_data/pali.syn"
-        owner: root
-        group: root
-        mode: "0444"
-    - name: Restart postgresql server
-      become: true
-      ansible.builtin.systemd:
-        state: restarted
-        name: postgresql
-
-- name: Start mint background workers
-  hosts:
-    - task
-  tasks:
-    - name: Start worker service
-      ansible.builtin.systemd_service:
-        name: "{{ app_container_prefix }}-{{ app_domain }}-worker-mq-{{ item }}"
-        enabled: true
-        state: restarted
-        daemon_reload: true
-        scope: user
-      loop:
-        - discussion
-        - pr
-        - progress
-        - wbw.analyses
-        - export.pali.chapter
-        - export.article
-
-- name: Start mint php-fpm
-  hosts:
     - fpm
-  tasks:
-    - name: Start fpm service
-      ansible.builtin.systemd_service:
-        name: "{{ app_container_prefix }}-{{ app_domain }}-fpm-{{ app_php_fpm_port }}"
-        enabled: true
-        state: restarted
-        daemon_reload: true
-        scope: user
-
-- name: Start mint ai-translate worker
-  hosts:
-    - fort
+    - task
     - ai_translate
-  tasks:
-    - name: Enable ai-translate service
-      ansible.builtin.systemd_service:
-        name: "{{ app_container_prefix }}-{{ app_domain }}-worker-mq-ai.translate"
-        enabled: true
-        state: restarted
-        daemon_reload: true
-        scope: user
-
-- name: Start mint openai-proxy worker
-  hosts:
     - openai_proxy
   tasks:
-    - name: Enable openai-proxy service
-      ansible.builtin.systemd_service:
-        name: "{{ app_container_prefix }}-{{ app_domain }}-openai.proxy"
-        enabled: true
-        state: restarted
-        daemon_reload: true
-        scope: user
-
-- name: Setup nginx
-  hosts:
-    - web
-  roles:
-    - mint-nginx
-
-- name: Start single-node worker
-  hosts:
-    - fort
-  tasks:
-    - name: Enable schedule run timer
-      ansible.builtin.systemd_service:
-        name: "{{ app_domain }}-scheduler.timer"
-        state: restarted
-        enabled: true
-        scope: user
+    - name: "Upload mint-{{ mint_version }}.tar.xz"
+      ansible.builtin.unarchive:
+        src: "{{ ansible_env.HOME }}/tmp/{{ app_domain }}/mint-{{ mint_version }}.tar.xz"
+        dest: /srv/{{ app_domain }}
+      delegate_to: building

+ 0 - 0
deploy/roles/openai-proxy-build/tasks/main.yml → deploy/roles/mint-openai-proxy-build/tasks/main.yml


+ 11 - 0
deploy/roles/mint-release-build/tasks/ai-translate.yml

@@ -0,0 +1,11 @@
+- name: Install ai-translate dependencies
+  ansible.builtin.shell: |
+    python3 -m venv $PWD/python3
+    source $PWD/python3/bin/activate
+    python3 -m pip install -e .
+    deactivate
+    
+    exit 0
+  args:
+    executable: /bin/bash
+    chdir: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/ai-translate"

+ 9 - 0
deploy/roles/mint-release-build/tasks/api-v12.yml

@@ -0,0 +1,9 @@
+- name: Install api v12 dependencies
+  ansible.builtin.shell: |
+    npm install
+    php8.4 /usr/local/bin/composer install
+    
+    exit 0
+  args:
+    executable: /bin/bash
+    chdir: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/api-v12"

+ 12 - 0
deploy/roles/mint-release-build/tasks/api-v8.yml

@@ -0,0 +1,12 @@
+- name: Install api v8 dependencies
+  ansible.builtin.shell: |
+    npm install
+    php8.1 /usr/local/bin/composer install
+    cd public
+    npm install
+    php8.1 /usr/local/bin/composer install
+
+    exit 0
+  args:
+    executable: /bin/bash
+    chdir: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/api-v8"

+ 25 - 0
deploy/roles/mint-release-build/tasks/dashboard-v4.yml

@@ -0,0 +1,25 @@
+- name: Extract dashboard-v4 node_modules
+  ansible.builtin.unarchive:
+    src: dashboard-20241201115354.tar.xz
+    dest: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/dashboard-v4/dashboard"
+
+- name: Build dashboard-v4 dist
+  ansible.builtin.shell: yarn build
+  args:
+    chdir: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/dashboard-v4/dashboard"
+  environment:
+    NODE_OPTIONS: "--max_old_space_size=2048"
+    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.20250320"
+    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://{{ app_domain }}"
+    REACT_APP_ICP_CODE: "{{ app_icp_code }}"
+    REACT_APP_MPS_CODE: "{{ app_mps_code }}"
+    REACT_APP_QUESTIONNAIRE_LINK: "{{ app_questionnaire_link }}"
+    # https://github.com/iapt-platform/mint/blob/5e81587433455cbc4994da49db5b880cf79e3539/dashboard-v4/dashboard/.env.orig#L17
+    REACT_APP_OPENAI_PROXY: "{{ app_openai_proxy_server }}/api/openai"

+ 41 - 0
deploy/roles/mint-release-build/tasks/main.yml

@@ -0,0 +1,41 @@
+- name: Download source code
+  ansible.builtin.unarchive:
+    src: https://github.com/iapt-platform/mint/archive/{{ mint_version }}.zip
+    dest: "{{ ansible_env.HOME }}/build"
+    remote_src: true
+
+- name: Build dashboard v4
+  ansible.builtin.import_tasks: dashboard-v4.yml
+
+- name: Build openai proxy
+  ansible.builtin.import_tasks: openai-proxy.yml
+
+- name: Setup api-v8
+  ansible.builtin.import_tasks: api-v8.yml
+
+- name: Setup api-v12
+  ansible.builtin.import_tasks: api-v12.yml
+
+- name: Setup ai translate
+  ansible.builtin.import_tasks: ai-translate.yml
+
+- name: Create mint-{{ mint_version }}.tar
+  ansible.builtin.shell: "tar cf mint-{{ mint_version }}.tar -C {{ ansible_env.HOME }}/build/mint-{{ mint_version }} api-v12 api-v8 dashboard-v4/dist ai-translate open-ai-server/dist"
+  args:
+    chdir: "{{ ansible_env.HOME }}/tmp"
+
+- name: Create {{ ansible_env.HOME }}/tmp/{{ app_domain }}
+  ansible.builtin.file:
+    path: "{{ ansible_env.HOME }}/tmp/{{ app_domain }}"
+    state: directory
+    mode: "0755"
+
+- name: Create mint-{{ mint_version }}.tar.xz
+  ansible.builtin.shell: "xz -z -F xz -C sha256 --best -T +1 mint-{{ mint_version }}.tar"
+  args:
+    chdir: "{{ ansible_env.HOME }}/tmp/{{ app_domain }}"
+
+- name: Remove mint-{{ mint_version }}
+  ansible.builtin.file:
+    path: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}"
+    state: absent

+ 9 - 0
deploy/roles/mint-release-build/tasks/openai-proxy.yml

@@ -0,0 +1,9 @@
+- name: Install openai-proxy nodejs dependencies
+  ansible.builtin.shell: npm install
+  args:
+    chdir: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/open-ai-server"
+
+- name: Build openai-proxy target dist
+  ansible.builtin.shell: npm run build
+  args:
+    chdir: "{{ ansible_env.HOME }}/build/mint-{{ mint_version }}/open-ai-server"