mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 11:22:10 +08:00 
			
		
		
		
	* fix: fix bin tools path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: fix golang release file path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: fix golang release file path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: fix scripts and optimize Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: fix scripts path module Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: sync script code Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add lib and start scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * ci: add copyright scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * ci: add go-docs file and copyright scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add scripts cross ower Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * style: Formatting code make lint path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * style: Formatting code make lint path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * style: Formatting code make lint path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * style: Formatting code make lint path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: chat scripts path bug Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: channge smail images Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add makefile feature Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add config and images log Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * style: Migrate directory to remove docker to images Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * style: formatting style Code Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: set opneim's bash logs Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: option scripts and docs Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add git cherry Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add git cherry Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save all bash and docs labels Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: scripts feature extend Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add config path config Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add config path config Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add feat scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add save scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add save scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add sctips help Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add start sctips help Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save scripts file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save all file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add openim server template file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add alot of system design Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save all file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save all file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add env config options Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more robot details Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more module explain Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add scripts environment details design Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add openim msgtransfer scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add openim msgtransfer scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more design scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add file save Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add file save Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add rpc build and start Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add rpc build and start Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add rpc build and start Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save all images file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add scripts set Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add test options Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: fix config path file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: update config file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: update config file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: update config file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: update config file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add readme docs Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save build scripts Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add all actions file Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add chat scripts name Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add all compose Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: commit tag Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save server code Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add docker compose fix Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add docker compose fix Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add docker compose fix Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: save server code Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: optimize dockerfile option Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: optimize dockerfile option Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: optimize dockerfile option Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add all options Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add all options Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more scrips Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more options Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add more options Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add config path Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: Add some optimizations Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * fix: Add some optimizations Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * Delete go.work.sum * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * Update .env * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add docker compose fix Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: add docker compose fix Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> * feat: delele go work sum Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com> --------- Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com>
		
			
				
	
	
		
			221 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			221 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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/marmotedu/iam/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/marmotedu/iam/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
 | 
						||
```
 |