找回密码
 立即注册
首页 业界区 业界 docker-compose部署gitlab

docker-compose部署gitlab

姥恫 2025-9-28 18:35:43
一、gitlab介绍

GitLab是一个开源的、基于Git的版本控制系统。
1. 核心功能


  • 代码托管

    • gitlab允许用户创建项目,并将代码存储在这些项目中,方便用户上传和下载代码,并支持多种编程语言,无论是个人开发者的小型项目,还是团队协作的大型软件项目,都可以使用gitlab来托管代码。

  • 版本控制

    • gitlab可以记录代码的每一次更改,用户可以查看提交历史来了解代码的演变过程。

  • 持续集成/持续部署(CI/CD)

    • gitlab通过CI/CD管道实现自动化构建、测试和部署。当开发正推送代码后,gitlab会自动触发构建和测试流程,测试通过后可以进行部署,可以提高开发效率。

  • 项目管理

    • gitlab项目管理工具,支持创建任务、分配任务、跟踪任务进度,并可以设置里程碑,帮助团队有效管理项目进度和任务分配。

  • 代码审查

    • 开发可以通过合并请求提交代码更改,团队其他成员可以对代码进行审查、评论和批准,有助于提高代码质量。

  • 安全功能

    • gitlab提供代码扫描功能,可以检测代码中的安全漏洞,并支持访问控制,设置不同用户或用户组对项目的访问权限。

2. 适用场景


  • 软件开发团队
  • 企业内部项目管理
  • 开源社区项目
  • 个人开发者
  • 教育机构
  • 小型团队和初创公司
二、gitlab部署

以下是gitlab-18.2.4-ce部署
1. 环境准备


  • 安装docker和docker-compose
  • 服务器配置最好 2核 4G 以上
2. 部署gitlab

2.1 创建目录
  1. mkdir -p /data/gitlab/config
  2. mkdir -p /data/gitlab/logs
  3. mkdir -p /data/gitlab/data
复制代码
2.2 编写docker-compose.yml文件
  1. version: '3.8'
  2. services:
  3.   gitlab:
  4.     image: gitlab/gitlab-ce:18.2.4-ce.0
  5.     container_name: gitlab
  6.     restart: always
  7.     hostname: gitlab.example.com
  8.     ports:
  9.       - "8080:80"    # 给 Nginx 代理
  10.       - "8443:443"   # 如果想用 GitLab 自带 https,可选
  11.       - "2222:22"    # ssh 克隆用
  12.     volumes:
  13.       - /data/gitlab/config:/etc/gitlab
  14.       - /data/gitlab/logs:/var/log/gitlab
  15.       - /data/gitlab/data:/var/opt/gitlab
复制代码
2.3 启动gitlab容器
  1. docker-compose up -d
复制代码
3. 调整gitLab 内部配置

vim /data/gitlab/config/gitlab.rb (容器内部是/etc/gitlab/gitlab.rb)
  1. #指定域名   
  2. #注意:为什么这里不写https//gitlab.example.com,如果写了https,gitLab内置nginx和外层nginx冲突,gitLab内部nginx会尝试启用443,而外层Nginx也在管443,结果请求来回绕,容易访问502。
  3. external_url 'http://gitlab.example.com'   
  4. # 如果 ssh 用 2222 端口,需要加上:
  5. gitlab_rails['gitlab_shell_ssh_port'] = 2222
  6. #因为用了Nginx 反向代理,那就 关闭 GitLab 的内置证书申请
  7. letsencrypt['enable'] = false
复制代码
更改完之后重载配置
  1. docker exec -it gitlab gitlab-ctl reconfigure
