服务器服务管理

介绍服务器软件如何管理

介绍一下服务器中服务管理的方法。

服务器服务管理

管理技术选型

在服务器服务管理中,选择合适的管理技术至关重要。当前,虚拟化技术因其高效性和灵活性,成为管理容器的首选方案。基于此,Docker 被选为运行各项服务的基础平台。Docker 不仅提供了轻量级的虚拟化环境,还能确保应用在不同环境中的一致性,极大地简化了部署和迁移过程。

然而,直接使用 docker run 命令来运行各个服务存在一定的局限性,尤其是在服务数量增多时,难以进行有效的归类整理和统一管理。为了解决这一问题,docker-compose 被选为服务管理工具。docker-compose 允许通过一个简单的 YAML 文件定义和管理多个容器,极大地提高了服务的可维护性和可扩展性。

关于为什么不使用 Kubernetes (k8s) 或 k3s 等更复杂的容器编排系统,主要原因在于它们的体量较大,适合大规模、高可用性的生产环境。在企业生产实践中,为了保证服务的高可用性,通常会采用多实例部署,并依赖滚动更新、自动重启等功能。然而,对于当前场景,服务的体量较小,且对高可用性的要求相对较低。更倾向于在服务出现问题时,通过及时通知和手动干预来恢复服务,而不是依赖复杂的自动化机制。因此,选择 docker-compose 不仅简化了管理流程,还降低了系统的复杂性和维护成本。

综上所述,基于当前的需求和技术特点,使用 Docker 结合 docker-compose 是一种既高效又实用的服务器服务管理方案。

文件夹结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
- deployment-configs
|-- scripts           # 用于管理服务的实用程序脚本
|  |-- start-all.sh     # 启动所有服务
|  |-- stop-all.sh      # 关闭所有服务
|-- services          # 包含各个服务的配置
|  |-- bark               # bark 通知服务
|  |  |-- data               # bark 数据存醋
|  |  |-- docker-compose.yml # bark 启动配置
|  |-- mysql              # mysql 数据库
|  |  |-- data               # mysql 数据存醋
|  |  |-- docker-compose.yml # mysql 启动配置
|  |  |-- logs               # mysql 日志文件位置
|  |  |-- my.cnf             # mysql 相关配置
|-- shared            # 包括环境变量和网络设置等共享配置
|  |-- common.env       # 通用环境变量
|-- README.md         # 介绍各个服务和相关命令

提供一下脚本,可直接执行,创建响应的目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 创建根目录
mkdir -p deployment-configs

# 进入根目录
cd deployment-configs

# 创建 scripts 目录及其文件
mkdir -p scripts

# 创建 start-all.sh 文件
touch scripts/start-all.sh
# 写入以下内容到 start-all.sh 文件
cat << 'EOF' > scripts/start-all.sh
#!/usr/bin/env bash

# Start all services defined in the 'services' directory

echo "Starting all services..."

# Loop through each service directory and bring up the service
for service in services/*; do
  if [ -d "$service" ]; then
    echo "Starting service: $service"
    cd "$service" || continue
    docker-compose up -d
    cd - || continue
  fi
done

echo "All services started."
EOF

# 创建 stop-all.sh 文件
touch scripts/stop-all.sh
# 写入 stop-all.sh 内容
cat << 'EOF' > scripts/stop-all.sh
#!/usr/bin/env bash

# Stop all services defined in the 'services' directory

echo "Stopping all services..."

# Loop through each service directory and bring down the service
for service in services/*; do
  if [ -d "$service" ]; then
    echo "Stopping service: $service"
    cd "$service" || continue
    docker-compose down
    cd - || continue
  fi
done

echo "All services stopped."
EOF


# 创建 services 目录
mkdir -p services/

# 创建 shared 目录及其文件
mkdir -p shared
touch shared/common.env

# 创建 README.md 文件
touch README.md
cat << 'EOF' > README.md
# Deployment Configs

## Overview

This repository contains configuration files and setups for deploying services using Docker Compose. It is organized into modular directories for individual services and shared resources.

## Structure

- `services/`: Contains configurations for individual services.
- `shared/`: Includes shared configurations such as environment variables and network settings.
- `scripts/`: Utility scripts for managing services.

EOF


# 设置文件权限(可选)
chmod +x scripts/start-all.sh
chmod +x scripts/stop-all.sh

如何保留空文件夹

在使用 Git 进行服务管理和同步时,通常不希望将 datalogs 等文件夹中的文件同步到远程仓库,因为这些文件可能包含临时数据或敏感信息。为了避免这些文件被同步,可以通过配置 .gitignore 文件来忽略它们,例如:

1
2
3
4
**/data/*
**/logs/*
**/cert/*
**/nginx/files/**

然而,配置忽略规则后,在推送代码到远程仓库或从远程仓库拉取代码时,这些文件夹将不会被创建。这可能导致在运行 docker-compose up -d 启动服务时出现问题,因为某些服务可能依赖这些文件夹的存在。

为了解决这一问题,既需要避免将文件夹中的文件同步到远程仓库,又需要确保这些空文件夹能够被传输到远程并在拉取时保留,可以在每个需要保留的文件夹中添加一个 .gitignore 文件,并在其中配置规则,使其不忽略自身。具体方法如下:

1
echo -e '*\n!.gitignore' >> .gitignore

上述命令会在 .gitignore 文件中添加两行内容:第一行 * 表示忽略该文件夹中的所有文件,第二行 !.gitignore 表示不忽略 .gitignore 文件本身。这样,Git 会保留空文件夹及其中的 .gitignore 文件,同时忽略其他文件,从而满足服务启动时的依赖需求。

通过这种方式,既避免了不必要文件的同步,又确保了文件夹结构的完整性。

Built with Hugo
Theme Stack designed by Jimmy