环境准备:Linux服务器初始化、Docker与Docker Compose安装、网络规划与端口分配
网关部署这事儿,说难不难,说简单也不简单。我见过太多人一上来就急着跑容器,结果服务器没初始化好,网络端口冲突,折腾半天连个网关都起不来。嗯,咱们先把地基打牢。
这一章,我会带你走完三件事:Linux服务器初始化、Docker与Docker Compose安装、网络规划与端口分配。每一步我都会把我在项目中踩过的坑、总结的经验揉进去。
核心原则:服务器初始化是网关稳定运行的基石。别图快,每一步都要稳。
3.1 Linux服务器初始化
我个人习惯用 Ubuntu 20.04 LTS 或 CentOS 7.9。为什么?社区活跃,文档齐全,踩坑了也好找答案。你想想看,要是用个冷门发行版,出问题了连个问的人都没有,多难受。
3.1.1 系统更新与基础工具
拿到一台新服务器,第一件事不是装Docker,而是更新系统。我曾经有一次偷懒没更新,结果装Docker时依赖包版本不对,折腾了俩小时。
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim git net-tools htop
# CentOS/RHEL
sudo yum update -y
sudo yum install -y curl wget vim git net-tools htop epel-release
我的习惯:装完系统后,先把 vim 的配置调好,把 .bashrc 里的历史记录数改大一点。网关排障时,翻历史命令能救命。
3.1.2 内核参数调优
网关作为流量入口,对网络性能要求极高。默认的内核参数是为通用场景设计的,跑网关肯定不够。我一般在初始化阶段就把下面这些参数调好:
cat <
这里有个关键点——net.ipv4.ip_forward 必须设为1。网关要做流量转发,这个不开,后面所有工作都白搭。我记得有一次帮客户排查,他们网关死活转发不了流量,查了半天就是这玩意儿没开。
3.1.3 关闭防火墙与SELinux(测试环境)
在测试环境,我建议先把防火墙和SELinux关掉。不是说不安全,而是初期排障时少一层干扰。等网关跑通了,再慢慢加固。
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 关闭SELinux(CentOS)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
注意:生产环境不要直接关防火墙。正确的做法是放行网关需要的端口,而不是一刀切。我后面会讲端口规划。
3.2 Docker与Docker Compose安装
网关用容器化部署,已经是行业标配了。Docker负责跑单个容器,Compose负责编排多个服务。咱们的网关架构里,至少需要网关主进程、监控、日志收集这几个容器,Compose是必须的。
3.2.1 安装Docker
我推荐用官方脚本安装,干净利落。别用系统自带的包管理器装,版本太旧。
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装
sudo docker --version
避坑指南:装完Docker后,记得把当前用户加入docker组,不然每次都要sudo,很烦。
sudo usermod -aG docker $USER
# 退出重新登录,或者执行 newgrp docker 使组生效
3.2.2 安装Docker Compose
Docker Compose v2 已经集成到Docker CLI里了,但我个人还是习惯用独立的二进制文件。为什么?因为有些CI/CD环境里,docker compose 命令的版本和宿主机不一致,独立安装更可控。
# 下载最新稳定版
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
我曾经踩过的坑:下载Compose时,GitHub Releases 在国内有时很慢。建议提前准备好离线包,或者配置镜像加速。不然部署时卡在下载上,很尴尬。
3.2.3 配置Docker镜像加速
国内拉取Docker镜像,你懂的,速度感人。我一般用阿里云或中科大的镜像加速器。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://your-mirror.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
日志配置也很重要。网关的访问日志量很大,不限制的话,几天就能把磁盘撑爆。我一般把单个日志文件限制在10MB,保留3个历史文件。
3.3 网络规划与端口分配
网络规划是网关部署里最容易出问题的地方。你想想看,网关要监听端口,后端服务也要监听端口,一不小心就冲突了。我见过最离谱的一次,有人把网关的监听端口和管理端口设成一样的,结果服务一启动就挂。
3.3.1 端口分配原则
我总结了一套端口分配规范,用了好几年,基本没出过问题:
| 服务类型 | 端口范围 | 说明 |
|---|---|---|
| 网关监听端口 | 80, 443 | 对外暴露的HTTP/HTTPS端口 |
| 网关管理端口 | 8000-8100 | 管理API、健康检查、指标采集 |
| 后端服务端口 | 8080-9000 | 内部服务间通信 |
| 监控与日志 | 9090-9100 | Prometheus、Grafana、ELK等 |
| 数据库与中间件 | 3306, 6379, 27017 | MySQL、Redis、MongoDB等 |
核心原则:端口规划要留有余量。别把端口用得死死的,万一以后要加服务呢?我一般每个范围留20%的余量。
3.3.2 网关典型端口规划
以我们课程要部署的网关为例,端口规划如下:
| 组件 | 端口 | 用途 |
|---|---|---|
| 网关主进程 | 80 / 443 | 对外流量入口 |
| 管理API | 8001 | 动态路由配置、插件管理 |
| 健康检查 | 8002 | K8s或负载均衡器健康探测 |
| 指标采集 | 8003 | Prometheus拉取指标 |
| 日志收集 | 8004 | Filebeat或Logstash上报日志 |
3.3.3 网络拓扑设计
下面这张图,是我在实际项目中常用的网关部署网络拓扑。你看一眼就明白了:
3.3.4 端口冲突检查
部署前,一定要检查端口是否被占用。我习惯用 ss 命令,比 netstat 快得多。
# 检查端口是否被占用
sudo ss -tlnp | grep -E ':(80|443|800[1-4])\s'
# 如果看到输出,说明端口已被占用,需要调整规划
我曾经踩过的坑:有一次部署网关,80端口被nginx占了,我没检查直接启动网关,结果端口冲突,网关进程反复重启。查了半天才发现是nginx没关。所以,部署前一定要做端口检查,别偷懒。
3.4 本章小结
环境准备这一步,说白了就是给网关搭个安稳的家。服务器初始化把地基打牢,Docker和Compose装好让容器能跑起来,网络规划和端口分配确保各组件不打架。这三件事做好了,后面部署网关就是水到渠成的事。