Nginx 反向代理 Gitlab 绝对可行版本

Posted smokelee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 反向代理 Gitlab 绝对可行版本相关的知识,希望对你有一定的参考价值。

Docker Install nginx & gitlab

综述:这里用的是Docker 安装nginx以及Gitlab,实际上运用与单独部署没什么特别大的差别。
唯一的不同就是Docker创建内部网络部分的小差别。在文中有特别指出。
即便不采用Docker的方式,只需要把主机名部分换成相应的IP即可。很多运维偷懒或者弄不明白,主要在网络设置部分与GitLab的设置上。
仔细看本文,绝对可行。

1. 环境准备

  1. Docker 新建网络

    $docker network create inet 
  2. Docker 安装Nginx

    $docker pull nginx
  3. Nginx设置反向代理,

    upstream docker_gitlab{
    server gitlab.local:10080; 
    }
    server
    {
    listen 443 ssl;
    server_name gitlab.smokelee.com;
    ssl_certificate /etc/nginx/certs/gitlab.smokelee.com.crt;
    ssl_certificate_key /etc/nginx/certs/gitlab.smokelee.com.key;
    
    location /{
      proxy_pass http://docker_gitlab;
      proxy_redirect http:// https://;
      proxy_set_header Host  $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto  $scheme;
    }
    }
  4. 运行Nginx

    $docker run -d -p 80:80 -p 443:443 --name nginx.local    
    --restart=always --network inet --network-alias nginx.local  ------- 内部网络Nginx的主机名
    -v /media/ext2/devops/nginx/conf:/etc/nginx -v /media/ext2/devops/nginx/www:/usr/share/nginx/html -v /media/ext2/devops/nginx/log:/var/log/nginx nginx
    参数说明(重点参数):
    • -p 在宿主机上打开80、443端口
    • --network inet inet是我们新建的一个Docker内部隔离网络,内部实例共享一个网络
    • --network-alias nginx.local Nginx在内部网络中主机的名字
    • -v 3个存储映射,不多讲
  5. Nginx的运行环境

    nginx运行在2个网络中,一个是inet,一个是宿主机网络。这样,可以在宿主机的80以及443端口接受正常的HTTP,HTTPS请求,并反向代理到其它的容器。

2 GitLab部分

2.1 运行

$docker run -d  -p 10022:22 --restart always --name gitlab.local --network inet --network-alias gitlab.local -v /media/ext2/devops/gitlab/etc:/etc/gitlab -v /media/ext2/devops/gitlab/logs:/var/log/gitlab -v /media/ext2/devops/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

参数说明:

  • -p 10022:22 因为git提交会用到ssh所以这个端口也是必须暴露到宿主机的
  • --network inet 容器的网络加入到叫inet的内部网络
  • --network-alias gitlab.local 内部网络主机名叫做“gitlab.local”

2.2 配置GitLab

  1. 编辑配置文件

    $docker exec -it 容器ID vim /etc/gitlab/gitlab.rb
  2. 修改如下

    # Nginx为gitlab准备的虚拟主机域名。这个会出现在代码仓库的《链接中》
    external_url 'https://gitlab.smokelee.com'
    
    # 关闭GitLab 内置Nginx
    nginx['enable'] = false
    
    # 设置监听方式为TCP
    gitlab_workhorse['listen_network'] = "tcp"
    gitlab_workhorse['listen_addr'] = "0.0.0.0:10080"
    
    # 设置可信代理(也就是Nginx)注意这里的‘nginx.local’是Nginx的内部网络主机名
    gitlab_rails['trusted_proxies'] = ['nginx.local']
    
    # 设置ssh主机名,这个会出现在主机代码的仓库中
    gitlab_rails['gitlab_ssh_host'] = 'gitlab.smokelee.com'
  3. 调用Gitlab重新配置程序

    $docker exec -it 容器ID gitlab-ctl reconfigure

以上是关于Nginx 反向代理 Gitlab 绝对可行版本的主要内容,如果未能解决你的问题,请参考以下文章

gitlab nginx反向代理

nginx反向代理proxy_pass绝对路径和相对路径

Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口

解析 HTTP 404 响应正文的反向代理错误背后的 Gitlab 注册表:JSON 输入的意外结束:“”

nginx ip配置反向代理为本地域名

Nginx反代配置