在现代应用部署中,容器化技术已成为提升开发效率、保证环境一致性的核心手段。本文将手把手带你完成在 CentOS 7 服务器上,利用 Docker 容器技术部署 PostgreSQL 数据库与 Redis 缓存服务的完整流程。这不仅是一份操作手册,更融入了架构设计思考与生产环境最佳实践,助你构建稳定、可维护的后端服务基石。

一、环境准备与系统检查

在开始部署之前,充分的准备工作是成功的一半。对于 CentOS 7 这类已停止主流维护的系统,尤其需要注意软件源的可用性及系统基础状态。我们首先需要在两台目标服务器(例如 ad-db 和 ad-app)上执行统一的检查与配置。

核心检查点包括:

  • 系统版本确认:确保操作系统版本符合预期,避免因版本差异导致的兼容性问题。
  • 资源状态评估:检查 CPU、内存和磁盘空间,为后续的容器运行预留足够资源。
  • 权限验证:确认操作账号拥有必要的 sudo 权限,这是顺利执行安装命令的前提。

执行以下命令来完成前置检查:

cat /etc/os-release
free -h    # 内存
df -h      # 磁盘
nproc      # CPU核心数
sudo -l

由于 CentOS 7 官方源已归档,直接使用默认 yum 源可能会失败。因此,修复 yum 源指向可行的镜像站是必须的步骤,这能保证后续软件包的正常安装。

CentOS 7 已于 2024 年 6 月停止维护,默认源已失效,需切换至阿里云归档源。

# 备份旧源
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/backup/
# 换成阿里云归档源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 清除缓存并重建
sudo yum clean all
sudo yum makecache

二、Docker 引擎的安装与基础配置

Docker 作为本次部署的核心,其安装与配置至关重要。我们选择通过阿里云镜像源进行安装,以获得更快的下载速度。安装过程遵循标准的 Linux 软件管理流程。

安装步骤详解:

  1. 安装依赖包:为 Docker 准备必要的系统工具和库文件。
  2. 配置软件源:添加 Docker 官方源或国内镜像源(如阿里云),加速安装过程。
  3. 安装与启动:安装 Docker 社区版(Docker CE),并设置开机自启,确保服务持久化。

具体执行命令序列如下:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io --skip-broken

⚠️ 若下载中途报网络超时,重新执行上面这条命令即可。

安装完成后,启动 Docker 服务并进行验证,确保 Docker 守护进程正常运行,并且可以执行基础命令。

sudo systemctl start docker
sudo systemctl enable docker
sudo docker version

基础安装后,通常需要对 Docker 进行一些优化配置,例如配置镜像加速器以提升拉取镜像的速度,这对于国内环境尤其重要。这里我们配置阿里云容器镜像加速服务。

将 Docker 数据目录指向 ,避免占用根分区空间。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com",
"https://dockerhub.icu",
"https://docker.rainbond.cc"
],
"data-root": "/data/docker"
}
EOF
sudo systemctl restart docker
sudo docker info | grep -A 5 "Registry Mirrors"
[AFFILIATE_SLOT_1]

三、使用 Docker 部署 PostgreSQL 18 数据库

我们将 PostgreSQL 部署在专用的数据库服务器(ad-db)上。采用 Docker 部署的优势在于环境隔离、版本管理方便以及数据目录的灵活挂载。

部署要点与最佳实践:

  • 数据持久化:务必通过 -v 参数将容器内的数据目录挂载到宿主机,防止容器销毁时数据丢失。
  • 网络与端口:映射宿主机端口(如 5432)到容器内部端口,并考虑使用自定义 Docker 网络以便于容器间通信。
  • 安全配置:通过环境变量设置强密码,避免使用默认或弱密码。

首先,在宿主机上创建用于持久化存储的数据目录:

sudo mkdir -p /data/postgresql/data
sudo mkdir -p /data/postgresql/logs
# postgres 容器内用户 UID 为 999
sudo chown -R 999:999 /data/postgresql

随后,拉取指定版本的 PostgreSQL 镜像。这里我们选择最新的 PostgreSQL 18 版本。

⚠️ Docker Hub 在国内访问受限,使用第三方镜像源拉取:

sudo docker pull docker.1panel.live/library/postgres:18
# 打标签重命名为标准名称
sudo docker tag docker.1panel.live/library/postgres:18 postgres:18

接下来是启动容器的关键命令,其中包含了端口映射、数据卷挂载、环境变量设置等参数:

sudo docker run -d \
--name postgresql \
--restart always \
-e POSTGRES_PASSWORD=wWw.71AD.COM \
-e POSTGRES_USER=postgres \
-e PGDATA=/var/lib/postgresql/data \
-v /data/postgresql/data:/var/lib/postgresql/data \
-v /data/postgresql/logs:/var/log/postgresql \
-p 5432:5432 \
postgres:18

容器启动后,需要验证其运行状态,并进入容器进行必要的数据库初始化操作,例如创建应用所需的数据库和用户。

