搭建测试环境详细步骤
上周帮一个朋友调他的搭建新项目,本地跑得好好的测试,一推到测试环境就报数据库连接超时。环境折腾了三个小时,详细最后发现是步骤测试机的防火墙没放行 3306 端口。这种事我遇到过不下十次,搭建所以干脆把搭建测试环境的测试流程写下来,省得每次都要重新踩一遍坑。环境
先搞一台干净的详细机器。不管是步骤虚拟机、云主机还是搭建公司机房里那台落了灰的旧服务器,都行。测试我的环境习惯是用 Ubuntu 22.04 LTS,镜像去官网下,详细别用来路不明的步骤第三方包。装系统时勾上 OpenSSH Server,后面用 SSH 连过去操作方便得多。装完第一件事不是急着装软件,先更新源:
sudo apt update && sudo apt upgrade -y 这一步别偷懒。我有次跳过更新直接装 Docker,结果因为内核版本太旧,容器死活起不来,白白浪费一下午。
装基础依赖,别一个个手动来
测试环境通常要跑数据库、缓存、消息队列这些东西。手动装当然可以,但太慢,而且容易漏。我的做法是写一个 setup.sh,把常用工具一次性装齐:
sudo apt install -y curl wget git vim htop net-tools ufw net-tools 里有 netstat,排查端口占用时特别管用。ufw 是防火墙管理工具,比直接敲 iptables 命令友好太多。装完这些,再装 Docker 和 Docker Compose。官方脚本最省事:
curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USER 注意第二行,把当前用户加进 docker 组,不然每次都要 sudo,烦。加完组要重新登录一次才生效,这个坑我踩过,当时还以为权限配置错了。
用 Docker Compose 编排服务
测试环境最怕的就是“在我机器上能跑”。Docker 能解决大部分环境差异问题,但前提是镜像版本要锁死。我见过有人用 mysql:latest,结果某天官方更新了镜像,测试环境直接崩了,查了半天才发现是数据库版本变了。
所以 docker-compose.yml 里所有镜像都写明确版本号,比如 mysql:8.0.36、redis:7.2-alpine。下面是一个典型的测试环境编排文件:
version: '3.8' services: db: image: mysql:8.0.36 environment: MYSQL_ROOT_PASSWORD: test123 MYSQL_DATABASE: app_test ports: - "3306:3306" volumes: - ./data/mysql:/var/lib/mysql cache: image: redis:7.2-alpine ports: - "6379:6379" app: build: . ports: - "8080:8080" depends_on: - db - cache 数据卷挂载到本地目录,这样容器删了数据还在,下次重建不用重新初始化数据库。测试环境的数据本来就不重要,但每次都要跑一遍建表脚本也挺烦的。
防火墙和端口,最容易翻车的地方
前面说的那个朋友,就是卡在这里。Ubuntu 默认的 ufw 是关闭的,但云服务商通常还有一层安全组。两层都要放行,缺一不可。ufw 的规则很简单:
sudo ufw allow 22/tcp sudo ufw allow 8080/tcp sudo ufw enable 注意先放行 22 端口再启用,不然 SSH 直接断掉,只能去控制台救急。云服务商的安全组规则在网页控制台里配,每个厂商的界面不一样,但逻辑都是“入方向放行指定端口”。
配完之后用 telnet 或者 nc 从另一台机器测一下端口通不通。我习惯用 nc -zv 测试机IP 8080,返回 succeeded 就说明通了。如果不通,先查 ufw 状态,再查安全组,最后查服务本身有没有监听在 0.0.0.0 而不是 127.0.0.1。
验证和收尾
环境搭好之后,跑一遍冒烟测试。不用太复杂,能连上数据库、能读写缓存、应用健康检查接口返回 200 就行。我一般写个简单的 shell 脚本,把这些检查串起来,以后每次重建环境跑一遍,省得手动点。
还有个小细节:测试环境的日志别只输出到控制台。Docker 默认的日志驱动会把日志存到 /var/lib/docker/containers/ 下面,时间长了占满磁盘。在 docker-compose.yml 里加一行 logging 配置,限制单个日志文件大小和数量:
logging: driver: "json-file" options: max-size: "10m" max-file: "3" 这样每个容器最多占 30MB 日志空间,测试环境够用了。生产环境另说,但测试环境真没必要留那么多日志。
整套流程走下来,熟练的话半小时能搞定。第一次搭可能会慢一些,主要是等系统更新和镜像下载。搭完之后把脚本和配置文件丢进 Git 仓库,下次换台机器直接 git clone 再跑一遍脚本,省事。









