环境准备:Linux服务器基础配置、Docker安装与配置、GitLab安装与配置
说实话,很多同学做自动化部署,上来就写流水线脚本,结果跑起来各种报错。我见过最离谱的一次,折腾了两天发现是服务器时区没配对。嗯,环境准备这事儿,看着基础,但真能卡住不少人。
这一章,咱们就把地基打牢。我会带着你一步步搞定三件事:Linux服务器基础配置、Docker安装与配置、GitLab安装与配置。这三样配好了,后面的流水线才能跑得顺。
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
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
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
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