sudo docker ps | grep postgresql
sudo docker logs postgresql

日志中看到 即表示启动成功。

sudo docker exec -it postgresql psql -U postgres
-- 创建用户
CREATE USER django_user WITH PASSWORD 'gjgg71AD63638369';
-- 创建数据库
CREATE DATABASE django_db OWNER django_user;
-- 授权
GRANT ALL PRIVILEGES ON DATABASE django_db TO django_user;
-- 确认结果
\l
\du
\q

四、在宿主机部署 Redis 7 缓存服务

考虑到 Redis 对性能的极致要求以及某些场景下对宿主机网络和存储的直接访问需求,我们选择在应用服务器(ad-app)上通过 yum 直接安装 Redis,而非使用 Docker。这种方式可以减少容器化带来的微小性能开销和网络复杂度。

Redis 选择原生安装,CentOS 7 默认源版本过旧,使用 Remi 源安装 Redis 7。

CentOS 7 默认的 yum 源可能不包含较新版本的 Redis,因此我们需要先添加包含 Redis 7 的第三方源(如 Remi 源)。

安装与安全加固步骤:

  1. 添加软件源:启用 Remi 仓库以获取 Redis 7。
  2. 安装与启动:安装 Redis 服务器端并启用服务。
  3. 配置密码认证这是生产环境必须的步骤,在配置文件中启用并设置 requirepass 参数。
  4. 连接验证:使用 redis-cli 工具测试密码认证是否生效。

具体命令如下:

sudo yum install -y epel-release
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install -y yum-utils
sudo yum install -y redis --enablerepo=remi
sudo systemctl start redis
sudo systemctl enable redis
sudo systemctl status redis

接下来是关键的密码配置环节。编辑 Redis 的主配置文件:

sudo nano /etc/redis.conf

找到关于密码的配置行,默认是注释掉的:

# requirepass foobared

将其修改为你的强密码,例如:

requirepass 密码

保存配置后,重启 Redis 服务使配置生效:

sudo systemctl restart redis

最后,使用 redis-cli 验证密码是否设置成功:

# 不带密码(应被拒绝)
redis-cli ping
# 带密码(应返回 PONG)
redis-cli -a 密码 ping
[AFFILIATE_SLOT_2]

五、部署总结与运维命令

至此,一个基于 Docker 和原生安装的混合架构已经搭建完成。PostgreSQL 运行在 Docker 容器中,实现了良好的隔离和便捷的迁移;Redis 则以原生方式运行,追求极致的性能。以下是部署后的关键信息汇总:

服务账号密码汇总(请妥善保管):

项目
端口5432
超级管理员postgres
超级管理员密码*********
Django 用户django_user
Django 用户密码*********
Django 数据库django_db
项目
端口6379
密码*********

掌握常用的维护命令对于日常运维至关重要:

PostgreSQL 常用命令:

# 查看容器状态
sudo docker ps | grep postgresql
# 查看日志
sudo docker logs -f postgresql
# 进入数据库
sudo docker exec -it postgresql psql -U postgres
# 停止 / 启动 / 重启
sudo docker stop postgresql
sudo docker start postgresql
sudo docker restart postgresql
# 备份数据库
sudo docker exec postgresql pg_dump -U postgres django_db > /data/postgresql/backup_$(date +%Y%m%d).sql
# 恢复数据库
sudo docker exec -i postgresql psql -U postgres django_db < /data/postgresql/backup_20240101.sql

Redis 常用命令:

# 查看状态
sudo systemctl status redis
# 停止 / 启动 / 重启
sudo systemctl stop redis
sudo systemctl start redis
sudo systemctl restart redis
# 进入 Redis 命令行
redis-cli -a 密码
# 查看所有 key
redis-cli -a 密码 keys '*'
# 清空缓存
redis-cli -a 密码 flushall

最后,通过一个简单的架构图来回顾我们的部署成果:

┌─────────────────────────────┐         ┌──────────────────────────────┐
│  ad-app  10.60.9.x          │         │  ad-db  10.60.9.y         │
│                             │  5432   │                              │
│  Django(Docker)           │────────▶│  Docker                      │
│  Redis 7(原生)             │         │   └── PostgreSQL 18.3        │
│  Celery                     │         │        /data/postgresql/data │
└─────────────────────────────┘         └──────────────────────────────┘

文档生成时间:2026-03-11
适用环境:CentOS 7 + Docker 26.1.4 + PostgreSQL 18.3 + Redis 7

本文详细介绍了在 CentOS 7 上从零开始搭建 Docker 环境,并分别部署 PostgreSQL 和 Redis 的完整过程。这种混合部署策略兼顾了容器化的便利性与原生部署的性能优势,是许多中小型项目理想的起步架构。随着业务增长,你可以考虑引入 Docker Compose 进行多容器编排,或进一步向 Kubernetes 迁移,以实现更高级别的自动化和可扩展性。

/data/dockerdatabase system is ready to accept connections