Administrator
发布于 2025-12-14 / 16 阅读
0

ubuntu部署gitlab

ubuntu部署自己的gitlab

安装

首先在在官网下载对应版本的安装包。

然后安装必要的依赖。

sudo apt update
sudo apt upgrade
sudo apt install -y curl openssh-server ca-certificates postfix

注意: 在安装 postfix 的过程中,可能会弹出一个配置界面。

  • 选择 "Internet Site",然后回车。
  • "mail name" 设置为您服务器的外部 DNS 域名或 IP 地址,然后回车。如果还有其他配置提示,通常接受默认值即可。

如果你在安装postfix时忘记配置,或者想重新配置,执行 sudo dpkg-reconfigure postfix

依赖装好后,通过 dkpg -i 安装包安装gitlab。

修改配置

安装完后即可通过127.0.0.1访问页面,初始账号为root,密码通过 sudo cat /etc/gitlab/initial_root_password命令可以获得。

登录之后,去用户->edit_profile->password修改密码。

然后进行一些必要配置。

配置文件通过下面命令进行修改:sudo vim /etc/gitlab/gitlab.rb

修改后,执行 sudo gitlab-ctl reconfigure即可重新加载。

下面命令用于服务管理:

sudo gitlab-ctl start    # 启动所有 GitLab 组件
sudo gitlab-ctl stop     # 停止所有 GitLab 组件
sudo gitlab-ctl restart  # 重启所有 GitLab 组件
sudo gitlab-ctl status   # 查看 GitLab 状态

在gitlab.rb文件中必须要修改三个参数。

# 修改为您的新域名或 IP 地址,例如:
external_url 'http://your.new.domain.com'

# 用于ssh的域名(或者是名称),其实没什么用
gitlab_rails['gitlab_ssh_host']


# 真正控制ssh的端口,
gitlab_rails['gitlab_shell_ssh_port'] = '2222'

例子:

external_url 'https://gitlab.company.com'

gitlab_rails['gitlab_ssh_host'] = 'mygitlab.com'
gitlab_rails['gitlab_shell_ssh_port'] = 2222

用户用于clone

git clone ssh://[email protected]:2222/group/project.git

事实上你在本地添加秘钥进行设置后,可以用任意域名+2222来访问

本地设置

修改你本地.ssh中的config文件。

Host mygitlab.com
  HostName aaa.bbb
  User git
  Port 2222
  IdentityFile /Users/niys/.ssh/miyao
  IdentitiesOnly yes

你实际通过访问的是aaa.bbb:2222,但你Host得和上面的 gitlab_ssh_host相同,这样才能匹配到秘钥和访问地址。

秘钥的创建方法:

本地生成 SSH Key(如果你还没有)

ssh-keygen -t ed25519 -C "[email protected]"

一路回车即可
生成后文件在:

~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

2️⃣ 把 公钥 加到 GitLab

复制公钥:

cat ~/.ssh/id_ed25519.pub

登录 GitLab Web:

右上角头像 → Preferences → SSH

  • 粘贴公钥
  • 保存

3️⃣ 测试 SSH 是否成功(关键一步)

ssh -T [email protected] -p 2222

成功会看到:

Welcome to GitLab, @root!

防止被黑

修改/etc/ssh/sshd_config

### 1. 全局配置项(放在文件顶部) ###

Port 22
Port xxxx

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

# 注意:新版本 Ubuntu 中 ChallengeResponseAuthentication 已更名为 KbdInteractiveAuthentication
KbdInteractiveAuthentication no
# 必须放在全局位置
UsePAM yes

# 其他默认参数...
# AcceptEnv LANG LC_*
# Subsystem sftp /usr/lib/openssh/sftp-server

### 2. 条件匹配块(必须放在文件最末尾) ###

# 针对 22 端口:只允许你的 sudo 用户登录
Match LocalPort 22
    # 请将 your_sudo_user 替换为你实际的用户名
    AllowUsers your_sudo_user
    PasswordAuthentication yes

# 针对 xxxx端口:只允许 git 用户登录
Match LocalPort xxxx
    AllowUsers git

第二步:配置防火墙

如果你启用了 ufw 防火墙,必须手动放行这两个端口,否则你会被锁在系统之外。

# 允许 sudo 用户使用的 22 端口
sudo ufw allow 22/tcp

# 允许 git 用户使用的 xxxx端口
sudo ufw allow xxxx/tcp

# 重新加载防火墙
sudo ufw reload

第三步:检查并重启 SSH 服务

在重启之前,务必检查配置文件语法是否正确:

sudo sshd -t

如果没有任何输出,说明语法正确。如果有错误,请根据提示修改后再继续。

确认无误后重启服务:

sudo systemctl restart ssh

