Sfoglia il codice sorgente

:wrench: add ai-translate & laravel-scheduler support

China Kassapa 2 mesi fa
parent
commit
3b9efc4a6d

+ 7 - 1
deploy/roles/mint-build-v2.3/tasks/main.yml

@@ -109,7 +109,13 @@
     src: "{{ app_workspace }}/api-v12"
     dest: "{{ app_workspace }}/tmp/{{ app_domain }}-{{ mint_version }}/api-v12"
     recursive: true
-    
+
+- name: Copy ai-translate to release folder
+  ansible.posix.synchronize:    
+    src: "{{ app_workspace }}/ai-translate"
+    dest: "{{ app_workspace }}/tmp/{{ app_domain }}-{{ mint_version }}/ai-translate"
+    recursive: true
+
 # - name: Archive release.tar.xz
 #   community.general.archive:
 #     path: "{{ app_workspace }}/tmp/{{ app_domain }}-{{ mint_version }}/*"

+ 29 - 0
deploy/roles/mint-v2.3/tasks/config.yml

@@ -0,0 +1,29 @@
+- name: Upload .env(v2)
+  ansible.builtin.template:
+    src: v2/env.j2
+    dest: "{{ app_deploy_target }}/api-v8/.env"
+    mode: "0444"
+
+- name: Upload config.php(v1)
+  ansible.builtin.template:
+    src: v1/config.php.j2
+    dest: "{{ app_deploy_target }}/api-v8/public/app/config.php"
+    mode: "0444"
+
+- name: Upload config.js(v1)
+  ansible.builtin.template:
+    src: v1/config.js.j2
+    dest: "{{ app_deploy_target }}/api-v8/public/app/config.js"
+    mode: "0444"
+
+- name: Upload ai-translate.toml
+  ansible.builtin.template:
+    src: ai-translate.j2
+    dest: "{{ app_deploy_target }}/ai-translate/config.toml"
+    mode: "0444"
+
+- name: Upload open-ai-server.json
+  ansible.builtin.template:
+    src: open-ai-server.json
+    dest: "{{ app_deploy_target }}/open-ai-server/config.json"
+    mode: "0444"

+ 19 - 0
deploy/roles/mint-v2.3/tasks/laravel-scheduler.yml

@@ -0,0 +1,19 @@
+- name: Upload laravel-scheduler.sh({{ item.version }})
+  ansible.builtin.template:
+    src: laravel-scheduler.sh.j2
+    dest: "{{ app_deploy_target }}/scripts/laravel-scheduler-{{ item.version }}.sh"
+    mode: '0555'
+
+- name: Upload laravel-scheduler.service({{ item.version }})
+  become: true
+  ansible.builtin.template:
+    src: laravel-scheduler.service.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-laravel-scheduler-{{ item.version }}.service"
+    mode: "0444"
+
+- name: Upload laravel-scheduler.timer({{ item.version }})
+  become: true
+  ansible.builtin.template:
+    src: laravel-scheduler.timer.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-laravel-scheduler-{{ item.version }}.timer"
+    mode: "0444"

+ 12 - 107
deploy/roles/mint-v2.3/tasks/main.yml

@@ -1,10 +1,10 @@
-- name: Create /srv/bin folder
-  become: true
-  ansible.builtin.file:
-    path: /srv/bin
-    state: directory
-    owner: "{{ ansible_user }}"
-    mode: "0755"
+- name: Pull {{ item }} image
+  ansible.builtin.shell: docker pull {{ item }}
+  with_items:
+    - "{{ app_php81_image }}"
+    - "{{ app_php84_image }}"
+    - "{{ app_python_image }}"
+    - "{{ app_nodejs_image }}"
 
 - name: Create workspace folder
   become: true
@@ -16,7 +16,7 @@
 
 - name: Create scripts folder
   ansible.builtin.file:
-    path: "{{ app_deploy_target }}/scripts"
+    path: "{{ app_deploy_target }}"
     state: directory
     mode: "0755"
 
