Sfoglia il codice sorgente

Merge remote-tracking branch 'upstream/development'

visuddhinanda 1 anno fa
parent
commit
e90c2fd5a3
48 ha cambiato i file con 998 aggiunte e 561 eliminazioni
  1. 33 0
      .vscode/extensions.json
  2. 70 0
      .vscode/settings.json
  3. 21 308
      README.md
  4. 314 0
      api-v8/README.md
  5. 1 1
      dashboard-v4/dashboard/package.json
  6. 2 2
      dashboard-v4/scripts/dashboard/pack.sh
  7. 1 1
      deploy/README.md
  8. 5 6
      deploy/ec2.yml
  9. 0 9
      deploy/roles/container/tasks/main.yml
  10. 1 1
      deploy/roles/container/templates/storage.conf
  11. 0 43
      docker/backend/Dockerfile
  12. 0 10
      docker/backend/start.sh
  13. 0 51
      docker/frontend/Dockerfile
  14. 0 10
      docker/frontend/start.sh
  15. 0 27
      docker/laravel/Dockerfile
  16. 0 15
      docker/laravel/build.sh
  17. 0 10
      docker/laravel/start.sh
  18. 43 0
      docker/mint/Dockerfile
  19. 5 0
      docker/mint/README.md
  20. 1 1
      docker/mint/build.sh
  21. 17 0
      docker/mint/launch.sh
  22. 6 0
      docker/mint/start.sh
  23. 0 33
      docker/open-search/Dockerfile
  24. 0 20
      docker/open-search/build.sh
  25. 0 10
      docker/open-search/start.sh
  26. 120 0
      docker/spring/Dockerfile
  27. 3 3
      docker/spring/build.sh
  28. 35 0
      docker/spring/etc/nginx/sites-enabled/default.conf
  29. 8 0
      docker/spring/etc/redis/clusters-init.sh
  30. 12 0
      docker/spring/etc/redis/node-1.conf
  31. 12 0
      docker/spring/etc/redis/node-2.conf
  32. 12 0
      docker/spring/etc/redis/node-3.conf
  33. 12 0
      docker/spring/etc/redis/node-4.conf
  34. 12 0
      docker/spring/etc/redis/node-5.conf
  35. 12 0
      docker/spring/etc/redis/node-6.conf
  36. 8 0
      docker/spring/etc/redis/single.conf
  37. 7 0
      docker/spring/etc/supervisor/conf.d/minio.conf
  38. 5 0
      docker/spring/etc/supervisor/conf.d/nginx.conf
  39. 7 0
      docker/spring/etc/supervisor/conf.d/opensearch.conf
  40. 5 0
      docker/spring/etc/supervisor/conf.d/php-fpm.conf
  41. 5 0
      docker/spring/etc/supervisor/conf.d/postgresql.conf
  42. 5 0
      docker/spring/etc/supervisor/conf.d/rabbitmq.conf
  43. 43 0
      docker/spring/etc/supervisor/conf.d/redis.conf
  44. 14 0
      docker/spring/etc/supervisor/supervisord.conf
  45. 21 0
      docker/spring/forward.sh
  46. 34 0
      docker/spring/start.sh
  47. 13 0
      scripts/.env.dashboard-v4
  48. 73 0
      scripts/build.sh

+ 33 - 0
.vscode/extensions.json

@@ -0,0 +1,33 @@
+{
+  "recommendations": [
+    "ms-vscode.cpptools-extension-pack",
+    "rust-lang.rust-analyzer",
+    "vscjava.vscode-java-pack",
+    "golang.go",
+    "ms-python.python",
+    "jakebecker.elixir-ls",
+    "phoenixframework.phoenix",
+    "ms-python.autopep8",
+    "redhat.ansible",
+    "redhat.vscode-xml",
+    "redhat.vscode-yaml",
+    "foxundermoon.shell-format",
+    "mtxr.sqltools",
+    "mrorz.language-gettext",
+    "tamasfe.even-better-toml",
+    "yzhang.markdown-all-in-one",
+    "davidanson.vscode-markdownlint",
+    "zxh404.vscode-proto3",
+    "mrkou47.thrift-syntax-support",
+    "ms-vscode-remote.remote-ssh",
+    "ms-azuretools.vscode-docker",
+    "vscode-icons-team.vscode-icons",
+    "akamud.vscode-theme-onedark",
+    "dbaeumer.vscode-eslint",
+    "esbenp.prettier-vscode",
+    "editorconfig.editorconfig",
+    "gruntfuggly.todo-tree",
+    "donjayamanne.githistory",
+    "streetsidesoftware.code-spell-checker"
+  ]
+}

+ 70 - 0
.vscode/settings.json

@@ -0,0 +1,70 @@
+{
+  "files.autoSave": "onFocusChange",
+  "files.insertFinalNewline": true,
+  "workbench.colorTheme": "Atom One Dark",
+  "editor.formatOnSave": true,
+  "editor.fontFamily": "source code pro",
+  "editor.mouseWheelZoom": true,
+  "editor.codeActionsOnSave": {
+    "source.fixAll.eslint": "explicit"
+  },
+  {
+    "files.eol": "\n"
+  },
+  "editor.defaultFormatter": "esbenp.prettier-vscode",
+  // https://code.visualstudio.com/docs/setup/linux#_visual-studio-code-is-unable-to-watch-for-file-changes-in-this-large-workspace-error-enospc
+  "files.watcherExclude": {
+    "**/.git/**": true,
+    "**/node_modules/**": true
+  },
+  "[cpp]": {
+    "editor.defaultFormatter": "ms-vscode.cpptools"
+  },
+  "[rust]": {
+    "editor.defaultFormatter": "rust-lang.rust-analyzer"
+  },
+  "[proto3]": {
+    "editor.defaultFormatter": "zxh404.vscode-proto3"
+  },
+  "[yaml]": {
+    "editor.defaultFormatter": "redhat.vscode-yaml"
+  },
+  "[xml]": {
+    "editor.defaultFormatter": "redhat.vscode-xml"
+  },
+  "[python]": {
+    "editor.defaultFormatter": "ms-python.autopep8"
+  },
+  "[sql]": {
+    "editor.defaultFormatter": "mtxr.sqltools"
+  },
+  "[toml]": {
+    "editor.defaultFormatter": "tamasfe.even-better-toml"
+  },
+  "[go]": {
+    "editor.defaultFormatter": "golang.go"
+  },
+  "[java]": {
+    "editor.defaultFormatter": "redhat.java"
+  },
+  "[dockerfile]": {
+    "editor.defaultFormatter": "ms-azuretools.vscode-docker"
+  },
+  "[thrift]": {
+    "editor.defaultFormatter": "mrkou47.thrift-syntax-support"
+  },
+  "[shellscript]": {
+    "editor.defaultFormatter": "foxundermoon.shell-format"
+  },
+  "[ignore]": {
+    "editor.defaultFormatter": "foxundermoon.shell-format"
+  },
+  "[elixir]": {
+    "editor.defaultFormatter": "JakeBecker.elixir-ls"
+  },
+  "[phoenix-heex]": {
+    "editor.defaultFormatter": "JakeBecker.elixir-ls"
+  },
+  "java.configuration.updateBuildConfiguration": "automatic",
+  "ansible.python.interpreterPath": "/bin/python"
+}

+ 21 - 308
README.md

@@ -1,314 +1,27 @@
-# IAPT Pali Canon Platform
-
-## About
+# International Academy Of Pali Tipitaka(国际巴利三藏学院)
 
 
 这是一个开放的基于语料库的巴利语学习和翻译平台。
 这是一个开放的基于语料库的巴利语学习和翻译平台。
 
 
