hotgo

本地环境搭建

本地运行好 mariadb + redis 服务。

version: "3.8"
services:
  mariadb:
    image: mariadb:11.2.2-jammy
    container_name: mariadb
    restart: always
    environment:
      # MYSQL_USER: adminer
      # MYSQL_PASSWORD: adminer
      # MYSQL_DATABASE: test
      MARIADB_ROOT_PASSWORD: root
      MARIADB_USER: adminer
      MARIADB_PASSWORD: adminer
      MARIADB_DATABASE: test
    ports:
      - 3306:3306
    volumes:
      - db_data:/var/lib/mysql
  adminer:
    image: adminer:4.8.1-standalone
    container_name: adminer
    environment:
      ADMINER_DEFAULT_SERVER: mariadb
    restart: always
    ports:
      - 47201:8080
  redis:
    image: redis:7.2.4-alpine
    ports:
      - 6379:6379
volumes:
  db_data:

导入数据库

字符问题

直接使用hotgo 的 fix-sqlchatset 分支中已经替换好的 hotgo.sql 即可解决问题

本地准备运行 hotgo 框架,在导入初始化数据库脚本时,发现在 adminer 面板下,mariadb 数据库中,导入错误。

CREATE TABLE IF NOT EXISTS `hg_admin_credits_log` (
  `id` bigint NOT NULL COMMENT '变动ID',
  `member_id` bigint DEFAULT '0' COMMENT '管理员ID',
  `app_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '应用id',
  `addons_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '插件名称',
  `credit_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '变动类型',
  `credit_group` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '变动组别',
  `before_num` decimal(10,2) DEFAULT '0.00' COMMENT '变动前',
  `num` decimal(10,2) DEFAULT '0.00' COMMENT '变动数据',
  `after_num` decimal(10,2) DEFAULT '0.00' COMMENT '变动后',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '' COMMENT '备注',
  `ip` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900
-- 查询出错 (1273): Unknown collation: 'utf8mb4_0900_ai_ci'

通过以下命令即可修复,使导入成功。

cd hotgo/server/storage/data/
find . -name "*.sql" -type f -exec sed -i 's/utf8mb3/utf8mb4/g' {} +
find . -type f -name "*.sql" -exec sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' {} +
find . -type f -name "*.sql" -exec sed -i 's/utf8_general_ci/utf8mb4_general_ci/g' {} +

运行 hotgo

# 前端服务
cd hotgo/web
yarn
yarn dev
# 后端服务
cd hotgo/server
go run main.go

插件使用

创建插件

登陆后台,点击左侧菜单【开发工具】->【插件管理】->【创建新插件】,填写插件信息,点击【确认创建】即可。

我这里的功能分组选择了主要业务。 插件标签和插件报名都填写的是 compat_scan。 标签只是标识,可以填写中文。

插件创建成功后会在服务端对应的项目目录中生成插件模块文件,并自动注册到当前项目中。

会发现前后端都生成了对应的文件。

server/addons/compat_scan/
server/addons/modules/compat_scan.go
web/src/api/addons/compat_scan/
web/src/views/addons/compat_scan/

详细文件列表如下:

new file:   server/addons/compat_scan/README.MD
new file:   server/addons/compat_scan/api/admin/config/config.go
new file:   server/addons/compat_scan/api/admin/index/index.go
new file:   server/addons/compat_scan/api/api/index/index.go
new file:   server/addons/compat_scan/api/home/index/index.go
new file:   server/addons/compat_scan/api/websocket/index/index.go
new file:   server/addons/compat_scan/controller/admin/sys/config.go
new file:   server/addons/compat_scan/controller/admin/sys/index.go
new file:   server/addons/compat_scan/controller/api/index.go
new file:   server/addons/compat_scan/controller/home/index.go
new file:   server/addons/compat_scan/controller/websocket/index.go
new file:   server/addons/compat_scan/crons/crons.go
new file:   server/addons/compat_scan/global/global.go
new file:   server/addons/compat_scan/global/init.go
new file:   server/addons/compat_scan/logic/.gitkeep
new file:   server/addons/compat_scan/logic/logic.go
new file:   server/addons/compat_scan/logic/sys/config.go
new file:   server/addons/compat_scan/logic/sys/index.go
new file:   server/addons/compat_scan/main.go
new file:   server/addons/compat_scan/model/config.go
new file:   server/addons/compat_scan/model/input/sysin/config.go
new file:   server/addons/compat_scan/model/input/sysin/index.go
new file:   server/addons/compat_scan/queues/queues.go
new file:   server/addons/compat_scan/resource/public/.gitkeep
new file:   server/addons/compat_scan/resource/public/default
new file:   server/addons/compat_scan/resource/template/home/index.html
new file:   server/addons/compat_scan/router/admin.go
new file:   server/addons/compat_scan/router/api.go
new file:   server/addons/compat_scan/router/genrouter/init.go
new file:   server/addons/compat_scan/router/home.go
new file:   server/addons/compat_scan/router/websocket.go
new file:   server/addons/compat_scan/service/.gitkeep
new file:   server/addons/compat_scan/service/sys.go
new file:   server/addons/modules/compat_scan.go
new file:   web/src/api/addons/compat_scan/config/index.ts
new file:   web/src/views/addons/compat_scan/config/BasicSetting.vue
new file:   web/src/views/addons/compat_scan/config/system.vue

插件安装

如果项目没有热更新,需要手动重启服务端。

服务重启后,会在插件管理列表中显示出刚刚创建的插件,点击【安装模块】即可。

前台可以访问的页面:

  • http://localhost:8000/home/compat_scan/index/test 接口可以访问的地址:
  • http://localhost:8000/api/compat_scan/index/test
  • http://localhost:8000/admin/compat_scan/index/test

当前我们是超级管理员,所以我们有所有权限。下面我们只需要创建插件对应的菜单。

添加一级菜单

【权限管理】->【菜单权限】->【添加菜单】。

菜单类型: 目录 上机目录: 根目录 路由地址,组建路径: /compat_scan 路由别名: compat_scan 组件路径: LAYOUT 不填写此项时,将不会显示页面框架,而只单纯展示页面内容

添加子菜单

由于我们在刚刚生成的代码中发现了 addons/compat_scan/config 目录相关system页面

所以我们可以现在就直接添加插件"配置"的子菜单

【权限管理】->【菜单权限】。

选中刚刚添加的一级菜单compat_scan,点击【添加子菜单】 刚刚选中了创建的一级菜单,所以上级目录已经创建好。 二级菜单图标似乎不用。 路由地址和别名: compat_scan_config 组件路径填写 system 页面路径: /addons/compat_scan/config/system 其它填写项: 默认

至此刷新页面,即可在后台管理中看到菜单,并点击菜单,看见页面内容

使用菜单

点击菜单中刚刚创建的配置菜单,发现有一个错误提示,这是因为后端数据库没有对应的记录导致的。 只需要 找到数据库中的 hg_sys_addons_config 表,将 hgexample 记录复制后,将插件名addon_name 改为 compat_scan 即可。

数据库

mysql to sqlite3

docker run -it \
    --workdir $(pwd) \
    --volume $(pwd):$(pwd) \
    --rm ghcr.io/techouse/sqlite3-to-mysql:latest \
    --sqlite-file baz.db \
    --mysql-user adminer \
    --mysql-password adminer \
    --mysql-database test \
    --mysql-host 192.168.1.101

docker run -it \
    --workdir $(pwd) \
    --volume $(pwd):$(pwd) \
    --rm ghcr.io/techouse/mysql-to-sqlite3:latest \
    --sqlite-file test.db \
    --mysql-user adminer \
    --mysql-password adminer \
    --mysql-database test \
    --mysql-host 192.168.1.101

线上转换: https://brunocassol.com/mysql2sqlite/ 也可以考虑线上转换:https://www.rebasedata.com/convert-sql-to-sqlite-online