@@ -26,103 +26,8 @@
     dest: "{{ app_deploy_target }}"
     creates: "{{ app_deploy_target }}/api-v12"
 
-- name: Pull php v8.1 image
-  ansible.builtin.shell: docker pull {{ app_php81_image }}
-
-- name: Pull php v8.4 image
-  ansible.builtin.shell: docker pull {{ app_php84_image }}
-
-- name: Pull python image
-  ansible.builtin.shell: docker pull {{ app_python_image }}
-
-- name: Pull nodejs image
-  ansible.builtin.shell: docker pull {{ app_nodejs_image }}
-
-- name: Upload clean.py
-  ansible.builtin.copy:
-    src: clean.py
-    dest: "{{ app_deploy_target | dirname }}/"
-    mode: '0444'
-
-- name: Upload run.sh
-  ansible.builtin.copy:
-    src: run.sh
-    dest: "{{ app_deploy_target }}/"
-    mode: '0555'
-
-- name: Upload php-fpm.sh
-  ansible.builtin.copy:
-    src: php-fpm.sh
-    dest: "/srv/bin/"
-    mode: '0555'
-
-- name: Upload clean.service
-  become: true
-  ansible.builtin.template:
-    src: clean.service.j2
-    dest: "/etc/systemd/system/{{ app_domain }}-clean.service"
-    mode: "0444"
-
-- name: Upload timer.service
-  become: true
-  ansible.builtin.template:
-    src: clean.timer.j2
-    dest: "/etc/systemd/system/{{ app_domain }}-clean.timer"
-    mode: "0444"
+- name: Upload configurations
+  ansible.builtin.import_tasks: config.yml
 
-- name: Upload php-fpm-v8.1.service
-  become: true
-  ansible.builtin.template:
-    src: php-fpm-8.1.service.j2
-    dest: "/etc/systemd/system/php-fpm-8.1.service"
-    mode: "0444"
-
-- name: Upload php-fpm-8.4.service
-  become: true
-  ansible.builtin.template:
-    src: php-fpm-8.4.service.j2
-    dest: "/etc/systemd/system/php-fpm-8.4.service"
-    mode: "0444"
-
-- name: Upload open-ai-server.sh
-  ansible.builtin.template:
-    src: open-ai-server.sh.j2
-    dest: "{{ app_deploy_target }}/scripts/open-ai-server.sh"
-    mode: "0555"
-
-- name: Upload open-ai-server.service
-  become: true
-  ansible.builtin.template:
-    src: open-ai-server.service.j2
-    dest: "/etc/systemd/system/{{ app_domain }}-open-ai-server.service"
-    mode: "0444"
-
-
-- name: Upload laravel-job.sh
-  ansible.builtin.template:
-    src: laravel-job.sh.j2
-    dest: "{{ app_deploy_target }}/scripts/laravel-job.sh"
-    mode: "0555"
-
-- name: Upload laravel-worker.service
-  become: true
-  ansible.builtin.template:
-    src: laravel-job.service.j2
-    dest: "/etc/systemd/system/{{ app_domain }}-laravel-job-{{ item.name }}.service"
-    mode: "0444"
-  with_items:
-    - { name: "mq-discussion", image: "{{ app_php81_image }}"}
-    - { name: "mq-pr", image: "{{ app_php81_image }}"}
-    - { name: "mq-progress", image: "{{ app_php81_image }}"}
-    - { name: "mq-wbw.analyses", image: "{{ app_php81_image }}"}
-
-- name: Reload systemd profiles
-  become: true
-  ansible.builtin.shell: systemctl daemon-reload
-
-- name: Enable clean timer
-  become: true
-  ansible.builtin.systemd_service:
-    name: "{{ app_domain }}-clean.timer"
-    state: started
-    enabled: true
+- name: Setup systemd services
+  ansible.builtin.import_tasks: systemd.yml

+ 121 - 0
deploy/roles/mint-v2.3/tasks/systemd.yml

