环境准备:Linux服务器基础配置、Docker安装与配置、GitLab安装与配置

说实话,很多同学做自动化部署,上来就写流水线脚本,结果跑起来各种报错。我见过最离谱的一次,折腾了两天发现是服务器时区没配对。嗯,环境准备这事儿,看着基础,但真能卡住不少人。

这一章,咱们就把地基打牢。我会带着你一步步搞定三件事:Linux服务器基础配置、Docker安装与配置、GitLab安装与配置。这三样配好了,后面的流水线才能跑得顺。

环境准备核心逻辑 自动化部署 流水线基础 Linux基础配置 • 系统更新 • 时区/主机名 • 防火墙/SSH Docker安装配置 • 安装/镜像加速 • 用户组/开机自启 GitLab安装配置 • Docker部署 • 配置/汉化 • 注册Runner

1. Linux服务器基础配置

我习惯用 Ubuntu 20.04 或 CentOS 7 以上版本。说白了,选一个你熟悉的发行版就行,别在系统选择上纠结太久。

1.1 系统更新与基础工具

拿到一台新服务器,第一件事就是更新系统。我曾经遇到过因为内核版本太旧,Docker 死活装不上的情况。

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget vim git net-tools

# CentOS/RHEL
sudo yum update -y
sudo yum install -y curl wget vim git net-tools

1.2 时区与主机名

时区不对,日志时间全乱套。我排查问题的时候,第一眼就看时间戳对不对。

# 设置时区为上海
sudo timedatectl set-timezone Asia/Shanghai
# 验证
timedatectl

# 修改主机名
sudo hostnamectl set-hostname devops-server
# 修改 /etc/hosts 添加映射
echo "127.0.0.1 devops-server" | sudo tee -a /etc/hosts
💡 我的习惯:主机名用「项目名-环境-编号」的格式,比如 cicd-prod-01,后期管理几百台机器时你就知道这有多香了。

1.3 防火墙与SSH配置

安全是第一位的。我见过有人直接把防火墙关了,结果被扫了端口,数据库被勒索。

# Ubuntu 使用 ufw
sudo ufw allow 22/tcp      # SSH
sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS
sudo ufw allow 8929/tcp    # GitLab(后面会用到)
sudo ufw enable
sudo ufw status

# 优化 SSH 配置(编辑 /etc/ssh/sshd_config)
# 建议修改:
# Port 2222              # 改默认端口,减少被扫风险
# PermitRootLogin no     # 禁止root直接登录
# PasswordAuthentication no  # 使用密钥登录
sudo systemctl restart sshd
⚠️ 注意:修改SSH配置前,一定要先开一个新终端测试连接。我曾经手滑把端口写错了,结果只能去机房接显示器救急。

2. Docker安装与配置

Docker 是咱们流水线的核心引擎。说白了,后面 GitLab、Runner、应用部署全得靠它跑起来。

2.1 安装Docker

我推荐用官方脚本安装,干净又省事。别用系统自带的旧版本,坑太多。

# 卸载旧版本(如果有)
sudo apt remove docker docker-engine docker.io containerd runc

# 使用官方脚本安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 验证安装
sudo docker version
sudo docker run hello-world

2.2 配置镜像加速

国内拉镜像慢得让人抓狂。我刚开始用 Docker 时,拉一个 nginx 镜像等了十分钟。配置加速器后,十几秒搞定。

# 创建或编辑 /etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
📌 关键点:日志配置一定要加!我见过一台服务器跑了一个月,Docker 日志把 100G 磁盘撑爆了。限制日志大小是保命操作。

2.3 用户组与开机自启

每次敲 sudo docker 很烦对吧?把当前用户加入 docker 组,就不用每次都 sudo 了。

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 重新登录使生效
# 或者执行 newgrp docker

# 设置开机自启
sudo systemctl enable docker
sudo systemctl enable containerd

3. GitLab安装与配置

GitLab 是咱们的代码仓库和 CI/CD 触发器。我选择用 Docker 部署 GitLab,这样升级、备份都方便。

