miaodi
发布于 2021-02-21 / 1270 阅读
0

docker-compose 部署gitlab

1. 前言

之前一直用的gitea,最近心血来潮想换到gitlab上去。 gitlab功能更多,占用资源更多,部署比gitea要麻烦不少,这里做个记录。

主要用途是个人使用,免费版的gitlab-ce就足够了。

gitlab的部署方式有很多,这里采用docker-compose的方式。

原因是:升级更方便,对于做了一些自定义配置的情况下,直接使用一条简单命令即可升级。

2.docker-compose

gitlab比gitea要更占用资源。

之前的gitea是直接部署在公网上的云服务器内,云服务器仅有2核4g,还跑了多个应用,再跑一个gitlab有点吃力。

最终考虑将gitlab部署在家里的服务器上。

家里的宽带有公网ip,但是运营商封禁了80、443、8080等常用端口,于是决定将入口放在云服务器上,从云服务器上转发流量到家里的服务器上。

最终的访问流程图:

image-20210305024227974

Docker-compose文件:

web:
  image: 'gitlab/gitlab-ce:13.8.4-ce.0'
  restart: always
  hostname: 'gitlab.bfmiaodi.cn'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://gitlab.bfmiaodi.cn'
      gitlab_rails['gitlab_shell_ssh_port'] = 2200
      gitlab_rails['smtp_enable'] = true
      gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
      gitlab_rails['smtp_port'] = 465
      gitlab_rails['smtp_user_name'] = "admin@bfmiaodi.cn"
      gitlab_rails['smtp_password'] = "yourpassword"
      gitlab_rails['smtp_authentication'] = "login"
      gitlab_rails['smtp_enable_starttls_auto'] = true
      gitlab_rails['smtp_tls'] = true
      gitlab_rails['gitlab_email_from'] = 'admin@bfmiaodi.cn'
      gitlab_rails['smtp_domain'] = "exmail.qq.comi"
      letsencrypt['enable'] = false
      nginx['listen_port'] = 80
      nginx['listen_https'] = false
      nginx['real_ip_trusted_addresses'] = [ '192.168.8.0/24', 'x.x.x.x' ]
      nginx['real_ip_header'] = 'X-Forwarded-For'
      nginx['real_ip_recursive'] = 'on'
  ports:
    - '2280:80'
    - '22443:443'
    - '2200:22'
  volumes:
    - '/opt/apps/gitlab/config:/etc/gitlab'
    - '/opt/apps/gitlab/logs:/var/log/gitlab'
    - '/opt/apps/gitlab/data:/var/opt/gitlab'

邮箱使用的是腾讯企业邮箱,免费的配额足够使用了。

      gitlab_rails['smtp_enable'] = true
      gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
      gitlab_rails['smtp_port'] = 465
      gitlab_rails['smtp_user_name'] = "admin@bfmiaodi.cn"
      gitlab_rails['smtp_password'] = "yourpassword"
      gitlab_rails['smtp_authentication'] = "login"
      gitlab_rails['smtp_enable_starttls_auto'] = true
      gitlab_rails['smtp_tls'] = true
      gitlab_rails['gitlab_email_from'] = 'admin@bfmiaodi.cn'
      gitlab_rails['smtp_domain'] = "exmail.qq.comi"

前面经过了多层nginx转发,为了让gitlab识别用户正确的ip地址,需要在docker-compose中配置,其中x.x.x.x改成你的云服务器公网ip

nginx['real_ip_trusted_addresses'] = [ '192.168.8.0/24', 'x.x.x.x' ]
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'

同时,在前面经过的每一层nginx都需要配置

proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

3.云服务器的nginx中完整配置

http转https:

 server {
                listen       80;
                server_name  *.bfmiaodi.cn; #监听hw.bfmiaodi.cn域名
                return 301 https://$host$request_uri;
        }

https服务:

server {
    listen 443;
    server_name  gitlab.bfmiaodi.cn;

    ssl_certificate      ../ssl/1_gitlab.bfmiaodi.cn_bundle.crt;
    ssl_certificate_key  ../ssl/2_gitlab.bfmiaodi.cn.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    #最大一次传输50M内容,超出报错413
    client_max_body_size 50M;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
            location / {
                    proxy_pass http://xxx:2280; #转到家里2280服务
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "upgrade";
                    proxy_set_header   Host             $host;
                    proxy_set_header   X-Real-IP        $remote_addr;
                    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                            }
}

ssh端口转发:

stream {  #stream模块,就跟http模块一样
        upstream ssh {
        	server  xxx:2200; #家里的地址
        }
        server { #里面可以有多个监听服务,配置监听端口和代理的ip和端口就可以进行tcp代理了
        	listen       2200;
        	proxy_pass ssh;
        	proxy_connect_timeout 1h;
        	proxy_timeout 1h;
        }
}

4. 其他配置

  1. 去你的域名商那边添加dns解析到云服务器
  2. 去你的域名商那边申请ssl证书,一般都有免费的,配置在云服务器的nginx中
  3. 家里的宽带配置端口转发

5. 启动及升级

部署:

在docker-compose文件同级目录中执行 docker-compose up -d

开启:

在docker-compose文件同级目录中执行 docker-compose start

关闭:

在docker-compose文件同级目录中执行 docker-compose stop

升级:

  1. 停止服务: 在docker-compose文件同级目录中执行 docker-compose down
  2. 先备份之前的gitlab:zip -r gitlab.210305.bak.zip /opt/apps/gitlab/*
  3. 将docker-compose文件中的image: 'gitlab/gitlab-ce:13.8.4-ce.0'最后的版本号改为最新的版本号
  4. 在docker-compose文件同级目录中执行 docker-compose up -d

6. 迁移之前的git数据

启动之后访问gitlab,做基本的配置。

设置中文可以看这个:https://gitlab.bfmiaodi.cn/root/gitlab

迁移git:

  1. 选择新建项目->导入项目->Gitea

  1. 去之前的gitea服务器上创建一个令牌:

    image-20210305031541160

  2. 填写gitea地址以及令牌

    image-20210305031610035

  3. 开始导入

    image-20210305031730801

7.最后

搭建的成品 https://gitlab.bfmiaodi.cn/ (目前仅开放内网)

转载请注明出处:https://www.bfmiaodi.cn/archives/docker-compose%E9%83%A8%E7%BD%B2gitlab