Merge 6a7f6fa8c7a71656275e7dbc7a677bc653dbe3f9 into a5ac7f2a8117ec6b283c74a9d6a4db578a2bdd37

This commit is contained in:
icey-yu 2025-06-25 11:35:12 +08:00 committed by GitHub
commit ba1a283dec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
52 changed files with 241 additions and 86 deletions

4
.gitignore vendored
View File

@ -29,7 +29,7 @@ tmp/
bin/
output/
_output/
deployments/charts/generated-configs/
kubernetes/charts/generated-configs/
### OpenIM Config ###
.env
@ -37,7 +37,7 @@ config/config.yaml
config/notification.yaml
### OpenIM deploy ###
deployments/openim-server/charts
kubernetes/openim-server/charts
# files used by the developer
.idea.md

34
build/build.sh Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env bash
CYAN='\033[0;36m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NO_COLOR='\033[0m'
BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
IMAGE_DIR="$BASE_DIR/images"
if [[ ! -d "$IMAGE_DIR" ]]; then
echo -e "${RED}dir $IMAGE_DIR not exist!${NO_COLOR}"
exit 1
fi
for dir in "$IMAGE_DIR"/*/; do
[[ -d "$dir" ]] || continue
name="$(basename "$dir")"
dockerfile="$dir/Dockerfile"
if [[ -f "$dockerfile" ]]; then
echo -e "${CYAN}Building ${name}:test...${NO_COLOR}"
build_context="${dir}../../../"
if docker build -t "${name}:test" -f "$dockerfile" "$build_context"; then
echo -e "${GREEN}Successfully built ${name}:test${NO_COLOR}"
else
echo -e "${RED}Failed to build ${name}:test${NO_COLOR}"
fi
else
echo -e "${YELLOW}Skipping ${name}: Dockerfile not found${NO_COLOR}"
fi
done

View File

@ -1,8 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-minio-secret
type: Opaque
data:
minio-root-user: cm9vdA== # Base64 encoded "root"
minio-root-password: b3BlbklNMTIz # Base64 encoded "openIM123"

View File

@ -1,8 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-secret
type: Opaque
data:
mongo_openim_username: b3BlbklN # base64 for "openIM", this user credentials need in authSource database.
mongo_openim_password: b3BlbklNMTIz # base64 for "openIM123"

View File

@ -134,7 +134,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg
if err != nil {
return err
}
historyMongoHandler := NewOnlineHistoryMongoConsumerHandler(msgTransferDatabase,config)
historyMongoHandler := NewOnlineHistoryMongoConsumerHandler(msgTransferDatabase, config)
msgTransfer := &MsgTransfer{
historyConsumer: historyConsumer,

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: openim-api
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: openim-api
@ -12,9 +12,11 @@ spec:
labels:
app: openim-api
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: openim-api-container
image: openim/openim-api:v3.8.3
image: openim-api:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: openim-crontask
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: crontask
@ -12,9 +12,11 @@ spec:
labels:
app: crontask
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: crontask-container
image: openim/openim-crontask:v3.8.3
image: openim-crontask:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: messagegateway-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: messagegateway-rpc-server
@ -12,9 +12,11 @@ spec:
labels:
app: messagegateway-rpc-server
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: openim-msggateway-container
image: openim/openim-msggateway:v3.8.3
image: openim-msggateway:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -6,7 +6,7 @@ spec:
selector:
app: messagegateway-rpc-server
ports:
- name: longConnServer-10001
- name: longconnserver-10001
protocol: TCP
port: 10001
targetPort: 10001

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: openim-msgtransfer-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: openim-msgtransfer-server
@ -14,7 +14,8 @@ spec:
spec:
containers:
- name: openim-msgtransfer-container
image: openim/openim-msgtransfer:v3.8.3
# image: openim/openim-msgtransfer:v3.8.3
image: openim-msgtransfer:test
env:
- name: CONFIG_PATH
value: "/config"
@ -33,6 +34,11 @@ spec:
secretKeyRef:
name: openim-mongo-secret
key: mongo_openim_password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD
valueFrom:
secretKeyRef:

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: push-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: push-rpc-server
@ -14,7 +14,8 @@ spec:
spec:
containers:
- name: push-rpc-server-container
image: openim/openim-push:v3.8.3
# image: openim/openim-push:v3.8.3
image: openim-push:test
env:
- name: CONFIG_PATH
value: "/config"
@ -23,6 +24,11 @@ spec:
secretKeyRef:
name: openim-redis-secret
key: redis-password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD
valueFrom:
secretKeyRef:

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: auth-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: auth-rpc-server
@ -12,10 +12,12 @@ spec:
labels:
app: auth-rpc-server
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: auth-rpc-server-container
image: openim/openim-rpc-auth:v3.8.3
imagePullPolicy: Never
image: openim-rpc-auth:test
imagePullPolicy: IfNotPresent
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: conversation-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: conversation-rpc-server
@ -12,9 +12,11 @@ spec:
labels:
app: conversation-rpc-server
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: conversation-rpc-server-container
image: openim/openim-rpc-conversation:v3.8.3
image: openim-rpc-conversation:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: friend-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: friend-rpc-server
@ -12,9 +12,11 @@ spec:
labels:
app: friend-rpc-server
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: friend-rpc-server-container
image: openim/openim-rpc-friend:v3.8.3
image: openim-rpc-friend:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: group-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: group-rpc-server
@ -12,9 +12,11 @@ spec:
labels:
app: group-rpc-server
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: group-rpc-server-container
image: openim/openim-rpc-group:v3.8.3
image: openim-rpc-group:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: msg-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: msg-rpc-server
@ -14,7 +14,8 @@ spec:
spec:
containers:
- name: msg-rpc-server-container
image: openim/openim-rpc-msg:v3.8.3
# image: openim/openim-rpc-msg:v3.8.3
image: openim-rpc-msg:test
env:
- name: CONFIG_PATH
value: "/config"
@ -33,6 +34,11 @@ spec:
secretKeyRef:
name: openim-mongo-secret
key: mongo_openim_password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD
valueFrom:
secretKeyRef:

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: third-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: third-rpc-server
@ -12,9 +12,11 @@ spec:
labels:
app: third-rpc-server
spec:
imagePullSecrets:
- name: docker-secret
containers:
- name: third-rpc-server-container
image: openim/openim-rpc-third:v3.8.3
image: openim-rpc-third:test
env:
- name: CONFIG_PATH
value: "/config"

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
name: user-rpc-server
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: user-rpc-server
@ -14,7 +14,8 @@ spec:
spec:
containers:
- name: user-rpc-server-container
image: openim/openim-rpc-user:v3.8.3
# image: openim/openim-rpc-user:v3.8.3
image: openim-rpc-user:test
env:
- name: CONFIG_PATH
value: "/config"
@ -33,6 +34,11 @@ spec:
secretKeyRef:
name: openim-mongo-secret
key: mongo_openim_password
- name: IMENV_KAFKA_USERNAME
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: IMENV_KAFKA_PASSWORD
valueFrom:
secretKeyRef:

View File

@ -3,23 +3,24 @@ kind: Ingress
metadata:
name: openim-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
ingressClassName: openim-nginx
ingressClassName: nginx
rules:
- http:
- host: openim-api.localtest.me
http:
paths:
- path: /openim-api
pathType: Prefix
- path: /api/(.*)
pathType: ImplementationSpecific
backend:
service:
name: openim-api-service
port:
number: 10002
- path: /openim-msggateway
pathType: Prefix
- path: /msg_gateway/(.*)
pathType: ImplementationSpecific
backend:
service:
name: openim-msggateway-service
name: messagegateway-rpc-service
port:
number: 10001

View File

@ -0,0 +1,35 @@
# HTTPS Ingress (TLS + cert-manager)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: openim-ingress-https
namespace: default
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "true"
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- openim-api.localtest.me
secretName: openim-api-tls
rules:
- host: openim-api.localtest.me
http:
paths:
- path: /api/(.*)
pathType: ImplementationSpecific
backend:
service:
name: openim-api-service
port:
number: 10002
- path: /msg_gateway/(.*)
pathType: ImplementationSpecific
backend:
service:
name: messagegateway-rpc-service
port:
number: 10001

View File

@ -5,7 +5,7 @@ metadata:
name: service-reader
rules:
- apiGroups: [""]
resources: ["services", "endpoints"]
resources: ["services", "endpoints", "pods"]
verbs: ["get", "list", "watch"]
---

View File

@ -0,0 +1,18 @@
apiVersion: v1
kind: Secret
metadata:
name: docker-secret
namespace: default
type: kubernetes.io/dockerconfigjson
stringData:
.dockerconfigjson: |
{
"auths": {
"your.registry.com": {
"username": "username",
"password": "psw",
"email": "openim@example.com",
"auth": "dXNlcm5hbWU6cHN3"
}
}
}

View File

@ -3,5 +3,8 @@ kind: Secret
metadata:
name: openim-kafka-secret
type: Opaque
data:
stringData:
inter-broker-user: ""
inter-broker-password: ""
kafka-username: ""
kafka-password: ""

View File

@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-minio-secret
type: Opaque
stringData:
minio-root-user: root
minio-root-password: openIM123

View File

@ -0,0 +1,11 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-secret
type: Opaque
stringData:
mongo_initdb_root_username: root
mongo_initdb_root_password: openIM123
mongo_initdb_database: openim_v3
mongo_openim_username: openIM
mongo_openim_password: openIM123

View File

@ -3,5 +3,5 @@ kind: Secret
metadata:
name: openim-redis-secret
type: Opaque
data:
redis-password: b3BlbklNMTIz # "openIM123" in base64
stringData:
redis-password: openIM123

View File

@ -0,0 +1,9 @@
apiVersion: v1
kind: Secret
metadata:
name: openim-api-tls
namespace: default
type: kubernetes.io/tls
stringData:
tls.crt: <tls.crt>
tls.key: <tls.key>

View File

@ -5,7 +5,7 @@ metadata:
labels:
app: kafka
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: kafka
@ -49,6 +49,26 @@ spec:
value: "CONTROLLER"
- name: KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE
value: "true"
- name: KAFKA_INTER_BROKER_USER
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: inter-broker-user
- name: KAFKA_INTER_BROKER_PASSWORD
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: inter-broker-password
- name: KAFKA_CLIENT_USER
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-username
- name: KAFKA_CLIENT_PASSWORD
valueFrom:
secretKeyRef:
name: openim-kafka-secret
key: kafka-password
volumeMounts:
- name: kafka-data
mountPath: /bitnami/kafka

View File

@ -5,7 +5,7 @@ metadata:
labels:
app: minio
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: minio

View File

@ -4,7 +4,7 @@ metadata:
name: mongo-statefulset
spec:
serviceName: "mongo"
replicas: 2
replicas: 1
selector:
matchLabels:
app: mongo
@ -47,27 +47,27 @@ spec:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: openim-mongo-init-secret
name: openim-mongo-secret
key: mongo_initdb_root_username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: openim-mongo-init-secret
name: openim-mongo-secret
key: mongo_initdb_root_password
- name: MONGO_INITDB_DATABASE
valueFrom:
secretKeyRef:
name: openim-mongo-init-secret
name: openim-mongo-secret
key: mongo_initdb_database
- name: MONGO_OPENIM_USERNAME
valueFrom:
secretKeyRef:
name: openim-mongo-init-secret
name: openim-mongo-secret
key: mongo_openim_username
- name: MONGO_OPENIM_PASSWORD
valueFrom:
secretKeyRef:
name: openim-mongo-init-secret
name: openim-mongo-secret
key: mongo_openim_password
- name: TZ
value: "Asia/Shanghai"
@ -94,15 +94,3 @@ spec:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-init-secret
type: Opaque
data:
mongo_initdb_root_username: cm9vdA== # base64 for "root"
mongo_initdb_root_password: b3BlbklNMTIz # base64 for "openIM123"
mongo_initdb_database: b3BlbmltX3Yz # base64 for "openim_v3"
mongo_openim_username: b3BlbklN # base64 for "openIM"
mongo_openim_password: b3BlbklNMTIz # base64 for "openIM123"

View File

@ -4,7 +4,7 @@ metadata:
name: redis-statefulset
spec:
serviceName: "redis"
replicas: 2
replicas: 1
selector:
matchLabels:
app: redis
@ -24,7 +24,7 @@ spec:
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-secret
name: openim-redis-secret
key: redis-password
volumeMounts:
- name: redis-data

View File

@ -58,10 +58,9 @@ func (m *MsgGatewayCmd) Exec() error {
func (m *MsgGatewayCmd) runE() error {
m.msgGatewayConfig.Index = config.Index(m.Index())
rpc := m.msgGatewayConfig.MsgGateway.RPC
var prometheus config.Prometheus
return startrpc.Start(
m.ctx, &m.msgGatewayConfig.Discovery,
&prometheus,
&m.msgGatewayConfig.MsgGateway.Prometheus,
rpc.ListenIP, rpc.RegisterIP,
rpc.AutoSetPorts,
rpc.Ports, int(m.msgGatewayConfig.Index),

View File

@ -110,9 +110,13 @@ func (r *RootCmd) persistentPreRun(cmd *cobra.Command, opts ...func(*CmdOpts)) e
if err := r.initializeLogger(cmdOpts); err != nil {
return errs.WrapMsg(err, "failed to initialize logger")
}
if err := r.etcdClient.Close(); err != nil {
return errs.WrapMsg(err, "failed to close etcd client")
if r.etcdClient != nil {
if err := r.etcdClient.Close(); err != nil {
return errs.WrapMsg(err, "failed to close etcd client")
}
}
return nil
}

View File

@ -35,7 +35,8 @@ func NewDiscoveryRegister(discovery *config.Discovery, watchNames []string) (dis
return standalone.GetSvcDiscoveryRegistry(), nil
}
if runtimeenv.RuntimeEnvironment() == config.KUBERNETES {
return kubernetes.NewConnManager(discovery.Kubernetes.Namespace, nil,
return kubernetes.NewConnManager(discovery.Kubernetes.Namespace,
watchNames,
grpc.WithDefaultCallOptions(
grpc.MaxCallSendMsgSize(1024*1024*20),
),

View File

@ -27,7 +27,7 @@ func TestName111111(t *testing.T) {
"172.16.8.124:7006",
},
RedisMode: "cluster",
Password: "passwd123",
Password: "passwd123",
//Address: []string{"localhost:16379"},
//Password: "openIM123",
}

View File

@ -72,7 +72,7 @@ func Main(conf string, del time.Duration) error {
if err != nil {
return err
}
mongodbConfig, err := readConfig[config.Mongo](conf, config.MongodbConfigFileName)
if err != nil {
return err