• docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解


    文章目录

    一、环境准备

    1.1 docker 安装

    • 卸载旧版本的Docker(如果已安装)
    sudo apt-get remove docker docker-engine docker.io containerd runc
    
    • 更新Ubuntu的软件包列表:
    sudo apt update
    
    • 安装Docker所需的依赖包
    sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
    
    • 添加Docker的官方GPG密钥:

    添加Docker的官方GPG密钥:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

    添加Docker的APT存储库:

    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    • 再次更新软件包列表,并安装Docker引擎
    sudo apt update  
    sudo apt install docker-ce docker-ce-cli containerd.io -y
    
    • 启动Docker服务并设置为开机自启:
    sudo systemctl start docker  
    sudo systemctl enable docker  
    
    • 验证Docker安装是否成功
    docker version
    

    二、gitlab 搭建

    2.1 环境准备

    • 镜像下载
    docker pull gitlab/gitlab-ee:16.11.4-ee.0
    
    • 创建持久化数据目录

    创建目录用于持久化存储配置(config)、日志(logs)、数据(data)和证书(SSL):

    sudo mkdir -p /data/gitlab/config /data/gitlab/logs /data/gitlab/data /data/gitlab/ssl
    
    • 复制 SSL 证书

    SSL 证书文件(例如 gitlab.example.com.crt 和 gitlab.example.com.key)复制到 /data/gitlab/ssl 目录:

    sudo cp /path/to/your/gitlab.example.com.crt /data/gitlab/ssl/
    sudo cp /path/to/your/gitlab.example.com.key /data/gitlab/ssl/
    
    • 确保文件权限正确:
    sudo chmod 600 /data/gitlab/ssl/gitlab.example.com.crt
    sudo chmod 600 /data/gitlab/ssl/gitlab.example.com.key
    

    2.2 启动gitlab容器

    使用 Docker 启动 GitLab 容器,配置 HTTPS 和持久化存储:

      sudo docker run --detach \
      --hostname gitlab.example.com \
      --publish 80:80 --publish 443:443 --publish 2222:22 \
      --name gitlab \
      --restart always \
      --volume /data/gitlab/config:/etc/gitlab \
      --volume /data/gitlab/logs:/var/log/gitlab \
      --volume /data/gitlab/data:/var/opt/gitlab \
      --volume /data/gitlab/ssl:/etc/gitlab/ssl \
      --env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com'; nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.example.com.crt'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.example.com.key';" \
      gitlab/gitlab-ee:16.11.4-ee.0
    
    

    例如:

    docker run --detach \
      --hostname gitlab.book.com \
      --publish 80:80 --publish 443:443 --publish 2222:22 \
      --name gitlab \
      --restart always \
      --volume /data/gitlab/config:/etc/gitlab \
      --volume /data/gitlab/logs:/var/log/gitlab \
      --volume /data/gitlab/data:/var/opt/gitlab \
      --volume /data/gitlab/ssl:/etc/gitlab/ssl \
      --env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.cashbook.cc'; nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.book.com.crt'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.book.com.key';" \
      gitlab/gitlab-ee:16.11.4-ee.0
    

    参数解释及作用

    1、docker run --detach:
    
    docker run: 启动一个新的 Docker 容器。
    --detach: 以分离模式运行容器,即在后台运行。
    
    2、--hostname gitlab.example.com:
    
    设置容器的主机名,这将是 GitLab 实例在网络上的标识。
    
    3、--publish 80:80 --publish 443:443 --publish 2222:22:
    
    --publish (或 -p): 映射主机端口到容器端口。
    80:80: 将主机的 80 端口映射到容器的 80 端口,用于 HTTP 访问。
    443:443: 将主机的 443 端口映射到容器的 443 端口,用于 HTTPS 访问。
    2222:22: 将主机的 2222 端口映射到容器的 22 端口,用于 SSH 访问。
    
    4、--name gitlab:
    
    指定容器的名称为 gitlab。
    --restart always:
    
    设置容器的重启策略为总是重启,即使容器崩溃或 Docker 服务重启后,容器也会自动重启。
    
    5、--volume /srv/gitlab/config:/etc/gitlab:
    
    挂载主机的 /srv/gitlab/config 目录到容器的 /etc/gitlab 目录,用于存储 GitLab 配置文件。
    
    6、--volume /srv/gitlab/logs:/var/log/gitlab:
    
    挂载主机的 /srv/gitlab/logs 目录到容器的 /var/log/gitlab 目录,用于存储 GitLab 日志文件。
    
    7、--volume /srv/gitlab/data:/var/opt/gitlab:
    
    挂载主机的 /srv/gitlab/data 目录到容器的 /var/opt/gitlab 目录,用于存储 GitLab 数据。
    
    8、--volume /srv/gitlab/ssl:/etc/gitlab/ssl:
    
    挂载主机的 /srv/gitlab/ssl 目录到容器的 /etc/gitlab/ssl 目录,用于存储 SSL 证书文件。
    
    9、--env GITLAB_OMNIBUS_CONFIG=...:
    
    设置环境变量 GITLAB_OMNIBUS_CONFIG,用于配置 GitLab。
    
    10、external_url 'https://gitlab.example.com': 配置 GitLab 的外部访问 URL 为 https://gitlab.example.com。
    
    11、nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.example.com.crt': 配置 Nginx 使用的 SSL 证书路径。
    
    12、nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.example.com.key': 配置 Nginx 使用的 SSL 证书密钥路径。
    gitlab_rails['gitlab_shell_ssh_port'] = 2222: 配置 GitLab 使用的 SSH 端口为 2222。
    
    13、gitlab/gitlab-ee:latest:
    
    指定使用的 Docker 镜像为 gitlab/gitlab-ee 的最新版本。
    

    2.3 验证 GitLab 启动

    • 使用以下命令检查 GitLab 容器的状态:
    # docker ps
    CONTAINER ID   IMAGE                           COMMAND             CREATED        STATUS                  PORTS                                                                                                             NAMES
    878788361f54   gitlab/gitlab-ee:16.11.4-ee.0   "/assets/wrapper"   2 minutes ago Up 2 minutes (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:2222->22/tcp, :::2222->22/tcp   gitlab
    
    • 在浏览器中访问 https://gitlab.example.com(替换为实际域名)。初次访问时会要求设置管理员密码。

    2.4 备份和恢复

    • 备份 GitLab 数据
    sudo docker exec -t gitlab gitlab-backup create
    

    备份文件存放在 /data/gitlab/data/backups 目录下。

    • 恢复 GitLab 数据

    将备份文件复制到指定目录,并恢复:

    sudo docker cp /path/to/backup.tar gitlab:/var/opt/gitlab/backups/
    sudo docker exec -t gitlab gitlab-backup restore BACKUP=
    

    2.5 升级 GitLab

    拉取最新稳定版本的镜像并重启容器:

    sudo docker pull gitlab/gitlab-ee:latest
    sudo docker stop gitlab
    sudo docker rm gitlab
    sudo docker run --detach \
      --hostname gitlab.example.com \
      --publish 80:80 --publish 443:443 --publish 22:22 \
      --name gitlab \
      --restart always \
      --volume /srv/gitlab/config:/etc/gitlab \
      --volume /srv/gitlab/logs:/var/log/gitlab \
      --volume /srv/gitlab/data:/var/opt/gitlab \
      --volume /srv/gitlab/ssl:/etc/gitlab/ssl \
      --env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com'; nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.example.com.crt'; nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.example.com.key';" \
      gitlab/gitlab-ee:latest
    

    三、已搭建的gitlab升级为HTTPS访问

    3.1 准备 SSL 证书

    准备 PEM 证书文件,分别需要crt和key文件

    3.2 创建目录

    sudo mkdir -p /data/gitlab/ssl
    

    3.3 复制证书

    将 PEM 证书文件复制到该目录,并命名为 gitlab.example.com.crt 和 gitlab.example.com.key。例如:

    sudo cp /path/to/your/cloudflare_certificate.pem /data/gitlab/ssl/gitlab.example.com.crt
    sudo cp /path/to/your/cloudflare_private_key.key /data/gitlab/ssl/gitlab.example.com.key
    

    3.4 修改 GitLab 配置

    编辑 GitLab 配置文件 gitlab.rb 以启用 HTTPS 并指定 SSL 证书和密钥路径。

    1、打开 gitlab.rb 文件进行编辑:
    vim /data/gitlab/config/gitlab.rb
    
    
    2、添加或修改以下配置:
    external_url 'https://gitlab.example.com'
    nginx['redirect_http_to_https'] = true
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
    
    

    3.5 重新配置并重启 GitLab

    • 重新配置 GitLab:
    sudo docker exec -it gitlab gitlab-ctl reconfigure
    

    3.6 重启 GitLab 容器:

    sudo docker restart gitlab
    
    

    注:通过上述步骤,我们可以将 GitLab 从 HTTP 升级到 HTTPS 访问。如果在配置过程中遇到问题,可以查看 GitLab 和 Nginx 的日志以获取更多调试信息。

    四、生成 Cloudflare Origin CA 证书和私钥

    如果在 Cloudflare 中生成的证书只有 PEM 格式的文件而没有私钥文件,可能您使用的是 Cloudflare 提供的“Origin CA”证书。这个证书是用来在 Cloudflare 和您的服务器之间建立安全连接的。在这种情况下,您需要使用 Cloudflare 的 Origin CA 来生成证书和私钥文件。

    4.1 Cloudflare 如何获取SSL 证书和私钥

    1. 登录 Cloudflare 控制台。
    2. 选择您的域名。
    3. 导航到 SSL/TLS -> Origin Server。
    4. 点击 Create Certificate。
    5. 选择 Let Cloudflare generate a private key and a CSR。
    6. 点击 Next。
    7. 选择 PEM 格式并点击 Create.

    生成后,您会得到两个文件:

    • Origin Certificate(证书文件,通常为 .pem 格式)。
    • Private Key(私钥文件,通常为 .key 格式)。

    4.2 下载并保存证书和私钥文件

    下载生成的证书和私钥文件,并将它们保存到您的服务器上。例如:

    • origin-cert.pem(证书文件)
    • origin-key.pem(私钥文件)

    五、gitlab浏览器使用

    5.1 修改初始密码

    • 默认用户名和密码
      默认用户名: root
      默认密码: 在 GitLab 的 Docker 容器首次启动时,默认密码会在日志中生成,或者使用在 gitlab.rb 文件中设置的密码。

    5.1.1 获取默认密码

    默认密码会存储在容器内的文件中,可以通过以下命令获取:

    sudo docker exec -it gitlab cat /etc/gitlab/initial_root_password
    
    输出内容会包含类似如下的信息:
    
    # WARNING: This value is valid only in the following conditions
    # 1. You access the account via the web interface.
    # 2. You have not already changed the password.
    #
    Password: 
    

    5.1.2 修改初始密码

    1. 通过Web页面设置
    • 登录后,点击右上角的头像,然后选择 Edit Profile
    • 在左侧菜单中选择 Password
    • 输入当前密码和新密码,然后点击 Save password
    1. 通过文件设置

    如果我们在 gitlab.rb 文件中设置了自定义的初始密码,可以通过以下配置进行设置:

    gitlab_rails['initial_root_password'] = '密码'
    

    然后重新配置 GitLab:

    sudo docker exec -it gitlab gitlab-ctl reconfigure
    

    5.2 创建新用户

    5.2.1 使用 Web 界面

    • 登录到 GitLab 管理界面(以管理员身份)。
    • 在左侧导航栏中,点击 Admin Area。
    • 在顶部导航栏中,选择 Users。
    • 点击 New user 按钮。
    • 填写用户的详细信息(如姓名、用户名、邮箱地址等)。
    Name: 用户的全名,如 “John Doe”。
    Username: 用户的唯一标识符,如 “johndoe”。
    Email: 用户的电子邮件地址。
    Password: 用户的密码(如果需要,可以暂时留空,用户可以通过邮件设置密码)。
    
    • 设置用户密码(如果需要)。
    • 点击 Create user 按钮。

    注:
    Name 是用户的全名,用于显示在界面上的人类可读的名字。
    Username 是用户的唯一标识符,用于登录、URL 和命令行操作。

    5.2.2 使用命令行(API)

    我们还可以使用 GitLab API 创建用户。以下是一个示例命令:

    curl --request POST "https://gitlab.example.com/api/v4/users" \
    --header "PRIVATE-TOKEN: " \
    --data "email=new_user@example.com&username=new_user&name=New User&password=password1234"
    

    替换为管理员访问令牌。

    5.3 创建新项目

    5.3.1 通过 Web 界面创建项目

    1. 进入新项目创建页面:
    • 登录后,在页面的右上角,点击 + 按钮。
    • 从下拉菜单中选择 New project。
    1. 选择项目类型:
    • Create blank project:从头开始创建一个空项目。
    • Create from template:使用 GitLab 提供的模板创建项目。
    • Import project:从外部源(如 GitHub、Bitbucket)导入项目。
    1. 填写项目详细信息:
    • Project name:输入项目名称。这将自动生成项目的 URL 路径(可以手动修改)。
    • Project slug:这是项目的 URL 路径(如果未手动修改,将基于项目名称自动生成)。
    • Project description(可选):输入项目的描述信息。
    • Project visibility:选择项目的可见性级别:
      • Private:只有项目成员可以访问。
      • Internal:所有登录的用户可以访问。
    1. 设置其他选项(可选):
    • Initialize repository with a README:初始化项目时添加一个 README 文件。
    • Add .gitignore:选择一个适合项目的 .gitignore 模板。
    • Add a license:选择一个适合项目的许可证。
    1. 创建项目:

    填写完所有信息后,点击 Create project 按钮。

    5.3.2 通过命令行使用 API 创建项目

    我们也可以使用 GitLab API 创建项目。以下是一个示例命令:

    curl --request POST "https://gitlab.example.com/api/v4/projects" \
    --header "PRIVATE-TOKEN: " \
    --data "name=new_project&visibility=private"
    

    替换为您的访问令牌,并根据实际情况修改 name 和 visibility 参数。

    5.4 分配角色

    在 GitLab 中,用户角色通常通过项目或组权限分配。常见的角色包括:Guest、Reporter、Developer、Maintainer 和 Owner。

    5.4.1 分配项目角色

    • 登录到 GitLab 管理界面。
    • 选择一个项目。
    • 在左侧导航栏中,点击 Members。
    • 点击 Invite members 按钮。
    • 输入新用户的用户名或邮箱地址。
    • 选择用户的角色(如 Developer)。
    • 点击 Invite 按钮。

    5.4.2 分配组角色

    • 登录到 GitLab 管理界面。
    • 选择一个组。
    • 在左侧导航栏中,点击 Members。
    • 点击 Invite members 按钮。
    • 输入新用户的用户名或邮箱地址。
    • 选择用户的角色(如 Developer)。
    • 点击 Invite 按钮。

    5.5 允许用户上传和下载代码

    只要用户被分配了适当的角色(如 Developer 或以上),他们就可以在项目中进行代码上传和下载。

    5.5.1 上传代码

    用户可以使用 Git 命令行工具将代码推送到项目中:

    git clone https://gitlab.example.com/group/project.git
    cd project
    # 做出一些更改
    git add .
    git commit -m "Add new feature"
    git push origin main
    

    5.5.2 下载代码

    用户可以通过 Git 克隆项目:

    git clone https://gitlab.example.com/group/project.git
    

    六、常见错误处理

    6.1 端口被占用

    错误信息:

    docker: Error response from daemon: driver failed programming external connectivity on endpoint gitlab
    

    解决方法

    确保端口未被其他服务占用。例如,22 端口可能已经被 SSH 服务占用。
    

    6.2 浏览器访问时显示 Error code 522

    访问报错:Connection timed out Error code 522

    错误代码 522 通常表示 Cloudflare 无法连接到您的服务器。以下是可能的解决方案:

    6.2.1 检查服务器防火墙配置(云厂商安全组)

    确保防火墙允许 HTTP(80)、HTTPS(443)和新的 SSH(2222)端口的访问。

    6.2.2 确认服务器端口开放

    确保服务器在正确的端口上监听。您可以使用 netstat 或 ss 工具进行检查:

    sudo netstat -tuln | grep ':80'
    sudo netstat -tuln | grep ':443'
    sudo netstat -tuln | grep ':2222'
    

    确保这些命令返回监听状态。

    6.2.3 确认 Docker 容器端口映射

    检查 Docker 容器的端口映射是否正确:

    docker ps
    

    6.2.4 检查服务器上的 GitLab 配置

    确保 GitLab 容器内的 NGINX 正常运行并监听正确的端口。进入容器内部检查 NGINX 状态:

    sudo docker exec -it gitlab gitlab-ctl status
    

    检查 NGINX 日志:

    sudo docker exec -it gitlab gitlab-ctl tail nginx
    

    确保 NGINX 正常启动且没有错误。

    6.3 浏览器访问时显示 Error code 521

    报错信息:Cloudflare 报错Web server is down Error code 521

    错误代码 521 表示 Cloudflare 无法连接到您的服务器。这通常是因为服务器没有响应,或者阻止了来自 Cloudflare 的请求。以下是一些可能的解决方案:

    6.3.1 确认 Web 服务器正在运行

    确保 GitLab 容器内的 NGINX 服务正在运行。

    进入 GitLab 容器内部:

    sudo docker exec -it gitlab bash
    

    然后检查 NGINX 服务状态:

    gitlab-ctl status nginx
    

    如果 NGINX 没有运行,可以尝试重新启动:

    gitlab-ctl restart nginx
    

    6.3.2 检查 Web 服务器日志

    查看 NGINX 的日志文件,查找任何错误信息:

    gitlab-ctl tail nginx
    

    6.3.3 检查 Docker 容器端口映射

    确保 Docker 容器正确映射了 HTTP 和 HTTPS 端口。

    运行以下命令来检查容器的端口映射:

    docker ps
    

    6.3.4 检查服务器防火墙配置(云厂商安全组)

    确保防火墙允许 HTTP(80)、HTTPS(443)和新的 SSH(2222)端口的访问。

    6.3.5 确认 Cloudflare 的 SSL/TLS 配置

    确保 Cloudflare SSL/TLS 配置正确。推荐使用“Full”或“Full (strict)”模式:

    1. 登录 Cloudflare 控制台。
    2. 选择您的域名。
    3. 导航到 SSL/TLS 选项卡。
    4. 确保 SSL/TLS 模式设置为 Full 或 Full (strict)。

    注意:如果更改 Cloudflare 的 SSL/TLS 模式可能会影响该域名其他网站的访问,我们可以尝试以下几个步骤来解决 GitLab 的连接问题,而不影响其他网站的正常访问:

    6.3.6 为 GitLab 设置单独的 Page Rule

    确认 Cloudflare 的 SSL/TLS 配置,推荐使用“Full”或“Full (strict)”模式。为了不影响其他网站,可以为 GitLab 设置单独的 Page Rule。

    1. 登录 Cloudflare 控制台。
    2. 选择您的域名。
    3. 导航到 Page Rules 选项卡。
    4. 创建一个新的 Page Rule,规则如下:
    URL: *gitlab.example.com/*
    Settings: SSL -> Full (strict)
    

    七、常见的 gitlab-ctl 命令

    gitlab-ctl 是 GitLab Omnibus 版本中的一个命令行工具,用于管理和配置 GitLab 服务。即使使用 Docker 部署 GitLab,您仍然可以通过在 Docker 容器中执行 gitlab-ctl 命令来管理 GitLab 实例。

    7.1 基本操作

    • 启动 GitLab:
    gitlab-ctl start
    
    • 停止 GitLab 服务:
    gitlab-ctl stop
    
    • 重启 GitLab 服务:
    gitlab-ctl restart
    
    • 检查所有 GitLab 组件的运行状态:
    gitlab-ctl status
    

    7.2 配置管理

    • 重新配置 GitLab:

    当我们修改了配置文件 /etc/gitlab/gitlab.rb 后,需要重新加载配置:

    gitlab-ctl reconfigure
    
    • 测试配置:
    gitlab-ctl reconfigure --dry-run
    

    7.3 日志管理

    • 查看所有服务日志:
    gitlab-ctl tail
    
    • 查看指定特定服务的日志,例如查看 Nginx 的日志
    gitlab-ctl tail nginx
    

    7.4 备份与恢复

    • 创建备份:

    在进行升级前,您可以创建备份:

    gitlab-rake gitlab:backup:create
    
    • 从备份恢复:
    gitlab-rake gitlab:backup:restore
    

    7.5 缓存管理

    • 清除 Redis 缓存:
    gitlab-rake cache:clear
    
  • 相关阅读:
    【Python】基础语法1(常量与表达式、变量和类型、注释、输入输出、运算符)
    PyTorch学习笔记-神经网络Torch.NN基本骨架的使用及卷积原理
    LVGL---开关(lv_switch)
    CNN基础与LeNet框架
    计算一组Tensor的直方图C算法实现
    Mysql的主从复制和读写分离
    【无标题】
    go语言实现LeetCode59 螺旋矩阵Ⅱ
    数据结构和算法(12):词典
    Vector Search和专用Search Nodes:现已正式发布
  • 原文地址:https://blog.csdn.net/cljdsc/article/details/139751051