release: v1.9.1

This commit is contained in:
meilin.huang
2024-11-21 19:02:15 +08:00
parent e03ceecd9a
commit 9366a76b84
17 changed files with 253 additions and 61 deletions

View File

@@ -1,5 +1,11 @@
# 🌈mayfly-go
<p align="center">
<a href="./README_EN.md">English</a> |
<a href="https://www.yuque.com/may-fly/mayfly-go">项目文档</a> |
<a href="https://space.bilibili.com/484091081/channel/collectiondetail?sid=392854">操作视频</a> |
</p>
<p align="center">
<a href="https://gitee.com/dromara/mayfly-go" target="_blank">
<img src="https://gitee.com/dromara/mayfly-go/badge/star.svg?theme=white" alt="star"/>
@@ -20,30 +26,25 @@
</a>
</p>
### 介绍
## 前言
web 版 **linux(终端[终端回放、命令过滤] 文件 脚本 进程 计划任务)数据库mysql postgres oracle sqlserver 达梦 高斯 sqlite数据操作 数据同步 数据迁移redis(单机 哨兵 集群)mongo 等集工单流程审批于一体的统一管理操作平台**
web 版 **linux(终端[终端回放、命令过滤] 文件 脚本 进程 计划任务)数据库mysql postgres oracle sqlserver 达梦 高斯 sqlite数据操作数据同步数据迁移redis(单机 哨兵 集群)mongo 等集工单流程审批于一体的统一管理操作平台**
### 开发语言与主要框架
## 开发语言与主要框架
- 前端typescript、vue3、element-plus
- 后端golang、gin、gorm
### 交流及问题反馈加 QQ 群
## 交流及问题反馈加 QQ 群
<a target="_blank" href="https://qm.qq.com/cgi-bin/qm/qr?k=IdJSHW0jTMhmWFHBUS9a83wxtrxDDhFj&jump_from=webapi">119699946</a>
### 系统相关资料
- 项目文档: https://www.yuque.com/may-fly/mayfly-go
- 系统操作视频: https://space.bilibili.com/484091081/channel/collectiondetail?sid=392854
### 演示环境
## 演示环境
http://go.mayfly.run
账号/密码test/test123.
### 系统核心功能截图
## 系统核心功能截图
#### 首页
@@ -101,8 +102,8 @@ http://go.mayfly.run
![菜单资源管理](https://foruda.gitee.com/images/1714379321338009940/a00d6a02_1240250.png "屏幕截图")
**其他更多功能&操作指南可查看在线文档**: https://www.yuque.com/may-fly/mayfly-go
**其他更多功能&操作指南可查看上述项目文档**
#### 💌 支持作者
## 💌 支持作者
如果觉得项目不错,或者已经在使用了,希望你可以去 <a target="_blank" href="https://github.com/dromara/mayfly-go">Github</a> 或者 <a target="_blank" href="https://gitee.com/dromara/mayfly-go">Gitee</a> 帮我点个 ⭐ Star这将是对我极大的鼓励与支持。

105
README_EN.md Normal file
View File

@@ -0,0 +1,105 @@
# 🌈mayfly-go
<p align="center">
<a href="./README.md">中文介绍</a> |
<a href="https://www.yuque.com/may-fly/mayfly-go">Documentation</a> |
<a href="https://space.bilibili.com/484091081/channel/collectiondetail?sid=392854">Operate Video</a>
</p>
<p align="center">
<a href="https://gitee.com/dromara/mayfly-go" target="_blank">
<img src="https://gitee.com/dromara/mayfly-go/badge/star.svg?theme=white" alt="star"/>
<img src="https://gitee.com/dromara/mayfly-go/badge/fork.svg" alt="fork"/>
</a>
<a href="https://github.com/dromara/mayfly-go" target="_blank">
<img src="https://img.shields.io/github/stars/dromara/mayfly-go.svg?style=social" alt="github star"/>
<img src="https://img.shields.io/github/forks/dromara/mayfly-go.svg?style=social" alt="github fork"/>
</a>
<a href="https://hub.docker.com/r/mayflygo/mayfly-go/tags" target="_blank">
<img src="https://img.shields.io/docker/pulls/mayflygo/mayfly-go.svg?label=docker%20pulls&color=fac858" alt="docker pulls"/>
</a>
<a href="https://github.com/golang/go" target="_blank">
<img src="https://img.shields.io/badge/Golang-1.22%2B-yellow.svg" alt="golang"/>
</a>
<a href="https://cn.vuejs.org" target="_blank">
<img src="https://img.shields.io/badge/Vue-3.x-green.svg" alt="vue">
</a>
</p>
## Preface
Browser-based management platform. **linux(Terminal [terminal playback, command filtering], file, script, process, cronjob), database (mysql, postgres, oracle, sqlserver, Dameng, gauss, sqlite) data operation, data synchronization, data migration, redis(standlone, sentinel, cluster), mongo and other unified management and operation platforms that integrate work order process approval.**
## Development languages and major frameworks
- frontendtypescript、vue3、element-plus
- backendgolang、gin、gorm
## Demo
http://go.mayfly.run
account/passwordtest/test123.
## Screenshots of core features
#### Home page
![首页](https://foruda.gitee.com/images/1714378104294194769/149fd257_1240250.png "屏幕截图")
#### Machine Operation
##### Status
![机器状态查看](https://foruda.gitee.com/images/1714378556642584686/93c46ec0_1240250.png "屏幕截图")
##### SSH Terminal
![终端操作](https://foruda.gitee.com/images/1714378353790214943/2864ba66_1240250.png "屏幕截图")
##### File Operation
![文件操作](https://foruda.gitee.com/images/1714378417206086701/74a188d8_1240250.png "屏幕截图")
![文件查看](https://foruda.gitee.com/images/1714378482611638688/7753faf6_1240250.png "屏幕截图")
#### Database Operation
##### SQL Editor
![sql编辑器](https://foruda.gitee.com/images/1714378747473077515/3c9387c0_1240250.png "屏幕截图")
##### Add, delete, update and check data online
![选表查数据](https://foruda.gitee.com/images/1714378625059063750/3951e5a8_1240250.png "屏幕截图")
#### Redis Operation
![redis操作](https://foruda.gitee.com/images/1714378855845451114/4c3f0097_1240250.png "屏幕截图")
#### Mongo Operation
![mongo操作](https://foruda.gitee.com/images/1714378916425714642/77fc0ed9_1240250.png "屏幕截图")
#### Work order process approval
![流程审批](https://foruda.gitee.com/images/1714379057627690037/ad136862_1240250.png "屏幕截图")
#### System Management
##### Account
![账号管理](https://foruda.gitee.com/images/1714379179491881231/c6d802ae_1240250.png "屏幕截图")
##### Role
![角色管理](https://foruda.gitee.com/images/1714379269408676381/6ac1e85c_1240250.png "屏幕截图")
##### Menu & Permission
![菜单资源管理](https://foruda.gitee.com/images/1714379321338009940/a00d6a02_1240250.png "屏幕截图")
**Additional features & instructions can be found in the project documentation above.**
## 💌 Supporting Author
If you think the project is good, or you are already using it, I hope you can go to <a target="_blank" href="https://github.com/dromara/mayfly-go">Github</a> to help me click ⭐ Star, which will be a great encouragement and support for me.

View File

@@ -28,13 +28,13 @@ function buildWeb() {
cd ${web_folder}
copy2Server=$1
echo_yellow "-------------------打包前端开始-------------------"
echo_yellow "-------------------Start bundling frontends-------------------"
yarn run build
if [ "${copy2Server}" == "2" ] ; then
echo_green '将打包后的静态文件拷贝至server/static/static'
echo_green 'Copy the packaged static files to server/static/static'
rm -rf ${server_folder}/static/static && mkdir -p ${server_folder}/static/static && cp -r ${web_folder}/dist/* ${server_folder}/static/static
fi
echo_yellow ">>>>>>>>>>>>>>>>>>>打包前端结束<<<<<<<<<<<<<<<<<<<<\n"
echo_yellow ">>>>>>>>>>>>>>>>>>>End of packaging frontend<<<<<<<<<<<<<<<<<<<<\n"
}
function build() {
@@ -46,10 +46,10 @@ function build() {
arch=$3
copyDocScript=$4
echo_yellow "-------------------${os}-${arch}打包构建开始-------------------"
echo_yellow "-------------------Start a bundle build - ${os}-${arch}-------------------"
cd ${server_folder}
echo_green "打包构建可执行文件..."
echo_green "Package build executables..."
execFileName=${exec_file_name}
# 如果是windows系统,可执行文件需要添加.exe结尾
@@ -59,13 +59,13 @@ function build() {
CGO_ENABLE=0 GOOS=${os} GOARCH=${arch} go build -ldflags=-w -o ${execFileName} main.go
if [ -d ${toFolder} ] ; then
echo_green "目标文件夹已存在,清空文件夹"
echo_green "The desired folder already exists. Clear the folder"
sudo rm -rf ${toFolder}
fi
echo_green "创建'${toFolder}'目录"
echo_green "Create '${toFolder}' Directory"
mkdir ${toFolder}
echo_green "移动二进制文件至'${toFolder}'"
echo_green "Move binary to '${toFolder}'"
mv ${server_folder}/${execFileName} ${toFolder}
# if [ "${copy2Server}" == "1" ] ; then
@@ -74,16 +74,17 @@ function build() {
# fi
if [ "${copyDocScript}" == "1" ] ; then
echo_green "拷贝脚本等资源文件[config.yml.example、mayfly-go.sql、mayfly-go.sqlite、readme.txt、startup.sh、shutdown.sh]"
echo_green "Copy resources such as scripts [config.yml.example、mayfly-go.sql、mayfly-go.sqlite、readme.txt、startup.sh、shutdown.sh]"
cp ${server_folder}/config.yml.example ${toFolder}
cp ${server_folder}/readme.txt ${toFolder}
cp ${server_folder}/readme_cn.txt ${toFolder}
cp ${server_folder}/resources/script/startup.sh ${toFolder}
cp ${server_folder}/resources/script/shutdown.sh ${toFolder}
cp ${server_folder}/resources/script/sql/mayfly-go.sql ${toFolder}
cp ${server_folder}/resources/data/mayfly-go.sqlite ${toFolder}
fi
echo_yellow ">>>>>>>>>>>>>>>>>>>${os}-${arch}打包构建完成<<<<<<<<<<<<<<<<<<<<\n"
echo_yellow ">>>>>>>>>>>>>>>>>>> ${os}-${arch} - Bundle build complete <<<<<<<<<<<<<<<<<<<<\n"
}
function buildLinuxAmd64() {
@@ -103,25 +104,25 @@ function buildMac() {
}
function buildDocker() {
echo_yellow "-------------------构建docker镜像开始-------------------"
echo_yellow "-------------------Start building the docker image-------------------"
imageVersion=$1
imageName="mayfly/mayfly-go:${imageVersion}"
docker build --no-cache --platform linux/amd64 --build-arg MAYFLY_GO_VERSION="${imageVersion}" -t "${imageName}" .
echo_green "docker镜像构建完成->[${imageName}]"
echo_yellow "-------------------构建docker镜像结束-------------------"
echo_green "The docker image is built -> [${imageName}]"
echo_yellow "-------------------Finished building the docker image-------------------"
}
function buildxDocker() {
echo_yellow "-------------------docker buildx构建镜像开始-------------------"
echo_yellow "-------------------The docker buildx build image starts-------------------"
imageVersion=$1
imageName="ccr.ccs.tencentyun.com/mayfly/mayfly-go:${imageVersion}"
docker buildx build --no-cache --push --platform linux/amd64,linux/arm64 --build-arg MAYFLY_GO_VERSION="${imageVersion}" -t "${imageName}" .
echo_green "docker多版本镜像构建完成->[${imageName}]"
echo_yellow "-------------------docker buildx构建镜像结束-------------------"
echo_green "The docker multi-architecture version image is built -> [${imageName}]"
echo_yellow "-------------------The docker buildx image is finished-------------------"
}
function runBuild() {
read -p "请选择构建版本[0|其他->除docker镜像外其他 1->linux-amd64 2->linux-arm64 3->windows 4->mac 5->docker 6->docker buildx]: " buildType
read -p "Select build version [0 | Other->Other than docker image 1->linux-amd64 2->linux-arm64 3->windows 4->mac 5->docker 6->docker buildx]: " buildType
toPath="."
imageVersion="latest"
@@ -129,16 +130,16 @@ function runBuild() {
if [[ "${buildType}" != "5" ]] && [[ "${buildType}" != "6" ]] ; then
# 构建结果的目的路径
read -p "请输入构建产物输出目录[默认当前路径]: " toPath
read -p "Please enter the build product output directory [default current path]: " toPath
if [ ! -d ${toPath} ] ; then
echo_red "构建产物输出目录不存在!"
echo_red "Build product output directory does not exist!"
exit;
fi
if [ "${toPath}" == "" ] ; then
toPath="."
fi
read -p "是否拷贝文档&脚本[0-> 1->是][默认是]: " copyDocScript
read -p "Whether to copy documents & Scripts [0-> No 1-> Yes][Default yes]: " copyDocScript
if [ "${copyDocScript}" == "" ] ; then
copyDocScript="1"
fi
@@ -154,7 +155,7 @@ function runBuild() {
fi
if [[ "${buildType}" == "5" ]] || [[ "${buildType}" == "6" ]] ; then
read -p "请输入docker镜像版本号[默认latest]: " imageVersion
read -p "Please enter the docker image version (default latest) : " imageVersion
if [ "${imageVersion}" == "" ] ; then
imageVersion="latest"
@@ -189,7 +190,7 @@ function runBuild() {
esac
if [[ "${buildType}" != "5" ]] && [[ "${buildType}" != "6" ]] ; then
echo_green "删除['${server_folder}/static/static']下静态资源文件."
echo_green "Delete static assets under ['${server_folder}/static/static']."
# 删除静态资源文件保留一个favicon.ico否则后端启动会报错
rm -rf ${server_folder}/static/static/assets
rm -rf ${server_folder}/static/static/config.js

View File

@@ -59,7 +59,7 @@
"eslint": "^8.35.0",
"eslint-plugin-vue": "^9.28.0",
"prettier": "^3.2.5",
"sass": "^1.80.6",
"sass": "^1.81.0",
"typescript": "^5.6.3",
"vite": "^5.4.11",
"vue-eslint-parser": "^9.4.3"

View File

@@ -15,7 +15,7 @@ const config = {
baseWsUrl: `${(window as any).globalConfig.BaseWsUrl || `${location.protocol == 'https:' ? 'wss:' : 'ws:'}//${getBaseApiUrl()}`}/api`,
// 系统版本
version: 'v1.9.0',
version: 'v1.9.1',
};
export default config;

View File

@@ -44,10 +44,10 @@ export default {
testConn: 'Test Connection',
usernameExist: 'The username already exists in the account list',
publicAc: 'Public credentials',
acTypeEnumPublic: 'Public credentials',
acTypeEnumPrivate: 'Ordinary certificate',
acTypeEnumPrivileged: 'Privilege credentials',
acTypeEnumPrivateDefault: 'Default credentials',
acTypeEnumPublic: 'Public',
acTypeEnumPrivate: 'Ordinary',
acTypeEnumPrivileged: 'Privilege',
acTypeEnumPrivateDefault: 'Default',
ciphertextTypeEnumPassword: 'Password',
ciphertextTypeEnumPrivateKey: 'Private key',
ciphertextTypeEnumPublic: 'Public credentials',

View File

@@ -5,7 +5,6 @@
<img :src="themeConfig.logoIcon" />
<div class="login-left-logo-text">
<span>{{ themeConfig.globalViceTitle }}</span>
<!-- <span class="login-left-logo-text-msg">mayfly-go</span> -->
</div>
</div>
<div class="login-left-img">
@@ -13,12 +12,49 @@
</div>
<img :src="loginBgSplitImg" class="login-left-waves" />
</div>
<div class="login-right flex">
<div class="login-right-warp flex-margin">
<span class="login-right-warp-one"></span>
<span class="login-right-warp-one"> </span>
<span class="login-right-warp-two"></span>
<div class="login-right-warp-mian">
<div class="login-right-warp-main-title">{{ themeConfig.globalViceTitle }}</div>
<div class="login-right-warp-main-title">
{{ themeConfig.globalViceTitle }}
<el-dropdown
:show-timeout="70"
:hide-timeout="50"
trigger="click"
@command="
(lang: string) => {
themeConfig.globalI18n = lang;
}
"
>
<div>
<SvgIcon
:size="16"
:name="EnumValue.getEnumByValue(I18nEnum, themeConfig.globalI18n)?.extra.icon"
:title="$t('layout.user.langSwitch')"
style="margin-top: 50px; margin-left: 20px"
/>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
v-for="item in I18nEnum"
:key="item.value"
:command="item.value"
:disabled="themeConfig.globalI18n === item.value"
>
{{ item.label }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<div class="login-right-warp-main-form">
<div v-if="!state.isScan">
<el-tabs v-model="state.tabsActiveName">
@@ -27,9 +63,9 @@
</el-tab-pane>
</el-tabs>
</div>
<div class="mt20" v-show="state.oauth2LoginConfig.enable">
<el-button link size="small">{{ $t('login.thirdPartyLogin') }}: </el-button>
<el-tooltip :content="state.oauth2LoginConfig.name" placement="top-start">
<div class="mt20" v-if="state.oauth2LoginConfig.enable">
<el-text size="small">{{ $t('login.thirdPartyLogin') }}: </el-text>
<el-tooltip :content="state.oauth2LoginConfig.name" placement="bottom-start">
<el-button link size="small" type="primary" @click="oauth2Login">
<el-icon :size="18">
<Link />
@@ -53,6 +89,8 @@ import openApi from '@/common/openApi';
import config from '@/common/config';
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import EnumValue from '../../common/Enum';
import { I18nEnum } from '../../common/commonEnum';
// 引入组件
const Account = defineAsyncComponent(() => import('./component/AccountLogin.vue'));

View File

@@ -214,7 +214,6 @@ import ResourceTags from '../component/ResourceTags.vue';
import { sleep } from '@/common/utils/loading';
import { DbGetDbNamesMode } from './enums';
import { DbInst } from './db';
import { ElMessage, ElMessageBox } from 'element-plus';
import DrawerHeader from '@/components/drawer-header/DrawerHeader.vue';
import { useI18nCreateTitle, useI18nDeleteConfirm, useI18nDeleteSuccessMsg, useI18nEditTitle, useI18nSaveSuccessMsg } from '@/hooks/useI18n';
import { useI18n } from 'vue-i18n';
@@ -241,10 +240,10 @@ const columns = ref([
TableColumn.new('name', 'common.name'),
TableColumn.new('authCertName', 'db.acName'),
TableColumn.new('getDatabaseMode', 'db.getDbMode').typeTag(DbGetDbNamesMode),
TableColumn.new('database', 'DB').isSlot().setMinWidth(80),
TableColumn.new('database', 'DB').isSlot().setMinWidth(90),
TableColumn.new('remark', 'common.remark'),
TableColumn.new('code', 'common.code'),
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(210).fixedRight().alignCenter(),
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(210).fixedRight().noShowOverflowTooltip().alignCenter(),
]);
const perms = {

View File

@@ -128,7 +128,7 @@ const columns = ref([
// 该用户拥有的的操作列按钮权限
const actionBtns: any = hasPerms(Object.values(perms));
const actionColumn = TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().alignCenter();
const actionColumn = TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().noShowOverflowTooltip().alignCenter();
const pageTableRef: Ref<any> = ref(null);
const state = reactive({

View File

@@ -73,7 +73,7 @@ const columns = ref([
TableColumn.new('saveExecResType', 'machine.execResRecordType').typeTag(CronJobSaveExecResTypeEnum),
TableColumn.new('remark', 'common.remark'),
TableColumn.new('codePaths', 'machine.relateMachine').isSlot().setMinWidth('250px'),
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().alignCenter(),
TableColumn.new('action', 'common.operation').isSlot().setMinWidth(180).fixedRight().noShowOverflowTooltip().alignCenter(),
]);
const pageTableRef: Ref<any> = ref(null);

View File

@@ -17,7 +17,7 @@
<el-table-column prop="remark" :label="$t('common.remark')" show-overflow-tooltip width="120px"> </el-table-column>
<el-table-column prop="creator" :label="$t('common.creator')" show-overflow-tooltip width="100px"> </el-table-column>
<el-table-column :label="$t('common.operation')" min-wdith="100px">
<el-table-column :label="$t('common.operation')" min-width="120px">
<template #header>
<el-text tag="b">{{ $t('common.operation') }}</el-text>
<el-button v-auth="'cmdconf:save'" class="ml5" type="primary" circle size="small" icon="Plus" @click="openFormDialog(false)"> </el-button>
@@ -95,16 +95,12 @@
import { ref, toRefs, reactive, onMounted, nextTick } from 'vue';
import TagTreeCheck from '../../component/TagTreeCheck.vue';
import { TagResourceTypeEnum } from '@/common/commonEnum';
import { ElMessage, ElMessageBox } from 'element-plus';
import { cmdConfApi } from '../api';
import DrawerHeader from '@/components/drawer-header/DrawerHeader.vue';
import TagCodePath from '../../component/TagCodePath.vue';
import _ from 'lodash';
import { useI18n } from 'vue-i18n';
import { useI18nDeleteConfirm, useI18nDeleteSuccessMsg, useI18nFormValidate, useI18nPleaseInput, useI18nSaveSuccessMsg } from '@/hooks/useI18n';
const { t } = useI18n();
const rules = {
tags: [
{

View File

@@ -1,4 +1,6 @@
server:
# en,zh-cn, 默认zh-cn
lang: zh-cn
# debug release test
model: release
port: 18888

View File

@@ -2,4 +2,41 @@ package imsg
import "mayfly-go/pkg/i18n"
var En = map[i18n.MsgId]string{}
var En = map[i18n.MsgId]string{
LogDbInstSave: "DB - Save Instance",
LogDbInstDelete: "DB - Delete Instance",
ErrDbInstExist: "The database instance already exists",
// db
LogDbSave: "DB - Save DB",
LogDbDelete: "DB - Delete DB",
LogDbRunSql: "DB - Run SQL",
LogDbDump: "DB - Export DB",
SqlScriptRunFail: "sql script failed to execute",
SqlScriptRunSuccess: "sql script executed successfully",
SqlScripRunProgress: "sql script execution progress",
DbDumpErr: "Database export failed",
ErrDbNameExist: "The database name already exists in this instance",
ErrDbNotAccess: "The operation permissions of database [{{.dbName}}] are not configured",
ErrExistRunFailSql: "There is an execution error in sql",
ErrNeedSubmitWorkTicket: "This operation needs to submit a work ticket for approval",
ErrNoLimitStmt: "Please complete the paging information before executing",
ErrLimitInvalid: "The number of query result sets should be less than the {{.count}} number configured by the system",
// db transfer
LogDtsSave: "dts - Save data transfer task",
LogDtsDelete: "dts - Delete data transfer task",
LogDtsChangeStatus: "dts - Change status",
LogDtsRun: "dts - Run data transfer task",
LogDtsStop: "dts - Stop data transfer task",
LogDtsDeleteFile: "dts - Delete transfer file",
LogDtsRunSqlFile: "dts - Run SQL File",
// data sync
LogDataSyncSave: "datasync - Save data sync task",
LogDataSyncDelete: "datasync - Delete data sync task",
LogDataSyncChangeStatus: "datasync - Change status",
}

View File

@@ -4,7 +4,7 @@ import "fmt"
const (
AppName = "mayfly-go"
Version = "v1.9.0"
Version = "v1.9.1"
)
func GetAppInfo() string {

View File

@@ -2,6 +2,7 @@ package config
import (
"fmt"
"mayfly-go/pkg/i18n"
)
type Server struct {
@@ -17,7 +18,7 @@ type Server struct {
func (s *Server) Default() {
if s.Lang == "" {
s.Lang = "zh_CN"
s.Lang = i18n.Zh_CN
}
if s.Model == "" {
s.Model = "release"

View File

@@ -6,5 +6,5 @@
服务启动&重启:./startup.sh
服务关闭:./shutdown.sh
直接通过 host:config.yml里配置的端口 即可访问项目
直接通过 host:prot 即可访问项目port为config.yml里配置的server.port
初始账号 admin/admin123.

12
server/readme_en.txt Normal file
View File

@@ -0,0 +1,12 @@
Related configuration files:
backend:
config.yml: Server port, mysql, aeskey(16, 24, 32 chars), jwt-key and other information can be configured here.
It is recommended to replace aes.key(resource password encryption such as machine, database, redis password) and jwT.key (jwt secret key) with a random string.
server start & restart: ./startup.sh
server shutdown: ./shutdown.sh
The project can be accessed directly via host:port (port is server.port as configured in config.yml).
Initial account: admin/admin123.