-后端:
-- PHP 8.0+
-- [laravel](https://laravel.com/docs) 8.x
-- PostgreSQL v12+
-- Redis
-
-前端
-- jQuery
-
-工具
-- git
-- composer
-- npm or yarn
-- vscode
-
-## 目录
-
-目录遵从Laravel目录设置。有以下几点差别
-
-- public/ 包含旧版php程序的全部文件
-- public/tmp 旧版资源文件夹,含有sqlite数据文件 对于旧版到新版的迁移。**应该将旧版 /tmp 拷贝到 /public**
-- v1 旧版数据迁移任务脚本
-- deploy 运维代码 
-
-## 开发环境
-
->请注意。此安装方法**只针对开发人员**。生产线请参考[deploy/README.md](deploy/README.md)
-
-使用 **Linux** 的开发者请参阅 [<项目文件夹>/docker/readme.md](docker/readme.md) 容器中包含了全部开发环境。请忽略下面关于开发环境的安装。
-
-### PostgreSQL
-
-最小版本v12。下载链接
-https://www.postgresql.org/download/
-
->温馨提示:windows环境安装完之后 将 安装目录/bin加入环境变量 PATH。重启电脑。在命令行输入 psql -v 查看版本号。
-
-建立新的数据库,例如 数据库名为iapt:
-在命令行输入
-```
-psql -U postgres -h localhost
-create database iapt
-```
-
-![createdb](public/documents/imgs/createdb.jpg)
-
-`\q` 退出psql
-
-### PHP 8
-编辑 php.ini 文件,打开pgsql和sqlite的PDO扩展,以及fileinfo
-```
-extension=pdo_pgsql
-extension=pdo_sqlite
-extension=fileinfo
-```
-
-### Redis
-最新版的Redis不支持Windows平台,可以安装第三方修改的[Windows版Redis5.0](https://github.com/tporadowski/redis)
-
-### composer
-
-### npm
-
-### Rabbitmq
-
-[Downloading and Installing RabbitMQ](https://www.rabbitmq.com/download.html)
-
-
-
-## Fork
-
-Fork https://github.com/iapt-platform/mint 到你自己的仓库
-
-## Clone
-
-```
-git clone https://github.com/<your>/mint.git
-
-```
-
-## 安装依赖
-
-项目根目录下运行
-
-```
-composer install
-npm install
-```
-
-/public 目录下运行
-
-```
-composer install
-npm install
-```
-
-
-## 修改配置文件
-
-### .env
-
-复制 `<项目目录>/.env.example` 的一个副本。改文件名为 `.env`
-
-修改`.env`
-
-**db配置**
-```
-DB_CONNECTION=pgsql
-DB_HOST=127.0.0.1
-DB_PORT=5432
-DB_DATABASE=你的数据库名
-DB_USERNAME=postgres
-DB_PASSWORD=你的数据库密码
-```
-
-**ASSETS_SERVER**
-
-ASSETS_SERVER :网站资源文件,非用户的图片,音频,视频
-
-- 对应/public/tmp/ 目录 开发线可以设置为 http://127.0.0.1:8000/tmp(ip port根据你的dev server修改)
-- 所有文件存储在 https://drive.google.com/drive/folders/1-4dn4juD-0-lsKndDui2W9nT9wcS_Y33?usp=sharing
-- 开发线可自行下载放到/public/tmp/
-- 或直接引用离您最近的assets server
-
-
-### public/app/config.php
-
-复制 `<项目目录>/public/app/config.example.php` 改文件名为`config.php`
-
-修改`config.php`
-
-**db 设置**
-```
-define("Database",[
-	"type"=>"pgsql",
-	"server"=>"localhost",
-	"port"=>5432,
-	"name"=>"<database name>",
-	"sslmode" => "disable",
-	"user" => "<user name>",
-	"password" => "<your db password>"
-]);
-```
-
-
-**Redis 设置**
-```
-define("Redis",[
-	"host" => "<host ip>",
-	"port" => <port>,
-	"password" => "<redis password>",
-	"prefix"=>"aaa://"
-]);
-```
+## Usage
 
 
-**ASSETS_SERVER**
+## Development
 
 
-**HELP_SERVER**
-
-**GRAMMAR_SERVER**
-
-参照下文 config.js
- 
-#### public/app/config.js
-
-复制 `<项目目录>/public/app/config.example.js` 改文件名为`config.js`
-
-修改`config.js`
-
-**ASSETS_SERVER**
-
-ASSETS_SERVER :网站资源文件,非用户的图片,音频,视频
-
-- 对应/public/tmp/ 目录
-- 所有文件存储在 https://drive.google.com/drive/folders/1-4dn4juD-0-lsKndDui2W9nT9wcS_Y33?usp=sharing
-- 开发线可自行下载放到/public/tmp/
-- 或直接引用离您最近的assets server
-
-范例:
->ip port根据你的dev server修改
-
-```
-var ASSETS_SERVER = "http://127.0.0.1:8000/tmp";
-```
-
-**HELP_SERVER**
-
-网站帮助文档
-
-- 直接引用离您最近的 help server
-
-范例:
->ip port根据你的 dev server 修改
-
-```
-var HELP_SERVER = "https://help-hk.wikipali.org";
-```
-
-**GRAMMAR_SERVER**
-
-语法手册文档
-
-- 直接引用离您最近的 help server
-
-范例:
->ip port根据你的 dev server 修改
-
-```
-var GRAMMAR_SERVER = "https://grammar-hk.wikipali.org";
-```
-
-## 复制巴利语全文搜索单词表
-
-获取pg share dir
-在命令行窗口运行
-```
-pg_config --sharedir
-```
-程序会输出 shardir.
-![createdb](public/documents/imgs/pg-sharedir.png)
-
-**Liunx**
-把下面`/usr/share/postgresql/14`替换为你自己的shardir
 ```bash
 ```bash
-sudo cp ./public/app/fts/pali.stop /usr/share/postgresql/14/tsearch_data/
-sudo cp ./public/app/fts/pali.syn /usr/share/postgresql/14/tsearch_data/
-```
-**Windows**
-
-复制
-- ./public/app/fts/pali.stop
-- ./public/app/fts/pali.syn
-
-到你的 shardir/tsearch_data 目录下
-
-
-## application encryption key
-
-在<工程目录>下运行
-```dash
-php artisan key:generate
-```
-
-## 数据库迁移
-
-在根目录下运行
-
-```dash
-php artisan migrate
-```
-
-## Redis数据库填充
-
-在命令行运行<项目目录>下面的命令
-
-**Liunx**
-```dash
-cd ./v1/scripts
-sh ./upgrade_redis.sh
-```
-
-**Window**
-```dash
-cd ./v1/scripts
-./upgrade_redis.bat
-```
-
-## 语料数据库填充
-
-**Liunx**
-```dash
-cd ./v1/scripts
-sh ./install.sh
-```
-
-**Window**
-```dash
-cd ./v1/scripts
-./install.bat
-```
-运行时间较长。本地开发环境大约4小时。
-
-如果不想等待,可以导入其他人已经部署好的postgresql数据库
-
-## 启动消息队列works
-
-```dash
-php artisan mq:discussion
-php artisan mq:pr
-php artisan mq:progress
-php artisan mq:wbw.analyses
-```
-
-## 运行dev server
-
-```dash
-php artisan serve
-```
-![createdb](public/documents/imgs/artisan-serve.png)
-
-在浏览器中访问
-
-http://127.0.0.1:8000
-
-应该出现网站首页
-
-![createdb](public/documents/imgs/home.jpg)
-
+$ sudo apt install -y git screen crun podman buildah fuse-overlayfs 
+# Load the mint-spring image
+$ podman load -i tmp/mint-spring-TIMESTAMP.tar.xz
+$ git clone https://github.com/iapt-platform/mint.git ~/workspace/iapt-platform/mint
+$ cd ~/workspace/iapt-platform/mint/
+# Start postgresql/redis/rabbitmq... services
+$ ./docker/spring/start.sh services
+# Start a backend server
+$ ./docker/spring/start.sh backend 8080 # http://localhost:8080
+# Start a frontend server
+$ ./docker/spring/start.sh frontend 3000 # http://localhost:3000
+```
+
+## Documents
+
+- [Podman Installation Instructions](https://podman.io/docs/installation)
+- [Download Visual Studio Code](https://code.visualstudio.com/download)
+- [Remote Development using SSH](https://code.visualstudio.com/docs/remote/ssh)

+ 314 - 0
api-v8/README.md

@@ -0,0 +1,314 @@
+# IAPT Pali Canon Platform
+
+## About
+
+这是一个开放的基于语料库的巴利语学习和翻译平台。
+
+后端:
+- PHP 8.0+
+- [laravel](https://laravel.com/docs) 8.x
+- PostgreSQL v12+
+- Redis
+
+前端
+- jQuery
+
+工具
+- git
+- composer
+- npm or yarn
+- vscode
+
+## 目录
+
+目录遵从Laravel目录设置。有以下几点差别
+
+- public/ 包含旧版php程序的全部文件
+- public/tmp 旧版资源文件夹,含有sqlite数据文件 对于旧版到新版的迁移。**应该将旧版 /tmp 拷贝到 /public**
+- v1 旧版数据迁移任务脚本
+- deploy 运维代码 
+
+## 开发环境
+
+>请注意。此安装方法**只针对开发人员**。生产线请参考[deploy/README.md](deploy/README.md)
+
+使用 **Linux** 的开发者请参阅 [<项目文件夹>/docker/readme.md](docker/readme.md) 容器中包含了全部开发环境。请忽略下面关于开发环境的安装。
+
+### PostgreSQL
+
+最小版本v12。下载链接
+https://www.postgresql.org/download/
+
+>温馨提示:windows环境安装完之后 将 安装目录/bin加入环境变量 PATH。重启电脑。在命令行输入 psql -v 查看版本号。
+
+建立新的数据库,例如 数据库名为iapt:
+在命令行输入
+```
+psql -U postgres -h localhost
+create database iapt
+```
+
+![createdb](public/documents/imgs/createdb.jpg)
+
+`\q` 退出psql
+
+### PHP 8
+编辑 php.ini 文件,打开pgsql和sqlite的PDO扩展,以及fileinfo
+```
+extension=pdo_pgsql
+extension=pdo_sqlite
+extension=fileinfo
+```
+
+### Redis
+最新版的Redis不支持Windows平台,可以安装第三方修改的[Windows版Redis5.0](https://github.com/tporadowski/redis)
+
+### composer
+
+### npm
+
+### Rabbitmq
+
+[Downloading and Installing RabbitMQ](https://www.rabbitmq.com/download.html)
+
+
+
+## Fork
+
+Fork https://github.com/iapt-platform/mint 到你自己的仓库
+
+## Clone
+
+```
+git clone https://github.com/<your>/mint.git
+
+```
+
+## 安装依赖
+
+项目根目录下运行
+
+```
+composer install
+npm install
+```
+
+/public 目录下运行
+
+```
+composer install
+npm install
+```
+
+
+## 修改配置文件
+
+### .env
+
+复制 `<项目目录>/.env.example` 的一个副本。改文件名为 `.env`
+
+修改`.env`
+
+**db配置**
+```
+DB_CONNECTION=pgsql
+DB_HOST=127.0.0.1
+DB_PORT=5432
+DB_DATABASE=你的数据库名
+DB_USERNAME=postgres
+DB_PASSWORD=你的数据库密码
+```
+
+**ASSETS_SERVER**
+
+ASSETS_SERVER :网站资源文件,非用户的图片,音频,视频
+
+- 对应/public/tmp/ 目录 开发线可以设置为 http://127.0.0.1:8000/tmp(ip port根据你的dev server修改)
+- 所有文件存储在 https://drive.google.com/drive/folders/1-4dn4juD-0-lsKndDui2W9nT9wcS_Y33?usp=sharing
+- 开发线可自行下载放到/public/tmp/
+- 或直接引用离您最近的assets server
+
+
+### public/app/config.php
+
+复制 `<项目目录>/public/app/config.example.php` 改文件名为`config.php`
+
+修改`config.php`
+
+**db 设置**
+```
+define("Database",[
+	"type"=>"pgsql",
+	"server"=>"localhost",
+	"port"=>5432,
+	"name"=>"<database name>",
+	"sslmode" => "disable",
+	"user" => "<user name>",
+	"password" => "<your db password>"
+]);
+```
+
+
+**Redis 设置**
+```
+define("Redis",[
+	"host" => "<host ip>",
+	"port" => <port>,
+	"password" => "<redis password>",
+	"prefix"=>"aaa://"
+]);
+```
+
+**ASSETS_SERVER**
+
+**HELP_SERVER**
+
+**GRAMMAR_SERVER**
+
+参照下文 config.js
+ 
+#### public/app/config.js
+
+复制 `<项目目录>/public/app/config.example.js` 改文件名为`config.js`
+
+修改`config.js`
+
+**ASSETS_SERVER**
+
+ASSETS_SERVER :网站资源文件,非用户的图片,音频,视频
+
+- 对应/public/tmp/ 目录
+- 所有文件存储在 https://drive.google.com/drive/folders/1-4dn4juD-0-lsKndDui2W9nT9wcS_Y33?usp=sharing
+- 开发线可自行下载放到/public/tmp/
+- 或直接引用离您最近的assets server
+
+范例:
+>ip port根据你的dev server修改
+
+```
+var ASSETS_SERVER = "http://127.0.0.1:8000/tmp";
+```
+
+**HELP_SERVER**
+
+网站帮助文档
+
+- 直接引用离您最近的 help server
+
+范例:
+>ip port根据你的 dev server 修改
+
+```
+var HELP_SERVER = "https://help-hk.wikipali.org";
+```
+
+**GRAMMAR_SERVER**
+
+语法手册文档
+
+- 直接引用离您最近的 help server
+
+范例:
+>ip port根据你的 dev server 修改
+
+```
+var GRAMMAR_SERVER = "https://grammar-hk.wikipali.org";
+```
+
+## 复制巴利语全文搜索单词表
+
+获取pg share dir
+在命令行窗口运行
+```
+pg_config --sharedir
+```
+程序会输出 shardir.
+![createdb](public/documents/imgs/pg-sharedir.png)
+
+**Liunx**
+把下面`/usr/share/postgresql/14`替换为你自己的shardir
+```bash
+sudo cp ./public/app/fts/pali.stop /usr/share/postgresql/14/tsearch_data/
+sudo cp ./public/app/fts/pali.syn /usr/share/postgresql/14/tsearch_data/
+```
+**Windows**
+
+复制
+- ./public/app/fts/pali.stop
+- ./public/app/fts/pali.syn
+
+到你的 shardir/tsearch_data 目录下
+
+
+## application encryption key
+
+在<工程目录>下运行
+```dash
+php artisan key:generate
+```
+
+## 数据库迁移
+
+在根目录下运行
+
+```dash
+php artisan migrate
+```
+
+## Redis数据库填充
+
+在命令行运行<项目目录>下面的命令
+
+**Liunx**
+```dash
+cd ./v1/scripts
+sh ./upgrade_redis.sh
+```
+
+**Window**
+```dash
+cd ./v1/scripts
+./upgrade_redis.bat
+```
+
+## 语料数据库填充
+
+**Liunx**
+```dash
+cd ./v1/scripts
+sh ./install.sh
+```
+
+**Window**
+```dash
+cd ./v1/scripts
+./install.bat
+```
+运行时间较长。本地开发环境大约4小时。
+
+如果不想等待,可以导入其他人已经部署好的postgresql数据库
+
+## 启动消息队列works
+
+```dash
+php artisan mq:discussion
+php artisan mq:pr
+php artisan mq:progress
+php artisan mq:wbw.analyses
+```
+
+## 运行dev server
+
+```dash
+php artisan serve
+```
+![createdb](public/documents/imgs/artisan-serve.png)
+
+在浏览器中访问
+
+http://127.0.0.1:8000
+
+应该出现网站首页
+
+![createdb](public/documents/imgs/home.jpg)
+

+ 1 - 1
dashboard-v4/dashboard/package.json

@@ -26,6 +26,7 @@
     "@types/video.js": "^7.3.50",
     "@types/video.js": "^7.3.50",
     "@uiw/react-md-editor": "^3.19.7",
     "@uiw/react-md-editor": "^3.19.7",
     "antd": "^4.24.10",
     "antd": "^4.24.10",
+    "array-move": "^4.0.0",
     "dayjs": "^1.11.6",
     "dayjs": "^1.11.6",
     "diff": "^5.1.0",
     "diff": "^5.1.0",
     "dinero.js": "^2.0.0-alpha.9",
     "dinero.js": "^2.0.0-alpha.9",
@@ -54,7 +55,6 @@
     "react-hook-form": "^7.39.4",
     "react-hook-form": "^7.39.4",
     "react-image-crop": "^10.0.8",
     "react-image-crop": "^10.0.8",
     "react-intl": "^6.2.1",
     "react-intl": "^6.2.1",
-    "react-json-view": "^1.21.3",
     "react-markdown": "^8.0.3",
     "react-markdown": "^8.0.3",
     "react-number-format": "^5.1.1",
     "react-number-format": "^5.1.1",
     "react-pdf": "^6.0.3",
     "react-pdf": "^6.0.3",

+ 2 - 2
dashboard-v4/scripts/dashboard/pack.sh

@@ -4,8 +4,8 @@ set -e
 
 
 export VERSION=$(date "+%4Y%m%d%H%M%S")
 export VERSION=$(date "+%4Y%m%d%H%M%S")
 
 
-XZ_OPT=-9 tar -cJf dashboard-$VERSION.tar.xz node_modules yarn.lock
+XZ_OPT=-e9 tar -cJf dashboard-$VERSION.tar.xz node_modules yarn.lock
 
 
-echo "Done($VERSION)."
+echo "done($VERSION)."
 
 
 exit 0
 exit 0

+ 1 - 1
deploy/README.md

@@ -5,7 +5,7 @@
 ```bash
 ```bash
 # create cluster
 # create cluster
 mkdir -p clients/CLUSTER/.ssh
 mkdir -p clients/CLUSTER/.ssh
-cd clients/CLUSTER
+cd clients/CLUSTER/
 # append your cluster hosts
 # append your cluster hosts
 touch hosts
 touch hosts
 # generate ssh key
 # generate ssh key

+ 5 - 6
deploy/ec2.yml

@@ -1,13 +1,12 @@
 - name: Testing ssh connections
 - name: Testing ssh connections
   hosts:
   hosts:
-    - postgresql
-    - rabbitmq
-    - redis
-    - logging
     - web
     - web
+    - db
+    - fpm
     - task
     - task
+    - logging
   roles:
   roles:
-    # - os
-    # - ubuntu
+    - os
+    - ubuntu
     - container
     - container
     - random-passwords
     - random-passwords

+ 0 - 9
deploy/roles/container/tasks/main.yml

@@ -1,12 +1,3 @@
-- name: Create container data folder
-  become: true
-  ansible.builtin.file:
-    path: "/mnt/{{ ansible_user }}"
-    state: directory
-    owner: "{{ ansible_user }}"
-    group: "{{ ansible_user }}"
-    mode: "0700"
-
 - name: Create containers config folder
 - name: Create containers config folder
   ansible.builtin.file:
   ansible.builtin.file:
     path: "{{ ansible_env.HOME }}/.config/containers"
     path: "{{ ansible_env.HOME }}/.config/containers"

+ 1 - 1
deploy/roles/container/templates/storage.conf

@@ -1,6 +1,6 @@
 [storage]
 [storage]
 driver = "overlay"
 driver = "overlay"
-rootless_storage_path = "/mnt/{{ ansible_user }}/.c"
+rootless_storage_path = "$HOME/.c"
 
 
 [storage.options.overlay]
 [storage.options.overlay]
 mount_program = "/usr/bin/fuse-overlayfs"
 mount_program = "/usr/bin/fuse-overlayfs"

+ 0 - 43
docker/backend/Dockerfile

@@ -1,43 +0,0 @@
-FROM ubuntu:latest
-LABEL maintainer="Jeremy Zheng"
-
-ENV DEBIAN_FRONTEND noninteractive
-
-RUN apt update
-RUN apt -y upgrade
-
-RUN apt -y install zsh git locales locales-all \
-    vim tzdata zip unzip tree tmux \
-    build-essential
-
-RUN apt -y autoremove
-RUN apt -y clean
-
-RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
-RUN locale-gen
-RUN update-locale LANG=en_US.UTF-8
-RUN update-alternatives --set editor /usr/bin/vim.basic
-
-RUN mkdir -p $HOME/downloads $HOME/build $HOME/local $HOME/tmp
-
-# https://github.com/ohmyzsh/ohmyzsh
-RUN git clone https://github.com/ohmyzsh/ohmyzsh.git $HOME/.oh-my-zsh
-RUN cp $HOME/.oh-my-zsh/templates/zshrc.zsh-template $HOME/.zshrc
-RUN echo 'export LANG=en_US.UTF-8' >> $HOME/.zshrc
-RUN echo 'export LC_ALL=en_US.UTF-8' >> $HOME/.zshrc
-RUN echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.zshrc
-
-RUN git config --global core.quotepath false \
-    && git config --global http.version HTTP/1.1 \
-    && git config --global pull.rebase false \
-    && git config --global url."https://".insteadOf git://
-RUN echo 'set-option -g history-limit 102400' > $HOME/.tmux.conf \
-    && echo 'set-option -g default-shell "/bin/zsh"' >> $HOME/.tmux.conf
-
-
-RUN echo "$(date -u +%4Y%m%d%H%M%S)" | tee /VERSION
-
-VOLUME /workspace
-WORKDIR /workspace
-
-CMD ["/bin/zsh", "-l"]

+ 0 - 10
docker/backend/start.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-export CODE="mint-backend"
-export NAME="$CODE-$USER"
-
-if podman container exists $NAME; then
-    podman start -i -a $NAME
-else
-    podman run --name $NAME -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE
-fi

+ 0 - 51
docker/frontend/Dockerfile

@@ -1,51 +0,0 @@
-FROM ubuntu:latest
-LABEL maintainer="Jeremy Zheng"
-
-ENV DEBIAN_FRONTEND noninteractive
-
-RUN apt update
-RUN apt -y upgrade
-
-RUN apt -y install zsh git locales locales-all \
-    vim tzdata zip unzip tree tmux \
-    build-essential
-
-RUN apt -y autoremove
-RUN apt -y clean
-
-RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
-RUN locale-gen
-RUN update-locale LANG=en_US.UTF-8
-RUN update-alternatives --set editor /usr/bin/vim.basic
-
-RUN mkdir -p $HOME/downloads $HOME/build $HOME/local $HOME/tmp
-
-# https://github.com/ohmyzsh/ohmyzsh
-RUN git clone https://github.com/ohmyzsh/ohmyzsh.git $HOME/.oh-my-zsh
-RUN cp $HOME/.oh-my-zsh/templates/zshrc.zsh-template $HOME/.zshrc
-RUN echo 'export LANG=en_US.UTF-8' >> $HOME/.zshrc
-RUN echo 'export LC_ALL=en_US.UTF-8' >> $HOME/.zshrc
-RUN echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.zshrc
-
-RUN git config --global core.quotepath false \
-    && git config --global http.version HTTP/1.1 \
-    && git config --global pull.rebase false \
-    && git config --global url."https://".insteadOf git://
-RUN echo 'set-option -g history-limit 102400' > $HOME/.tmux.conf \
-    && echo 'set-option -g default-shell "/bin/zsh"' >> $HOME/.tmux.conf
-
-# https://github.com/nvm-sh/nvm
-ENV NVM_VERSION "v0.40.1"
-RUN git clone -b ${NVM_VERSION} https://github.com/nvm-sh/nvm.git $HOME/.nvm
-RUN echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.zshrc
-RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $HOME/.zshrc
-RUN echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> $HOME/.zshrc
-RUN zsh -c "source $HOME/.zshrc \
-    && nvm install --lts"
-
-RUN echo "$(date -u +%4Y%m%d%H%M%S)" | tee /VERSION
-
-VOLUME /workspace
-WORKDIR /workspace
-
-CMD ["/bin/zsh", "-l"]

+ 0 - 10
docker/frontend/start.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-export CODE="mint-frontend"
-export NAME="$CODE-$USER"
-
-if podman container exists $NAME; then
-    podman start -i -a $NAME
-else
-    podman run --name $NAME -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE
-fi

+ 0 - 27
docker/laravel/Dockerfile

@@ -1,27 +0,0 @@
-FROM ubuntu:latest
-LABEL maintainer="Jeremy Zheng"
-
-ENV DEBIAN_FRONTEND noninteractive
-
-RUN apt update
-RUN apt -y upgrade
-
-RUN apt -y install build-essential
-
-RUN apt -y autoremove
-RUN apt -y clean
-
-RUN apt -y install locales locales-all tzdata build-essential
-
-RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
-RUN locale-gen
-RUN update-locale LANG=en_US.UTF-8
-RUN update-alternatives --set editor /usr/bin/vim.basic
-
-
-RUN echo "$(date -u +%4Y%m%d%H%M%S)" | tee /VERSION
-
-VOLUME /workspace
-WORKDIR /workspace
-
-CMD ["/bin/bash", "-l"]

+ 0 - 15
docker/laravel/build.sh

@@ -1,15 +0,0 @@
-#!/bin/bash
-
-set -e
-
-export VERSION=$(date "+%4Y%m%d%H%M%S")
-export CODE="mint-laravel"
-
-podman pull ubuntu:latest
-podman build -t $CODE .
-podman save --format=oci-archive -o $CODE-$VERSION.tar $CODE
-md5sum $CODE-$VERSION.tar >$CODE-$VERSION.md5
-
-echo "done($CODE-$VERSION.tar)."
-
-exit 0

+ 0 - 10
docker/laravel/start.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-export CODE="mint-laravel"
-export NAME="$CODE-$USER"
-
-if podman container exists $NAME; then
-    podman start -i -a $NAME
-else
-    podman run --name $NAME -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE
-fi

+ 43 - 0
docker/mint/Dockerfile

@@ -0,0 +1,43 @@
+FROM ubuntu:latest
+LABEL maintainer="Jeremy Zheng"
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt update
+RUN apt -y upgrade
+RUN apt -y install git vim locales locales-all tzdata build-essential wget curl \
+    composer php-cli php-fpm php-xml php-imap php-intl php-mbstring php-bcmath php-bz2 php-zip php-curl php-gd php-imagick php-pgsql php-mysql php-sqlite3 php-redis php-amqp \
+    fonts-dejavu-extra fonts-opensymbol fonts-lxgw-wenkai fonts-smiley-sans \
+    fonts-noto-extra fonts-noto-cjk-extra fonts-noto-color-emoji \
+    fonts-arphic-ukai fonts-arphic-uming \
+    fonts-wqy-microhei fonts-wqy-zenhei \
+    fonts-cns11643-kai fonts-cns11643-sung \
+    fonts-moe-standard-kai fonts-moe-standard-song \
+    fonts-ipaexfont fonts-ipafont fonts-konatu fonts-ipafont-nonfree-jisx0208 fonts-ipafont-nonfree-uigothic \
+    fonts-mikachan \
+    fonts-tibetan-machine fonts-ddc-uchen fonts-monlam fonts-sambhota-tsugring fonts-sambhota-yigchung \
+    imagemagick ffmpeg graphviz pandoc texlive-full \
+    libssl-dev libpq-dev libmysqlclient-dev
+RUN apt -y autoremove
+RUN apt -y clean
+
+RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
+RUN locale-gen
+RUN update-locale LANG=en_US.UTF-8
+RUN update-alternatives --set editor /usr/bin/vim.basic
+
+# https://github.com/nvm-sh/nvm
+ENV NVM_VERSION "v0.40.1"
+RUN git clone -b ${NVM_VERSION} https://github.com/nvm-sh/nvm.git $HOME/.nvm
+RUN echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.bashrc
+RUN echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $HOME/.bashrc
+RUN echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> $HOME/.bashrc
+RUN bash -i -c "nvm install --lts"
+
+ADD launch.sh /mint.sh
+RUN echo "$(date -u +%4Y%m%d%H%M%S)" | tee /VERSION
+
+VOLUME /workspace
+WORKDIR /workspace
+
+CMD ["/bin/bash", "-l"]

+ 5 - 0
docker/mint/README.md

@@ -0,0 +1,5 @@
+# USAGE
+
+```bash
+./start.sh fpm
+```

+ 1 - 1
docker/frontend/build.sh → docker/mint/build.sh

@@ -3,7 +3,7 @@
 set -e
 set -e
 
 
 export VERSION=$(date "+%4Y%m%d%H%M%S")
 export VERSION=$(date "+%4Y%m%d%H%M%S")
-export CODE="mint-frontend"
+export CODE="mint-$(uname -m)"
 
 
 podman pull ubuntu:latest
 podman pull ubuntu:latest
 podman build -t $CODE .
 podman build -t $CODE .

+ 17 - 0
docker/mint/launch.sh

@@ -0,0 +1,17 @@
+#!/bin/bash
+
+set -e
+
+export USAGE="USAGE: $0 fpm"
+
+if [ "$#" -ne 1 ]; then
+    echo $USAGE
+    exit 1
+fi
+
+if [ "$1" == "fpm" ]; then
+    echo "start fpm server"
+else
+    echo $USAGE
+    exit 1
+fi

+ 6 - 0
docker/mint/start.sh

@@ -0,0 +1,6 @@
+#!/bin/bash
+
+export CODE="mint"
+export NAME="$CODE-$USER"
+
+podman run --rm -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE

+ 0 - 33
docker/open-search/Dockerfile

@@ -1,33 +0,0 @@
-FROM ubuntu:latest
-LABEL maintainer="Jeremy Zheng"
-
-ENV DEBIAN_FRONTEND noninteractive
-
-RUN apt update
-RUN apt -y upgrade
-RUN apt -y install wget vim locales locales-all tzdata
-RUN apt -y autoremove
-RUN apt -y clean
-
-RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
-RUN locale-gen
-RUN update-locale LANG=en_US.UTF-8
-RUN update-alternatives --set editor /usr/bin/vim.basic
-RUN mkdir -p $HOME/downloads
-
-# https://opensearch.org/downloads.html#opensearch
-ARG OPENSEARCH_ARCH
-ENV OPENSEARCH_VERSION "2.17.0"
-ENV OPENSEARCH_JAVA_HOME "/opt/opensearch-${OPENSEARCH_VERSION}/jdk"
-RUN wget -q -P $HOME/downloads \
-    https://artifacts.opensearch.org/releases/bundle/opensearch/${OPENSEARCH_VERSION}/opensearch-${OPENSEARCH_VERSION}-linux-${OPENSEARCH_ARCH}.tar.gz
-RUN cd /opt && tar xf $HOME/downloads/opensearch-${OPENSEARCH_VERSION}-linux-${OPENSEARCH_ARCH}.tar.gz 
-RUN echo "network.host: 0.0.0.0" >> /opt/opensearch-${OPENSEARCH_VERSION}/config/opensearch.yml
-RUN echo "discovery.type: single-node" >> /opt/opensearch-${OPENSEARCH_VERSION}/config/opensearch.yml 
-RUN echo "plugins.security.disabled: true" >> /opt/opensearch-${OPENSEARCH_VERSION}/config/opensearch.yml
-
-RUN echo "$(date -u +%4Y%m%d%H%M%S)" | tee /VERSION
-
-WORKDIR /opt/opensearch-${OPENSEARCH_VERSION}
-
-CMD ["/opt/opensearch-${OPENSEARCH_VERSION}/bin/opensearch"]

+ 0 - 20
docker/open-search/build.sh

@@ -1,20 +0,0 @@
-#!/bin/bash
-
-set -e
-
-export VERSION=$(date "+%4Y%m%d%H%M%S")
-export CODE="mint-open-search"
-
-if [ "$#" -ne 1 ]; then
-    echo "USAGE: $0 OPENSEARCH_ARCH"
-    exit 1
-fi
-
-podman pull ubuntu:latest
-podman build --build-arg OPENSEARCH_ARCH=$1 -t $CODE .
-podman save --format=oci-archive -o $CODE-$VERSION.tar $CODE
-md5sum $CODE-$VERSION.tar >$CODE-$VERSION.md5
-
-echo "done($CODE-$VERSION.tar)."
-
-exit 0

+ 0 - 10
docker/open-search/start.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-export CODE="mint-open-search"
-export NAME="$CODE-$USER"
-
-if podman container exists $NAME; then
-    podman start -i -a $NAME
-else
-    podman run --name $NAME -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE
-fi

+ 120 - 0
docker/spring/Dockerfile

@@ -0,0 +1,120 @@
+FROM ubuntu:latest
+LABEL maintainer="Jeremy Zheng"
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt update
+RUN apt -y upgrade
+RUN apt -y install zsh locales locales-all curl wget vim tzdata pwgen zip unzip tree tmux dialog asciidoc doxygen \
+    build-essential mold cmake supervisor \
+    composer php-xdebug php-cli php-fpm php-xml php-imap php-intl php-mbstring php-bcmath php-bz2 php-zip php-curl php-gd php-imagick php-pgsql php-mysql php-sqlite3 php-redis php-amqp \
+    nginx postgresql postgresql-contrib rabbitmq-server redis \
+    fonts-dejavu-extra fonts-opensymbol fonts-lxgw-wenkai fonts-smiley-sans \
+    fonts-noto-extra fonts-noto-cjk-extra fonts-noto-color-emoji \
+    fonts-arphic-ukai fonts-arphic-uming \
+    fonts-wqy-microhei fonts-wqy-zenhei \
+    fonts-cns11643-kai fonts-cns11643-sung \
+    fonts-moe-standard-kai fonts-moe-standard-song \
+    fonts-ipaexfont fonts-ipafont fonts-konatu fonts-ipafont-nonfree-jisx0208 fonts-ipafont-nonfree-uigothic \
+    fonts-mikachan \
+    fonts-tibetan-machine fonts-ddc-uchen fonts-monlam fonts-sambhota-tsugring fonts-sambhota-yigchung \
+    imagemagick ffmpeg graphviz pandoc texlive-full \
+    libssl-dev
+RUN apt -y autoremove
+RUN apt -y clean
+
+RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
+RUN locale-gen
+RUN update-locale LANG=en_US.UTF-8
+RUN update-alternatives --set editor /usr/bin/vim.basic
+
+RUN mkdir -p $HOME/downloads $HOME/build $HOME/local $HOME/tmp
+
+# https://github.com/ohmyzsh/ohmyzsh
+RUN git clone https://github.com/ohmyzsh/ohmyzsh.git $HOME/.oh-my-zsh
+RUN cp $HOME/.oh-my-zsh/templates/zshrc.zsh-template $HOME/.zshrc \
+    && echo 'export LANG=en_US.UTF-8' >> $HOME/.zshrc \
+    && echo 'export LC_ALL=en_US.UTF-8' >> $HOME/.zshrc \
+    && echo 'export PATH=$HOME/.local/bin:$PATH' >> $HOME/.zshrc
+
+RUN git config --global core.quotepath false \
+    && git config --global http.version HTTP/1.1 \
+    && git config --global pull.rebase false \
+    && git config --global url."https://".insteadOf git://
+RUN echo 'set-option -g history-limit 102400' > $HOME/.tmux.conf \
+    && echo 'set-option -g default-shell "/bin/zsh"' >> $HOME/.tmux.conf
+
+# https://github.com/nvm-sh/nvm
+ENV NVM_VERSION "v0.40.1"
+RUN git clone -b ${NVM_VERSION} https://github.com/nvm-sh/nvm.git $HOME/.nvm
+RUN echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.zshrc \
+    && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $HOME/.zshrc \
+    && echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> $HOME/.zshrc
+RUN zsh -c "source $HOME/.zshrc && nvm install --lts && npm install -g yarn"
+
+RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
+    && locale-gen \
+    && update-locale LANG=en_US.UTF-8 
+RUN update-alternatives --set editor /usr/bin/vim.basic
+RUN mkdir -p $HOME/downloads $HOME/tmp
+
+# https://opensearch.org/downloads.html#opensearch
+ENV OPENSEARCH_VERSION "2.17.1"
+ENV OPENSEARCH_JAVA_HOME "/opt/opensearch-${OPENSEARCH_VERSION}/jdk"
+RUN wget -q -P $HOME/downloads \
+    https://artifacts.opensearch.org/releases/bundle/opensearch/${OPENSEARCH_VERSION}/opensearch-${OPENSEARCH_VERSION}-linux-x64.tar.gz
+RUN cd /opt && tar xf $HOME/downloads/opensearch-${OPENSEARCH_VERSION}-linux-x64.tar.gz \
+    && mv /opt/opensearch-${OPENSEARCH_VERSION} /opt/opensearch \
+    && echo "network.host: 0.0.0.0" >> /opt/opensearch/config/opensearch.yml \
+    && echo "discovery.type: single-node" >> /opt/opensearch/config/opensearch.yml \
+    && echo "plugins.security.disabled: true" >> /opt/opensearch/config/opensearch.yml
+
+RUN wget -q -O /usr/local/bin/minio https://dl.min.io/server/minio/release/linux-amd64/minio
+RUN chmod 555 /usr/local/bin/minio \
+    && mkdir -p /var/lib/minio/data \
+    && chown -R nobody /var/lib/minio
+
+# https://www.rabbitmq.com/access-control.html#loopback-users
+RUN echo 'loopback_users = none' >> /etc/rabbitmq/rabbitmq.conf \
+    && sed -i "s/NODENAME.*/NODENAME=palm/g" /etc/rabbitmq/rabbitmq-env.conf \
+    && rabbitmq-plugins enable rabbitmq_mqtt \
+    && rabbitmq-plugins enable rabbitmq_management
+
+RUN mkdir /var/lib/postgres && chown -R postgres:postgres /var/lib/postgres
+RUN su - postgres -c "/usr/lib/postgresql/16/bin/initdb -D /var/lib/postgres/data"
+RUN echo "listen_addresses = '0.0.0.0'" >> /var/lib/postgres/data/postgresql.conf \
+    && echo "host  all  all 0.0.0.0/0 md5" >> /var/lib/postgres/data/pg_hba.conf 
+
+ADD etc/redis/* /etc/redis/
+RUN mkdir -p /var/lib/redis \
+    && cd /var/lib/redis \
+    && mkdir single node-1 node-2 node-3 node-4 node-5 node-6 \
+    && chown -R redis:redis /var/lib/redis \
+    && chmod 750 /var/lib/redis
+
+RUN mkdir -p /var/www/html \
+    && echo "<?php phpinfo(); ?>" > /var/www/html/info.php \
+    && echo "daemon off;" >> /etc/nginx/nginx.conf \
+    && sed -i '35,79d' /etc/nginx/nginx.conf \
+    && sed -i '35i include sites-enabled/*.conf;' /etc/nginx/nginx.conf \
+    && sed -i "s/error_log =.*/error_log = log\/php-fpm.log/g" /etc/php/8.3/fpm/php-fpm.conf
+ADD etc/nginx/sites-enabled/default.conf /etc/nginx/sites-enabled/default.conf
+
+ADD etc/supervisor /etc/supervisor
+
+# git rev-parse --short HEAD
+ENV MING_VERSION "530977a93"
+RUN git clone --depth=1 --branch development https://github.com/iapt-platform/mint.git $HOME/workspace/mint
+RUN zsh -c "source $HOME/.zshrc \
+    && cd $HOME/workspace/mint && git checkout ${MING_VERSION} \
+    && cd $HOME/workspace/mint/api-v8 && composer install && npm install \
+    && cd $HOME/workspace/mint/api-v8/public && composer install && npm install \
+    && cd $HOME/workspace/mint/dashboard-v4/dashboard && yarn install"
+
+RUN echo "$(date -u +%4Y%m%d%H%M%S)" | tee /VERSION
+
+VOLUME /workspace
+WORKDIR /workspace
+EXPOSE 5432/tcp 6379/tcp 6371/tcp 6372/tcp 6373/tcp 6374/tcp 6375/tcp 6376/tcp 5672/tcp 15672/tcp 9200/tcp 9000/tcp 9001/tcp 10001/tcp
+
+CMD ["/bin/zsh", "-l"]

+ 3 - 3
docker/backend/build.sh → docker/spring/build.sh

@@ -3,12 +3,12 @@
 set -e
 set -e
 
 
 export VERSION=$(date "+%4Y%m%d%H%M%S")
 export VERSION=$(date "+%4Y%m%d%H%M%S")
-export CODE="mint-backend"
+export CODE="mint-spring"
 
 
 podman pull ubuntu:latest
 podman pull ubuntu:latest
 podman build -t $CODE .
 podman build -t $CODE .
-podman save --format=oci-archive -o $CODE-$VERSION.tar $CODE
-md5sum $CODE-$VERSION.tar >$CODE-$VERSION.md5
+# podman save --format=oci-archive -o $CODE-$VERSION.tar $CODE
+# md5sum $CODE-$VERSION.tar >$CODE-$VERSION.md5
 
 
 echo "done($CODE-$VERSION.tar)."
 echo "done($CODE-$VERSION.tar)."
 
 

+ 35 - 0
docker/spring/etc/nginx/sites-enabled/default.conf

@@ -0,0 +1,35 @@
+log_format custom '$remote_addr - [$time_iso8601] "$request" $status $body_bytes_sent $request_time "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
+types_hash_bucket_size 1024;
+
+server {
+    listen 8080;
+    server_name _;
+    index index.html index.php;
+    root /var/www/html;
+    
+    access_log /var/log/nginx/localhost.access.log custom;
+    error_log /var/log/nginx/localhost.error.log warn;
+
+    location / {
+        index index.html index.htm index.php;
+    }
+
+    location ~ \.php$ {
+        # 404
+        try_files $fastcgi_script_name =404;
+
+        # default fastcgi_params
+        include fastcgi_params;
+
+        # fastcgi settings
+        fastcgi_pass			unix:/run/php-fpm/php-fpm.sock;
+        fastcgi_index			index.php;
+        fastcgi_buffers			8 16k;
+        fastcgi_buffer_size		32k;
+
+        # fastcgi params
+        fastcgi_param DOCUMENT_ROOT	$realpath_root;
+        fastcgi_param SCRIPT_FILENAME	$realpath_root$fastcgi_script_name;
+        #fastcgi_param PHP_ADMIN_VALUE	"open_basedir=$base/:/usr/lib/php/:/tmp/";
+    }
+}

+ 8 - 0
docker/spring/etc/redis/clusters-init.sh

@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+redis-cli --cluster create 127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373 127.0.0.1:6374 127.0.0.1:6375 127.0.0.1:6376 --cluster-replicas 1
+
+echo 'done.'
+exit 0

+ 12 - 0
docker/spring/etc/redis/node-1.conf

@@ -0,0 +1,12 @@
+bind 0.0.0.0
+port 6371
+daemonize no
+protected-mode no
+dir /var/lib/redis/node-1
+
+cluster-enabled yes
+cluster-config-file /tmp/redis-node-1.conf
+cluster-node-timeout 5000
+
+appendonly yes
+appendfsync everysec

+ 12 - 0
docker/spring/etc/redis/node-2.conf

@@ -0,0 +1,12 @@
+bind 0.0.0.0
+port 6372
+daemonize no
+protected-mode no
+dir /var/lib/redis/node-2
+
+cluster-enabled yes
+cluster-config-file /tmp/redis-node-2.conf
+cluster-node-timeout 5000
+
+appendonly yes
+appendfsync everysec

+ 12 - 0
docker/spring/etc/redis/node-3.conf

@@ -0,0 +1,12 @@
+bind 0.0.0.0
+port 6373
+daemonize no
+protected-mode no
+dir /var/lib/redis/node-3
+
+cluster-enabled yes
+cluster-config-file /tmp/redis-node-3.conf
+cluster-node-timeout 5000
+
+appendonly yes
+appendfsync everysec

+ 12 - 0
docker/spring/etc/redis/node-4.conf

@@ -0,0 +1,12 @@
+bind 0.0.0.0
+port 6374
+daemonize no
+protected-mode no
+dir /var/lib/redis/node-4
+
+cluster-enabled yes
+cluster-config-file /tmp/redis-node-4.conf
+cluster-node-timeout 5000
+
+appendonly yes
+appendfsync everysec

+ 12 - 0
docker/spring/etc/redis/node-5.conf

@@ -0,0 +1,12 @@
+bind 0.0.0.0
+port 6375
+daemonize no
+protected-mode no
+dir /var/lib/redis/node-5
+
+cluster-enabled yes
+cluster-config-file /tmp/redis-node-5.conf
+cluster-node-timeout 5000
+
+appendonly yes
+appendfsync everysec

+ 12 - 0
docker/spring/etc/redis/node-6.conf

@@ -0,0 +1,12 @@
+bind 0.0.0.0
+port 6376
+daemonize no
+protected-mode no
+dir /var/lib/redis/node-6
+
+cluster-enabled yes
+cluster-config-file /tmp/redis-node-6.conf
+cluster-node-timeout 5000
+
+appendonly yes
+appendfsync everysec

+ 8 - 0
docker/spring/etc/redis/single.conf

@@ -0,0 +1,8 @@
+bind 0.0.0.0
+port 6379
+daemonize no
+protected-mode no
+dir /var/lib/redis/single
+
+appendonly yes
+appendfsync everysec

+ 7 - 0
docker/spring/etc/supervisor/conf.d/minio.conf

@@ -0,0 +1,7 @@
+[program:minio]
+command=/usr/local/bin/minio server data
+autostart=true
+autorestart=true
+user=nobody
+directory=/var/lib/minio
+environment=MINIO_ADDRESS="0.0.0.0:9000",MINIO_CONSOLE_ADDRESS="0.0.0.0:9001",MINIO_ROOT_USER="admin",MINIO_ROOT_PASSWORD="12345678"

+ 5 - 0
docker/spring/etc/supervisor/conf.d/nginx.conf

@@ -0,0 +1,5 @@
+[program:nginx]
+command=/usr/sbin/nginx
+autostart=true
+autorestart=true
+user=root

+ 7 - 0
docker/spring/etc/supervisor/conf.d/opensearch.conf

@@ -0,0 +1,7 @@
+[program:opensearch]
+command=/opt/opensearch/bin/opensearch
+autostart=true
+autorestart=true
+user=nobody
+directory=/opt/opensearch
+environment=OPENSEARCH_JAVA_HOME="/opt/opensearch/jdk"

+ 5 - 0
docker/spring/etc/supervisor/conf.d/php-fpm.conf

@@ -0,0 +1,5 @@
+[program:php-fpm]
+command=/usr/bin/php-fpm --nodaemonize --fpm-config /etc/php/php-fpm.conf
+autostart=true
+autorestart=true
+user=root

+ 5 - 0
docker/spring/etc/supervisor/conf.d/postgresql.conf

@@ -0,0 +1,5 @@
+[program:postgresql]
+command=/usr/bin/postgres -D /var/lib/postgres/data
+autostart=true
+autorestart=true
+user=postgres

+ 5 - 0
docker/spring/etc/supervisor/conf.d/rabbitmq.conf

@@ -0,0 +1,5 @@
+[program:rabbitmq]
+command=/usr/sbin/rabbitmq-server
+autostart=true
+autorestart=true
+user=root

+ 43 - 0
docker/spring/etc/supervisor/conf.d/redis.conf

@@ -0,0 +1,43 @@
+[program:redis-single]
+command=/usr/bin/redis-server /etc/redis/node-single.conf
+autostart=true
+autorestart=true
+user=redis
+
+[program:redis-node-1]
+command=/usr/bin/redis-server /etc/redis/node-1.conf
+autostart=true
+autorestart=true
+user=redis
+
+[program:redis-node-2]
+command=/usr/bin/redis-server /etc/redis/node-2.conf
+autostart=true
+autorestart=true
+user=redis
+
+[program:redis-node-3]
+command=/usr/bin/redis-server /etc/redis/node-3.conf
+autostart=true
+autorestart=true
+user=redis
+
+[program:redis-node-4]
+command=/usr/bin/redis-server /etc/redis/node-4.conf
+autostart=true
+autorestart=true
+user=redis
+
+[program:redis-node-5]
+command=/usr/bin/redis-server /etc/redis/node-5.conf
+autostart=true
+autorestart=true
+user=redis
+
+[program:redis-node-6]
+command=/usr/bin/redis-server /etc/redis/node-6.conf
+autostart=true
+autorestart=true
+user=redis
+
+

+ 14 - 0
docker/spring/etc/supervisor/supervisord.conf

@@ -0,0 +1,14 @@
+[inet_http_server]         
+port=0.0.0.0:10001     
+
+[supervisord]
+logfile=/var/log/supervisord.log                 
+pidfile=/tmp/supervisord.pid 
+loglevel=debug
+user=root
+
+[supervisorctl]
+serverurl=unix:///tmp/supervisor.sock 
+
+[include]
+files = conf.d/*.conf

+ 21 - 0
docker/spring/forward.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+
+ssh -p 22 -L 3000:localhost:3000 $1
+
+export USAGE="$0 SSH_USER SSH_HOST SSH_PORT frontend|backend"
+
+if [ "$#" -ne 4 ]; then
+    echo $USAGE
+    exit 1
+fi
+
+if [[ "$4" == "backend" ]]
+then
+    ssh -p $3 -L 8000:localhost:8000 $1@$2
+elif [[ "$1" == "frontend" ]]
+then
+    ssh -p $3 -L 3000:localhost:3000 $1@$2
+else
+    echo $USAGE
+    exit 1
+fi

+ 34 - 0
docker/spring/start.sh

@@ -0,0 +1,34 @@
+#!/bin/bash
+
+export CODE="mint-spring"
+export NAME="$CODE-$USER"
+
+export USAGE="USAGE: $0 services|frontend|backend|shell"
+export PODMAN="podman run --rm -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE"
+
+if [ "$#" -ne 1 ]; then
+    echo $USAGE
+    exit 1
+fi
+
+if [[ "$1" == "services" ]]
+then
+    echo "start mint services"
+elif [[ "$1" == "backend" ]]
+then
+    echo "start mint frontend services"
+elif [[ "$1" == "frontend" ]]
+then
+    $PODMAN /usr/bin/zsh -c 'source $HOME/.zshrc && cd /workspace/dashboard-v4/dashboard && yarn start'
+elif [[ "$1" == "shell" ]]
+then
+    $PODMAN /usr/bin/zsh -l
+else
+    echo $USAGE
+fi
+
+# if podman container exists $NAME; then
+#     podman start -i -a $NAME
+# else
+#     podman run --name $NAME -it --events-backend=file --hostname=mint --network host -v $PWD:/workspace:z $CODE
+# fi

+ 13 - 0
scripts/.env.dashboard-v4

@@ -0,0 +1,13 @@
+export NODE_OPTIONS: "--max_old_space_size=4096"
+export PUBLIC_URL: "{{ app_dashboard_base_path }}"
+export REACT_APP_DEFAULT_LOCALE: "zh-Hans"
+export REACT_APP_LANGUAGES: "en-US,zh-Hans,zh-Hant"
+export REACT_APP_ENABLE_LOCAL_TOKEN: "true"
+export REACT_APP_TOKEN_KEY: "token.yyyyMMdd"
+export REACT_APP_DOCUMENTS_SERVER: "{{ app_documents_server }}"
+export REACT_APP_RPC_SERVER: "{{ app_grpc_web_server }}"
+export REACT_APP_ASSETS_SERVER: "{{ app_assets_server }}"
+export REACT_APP_API_SERVER: "https://{{ app_domain }}"
+export REACT_APP_ICP_CODE: "{{ app_icp_code }}"
+export REACT_APP_MPS_CODE: "{{ app_mps_code }}"
+export REACT_APP_QUESTIONNAIRE_LINK: "{{ app_questionnaire_link }}"

+ 73 - 0
scripts/build.sh

@@ -0,0 +1,73 @@
+#!/bin/bash
+
+set -e
+
+export WORKSPACE=$PWD
+export PACKAGE_NAME="mint-$1"
+
+function build_dashboard_v4() {
+    local react_node_modules="dashboard-$1.tar.xz"
+    if [ ! -f $WORKSPACE/downloads/$react_node_modules ]; then
+        echo "couldn't find $react_node_modules_tar"
+        exit 1
+    fi
+
+    cd $WORKSPACE/$PACKAGE_NAME/dashboard-v4/dashboard/
+    echo "uncompress node_modules for dashboard-v4"
+    tar xf $WORKSPACE/downloads/$react_node_modules
+    yarn build
+
+    cp -r build $WORKSPACE/$PACKAGE_NAME-dist/dashboard
+}
+
+# -----------------------------------------------------------------------------
+if [ "$#" -ne 2 ]; then
+    echo "USAGE: $0 FULL_GIT_COMMIT_ID ENV_ID"
+    exit 1
+fi
+
+if [ ! -f $WORKSPACE/downloads/$1.zip ]; then
+    echo "download $1.zip from github"
+    mkdir -p $WORKSPACE/downloads
+    wget -q -P $WORKSPACE/downloads https://github.com/iapt-platform/mint/archive/$1.zip
+fi
+
+if [ ! -f $WORKSPACE/$2.env ]; then
+    echo "couldn't find config file $2.env"
+    exit 1
+fi
+
+source $WORKSPACE/$2.env
+
+# -----------------------------------------------------------------------------
+
+if [ -d $WORKSPACE/$PACKAGE_NAME ]; then
+    echo "remove $PACKAGE_NAME folder"
+    rm -r $WORKSPACE/$PACKAGE_NAME
+fi
+echo "uncompress $1.zip"
+unzip -d $WORKSPACE -q $WORKSPACE/downloads/$1.zip
+
+# -----------------------------------------------------------------------------
+
+if [ -d $WORKSPACE/$PACKAGE_NAME-dist ]; then
+    rm -r $WORKSPACE/$PACKAGE_NAME-dist
+fi
+
+mkdir -p $WORKSPACE/$PACKAGE_NAME-dist
+
+build_dashboard_v4 "20241106153131"
+
+cd $WORKSPACE
+cp -r $PACKAGE_NAME/api-v8 $PACKAGE_NAME-dist/htdocs
+
+if [ -f $PACKAGE_NAME.tar.xz ]; then
+    rm $PACKAGE_NAME.tar.xz
+fi
+XZ_OPT=-e9 tar -C $PACKAGE_NAME-dist -jcf $PACKAGE_NAME.tar.xz dashboard htdocs
+md5sum $PACKAGE_NAME.tar.xz >$PACKAGE_NAME.md5
+
+# -----------------------------------------------------------------------------
+
+echo "done($PACKAGE_NAME.tar.xz)."
+exit 0