mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-11-05 03:42:08 +08:00
Optimize Docker configuration and script.
This commit is contained in:
parent
18fbfd85cc
commit
3ad8056c8f
@ -4,4 +4,4 @@ password: openIM123
|
||||
enablePipeline: false
|
||||
clusterMode: false
|
||||
db: 0
|
||||
MaxRetry: 10
|
||||
maxRetry: 10
|
||||
1
go.mod
1
go.mod
@ -35,6 +35,7 @@ require (
|
||||
github.com/kelindar/bitmap v1.5.2
|
||||
github.com/likexian/gokit v0.25.13
|
||||
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/robfig/cron/v3 v3.0.1
|
||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||
|
||||
2
go.sum
2
go.sum
@ -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.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
|
||||
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/go.mod h1:OZQA9FR55lseYoN2Ql1XAHYKHJGu7OMNkUbuekrKCM8=
|
||||
github.com/openimsdk/tools v0.0.47-alpha.17 h1:ZexqUpIXd0JzGm7rCOJ95XXWQWhUoZoCm8uwZixDsoQ=
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/tools/utils/mageutil"
|
||||
"github.com/openimsdk/gomake/mageutil"
|
||||
"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…
x
Reference in New Issue
Block a user