CI/CD

✅ 第一步:获取项目的 Runner 注册令牌(Token)

  1. 打开你的 GitLab 项目页面。
  2. 进入 设置(Settings) > CI/CD > Runners
  3. 展开 “Project runners” 区域。
  4. 找到 “Registration token”(形如 glrt-xxxxx),点击复制。

🔒 这个令牌是当前项目专用的,不要泄露。


✅ 第二步:确定你的 Runner 配置需求

根据你提供的选项,建议如下配置:

配置项 推荐值 说明
标签(Tags) raspberry,shell(可自定义) 用于指定哪些 CI 任务可以在这个 Runner 上运行
运行无标签任务 ✅ 勾选(启用) 这样即使 .gitlab-ci.yml中没写 tags,任务也能运行
Runner 描述 树莓派5 - 项目专用Runner 方便识别
暂停(Paused) ❌ 不勾选 否则无法接收任务
受保护(Protected) ❌ 不勾选 除非你只希望在 main等受保护分支运行
锁定到当前项目 ✅ 勾选 安全最佳实践,仅本项目可用
最大作业超时时间 3600秒(1小时) 最小值为 600 秒,建议设为 3600

💡 如果你不填标签,但启用了“运行无标签任务”,那么所有 CI 任务都会在这个 Runner 上执行。


✅ 第三步:在树莓派上生成并执行注册命令

在你的 树莓派终端 中运行以下命令(请替换其中的占位符):

sudo gitlab-runner register \
  --non-interactive \
  --url "http://你的-gitlab地址/" \
  --registration-token "YOUR_PROJECT_REGISTRATION_TOKEN" \
  --description "树莓派5 - 项目专用Runner" \
  --executor "shell" \
  --tag-list "raspberry,shell" \
  --run-untagged="true" \
  --locked="true" \
  --max-builds 1 \
  --builds-dir "/home/gitlab-runner/builds" \
  --cache-dir "/home/gitlab-runner/cache"

🔧 参数说明:

  • --url:你的 GitLab 地址,例如:
    • 如果 GitLab 和 Runner 在同一台树莓派上 → 用 http://localhost
    • 如果通过局域网访问 → 用 http://192.168.x.xhttp://raspberrypi.local
  • --executor "shell"最轻量的方式,直接在系统 shell 中运行命令,无需 Docker,非常适合树莓派。
  • --tag-list:指定标签,多个用逗号分隔(英文逗号)。
  • --run-untagged="true":允许运行没有标签的任务。
  • --locked="true":此 Runner 仅限当前项目使用。
  • --max-builds 1限制并发数为 1,避免内存爆满(非常重要!)。

📌 权限设置(首次运行前执行):

sudo mkdir -p /home/gitlab-runner/{builds,cache}
sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner

✅ 第四步:验证 Runner 是否成功注册

  1. 查看状态:

    sudo gitlab-runner verify
    
  2. 检查配置文件:

    cat /etc/gitlab-runner/config.toml
    

    应能看到你刚注册的 Runner 信息。

  3. 回到 GitLab 网页,在 CI/CD > Runners 页面,你会看到一个 绿色在线状态 的 Runner。


✅ 示例:.gitlab-ci.yml 如何使用这个 Runner

# .gitlab-ci.yml
test-on-rpi:
  script:
    - echo "任务正在树莓派上运行!"
    - python3 --version
  tags:
    - raspberry   # 可选;如果你禁用了“运行无标签任务”,就必须加 tags

如果你启用了“运行无标签任务”,也可以完全不写 tags,任务依然会分配给这个 Runner。


⚠️ 常见问题排查

问题 解决方法
Runner 显示灰色(离线) 运行 sudo systemctl restart gitlab-runner
任务卡在 “pending” 检查是否标签匹配,或是否启用了“运行无标签任务”
权限错误(如无法写文件) gitlab-runner用户加入对应用户组:
sudo usermod -aG yourgroup gitlab-runner
内存不足导致崩溃 确保 --max-builds 1,并在 CI 脚本中避免大内存操作

✅ 总结

你在树莓派上创建项目 Runner 的最佳实践是:

  • 使用 shell 执行器(最省资源)
  • 启用“运行无标签任务”(简化配置)
  • 锁定到当前项目(安全)
  • 限制并发为 1(防 OOM)

这样,你的 GitLab CI/CD 就能在 4核8G 树莓派上稳定、高效地运行自动化任务,比如定时备份、脚本执行、Prefect Flow 部署等。


如果你告诉我:

  • 你的 GitLab 访问地址(如 http://192.168.1.100
  • 你希望使用的标签(如 backup, prefect 等)

我可以为你生成一条 完全 ready-to-run 的注册命令,直接复制粘贴即可!需要吗?