docs: add openim cluster helm chart (#1291)

* docs: add openim cluster helm chart

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* docs: add openim scripts deployment system

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* docs: add all openim helm chart deployment

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* docs: add all openim helm chart deployment

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim install scripts docs

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim kubernetes deployment

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim kubernetes deployment

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim kubernetes deployment

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim kubernetes deployment

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* fix: openim images version

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* fix: make image

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim helm charts

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim helm charts

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

* feat: add openim config docs

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>

---------

Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>
This commit is contained in:
Xinwei Xiong
2023-10-30 10:16:37 +08:00
committed by GitHub
parent 726f14fd40
commit a4b28c9523
184 changed files with 5659 additions and 1649 deletions
+96
View File
@@ -0,0 +1,96 @@
#This configuration file is used to override the use of the value.yaml variable.
#Currently, only the configuration with ingressName as nginx is provided.
#If it is another gateway such as istio or treafik, please modify the corresponding gateway requirements
global:
commonRepository: ghcr.io/openimsdk
commonTag: "latest"
pullPolicy: Always
openim-api:
image:
repository: ghcr.io/openimsdk/openim-api
pullPolicy: Always
tag: "latest"
ingress:
enabled: true
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: openim.server.com # your hostname
paths:
- path: /api(/|$)(.*)
pathType: ImplementationSpecific
tls:
- secretName: webapitls #your hostname tls
hosts:
- openim.server.com
openim-msggateway:
image:
repository: ghcr.io/openimsdk/openim-msggateway
tag: "latest"
pullPolicy: Always
ingress:
enabled: true
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: openim.server.com # your hostname
paths:
- path: /msg_gateway(/|$)(.*)
pathType: ImplementationSpecific
tls:
- secretName: webapitls #your hostname tls
hosts:
- openim.server.com
openim-msgtransfer:
image:
repository: ghcr.io/openimsdk/openim-msgtransfer
tag: "latest"
pullPolicy: Always
openim-push:
image:
repository: ghcr.io/openimsdk/openim-push
tag: "latest"
pullPolicy: Always
openim-rpc-auth:
image:
repository: ghcr.io/openimsdk/openim-rpc-auth
tag: "latest"
pullPolicy: Always
openim-rpc-conversation:
image:
repository: ghcr.io/openimsdk/openim-rpc-conversation
tag: "latest"
pullPolicy: Always
openim-rpc-friend:
image:
repository: ghcr.io/openimsdk/openim-rpc-friend
tag: "latest"
pullPolicy: Always
openim-rpc-group:
image:
repository: ghcr.io/openimsdk/openim-rpc-group
tag: "latest"
pullPolicy: Always
openim-rpc-msg:
image:
repository: ghcr.io/openimsdk/openim-rpc-msg
tag: "latest"
pullPolicy: Always
openim-rpc-third:
image:
repository: ghcr.io/openimsdk/openim-rpc-third
tag: "latest"
pullPolicy: Always
openim-rpc-user:
image:
repository: ghcr.io/openimsdk/openim-rpc-user
tag: "latest"
pullPolicy: Always
+89
View File
@@ -0,0 +1,89 @@
#This configuration file is used to override the use of the value.yaml variable.
#Currently, only the configuration with ingressName as nginx is provided.
#If it is another gateway such as istio or treafik, please modify the corresponding gateway requirements
image:
repository: ${IMAGE_REGISTRY}/openim-api
pullPolicy: Always
tag: "${SERVER_IMAGE_TAG}"
ingress:
enabled: true
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: openim.server.com # your hostname
paths:
- path: /api(/|$)(.*)
pathType: ImplementationSpecific
tls:
- secretName: webapitls #your hostname tls
hosts:
- openim.server.com
openim-msggateway:
image:
repository: ${IMAGE_REGISTRY}/openim-msggateway
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
ingress:
enabled: true
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: openim.server.com # your hostname
paths:
- path: /msg_gateway(/|$)(.*)
pathType: ImplementationSpecific
tls:
- secretName: webapitls #your hostname tls
hosts:
- openim.server.com
openim-msgtransfer:
image:
repository: ${IMAGE_REGISTRY}/openim-msgtransfer
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-push:
image:
repository: ${IMAGE_REGISTRY}/openim-push
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-auth:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-auth
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-conversation:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-conversation
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-friend:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-friend
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-group:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-group
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-msg:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-msg
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-third:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-third
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
openim-rpc-user:
image:
repository: ${IMAGE_REGISTRY}/openim-rpc-user
tag: "${SERVER_IMAGE_TAG}"
pullPolicy: Always
-220
View File
@@ -1,220 +0,0 @@
# Systemd Configuration, Installation, and Startup
- [Systemd Configuration, Installation, and Startup](#systemd-configuration-installation-and-startup)
- [1. Introduction](#1-introduction)
- [2. Prerequisites (Requires root permissions)](#2-prerequisites-requires-root-permissions)
- [3. Create `openim-api` systemd unit template file](#3-create-openim-api-systemd-unit-template-file)
- [4. Copy systemd unit template file to systemd config directory (Requires root permissions)](#4-copy-systemd-unit-template-file-to-systemd-config-directory-requires-root-permissions)
- [5. Start systemd service](#5-start-systemd-service)
## 1. Introduction
Systemd is the default service management form for the latest Linux distributions, replacing the original init.
Format introduction:
```bash
[Unit] : Unit of the service
Description: Brief description of the service
[Service]: Configuration of the service's runtime behavior
ExecStart: Complete path of the program
Restart: Restart configurations like no, always, on-success, on-failure, on-abnormal, on-abort, on-watchdog
[Install]: Installation configuration
WantedBy: Multi-user, etc.
```
For more details, refer to: [Systemd Service Manual](https://www.freedesktop.org/software/systemd/man/systemd.service.html)
Starting command:
```bash
systemctl daemon-reload && systemctl enable openim-api && systemctl restart openim-api
```
Service status:
```bash
systemctl status openim-api
```
Stop command:
```bash
systemctl stop openim-api
```
More command:
```bash
# 列出正在运行的Unit,可以直接使用systemctl
systemctl list-units
# 列出所有Unit,包括没有找到配置文件的或者启动失败的
systemctl list-units --all
# 列出所有没有运行的 Unit
systemctl list-units --all --state=inactive
# 列出所有加载失败的 Unit
systemctl list-units --failed
# 列出所有正在运行的、类型为service的Unit
systemctl list-units --type=service
# 显示某个 Unit 是否正在运行
systemctl is-active application.service
# 显示某个 Unit 是否处于启动失败状态
systemctl is-failed application.service
# 显示某个 Unit 服务是否建立了启动链接
systemctl is-enabled application.service
# 立即启动一个服务
sudo systemctl start apache.service
# 立即停止一个服务
sudo systemctl stop apache.service
# 重启一个服务
sudo systemctl restart apache.service
# 重新加载一个服务的配置文件
sudo systemctl reload apache.service
# 重载所有修改过的配置文件
sudo systemctl daemon-reload
```
**Why choose systemd?**
**Advanced requirements:**
- Convenient service runtime log recording for problem analysis
- Service management logs
- Option to restart upon abnormal exit
The daemon does not meet these advanced requirements.
`nohup` only logs the service's runtime outputs and errors.
Only systemd can fulfill all of the above requirements.
> The default logs are enhanced with timestamps, usernames, service names, PIDs, etc., making them user-friendly. You can view logs of abnormal service exits. Advanced customization is possible through the configuration files in `/lib/systemd/system/`.
In short, systemd is the current mainstream way to manage backend services on Linux, so I've abandoned `nohup` in my new versions of bash scripts, opting instead for systemd.
## 2. Prerequisites (Requires root permissions)
1. Configure `environment.sh` based on the comments.
2. Create a data directory:
```bash
mkdir -p ${OPENIM_DATA_DIR}/{openim-api,openim-crontask}
```
3. Create a bin directory and copy `openim-api` and `openim-crontask` executable files:
```bash
source ./environment.sh
mkdir -p ${OPENIM_INSTALL_DIR}/bin
cp openim-api openim-crontask ${OPENIM_INSTALL_DIR}/bin
```
4. Copy the configuration files of `openim-api` and `openim-crontask` to the `${OPENIM_CONFIG_DIR}` directory:
```bash
mkdir -p ${OPENIM_CONFIG_DIR}
cp openim-api.yaml openim-crontask.yaml ${OPENIM_CONFIG_DIR}
```
## 3. Create `openim-api` systemd unit template file
For each OpenIM service, we will create a systemd unit template. Follow the steps below for each service:
Run the following shell script to generate the `openim-api.service.template`:
```bash
source ./environment.sh
cat > openim-api.service.template <<EOF
[Unit]
Description=OpenIM Server API
Documentation=https://github.com/oepnimsdk/open-im-server/blob/master/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-api
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-api --config=${OPENIM_CONFIG_DIR}/openim-api.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
EOF
```
Following the above style, create the respective template files or generate them in bulk:
First, make sure you've sourced the environment variables:
```bash
source ./environment.sh
```
Use the shell script to generate the systemd unit template for each service:
```bash
declare -a services=(
"openim-api"
... [other services]
)
for service in "${services[@]}"
do
cat > $service.service.template <<EOF
[Unit]
Description=OpenIM Server - $service
Documentation=https://github.com/oepnimsdk/open-im-server/blob/master/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/$service
ExecStart=${OPENIM_INSTALL_DIR}/bin/$service --config=${OPENIM_CONFIG_DIR}/$service.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
EOF
done
```
## 4. Copy systemd unit template file to systemd config directory (Requires root permissions)
Ensure you have root permissions to perform this operation:
```bash
for service in "${services[@]}"
do
sudo cp $service.service.template /etc/systemd/system/$service.service
done
...
```
## 5. Start systemd service
To start the OpenIM services:
```bash
for service in "${services[@]}"
do
sudo systemctl daemon-reload
sudo systemctl enable $service
sudo systemctl restart $service
done
```
@@ -1,16 +0,0 @@
[Unit]
Description=OPENIM OPENIM API
Documentation=Control interface for the OpenIM API service.
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-api
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-api
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-api --config=${OPENIM_CONFIG_DIR}/openim-api.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
@@ -1,16 +0,0 @@
[Unit]
Description=OPENIM OPENIM CMDUTILS
Documentation=Utility toolkit for common OpenIM command-line operations.
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-cmdutils
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-cmdutils
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-cmdutils --config=${OPENIM_CONFIG_DIR}/openim-cmdutils.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
@@ -1,16 +0,0 @@
[Unit]
Description=OPENIM OPENIM CRONTASK
Documentation=Manages the OpenIM CronTask service, with both direct and systemctl installation methods.
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-crontask
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-crontask
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-crontask -c=${OPENIM_CONFIG_DIR}
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
@@ -1,15 +0,0 @@
[Unit]
Description=OPENIM OPENIM MSGGATEWAY
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-msggateway
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-msggateway
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-msggateway --config=${OPENIM_CONFIG_DIR}/openim-msggateway.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
@@ -1,15 +0,0 @@
[Unit]
Description=OPENIM OPENIM MSGTRANSFER
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-msgtransfer
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-msgtransfer
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-msgtransfer --config=${OPENIM_CONFIG_DIR}/openim-msgtransfer.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
@@ -1,16 +0,0 @@
[Unit]
Description=OPENIM OPENIM PUSH
Documentation=Interface for controlling the OpenIM Push Notification service.
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-push
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-push
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-push --port ${OPENIM_PUSH_PORT} --prometheus_port ${PUSH_PROM_PORT}
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
@@ -1,15 +0,0 @@
[Unit]
Description=OPENIM OPENIM RPC AUTH
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/init/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}/openim-rpc-auth
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_DATA_DIR}/openim-rpc-auth
ExecStartPre=/usr/bin/mkdir -p ${OPENIM_LOG_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/bin/openim-rpc-auth --config=${OPENIM_CONFIG_DIR}/openim-rpc-auth.yaml
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
+13
View File
@@ -0,0 +1,13 @@
[Unit]
Description=${SERVER_NAME} for OpenIM
Documentation=https://github.com/openimsdk/open-im-server/blob/main/deployment/README.md
[Service]
WorkingDirectory=${OPENIM_DATA_DIR}
ExecStart=${OPENIM_INSTALL_DIR}/${SERVER_NAME} -c ${OPENIM_CONFIG_DIR}
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
+7
View File
@@ -0,0 +1,7 @@
[Unit]
Description=Unified target for OpenIM servers
Requires=openim-api.service openim-push.service openim-rpc-group.service openim-crontask.service openim-rpc-auth.service openim-rpc-msg.service openim-msggateway.service openim-rpc-conversation.service openim-rpc-third.service openim-msgtransfer.service openim-rpc-friend.service openim-rpc-user.service
After=openim-api.service openim-push.service openim-rpc-group.service openim-crontask.service openim-rpc-auth.service openim-rpc-msg.service openim-msggateway.service openim-rpc-conversation.service openim-rpc-third.service openim-msgtransfer.service openim-rpc-friend.service openim-rpc-user.service
[Install]
WantedBy=multi-user.target
+1 -1
View File
@@ -168,7 +168,6 @@ rpcPort:
openImUserPort: [ ${OPENIM_USER_PORT} ]
openImFriendPort: [ ${OPENIM_FRIEND_PORT} ]
openImMessagePort: [ ${OPENIM_MESSAGE_PORT} ]
openImMessageGatewayPort: [ ${OPENIM_MESSAGE_GATEWAY_PORT} ]
openImGroupPort: [ ${OPENIM_GROUP_PORT} ]
openImAuthPort: [ ${OPENIM_AUTH_PORT} ]
openImPushPort: [ ${OPENIM_PUSH_PORT} ]
@@ -217,6 +216,7 @@ log:
longConnSvr:
openImWsPort: [ ${OPENIM_WS_PORT} ]
websocketMaxConnNum: ${WEBSOCKET_MAX_CONN_NUM}
openImMessageGatewayPort: [ ${OPENIM_MESSAGE_GATEWAY_PORT} ]
websocketMaxMsgLen: ${WEBSOCKET_MAX_MSG_LEN}
websocketTimeout: ${WEBSOCKET_TIMEOUT}