Optimize Docker configuration and script.

pull/2148/head
skiffer-git 1 year ago
parent 18fbfd85cc
commit 3ad8056c8f

@ -4,4 +4,4 @@ password: openIM123
enablePipeline: false enablePipeline: false
clusterMode: false clusterMode: false
db: 0 db: 0
MaxRetry: 10 maxRetry: 10

@ -35,6 +35,7 @@ require (
github.com/kelindar/bitmap v1.5.2 github.com/kelindar/bitmap v1.5.2
github.com/likexian/gokit v0.25.13 github.com/likexian/gokit v0.25.13
github.com/magefile/mage v1.15.0 github.com/magefile/mage v1.15.0
github.com/openimsdk/gomake v0.0.1
github.com/redis/go-redis/v9 v9.4.0 github.com/redis/go-redis/v9 v9.4.0
github.com/robfig/cron/v3 v3.0.1 github.com/robfig/cron/v3 v3.0.1
github.com/shirou/gopsutil v3.21.11+incompatible github.com/shirou/gopsutil v3.21.11+incompatible

@ -279,6 +279,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
github.com/openimsdk/gomake v0.0.1 h1:ll33pk6kOj1qrPIwjhN//mmoSFIQKtwhCbHMZ6ZgBIU=
github.com/openimsdk/gomake v0.0.1/go.mod h1:1vue3qXSfnlEToEtmERuO5KnWhD4+fMzuZSqyzddCLo=
github.com/openimsdk/protocol v0.0.61 h1:l8B93YQfUyPBOrAwhdD4QNLY65ON6H0ydJi1S+hG+t8= github.com/openimsdk/protocol v0.0.61 h1:l8B93YQfUyPBOrAwhdD4QNLY65ON6H0ydJi1S+hG+t8=
github.com/openimsdk/protocol v0.0.61/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8= github.com/openimsdk/protocol v0.0.61/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8=
github.com/openimsdk/tools v0.0.47-alpha.17 h1:ZexqUpIXd0JzGm7rCOJ95XXWQWhUoZoCm8uwZixDsoQ= github.com/openimsdk/tools v0.0.47-alpha.17 h1:ZexqUpIXd0JzGm7rCOJ95XXWQWhUoZoCm8uwZixDsoQ=

@ -4,7 +4,7 @@
package main package main
import ( import (
"github.com/openimsdk/tools/utils/mageutil" "github.com/openimsdk/gomake/mageutil"
"syscall" "syscall"
) )

@ -1,67 +0,0 @@
# mageutil使用指南
**mageutil** 是基于 mage 构建的一个工具,它提供了跨平台和多架构的编译支持,同时也简化了服务的启动、停止、检测流程。
## 使用指南
### 准备工作
1. 将此目录下除README以外的6个文件复制到项目的根目录
2. 项目根目录下需要包含三个目录:`cmd`、`tools`和`config`。
- `cmd` 目录专门用于存放那些作为后台服务运行的应用的启动代码。
- `tools`目录用于存放那些作为工具应用(不以后台服务形式运行)的启动代码。
- `config`目录用于存放配置文件。
3. `cmd`和`tools`目录可以包含多层多个子目录。对于包含`main`函数的`main package`文件,需以`main.go`命名。例如:
- `cmd/openim-rpc/openim-rpc-msg/main.go`
- `tools/check-free-memory/main.go`
- 所有代码都应属于同一个项目,子目录不应使用独立的`go.mod`和`go.sum`文件。
### 初始化项目
- 对于Linux/Mac系统先执行`bootstrap.sh`脚本。
- 对于Windows系统先执行`bootstrap.bat`脚本。
### 编译项目
- 执行`mage`或`mage build`来编译项目。
- 编译完成后,二进制文件将生成在`_output/bin/platforms/<操作系统>/<架构>`目录下,其中二进制文件的命名规则为对应的`main.go`所在的目录名。例如:
- `_output/bin/platforms/linux/amd64/openim-rpc-msg`
- `_output/bin/tools/linux/amd64/check-free-memory`
- **注意:** Windows平台的二进制文件会自动添加`.exe`扩展名。
### 启动工具和服务
1. 首先,编辑`start-config.yml`文件,指定服务和工具相关配置,例如:
```yaml
#cmd服务子目录名: 实例数
serviceBinaries:
openim-rpc-msg: 2
#tools工具子目录名
toolBinaries:
- check-free-memory
maxFileDescriptors: 10000
```
**注意:**服务和工具名与`cmd`和`tools`下的子目录名保持一致
3. 执行`mage start`来启动服务和工具。
- 工具将以同步方式执行,如果工具执行失败(退出代码非零),则整个启动过程中断。
- 服务将以异步方式启动。
对于所有工具,将采用以下命令格式启动:`[程序绝对路径] -i 0 -c [配置文件绝对目录]`。
若服务实例数设置为`n`,则服务将启动`n`个实例,每个实例使用的命令格式为:`[程序路径] -i [实例索引] -c [配置文件目录]`,其中实例索引从`0`到`n-1`。
**注意**:本项目仅指定了配置文件的路径,并不负责读取配置文件内容。这样做的目的是为了支持使用多个配置文件的情况。程序和配置文件的路径都自动使用绝对路径。
### 检查和停止服务
- 执行`mage check`来检查服务状态和监听的端口。
- 执行`mage stop`来停止服务,该命令会向服务发送停止信号。
---

@ -1,31 +0,0 @@
@echo off
SETLOCAL
mage -version >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
echo Mage is already installed.
GOTO DOWNLOAD
)
go version >nul 2>&1
IF NOT %ERRORLEVEL% EQU 0 (
echo Go is not installed. Please install Go and try again.
exit /b 1
)
echo Installing Mage...
go install github.com/magefile/mage@latest
mage -version >nul 2>&1
IF NOT %ERRORLEVEL% EQU 0 (
echo Mage installation failed.
echo Please ensure that %GOPATH%/bin is in your PATH.
exit /b 1
)
echo Mage installed successfully.
:DOWNLOAD
go mod download
ENDLOCAL