复制代码
4. gitlab其他操作
  1. #杀掉进程(如果出现执行重载配置是卡住可选择操作)
  2. docker exec -it gitlab pkill -9 -f "cinc-client"
  3. docker exec -it gitlab gitlab-ctl reconfigure
  4. #查看组件是否正常(各个组件显示run就说明ok)
  5. docker exec -it gitlab gitlab-ctl status
  6. #GitLab 在 容器第一次初始化时,会生成一个随机的 root 密码,默认的登录方式是:
  7. 用户名:root
  8. 密码:保存在容器挂载的配置目录里(/etc/gitlab/initial_root_password)
  9. #查看宿主机挂载位置
  10. cat /data/gitlab/config/initial_root_password
  11. #会有类似输出(!!!如果更改过root密码就不会更新这个文件了)
  12. # WARNING: This value is valid only in the following conditions
  13. # ...
  14. Password: AbCdEfGhIjKlMnOpQrSt
  15. # ...
  16. #如果密码忘记,可以进入容器里重置
  17. docker exec -it gitlab gitlab-rails console -e production
  18. #在控制台输入
  19. user = User.find_by_username('root')
  20. user.password = '你的新密码'
  21. user.password_confirmation = '你的新密码'
  22. user.save!
复制代码
三、配置nginx反向代理

1. 安装nginx
  1. #拉取nginx镜像
  2. docker pull nginx:1.26.2       
  3. #创建持久化目录
  4. mkdir -p /data/nginx/cert
  5. mkdir -p /data/nginx/conf/conf.d
  6. mkdir -p /data/nginx/html
  7. mkdir -p /data/nginx/logs
复制代码
2. 创建nginx配置文件

创建基础配置文件nginx.conf
vim /data/nginx/conf/nginx.conf
  1. user  nginx;
  2. worker_processes  auto;
  3. error_log  /var/log/nginx/error.log notice;
  4. pid        /var/run/nginx.pid;
  5. events {
  6.     worker_connections  1024;
  7. }
  8. http {
  9.     include       /etc/nginx/mime.types;
  10.     default_type  application/octet-stream;
  11.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  12.                       '$status $body_bytes_sent "$http_referer" '
  13.                       '"$http_user_agent" "$http_x_forwarded_for"';
  14.     access_log  /var/log/nginx/access.log  main;
  15.     sendfile        on;
  16.     #tcp_nopush     on;
  17.     keepalive_timeout  65;
  18.     #gzip  on;
  19.     client_max_body_size 200m;
  20.     client_body_timeout 300;
  21.     include /etc/nginx/conf.d/*.conf;
  22. }
复制代码
创建gitlab代理nginx配置文件
  1. server {
  2.     listen 80;
  3.     server_name gitlab.example.com; # 替换为你的域名
  4.     return 301 https://$host$request_uri;
  5. }
  6. server {
  7.     listen 443 ssl;
  8.     server_name gitlab.example.com; # 替换为你的域名
  9.     ssl_session_timeout 30m;
  10.     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  11.     ssl_certificate /etc/nginx/cert/certificate.pem; # 替换为你的 SSL 证书路径
  12.     ssl_certificate_key /etc/nginx/cert/private.key; # 替换为你的 SSL 私钥路径
  13.     ssl_session_cache shared:SSL:10m;
  14.     location / {
  15.         client_max_body_size 256m;
  16.         proxy_pass http://localhost:8080; # 替换为 GitLab 容器的 IP 或域名
  17.         proxy_set_header Host $host;
  18.         proxy_set_header X-Real-IP $remote_addr;
  19.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20.         proxy_set_header X-Forwarded-Proto $scheme;
  21.         proxy_intercept_errors on;
  22.     }
  23.     # GitLab WebSocket 支持(例如 CI/CD 终端)
  24.     location /-/ {
  25.         proxy_pass http://localhost:8080;
  26.         proxy_http_version 1.1;
  27.         proxy_set_header Upgrade $http_upgrade;
  28.         proxy_set_header Connection "upgrade";
  29.         proxy_set_header Host $host;
  30.         proxy_cache_bypass $http_upgrade;
  31.     }
  32. }
复制代码
3. 重启nginx
  1. systemctl restart nginx
复制代码
4.访问gitlab
  1. https://gitlab.example.com  #访问你自己的域名
复制代码
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/zhaohaiqi/p/19062035

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册