You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Open-IM-Server/deployments/README.md

5.9 KiB

OpenIM Application Containerization Deployment Guide

OpenIM supports a variety of cluster deployment methods, including but not limited to helm, sealos, kustomize

Various contributors, as well as previous official releases, have provided some referenceable solutions:

Dependency Check

Kubernetes: >= 1.16.0-0
Helm: >= 3.0

Minimum Configuration

The recommended minimum configuration for a production environment is as follows:

CPU: 4
Memory: 8G
Disk: 100G

Configuration File Generation

We have automated all the files, making the generation of configuration files optional for OpenIM. However, if you desire custom configurations, you can follow the steps below:

$ make init
# Alternatively, use script:
# ./scripts/init-config.sh

At this point, configuration files will be generated under deployments/openim/config, which you can modify as per your requirements.

Cluster Setup

If you already have a kubernetes cluster, or if you wish to build a kubernetes cluster from scratch, you can skip this step.

For a quick start, I used sealos to rapidly set up the cluster, with sealos also being a wrapper for kubeadm at its core:

$ SEALOS_VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4` && \
  curl -sfL https://raw.githubusercontent.com/labring/sealos/${SEALOS_VERSION}/scripts/install.sh |
  sh -s ${SEALOS_VERSION} labring/sealos

Supported Versions:

  • docker: labring/kubernetes-docker:(v1.24.0~v1.27.0)
  • containerd: labring/kubernetes:(v1.24.0~v1.27.0)

Cluster Installation:

Cluster details are as follows:

Hostname IP Address System Info
master01 10.0.0.9 Linux VM-0-9-ubuntu 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
node01 10.0.0.4 Similar to master01
node02 10.0.0.10 Similar to master01
$ export CLUSTER_USERNAME=ubuntu
$ export CLUSTER_PASSWORD=123456
$ sudo sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
    --masters 10.0.0.9 \
    --nodes 10.0.0.4,10.0.0.10 \
    -u "$CLUSTER_USERNAME" \
    -p "$CLUSTER_PASSWORD"

Node Uninstallation method: using kubeadm for uninstallation does not remove etcd and cni related configurations. Manual clearance or using sealos for uninstallation is needed.

$ sealos reset

If you are local, you can also use Kind and Minikube to test, for example, using Kind:

$ sGO111MODULE="on" go get sigs.k8s.io/kind@v0.11.1
$ skind create cluster

Installing helm

Helm simplifies the deployment and management of Kubernetes applications to a large extent by offering version control and release management through packaging.

Using Script:

$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Adding Repository:

$ helm repo add brigade https://openimsdk.github.io/openim-charts

OpenIM Image Strategy

Automated offerings include aliyun, ghcr, docker hub: Image Documentation

Local Test Build Method:

$ make image

This command assists in quickly building the required images locally. For a detailed build strategy, refer to the Build Documentation.

Installation

Explore our Helm-Charts repository and read through: Helm-Charts Repository

Using the helm charts repository, you can ignore the following configuration, but if you want to just use the server and scale on top of it, you can go ahead:

Use the Helm template to generate the deployment yaml file: openim-charts.yaml

Gen Image:

../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/helm-image.yaml > ./charts/generated-configs/helm-image.yaml

Gen Charts:

for chart in ./charts/*/; do
    if [[ "$chart" == *"generated-configs"* || "$chart" == *"helmfile.yaml"* ]]; then
        continue
    fi

    if [ -f "${chart}values.yaml" ]; then
        helm template "$chart" -f "./charts/generated-configs/helm-image.yaml" -f "./charts/generated-configs/config.yaml" -f "./charts/generated-configs/notification.yaml" >> openim-charts.yaml
    else
        helm template "$chart" >> openim-charts.yaml
    fi
done

Use Helmfile:

GO111MODULE=on go get github.com/roboll/helmfile@latest
export MYSQL_ADDRESS=im-mysql
export MYSQL_PORT=3306
export MONGO_ADDRESS=im-mongo
export MONGO_PORT=27017
export REDIS_ADDRESS=im-redis-master
export REDIS_PORT=6379
export KAFKA_ADDRESS=im-kafka
export KAFKA_PORT=9092
export OBJECT_APIURL="https://openim.server.com/api"
export MINIO_ENDPOINT="http://im-minio:9000"
export MINIO_SIGN_ENDPOINT="https://openim.server.com/im-minio-api"

mkdir ./charts/generated-configs
../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/openim.yaml > ./charts/generated-configs/config.yaml
cp ../config/notification.yaml ./charts/generated-configs/notification.yaml
../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/helm-image.yaml > ./charts/generated-configs/helm-image.yaml
helmfile apply