@@ -0,0 +1,121 @@
+- name: Create /srv/bin folder
+  become: true
+  ansible.builtin.file:
+    path: /srv/bin
+    state: directory
+    owner: "{{ ansible_user }}"
+    mode: "0755"
+    
+- name: Create scripts folder
+  ansible.builtin.file:
+    path: "{{ app_deploy_target }}/scripts"
+    state: directory
+    mode: "0755"
+
+- name: Upload run.sh
+  ansible.builtin.copy:
+    src: run.sh
+    dest: "{{ app_deploy_target }}/scripts/"
+    mode: '0555'
+
+- name: Upload clean.py
+  ansible.builtin.copy:
+    src: clean.py
+    dest: "{{ app_deploy_target | dirname }}/"
+    mode: '0444'
+
+- name: Upload clean.service
+  become: true
+  ansible.builtin.template:
+    src: clean.service.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-clean.service"
+    mode: "0444"
+
+- name: Upload clean.timer
+  become: true
+  ansible.builtin.template:
+    src: clean.timer.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-clean.timer"
+    mode: "0444"
+
+- name: Upload php-fpm.sh
+  ansible.builtin.copy:
+    src: php-fpm.sh
+    dest: "/srv/bin/"
+    mode: '0555'
+
+- name: Upload php-fpm-v8.1.service
+  become: true
+  ansible.builtin.template:
+    src: php-fpm-8.1.service.j2
+    dest: "/etc/systemd/system/php-fpm-8.1.service"
+    mode: "0444"
+
+- name: Upload php-fpm-8.4.service
+  become: true
+  ansible.builtin.template:
+    src: php-fpm-8.4.service.j2
+    dest: "/etc/systemd/system/php-fpm-8.4.service"
+    mode: "0444"
+
+- name: Upload open-ai-server.sh
+  ansible.builtin.template:
+    src: open-ai-server.sh.j2
+    dest: "{{ app_deploy_target }}/scripts/open-ai-server.sh"
+    mode: "0555"
+
+- name: Upload open-ai-server.service
+  become: true
+  ansible.builtin.template:
+    src: open-ai-server.service.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-open-ai-server.service"
+    mode: "0444"
+
+- name: Upload ai-translate.sh
+  ansible.builtin.template:
+    src: ai-translate.sh.j2
+    dest: "{{ app_deploy_target }}/scripts/ai-translate.sh"
+    mode: "0555"
+
+- name: Upload ai-translate.service
+  become: true
+  ansible.builtin.template:
+    src: ai-translate.service.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-ai-translate.service"
+    mode: "0444"
+
+- name: Upload laravel-job.sh
+  ansible.builtin.template:
+    src: laravel-job.sh.j2
+    dest: "{{ app_deploy_target }}/scripts/laravel-job.sh"
+    mode: "0555"
+
+- name: Upload laravel-worker.service
+  become: true
+  ansible.builtin.template:
+    src: laravel-job.service.j2
+    dest: "/etc/systemd/system/{{ app_domain }}-laravel-job-{{ item.name }}.service"
+    mode: "0444"
+  with_items:
+    - { name: "mq-discussion", image: "{{ app_php81_image }}"}
+    - { name: "mq-pr", image: "{{ app_php81_image }}"}
+    - { name: "mq-progress", image: "{{ app_php81_image }}"}
+    - { name: "mq-wbw.analyses", image: "{{ app_php81_image }}"}
+
+
+- name: Upload laravel sceduler
+  ansible.builtin.import_tasks: laravel-scheduler.yml
+  with_items:
+    - {image: "{{ app_php81_image }}", version: "v8"}
+    - {image: "{{ app_php84_image }}", version: "v12"}
+
+- name: Reload systemd profiles
+  become: true
+  ansible.builtin.shell: systemctl daemon-reload
+
+- name: Enable clean timer
+  become: true
+  ansible.builtin.systemd_service:
+    name: "{{ app_domain }}-clean.timer"
+    state: started
+    enabled: true

+ 15 - 0
deploy/roles/mint-v2.3/templates/ai-translate.service.j2

