- 1. 简介
- 1.1 官方文档
- 1.2 版本
- 1.3 配置建议
- 1.4 Gitlab的服务构成
- 2. 安装
- 2.1 目录划分
- 2.2 docker-compose.yml
- 2.3 解读官方dockerfile
- 3. GitLab使用
- 3.1 备份
- 3.2 恢复
- 3.3 常用命令
- 4. 总结
GitLab 是一个类似与GitHub的项目,功能十分强大且界面美观,支持代码管理、issue管理、代码review和CI等功能。它提供免费的社区版和付费版,社区版足够满足我们的项目需求。本篇文章我将介绍GitLab社区版的安装和配置。
1.1 官方文档https://docs.gitlab.com/ee/
1.2 版本- 社区版(CE)
- 企业版(EE)
建议CPU2核,内存2G以上。
1.4 Gitlab的服务构成| 服务 | 说明 |
|---|---|
| Nginx | 静态web服务器 |
| gitlab-shell | 用于处理Git命令和修改authorized keys列表。采用Ruby语言 |
| gitlab-workhorse | 轻量级的反向代理服务器。采用Go语言。处理一些大的HTTP请求,比如文件上传、文件下载、Git push/pull和Git包下载。其它请求会反向代理到GitLab Rails应用,即反向代理给后端的unicorn。 |
| logrotate | 日志文件管理工具 |
| postgresql | 数据库 |
| redis | 缓存中间件 |
| sidekiq | 用于在后台执行队列任务(异步执行)。采用Ruby语言 |
| unicorn | An HTTP server for Rack applications,GitLab Rails应用是托管在这个服务器上面的。Rack应用程序的HTTP服务器,旨在为低延迟,高带宽连接的快速客户端提供服务,并利用Unix/Unix类内核中的功能,慢客户端只应通过放置一个能够完全缓冲Unicorn和慢客户端之间的请求和响应的反向代理来提供服务。 |
可以在admin的管理界面查看以上的组件列表:
. ├── config # 配置文件 ├── data # 数据目录 ├── docker-compose.yml └── logs # 日志目录2.2 docker-compose.yml
version: '3'
services:
gitlab:
image: 'gitlab/gitlab-ce:14.10.2-ce.0'
restart: always
hostname: 'www.mygitlab.com'
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.16.0.86:3000' # web站点访问地址
gitlab_rails['gitlab_shell_ssh_port'] = 2222
ports:
- '3000:3000' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问
- '8443:443'
- '2222:22'
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
- ./logs:/var/log/gitlab
logging:
driver: "json-file"
options:
max-size: "2g"
max-file: "2"
容器起来之后,默认用户是root,要登录web界面需要先进入容器的这个文件获取密码:
/etc/gitlab/initial_root_password
FROM ubuntu:20.04 MAINTAINER GitLab Inc.3. GitLab使用 3.1 备份SHELL ["/bin/sh", "-c"] # 设置编码 ENV LANG=C.UTF-8 # 安装必须得依赖包 # BusyBox 是一个小型可执行文件,它结合了许多常见 UNIX 实用程序的精简版。它占用很小的体积,通常用在嵌入式设备上。 在安卓系统上安装busybox,就可以运行更多的unix命令如vi,find,grep,cat,wegt等。 # tzdata软件包:是一组表示地球上各地的时间历史的代码和数据,目前由IANA维护。 RUN apt-get update -q && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends busybox ca-certificates openssh-server tzdata wget && rm -rf /var/lib/apt/lists/* # 使用 BusyBox ENV EDITOR /bin/vi RUN busybox --install && { echo '#!/bin/sh'; echo '/bin/vi "$@"'; } > /usr/local/bin/busybox-editor && chmod +x /usr/local/bin/busybox-editor && update-alternatives --install /usr/bin/editor editor /usr/local/bin/busybox-editor 1 # 删除 MOTD # MOTD 是message of the day的缩写,意思是“当天的提示信息”,通常在用户成功登录到Linux后出现,该信息可以从/etc/motd文本文件中找到 RUN rm -rf /etc/update-motd.d /etc/motd /etc/motd.dynamic RUN ln -fs /dev/null /run/motd.dynamic # 拷贝资源 COPY RELEASE / COPY assets/ /assets/ # 设置资源的权限,去掉w写权限 RUN chmod -R og-w /assets RELEASE ; /assets/setup # 允许访问内置的工具 ENV PATH /opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:$PATH # 设置TERM环境变量 ENV TERM xterm # 暴露ssh, http, ssh端口 EXPOSE 443 80 22 # 定义卷 VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"] # 包装器来处理信号、触发runit并重新配置GitLab CMD ["/assets/wrapper"] # 配置健康检查 HEALTHCHECK --interval=60s --timeout=30s --retries=5 CMD /opt/gitlab/bin/gitlab-healthcheck --fail --max-time 10
在容器内可以执行一下命令进行备份
/usr/bin/gitlab-rake gitlab:backup:create
如果想实现定时备份,可以在宿主机上结合crontab 和 docker命令进行备份。
docker exec -t CONTAINER_ID gitlab-rake gitlab:backup:create
其中:CONTAINER_ID 为gitlab的容器ID。
Gitlab的恢复操作会先将当前所有的数据清空,然后再根据备份数据进行恢复.
注意:在指定备份文件恢复时,gitlab会自动补全后面的文件名。
# 停止unicorn和sidekiq,保证数据库没有新的连接,不会有写数据情况
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 进入备份目录进行恢复,1476900742为备份文件的时间戳
cd /var/opt/gitlab/backups
gitlab-rake gitlab:backup:restore BACKUP=1553965778_2019_03_31_10.7.3
# 启动unicorn和sidekiq
gitlab-ctl start unicorn
gitlab-ctl start sidekiq
3.3 常用命令
# 启动所有 gitlab 组件;
gitlab-ctl start
# 停止所有 gitlab 组件;
gitlab-ctl stop
# 重启所有 gitlab 组件;
gitlab-ctl restart
# 查看服务状态;
gitlab-ctl status
# 修改gitlab配置文件;
vim /etc/gitlab/gitlab.rb
# 重新编译gitlab的配置;
gitlab-ctl reconfigure
# 检查gitlab;
gitlab-rake gitlab:check SANITIZE=true --trace
# 查看日志;
gitlab-ctl tail
gitlab-ctl tail nginx/gitlab_access.log
4. 总结
如今的代码仓库的选择已经多样化了,包括:
- 阿里云的codeup
- Gitee
- Github
但是以上都是寄托在这些SAAS平台,代码的安全性还是会低一点。要保证代码安全,可以自己用开源的Gitlab进行搭建部署,使用和Github无异,docker快速搭建更加的方便灵活。



