基于Docker搭建Gitlab代码仓库

基于Docker搭建Gitlab代码仓库全攻略

基于Docker搭建Gitlab代码仓库

gitlab支持Linux安装包(Omnibus),云原生、docker几种方式安装。本文记录使用Docker搭建GitLab。

1. 先决条件

1.1 安装需求

Gitlab依赖的软件,例如PG、Redis等组件已经统一打包为单个容器镜像,会作为一个容器运行。这里仅说明硬件要求:

CPU

以下是针对部分用户数量群体,推荐的最低 CPU 硬件要求。

  • 4 核 是推荐的最小核数,支持多达 500 名用户
  • 8 核支持多达 1000 名用户

CPU 需求取决于用户数量和预期的工作负载,确切需求更多地取决于您的工作负载。您的工作负载受多重因素影响,不限于您的用户活跃程度、您使用的自动化程度、镜像、制品库大小和变更大小。

内存

以下是针对部分用户数量群体,推荐的最低内存硬件要求。

  • 4GB RAM必需的最小内存,支持多达 500 名用户
  • 8GB RAM 支持多达 1000 名用户

内存需求取决于用户数量和预期的工作负载,确切需求更多地取决于您的工作负载。您的工作负载受多重因素影响,不限于您的用户活跃程度、您使用的自动化程度、镜像、制品库大小和变更大小。

存储

Omnibus GitLab 软件包需要大约 2.5 GB 的存储空间用于安装。必要的硬盘空间在很大程度上取决于您想在极狐GitLab 中存储的仓库的大小,但作为准则,您应该至少拥有与所有仓库组合占用的空间一样多的可用空间。

1.2 docker环境准备

参考Docker官方安装文档安装Docker环境。

本文以ubuntu 20.04系统为例:

apt update
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
\# 这里使用的是阿里云的 Docker 镜像源,您也可以选择其他中国国内的镜像源,比如 DaoCloud、网易云等。
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
apt install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

说明

Docker for Windows 不受gitlab官方支持,存在卷权限的已知问题,以及潜在的其他未知问题。

2. 设置卷位置

配置一个新的环境变量 $GITLAB_HOME,指向配置、日志和数据文件所在的目录。 确保该目录存在并且已授予适当的权限。

export GITLAB_HOME=/data/gitlab

GITLAB_HOME 环境变量应该附加到您的 shell 的配置文件中,以便它应用于所有未来的终端会话:~/.bash_profile

GitLab 容器使用主机装载的卷来存储持久数据:

本地位置 容器位置 使用
$GITLAB_HOME/data /var/opt/gitlab 用于存储应用程序数据。
$GITLAB_HOME/logs /var/log/gitlab 用于存储日志。
$GITLAB_HOME/config</
在阿里云上使用 Docker 部署 GitLab 和 Jenkins 以实现持续集成(CI)和持续交付(CD)是一种常见的 DevOps 实践,能够显著提升软件开发和部署的效率。以下是详细的部署方案和实现思路。 ### 部署架构概述 在阿里云 ECS 实例上部署 GitLab 和 Jenkins 时,通常采用以下架构: - **GitLab**:作为代码仓库和 CI/CD 工具,支持 Webhook 触发机制。 - **Jenkins**:作为持续集成服务器,负责监听 GitLab 的推送事件并执行构建、测试和部署任务。 - **Docker**:用于容器化 GitLab 和 Jenkins,便于部署和管理。 - **阿里云镜像仓库(ACR)**:用于存储和管理构建好的 Docker 镜像。 - **目标服务器**:用于部署应用容器。 ### 部署步骤 #### 1. 创建阿里云 ECS 实例 选择合适的 ECS 实例类型,并确保开放以下端口: - **80/443**:用于访问 GitLab Web 界面 - **8080**:用于访问 Jenkins Web 界面 - **22**:用于 SSH 连接 - **50000**:Jenkins Agent 通信端口 #### 2. 安装 DockerDocker Compose ```bash # 安装 Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io # 启动并启用 Docker sudo systemctl start docker sudo systemctl enable docker # 安装 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` #### 3. 部署 GitLab 使用 Docker Compose 部署 GitLab: ```yaml version: '3' services: gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://<your-ecs-ip>:80' ports: - "80:80" - "443:443" - "22:22" volumes: - ./gitlab/config:/etc/gitlab - ./gitlab/logs:/var/log/gitlab - ./gitlab/data:/var/opt/gitlab ``` 运行命令启动 GitLab: ```bash docker-compose up -d ``` 访问 `http://<your-ecs-ip>` 设置管理员密码并登录。 #### 4. 部署 Jenkins 使用 Docker 部署 Jenkins: ```bash docker run -d -p 8080:8080 -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -e JAVA_OPTS="-Dhudson.footerURL=http://<your-ecs-ip>:8080" \ --name jenkins \ jenkins/jenkins:lts ``` 访问 `http://<your-ecs-ip>:8080` 完成 Jenkins 初始化配置。 #### 5. 配置 GitLab 与 Jenkins 集成 在 GitLab 中配置 Webhook,将推送事件发送到 Jenkins: - 进入 GitLab 项目页面 → Settings → Webhooks - 添加 Jenkins 的 Webhook URL,例如 `http://<jenkins-ip>:8080/gitlab/build_now` - 选择触发事件(如 push、tag push 等) - 生成并配置 Secret Token,确保 Jenkins 能够验证请求来源[^4] #### 6. Jenkins Pipeline 配置 在 Jenkins 中创建 Pipeline 项目,定义 CI/CD 流程: ```groovy pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Build Docker Image') { steps { sh 'docker build -t registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT} .' } } stage('Push to ACR') { steps { sh 'docker login registry.cn-hangzhou.aliyuncs.com -u <username> -p <password>' sh 'docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT}' } } stage('Deploy to Server') { steps { sshagent(['server-ssh-credentials']) { sh ''' ssh -o StrictHostKeyChecking=no user@target-server " \ docker pull registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT} && \ docker stop myapp || true && \ docker rm myapp || true && \ docker run -d --name myapp -p 80:80 registry.cn-hangzhou.aliyuncs.com/your-namespace/your-image:${GIT_COMMIT} " ''' } } } } } ``` #### 7. 配置阿里云容器镜像服务(ACR) 在阿里云控制台创建专属镜像仓库,并配置访问凭证: - 创建命名空间和镜像仓库 - 获取登录命令和凭证 - 在 Jenkins Pipeline 中使用 `docker login` 登录 ACR ### 实现持续集成与持续交付(CI/CD) 通过上述配置,整个流程如下: 1. 开发人员在 GitLab 上推送代码或打 Tag。 2. GitLab 触发 Webhook,通知 Jenkins 拉取最新代码。 3. Jenkins 执行构建、测试、打包、构建 Docker 镜像。 4. 镜像推送到阿里云 ACR。 5. Jenkins 在目标服务器上拉取镜像并部署新版本容器。 6. 部署完成后通知相关人员。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值