@ -1,23 +0,0 @@
#!/bin/bash
if [[ ":$PATH:" == *":$HOME/.local/bin:"* ]]; then
TARGET_DIR="$HOME/.local/bin"
else
TARGET_DIR="/usr/local/bin"
echo "Using /usr/local/bin as the installation directory. Might require sudo permissions."
fi
if ! command -v mage &> /dev/null; then
echo "Installing Mage to $TARGET_DIR ..."
GOBIN=$TARGET_DIR go install github.com/magefile/mage@latest
fi
if ! command -v mage &> /dev/null; then
echo "Mage installation failed."
echo "Please ensure that $TARGET_DIR is in your \$PATH."
exit 1
fi
echo "Mage installed successfully."
go mod download

@ -1,38 +0,0 @@
//go:build mage
// +build mage
package main
import (
"github.com/openimsdk/tools/utils/mageutil"
"os"
"strings"
)
var Default = Build
func Build() {
platforms := os.Getenv("PLATFORMS")
if platforms == "" {
platforms = mageutil.DetectPlatform()
}
for _, platform := range strings.Split(platforms, " ") {
mageutil.CompileForPlatform(platform)
}
mageutil.PrintGreen("Compilation complete.")
}
func Start() {
setMaxOpenFiles()
mageutil.StartToolsAndServices()
}
func Stop() {
mageutil.StopAndCheckBinaries()
}
func Check() {
mageutil.CheckAndReportBinariesStatus()
}

@ -1,20 +0,0 @@
//go:build mage && !windows
// +build mage,!windows
package main
import (
"github.com/openimsdk/tools/utils/mageutil"
"syscall"
)
func setMaxOpenFiles() error {
var rLimit syscall.Rlimit
err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit)
if err != nil {
return err
}
rLimit.Max = uint64(mageutil.MaxFileDescriptors)
rLimit.Cur = uint64(mageutil.MaxFileDescriptors)
return syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit)
}

@ -1,8 +0,0 @@
//go:build mage
// +build mage
package main
func setMaxOpenFiles() error {
return nil
}

@ -1,8 +0,0 @@
serviceBinaries:
openim-no-port: 1
openim-test: 1
toolBinaries:
- check-free-memory
maxFileDescriptors: 10000
Loading…
Cancel
Save