环境准备: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 网络拓扑设计

下面这张图,是我在实际项目中常用的网关部署网络拓扑。你看一眼就明白了:

网关部署网络拓扑 外部用户 负载均衡器 网关节点 1 端口: 80,443,8001-8004 网关节点 2 端口: 80,443,8001-8004 网关节点 3 端口: 80,443,8001-8004 后端服务集群 监控与日志系统 说明: 外部流量经负载均衡分发到多个网关节点,网关处理后转发给后端服务集群。监控系统从网关节点拉取指标和日志。

3.3.4 端口冲突检查

部署前,一定要检查端口是否被占用。我习惯用 ss 命令,比 netstat 快得多。

# 检查端口是否被占用
sudo ss -tlnp | grep -E ':(80|443|800[1-4])\s'

# 如果看到输出,说明端口已被占用,需要调整规划

我曾经踩过的坑:有一次部署网关,80端口被nginx占了,我没检查直接启动网关,结果端口冲突,网关进程反复重启。查了半天才发现是nginx没关。所以,部署前一定要做端口检查,别偷懒。

3.4 本章小结

环境准备这一步,说白了就是给网关搭个安稳的家。服务器初始化把地基打牢,Docker和Compose装好让容器能跑起来,网络规划和端口分配确保各组件不打架。这三件事做好了,后面部署网关就是水到渠成的事。