3.1 使用Docker部署GitLab

这里要注意端口映射。GitLab 默认占 80 和 443,如果你的服务器上还有别的服务,记得改端口。

# 创建数据持久化目录
sudo mkdir -p /srv/gitlab/{config,logs,data}

# 启动 GitLab 容器
sudo docker run -d \
  --name gitlab \
  --hostname gitlab.example.com \
  --publish 8929:80 \
  --publish 2222:22 \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
💡 避坑指南:我曾经把 --hostname 设成了 localhost,结果 GitLab 生成的 clone 地址全是 http://localhost/...,团队里其他人根本连不上。一定要设成你的服务器 IP 或域名。

3.2 初始化配置

GitLab 第一次启动需要几分钟初始化。你可以用 docker logs -f gitlab 查看进度。

# 查看初始化日志
sudo docker logs -f gitlab

# 获取初始 root 密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

# 访问 http://你的服务器IP:8929
# 用户名: root
# 密码: 上面获取到的密码

3.3 配置GitLab Runner

Runner 是真正执行流水线任务的工人。我习惯用 Docker 方式安装 Runner,和 GitLab 放在同一台机器上。

# 安装 GitLab Runner(Docker方式)
sudo docker run -d \
  --name gitlab-runner \
  --restart always \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume /srv/gitlab-runner/config:/etc/gitlab-runner \
  gitlab/gitlab-runner:latest

# 注册 Runner
sudo docker exec -it gitlab-runner gitlab-runner register

# 交互式注册时需要填写:
# 1. GitLab 实例地址: http://你的服务器IP:8929
# 2. 注册令牌: 在 GitLab 项目 Settings -> CI/CD -> Runners 中获取
# 3. 描述: 随便写,比如 "dev-runner"
# 4. 标签: 建议写 "docker,linux"(后面流水线会用到)
# 5. 执行器: docker
# 6. 默认镜像: alpine:latest
📌 重要:Runner 注册成功后,在 GitLab 的 Admin Area -> Runners 页面可以看到它在线。如果显示灰色离线状态,检查防火墙是否放行了端口,或者容器网络是否正常。

3.4 汉化与常用设置

虽然英文界面也能用,但团队里有些同学看着费劲。我一般会做简单汉化。

# 进入 GitLab 容器
sudo docker exec -it gitlab bash

# 编辑配置文件
vi /etc/gitlab/gitlab.rb

# 找到并修改以下配置:
# gitlab_rails['gitlab_email_enabled'] = false  # 如果不需要邮件通知
# gitlab_rails['time_zone'] = 'Asia/Shanghai'

# 退出容器后重新配置
sudo docker exec -it gitlab gitlab-ctl reconfigure

汉化的话,我建议直接用英文版。因为 GitLab 版本更新快,汉化包经常滞后。而且 CI/CD 配置里的关键字都是英文,看习惯了反而更顺手。

环境验证

所有配置完成后,跑一个简单的检查脚本,确保环境没问题。

#!/bin/bash
echo "=== 环境检查 ==="

# 检查 Docker
docker --version && echo "Docker: OK" || echo "Docker: FAIL"

# 检查 GitLab 容器
docker ps | grep gitlab && echo "GitLab: OK" || echo "GitLab: FAIL"

# 检查 Runner
docker ps | grep gitlab-runner && echo "Runner: OK" || echo "Runner: FAIL"

# 检查端口
curl -s -o /dev/null -w "%{http_code}" http://localhost:8929 | grep 200 && echo "GitLab Web: OK" || echo "GitLab Web: FAIL"

嗯,到这里,咱们的环境就全部准备好了。Linux 基础配好了,Docker 跑起来了,GitLab 也部署完成并注册了 Runner。这三样东西就像盖房子的地基、水泥和钢筋,缺一不可。

下一章,咱们就要开始写真正的流水线脚本了。到时候你会发现,今天花时间把环境配扎实,后面写代码会顺畅得多。


公众号:蓝海资料掘金营,微信deep3321