测试环境搭建流程

这篇是搭建测试环境的操作手册,整理给自己和团队成员参考用。

背景是项目从开发转测时,需要在一台干净的 CentOS7 服务器上从头搭起来:基础中间件、CI/CD 环境、微服务部署,整套跑通。记录下来,下次换机器或者新人入职可以直接照着走。

前置假设:CentOS7.6,已安装 Docker,已有 GitLab/Minio/MySQL/Redis/RabbitMQ 等基础资源(如果没有,参考下面的基础中间件启动部分)。


0. 基础中间件 Docker 启动

这部分适用于没有独立中间件服务器的情况,直接在当前机器上用 Docker 启动。

MySQL

docker run -p 3306:3306 --name mysql \
-v /home/mydata/mysql/db:/var/lib/mysql \
-v /home/mydata/mysql/conf:/etc/mysql/conf.d \
-v /home/mydata/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=your_password \
--restart=always \
-d mysql:8.0.27 --lower_case_table_names=1 --server-id=3306

自定义配置文件放在 /home/mydata/mysql/conf/my.cnf,常用配置:

[mysqld]
max_connections=1000
sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

Redis

docker run -p 6379:6379 --name redis \
-v /home/mydata/redis/data:/data \
--restart=always \
-d redis:6.2.6 redis-server --appendonly yes

MinIO(文件服务器)

docker run -p 9001:9001 -p 9000:9000 \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=your_access_key" \
-e "MINIO_SECRET_KEY=your_secret_key" \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
minio/minio server /data \
--console-address ":9001" -address ":9000"

Nacos(配置/注册中心)

docker run -d --name nacos -p 8848:8848 \
--env MODE=standalone \
--env JVM_XMS=256m \
--env JVM_XMX=256m \
--env JVM_XMN=128m \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=192.168.2.110 \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_DB_NAME=nacos_config \
--env MYSQL_SERVICE_USER=root \
--env MYSQL_SERVICE_PASSWORD=your_password \
nacos/nacos-server:v2.1.1-slim

使用 MySQL 持久化 Nacos 配置,需提前建 nacos_config 库并执行 Nacos 官方初始化 SQL


1. 宿主机环境安装

安装 JDK11、Maven3.6.3、Node.js 14(从华为云镜像下载速度快)。

# 解压到 /home 目录
tar -zxvf openjdk-11.0.2_linux-x64_bin.tar.gz -C /home/
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /home/
tar -zxvf node-v14.18.1-linux-x64.tar.gz -C /home/

配置环境变量:

vim /etc/profile

追加:

# Java
export JAVA_HOME=/home/jdk-11.0.2
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

# Maven
export MAVEN_HOME=/home/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

# Node.js
export NODEJS=/home/node-v14.18.1
export PATH=$NODEJS/bin:$PATH
source /etc/profile   # 使配置生效
java -version # 验证
mvn -v
node -v

2. Docker 安装与迁移

安装 Docker

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
systemctl start docker
systemctl enable docker

迁移 Docker 数据目录(重要!)

默认 Docker 数据存在 /var/lib/docker(系统盘),生产/测试环境的系统盘往往很小,跑几次 CI/CD 就满了。建议挂载到数据盘。

# 1. 停止 Docker
systemctl stop docker

# 2. 复制现有数据
cp -arf /var/lib/docker /home/

# 3. 修改 Docker 服务配置,指定新路径
vim /usr/lib/systemd/system/docker.service
# 在 ExecStart 后面添加: --data-root=/home/docker
# ExecStart=/usr/bin/dockerd --data-root=/home/docker

# 4. 重新加载配置并启动
systemctl daemon-reload
systemctl start docker

# 5. 验证
docker info | grep "Docker Root Dir"
# Docker Root Dir: /home/docker

# 6. 确认镜像存在后,删除旧目录
# rm -rf /var/lib/docker

3. Jenkins 部署

用 Docker 跑 Jenkins,同时挂载宿主机的 JDK/Maven/Node.js,让 Jenkins 容器内的构建脚本能调用这些工具:

docker run -d \
-p 10000:8080 \
-p 10001:50000 \
-v /home/jenkins/jenkins_home:/var/jenkins_home \
-v /home/jdk-11.0.2:/usr/local/jdk \
-v /home/apache-maven-3.6.3:/usr/local/maven \
-v /home/node-v14.18.1:/usr/local/node \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/localtime:/etc/localtime \
-u root \
--privileged=true \
--name jenkins \
jenkins/jenkins

挂载完成后,在容器内建立软连接,让 shell 脚本能直接调用:

docker exec -it jenkins bash

# 容器内执行
ln -s /usr/local/jdk/bin/* /usr/local/bin/
ln -s /usr/local/maven/bin/* /usr/local/bin/
ln -s /usr/local/node/bin/* /usr/local/bin/

Jenkins 插件安装速度慢:进入「系统管理 → 插件管理 → 高级」,替换插件升级站点为清华镜像:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

初始化时检测失败可以跳过,后续手动安装必要插件(Git、Pipeline、Maven Integration 等)。


4. Nginx 部署(按需)

# 先临时启动,拷贝默认配置
docker run -p 80:80 --name nginx-tmp -d nginx
docker cp nginx-tmp:/etc/nginx /mydata/nginx/conf
docker stop nginx-tmp && docker rm nginx-tmp

# 正式启动,映射配置和静态文件目录
docker run -p 80:80 -p 443:443 -p 8080:8080 \
--name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
--restart=always \
-d nginx

反向代理配置(在 /mydata/nginx/conf/conf.d/ 下新建 .conf 文件):

server {
listen 80;
server_name your-domain.com;

location / {
proxy_pass http://192.168.1.60:9009;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

5. 常用运维操作

限制容器内存

防止某个容器把整台机器内存吃光:

# 启动时限制
docker run -m 4g --memory-swap -1 --name myapp myapp:latest

# 对已运行容器更新内存限制
docker stop myapp
docker update myapp -m 6g --memory-swap -1
docker start myapp

参数说明:

  • -m 4g:内存上限 4G
  • --memory-swap -1:不限制 Swap 使用量(只设 -m 不设这个,默认 swap = 2×memory)

查看容器资源使用

docker stats                    # 实时查看所有容器的 CPU/内存
docker stats myapp # 只看指定容器
docker stats --no-stream # 只输出一次(适合脚本)

yum 镜像失效时切换阿里源

CentOS7 官方镜像站已停止维护,yum update 可能报错,替换为阿里源:

cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.backup
wget https://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
yum clean all
yum makecache