@@ -0,0 +1,15 @@
+[Unit]
+Description=open-ai server({{ app_domain }}).
+Wants=network-online.target
+After=network-online.target
+
+[Service]
+Type=simple
+User={{ ansible_user }}
+ExecStart=/usr/bin/docker run --rm --name {{ app_domain }}-ai-translate -v /srv:/srv:z {{ app_python_image }} {{ app_deploy_target }}/scripts/ai-translate.sh
+ExecStop=/usr/bin/docker stop {{ app_domain }}-ai-translate
+WorkingDirectory={{ app_deploy_target }}
+Restart=always
+
+[Install]
+WantedBy=multi-user.target

+ 7 - 0
deploy/roles/mint-v2.3/templates/ai-translate.sh.j2

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+set -e
+
+# TODO
+
+exit 0

+ 16 - 0
deploy/roles/mint-v2.3/templates/ai-translate.toml.j2

@@ -0,0 +1,16 @@
+[rabbitmq]
+host = '{{ app_rabbitmq_host }}'
+port = {{ app_rabbitmq_port }}
+user = '{{ app_rabbitmq_user }}'
+password = '{{ app_rabbitmq_password }}'
+virtual-host = '{{ app_rabbitmq_virtual_host }}'
+customer-timeout = 3600
+
+[redis]
+namespace = '{{ app_domain }}://'
+host = '{{ app_redis_host }}'
+port = {{ app_redis_port }}
+
+[app]
+api-url = '{{ app_api_server }}/api'
+openai-proxy-url = '{{ app_openai_proxy_server }}/api/openai'

+ 14 - 0
deploy/roles/mint-v2.3/templates/laravel-scheduler.service.j2

@@ -0,0 +1,14 @@
+[Unit]
+Description=Laravel scheduler({{ app_domain }}).
+Wants=network-online.target
+After=network-online.target
+
+[Service]
+Type=oneshot
+User={{ ansible_user }}
+ExecStart=/usr/bin/docker run --rm --name {{ app_domain }}-laravel-scheduler-{{ item.version }} -v /srv:/srv:z {{ item.image }} {{ app_deploy_target }}/scripts/laravel-scheduler-{{ item.version }}.sh
+ExecStop=/usr/bin/docker stop {{ app_domain }}-laravel-scheduler-{{ item.version }}
+WorkingDirectory={{ app_deploy_target }}
+
+[Install]
+WantedBy=multi-user.target

+ 7 - 0
deploy/roles/mint-v2.3/templates/laravel-scheduler.sh.j2

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+set -e
+
+# TODO
+
+exit 0

+ 9 - 0
deploy/roles/mint-v2.3/templates/laravel-scheduler.timer.j2

@@ -0,0 +1,9 @@
+[Unit]
+Description=Run laravel scheduler every minute({{ app_domain }}).
+
+[Timer]
+OnBootSec=15minutes
+OnUnitActiveSec=1minute
+
+[Install]
+WantedBy=timers.target

+ 5 - 0
deploy/roles/mint-v2.3/templates/open-ai-server.json.j2

@@ -0,0 +1,5 @@
+{ 
+    "port": 8080,
+    "debug": false, 
+    "api-url": "{{ app_api_server }}/api" 
+}

+ 18 - 0
deploy/roles/mint-v2.3/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.3/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_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_domain }}://v1/"
+]);
+
+
+# 雪花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";
+
+
+?>

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

@@ -0,0 +1,97 @@
+BASE_DIR="{{ app_deploy_target }}/.env.global"
+CACHE_DIR="${BASE_DIR}/cache"
+TMP_DIR="${BASE_DIR}/tmp"
+
+APP_NAME="wikipali"
+APP_ENV={{ app_env }}
+APP_KEY={{ app_secret_key }}
+APP_DEBUG={{ app_debug }}
+APP_URL="https://{{ app_domain }}"
+
+LOG_CHANNEL=daily
+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_domain }}://v20250323/"
+
+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="{{ app_domain }}://v20250323/"
+
+
+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 }}"
+
+MQ_LOOP_LIMIT_AI_TRANSLATE="{{ app_consumer_loop_limit_ai_translate }}"