当前位置:首页 > 运维 > 正文内容

Gitlab 安装与配置

phpmianshi5个月前 (07-14)运维287

Gitlab 安装

使用 docker-compose 安装 Gitlab,traefik 反向代理 Gitlab,并开启 https

编辑 docker-compose.yaml 文件

$ mkdir gitlab
$ cat << 'EOF' | tee gitlab/docker-compose.yaml
version: "3"

services:
  gitlab:
    image: gitlab/gitlab-ce
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # Gitlab访问URL
        external_url "https://git.YOU_DOMAIN"
        # Gitlab SSH端口,注意映射端口时不要与宿主机的SSH端口冲突
        gitlab_rails["gitlab_shell_ssh_port"] = 22
        # 时区设置
        gitlab_rails["time_zone"] = "Asia/Shanghai"
        # 邮件设置,以QQ企业邮箱为例
        gitlab_rails["smtp_enable"] = true
        gitlab_rails["smtp_address"] = "smtp.exmail.qq.com"
        gitlab_rails["smtp_port"] = 465
        gitlab_rails["smtp_user_name"] = "YOU_EMAIL"
        gitlab_rails["smtp_password"] = "YOU_EMAIL_PASSWORD"
        gitlab_rails["smtp_domain"] = "exmail.qq.com"
        gitlab_rails["smtp_authentication"] = "login"
        gitlab_rails["smtp_enable_starttls_auto"] = true
        gitlab_rails["smtp_tls"] = true
        gitlab_rails["gitlab_email_enabled"] = true
        gitlab_rails["gitlab_email_from"] = "YOU_EMAIL"
        gitlab_rails["gitlab_email_display_name"] = "YOU_EMAIL_DISPLAY_NAME"
        gitlab_rails["gitlab_email_reply_to"] = "YOU_EMAIL"
        gitlab_rails["gitlab_email_subject_suffix"] = ""
        # 备份设置,保留14天的备份
        gitlab_rails["manage_backup_path"] = true
        gitlab_rails["backup_path"] = "/var/opt/gitlab/backups"
        gitlab_rails["backup_archive_permissions"] = 0644
        gitlab_rails["backup_pg_schema"] = "public"
        gitlab_rails["backup_keep_time"] = 1209600
        # 超时设置
        gitlab_rails["webhook_timeout"] = 60 
        unicorn["worker_timeout"] = 60
        unicorn["worker_processes"] = 4
        # Gitlab自带的nginx设置,使用外部的traefik反向代理
        nginx["enable"] = true
        nginx["listen_port"] = 80
        nginx["listen_https"] = false
    ports:
      - "2222:22"
    networks:
      - gitlab
    volumes:
      - "/etc/localtime:/etc/localtime"
      - "/data/gitlab/config:/etc/gitlab"
      - "/data/gitlab/logs:/var/log/gitlab"
      - "/data/gitlab/data:/var/opt/gitlab"
    labels:
      - "traefik.enable=true"
      # HTTP访问入口,HTTP自动跳转HTTPS
      - "traefik.http.routers.gitlab.entrypoints=web"
      - "traefik.http.routers.gitlab.rule=Host(`git.YOU_DOMAIN`)"
      - "traefik.http.routers.gitlab.middlewares=redirect-to-https"
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
      # HTTPS访问入口
      - "traefik.http.routers.gitlab-secure.entrypoints=websecure"
      - "traefik.http.routers.gitlab-secure.rule=Host(`git.YOU_DOMAIN`)"
      # 开启TLS,指定证书域名
      - "traefik.http.routers.gitlab-secure.tls=true"
      - "traefik.http.routers.gitlab-secure.tls.certresolver=default"
      # 指定Gitlab的端口,多端口容器需要指定
      - "traefik.http.services.gitlab-secure.loadbalancer.server.port=80"

  traefik:
    image: traefik:2.1
    container_name: traefik
    restart: always
    command: 
      # 开启api/dashboard
      - "--api.dashboard=true" 
      # 设置provider为docker
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      # 设置http和https入口点
      - "--entryPoints.web.address=:80"
      - "--entryPoints.websecure.address=:443"
      # ACME验证方式,这里选择TLS验证
      - "--certificatesresolvers.default.acme.tlschallenge=true"
      # 申请证书的邮箱
      - "--certificatesResolvers.default.acme.email=YOU_EMAIL"
      # 保存ACME证书的位置
      - "--certificatesResolvers.default.acme.storage=/letsencrypt/acme.json"
    networks:
      - gitlab
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/etc/localtime:/etc/localtime"                                          
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock"

networks:
  gitlab:
    driver: bridge
EOF

注意将 YOU_XXX 换成符合要求的名称,使用 TLS 验证必须将域名解析到所在服务器,CA服务器能通过解析到达此服务器(本例中 git.YOU_DOAMIN )

启动 Gitlab

$ cd gitlab
$ docker-compose up -d

启动要拉取对应的 docker 镜像,等待时间可能较长,也可以预先拉取

Gitlab 备份还原

查看 Gitlab 版本

$ docker exec gitlab /opt/gitlab/bin/gitlab-rake gitlab:env:info

备份 Gitlab

$ docker exec gitlab /opt/gitlab/bin/gitlab-rake gitlab:backup:create RAILS_ENV=production

在 Gitlab 容器的路径 /var/opt/gitlab/backups(对应于宿主机的 /data/gitlab/data/backups 目录)下会生成形如 1576482525_2019_12_16_12.5.4_gitlab_backup.tar 的备份文件

将此备份命令加入 corntab 中,定期执行即可自动定期备份

还原 Gitlab

将备份文件复制到要还原的机器中(该机器安装一样版本的 Gitlab)

拷贝备份文件到 Gitlab 容器中

 $ docker cp 1576482525_2019_12_16_12.5.4_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/

交互式进入 Gitlab 容器内部

$ docker exec -it gitlab /bin/bash

在 Gitlab 容器内执行如下还原命令(注意还原文件不需要加 _gitlab_backup.tar )

$ /opt/gitlab/bin/gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=/var/opt/gitlab/backups/1576482525_2019_12_16_12.5.4

一路敲 yes 回车即可


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

HTTP状态码302、303和307的前世今生

背景《HTTP权威指南》第3章在讲解30X状态码时,完全没有讲清楚为什么要有302、303、307,以及他们的关系,一句“问题出在HTTP1.1”;而第五章在讲重定向响应时,没有说到现在很常见的302...

linux中lsof命令详解

简介lsof(list open files)是一个列出当前系统打开文件的工具,在Unix中一切(包括网络套接口)都是文件。有趣的是,lsof也是有着最多开关的Linux/Unix命令之一。它有那...

openresty操作mysql的详解

OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。 OpenRe...

linux中如何检测UDP端口是否开启

背景搭建了一台dnsmasq DNS解析服务器,不想对外网提供服务,只给内网提供解析服务,想关闭udp53端口的入站规则如何判断UDP 53端口是否提供服务呢?我们的服务端:123.207.190.8...

linux中入侵类问题排查思路

一、检查隐藏帐户及弱口令检查服务器系统及应用帐户是否存在 弱口令:检查说明:检查管理员帐户、数据库帐户、网站后台管理员帐户等密码设置是否较为简单,简单的密码很容易被黑客破解。解决方法:以管理...

linux中sed用法读这一篇就够了

1.概念sed是一种行编辑器,它一次处理一行内容。处理时,把 当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。