Gitlab部署全流程
0. 序言
开发组的成员渐渐多了起来,需要使用 git 对项目进行版本控制,在公司内网里面部署一个 gitlab 服务
1. 前置任务
在正式开始部署之前需要准备一些硬件和软件
1.1 硬件
-
一台至少 4G 内存的电脑,用来运行 gitlab 服务,下文称为服务机
-
一台 Windows 电脑,用来制作系统镜像和服务测试,下文称为客户机
-
一个至少 8G 的 U 盘,用作安装 linux 的启动 U 盘
1.2 软件
2. 开始部署
米准备好了,就开始烧火做饭
2.1 启动U盘
在客户机上使用 USBWriter 将 Ubuntu Server 系统镜像烧录到准备好的 U 盘中
2.2 安装系统
在服务机上安装系统之前务必将硬盘中的数据备份,除非你确定不再需要里面的数据。虽然 Ubuntu Server 没有图形 UI,但也比安装 ArchLinux 容易得多。
2.2.1 系统安装流程
-
启动服务机进入 BIOS 系统调整遇到顺序,让 BIOS 引导 U 盘中的 Ubuntu Server
-
进入 Ubuntu Server 后直接按
Enter
选择install ubuntu
-
进入安装界面之后依次需要设置语言、键盘布局,直接按
Enter
继续即可
-
接下来需要设置网络,这里选择离线安装,没有联网,直接按
Enter
继续
-
之后是代理和镜像,也不用管,直接按
Enter
继续
-
下面就是磁盘分区了,笔者选择自己分区,所以选择了 Custom
-
先选择引导设备,再分区,分成了两个,分别是挂载在
/home
的用户分区和挂载在/
的系统分区
-
分区完成后需要设置系统名称和要登录的用户
-
其它设置,主要是选择安装 OpenSSH 服务,其它保持默认即可
-
等待系统安装完成,重启即可
2.3 配置系统
系统安装完成后需要为服务机设置固定 IP 便于访问、设置 SSH 免密登陆便于管理、设置镜像方便软件安装和更新
2.3.1 设置固定 IP
Ubuntu Server 20.04.4 LTS
的 IP 配置文件路径为 /etc/netplan/xx-installer-config.yaml,编辑该文件,设置需要的 IP 地址并禁用 DHCP,下面是示例
1、终端命令
sudo vim /etc/netplan/xx-installer-config.yaml
2、xx-installer-config.yaml文件内容
network:
ethernets:
eth0: # 网卡名
addresses: [xxx.xxx.xxx.xxx/24] # 需要的静态 IP 地址
gateway4: xxx.xxx.xxx.xxx # 网关
nameservers: # DNS
addresses: [xxx.xxx.xxx.xxx,yyy.yyy.yyy.yyy] # 多个 DNS 之间使用 , 隔开
dhcp4: no # 禁用 DHCP
optional: true # 不知道是干嘛的,不用管
version: 2
renderer: networkd # 指定后端采用systemd-networkd或者Network Manager,可不填写则默认使用systemd-workd
3、使能配置
sudo netplan apply # 使能
ip addr show dev eth0 # 验证
2.3.2 设置 SSH 免密登陆
为了方便控制服务机系统,这里使用 SSH 在客户机进行免密登陆
1、修改服务端 SSH 配置,路径:/etc/ssh/sshd_config
注释如下选项,禁用 sshd 反查客户端 dns 信息,提高登录速度
# GSSAPIAuthentication yes
# GSSAPIDelegateCredentials no
打开如下选项
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
重启 ssh 服务,使配置生效
sudo systemctl restart ssh
2、修改服务机端 SSH 配置权限
# 要保证.ssh和authorized_keys都只有用户自己有写权限
sudo chmod 600 ~/.ssh/authorized_keys
sudo chmod 700 ~/.ssh
sudo chmod g-w /home/user
3、修改服务器端防火墙策略,以 ufw 为例
sudo ufw allow ssh
sudo ufw enable
sudo ufw status
4、客户机生成密钥,命令:ssh-keygen -t rsa
C:\Users\sparrow>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\sparrow/.ssh/id_rsa): gitlab
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in gitlab.
Your public key has been saved in gitlab.pub.
The key fingerprint is:
SHA256:dEPHRhPU6bAQemh8WIs1z4qML9xMh30Zk2RmgiHNyBc sparrow@DESKTOP-OP64Q1L
The key's randomart image is:
5、将客户机公钥复制到服务机,命令:ssh-copy-id -i xxx.pub user@xxx.xxx.xxx.xxx
C:\Users\sparrow\.ssh>ssh-copy-id -i gitlab.pub sparrow@192.168.10.247
6、编辑客户机配置,路径:~/.ssh/config
Host [Nickname] # 配置名称
HostName [ip addr|host name] # 服务机 IP 或者 主机名
User [username] # 登陆服务机的用户名
IdentityFile /home/user/.ssh/private # 私钥路径
在客户机使用 ssh [NickName]
即可登陆服务机,比如这里就是:ssh gitlab
2.3.3 设置镜像
1、设置镜像
在安装系统时跳过了这一步,现在补上,参考清华大学 Ubuntu 镜像使用帮助,镜像配置文件路径:/etc/apt/sources.list
,选择版本,这里是20.04 LTS,文件内容如下
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
2、使能镜像
sudo apt update
2.4 安装 gitlab
2.4.1 下载并使能安装脚本
# 这里选择的是社区版,对我们来说已经够用了
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
sudo bash script.deb.sh
2.4.2 修改镜像源
镜像路径:/etc/apt/sources.list.d/gitlab_gitlab-ce.list
# 原镜像
deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ focal main
deb-src https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ focal main
# 新镜像
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main
deb-src https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu focal main
2.4.3 安装 gitlab
安装命令
sudo apt update
sudo apt install gitlab-ce
安装完成
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigure
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=14-9
2.5 配置 gitlab
根据安装完成时的提示对 gitlab 进行配置,配置文件路径:/etc/gitlab/gitlab.rb
,下文未显式注明的配置都是在 gitlab.rb 中
2.5.1 external_url
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
# 这里就直接使用服务机的 IP 了
# 因为直接用的内网 IP,无法申请证书,也就无法使用 https 协议
external_url 'https://192.168.10.247'
# 如果下面需要修改端口号,如改成 90 则是
external_url 'https://192.168.10.247:90'
2.5.2 端口设置
gitlab 运行时会使用 80 和 8080 两个端口,如果系统中没有其它服务使用这两个端口,gitlab就能正常启动,否则就会出现端口冲突,gitlab 无法启动。解决端口冲突方案之一就是修改 gitlab 使用的端口
# 8080 端口
puma['port'] = 9090 # 14.0 及以后的版本
unicorn['port'] = 9090 # 14.0 以前的版本
# 80 端口
nginx['listen_port'] = 90
8080 端口修改
14.0 及以后的版本 puma:/var/opt/gitlab/gitlab-rails/etc/puma.rb
bind 'tcp://127.0.0.1:9090' # 将 8080 改为 9090
14.0 以前的版本 unicorn:/var/opt/gitlab/gitlab-rails/etc/unicorn.rb
listen “127.0.0.1:9090”, :tcp_nopush => true # 将 8080 改为 9090
80 端口修改
nginx:/var/opt/gitlab/nginx/conf/gitlab-http.conf
server { ## HTTPS server
listen *:90; # 将 80 改为 90
2.5.3 邮箱配置
# gitlab 邮箱设置
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xxxxxxxxx@163.com'
gitlab_rails['gitlab_email_display_name'] = 'xxxxxxxxxxx'
# smtp 设置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = "xxxxxxxxxx@163.com"
gitlab_rails['smtp_password'] = "xxxxxxxxxxxxxxxxxx" # 授权码
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
# git 用户配置
user['git_user_name'] = "xxxxxxxxxx"
user['git_user_email'] = "xxxxxxxxxx@163.com"
可以在使能配置之后,使用如下命令测试邮箱配置是否成功
# 如果配置正确,相应的邮箱会收到一封邮件
sudo gitlab-rails console
irb(main):001:0> Notify.test_email('xxxxxxx@163.com', 'gitlab邮件测试', 'gitlab测试邮件正文').deliver_now
2.5.4 修改数据存储位置
数据默认存储在 /var/opt/gitlab/git-data/repositories
,但为了数据安全和方便备份,可能需要把数据存储在另一块硬盘上,这里就是存储到挂载在 /home 上的硬盘里
### For setting up different data storing directory
###! Docs: https://docs.gitlab.com/omnibus/settings/configuration.html#store-git-data-in-an-alternative-directory
###! **If you want to use a single non-default directory to store git data use a
###! path that doesn't contain symlinks.**
git_data_dirs({
"default" => {
"path" => "/home/sparrow/data/gitlab"
}
})
如果是已经用过一段时间,需要进行数据迁移
sudo gitlab-ctl stop
sudo rsync -av /var/opt/gitlab/git-data/repositories /home/sparrow/data/gitlab/
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
2.5.5 使能配置
重新配置命令的执行时间较长,所以先完成所有的配置,再使其生效
# 保存配置文件后,在终端中执行
sudo gitlab-ctl reconfigure
2.5.6 设置管理员用户密码
# 在终端中执行
sudo gitlab-rails console
...
irb(main):001:0> u=User.where(id:1).first # User.all 可以查看所有用户
=> #<User id:1 @root>
irb(main):002:0> u.password='xxxx1111111'
=> "xxxx1111111"
irb(main):002:0> u.password_confirmation='xxxx1111111'
=> "xxxx1111111"
irb(main):003:0> u.save!
=> true
irb(main):014:0> exit
2.5.7 设置防火墙
# 允许 http 服务
sudo ufw allow http
# 如果前面修改过端口,则应该是
sudo ufw allow 90
# 查看
sudo ufw status
2.5.8 启动并设为开机自启
sudo systemctl enable gitlab-runsvdir.service # 开机自启
sudo systemctl start gitlab-runsvdir.service # 启动
sudo systemctl status gitlab-runsvdir.service # 查看启动情况
如果 gitlab 服务正常启动,就可以在客户机上访问 gitlab 服务了
本文来自博客园,作者:尽千帆,转载请注明原文链接:https://www.cnblogs.com/lonelyraft/p/gitlab01.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix