目录

1、GitLab11.3.9的安装

首先确保机器已经安装好Docker,执行以下命令安装GitLab11.3.9:

# Pull image
> git clone https://github.com/idoall/docker.git
> cd gitlab-ce/11.3.9-ce.0 # 启动 Gitlab 容器
> docker stack deploy -c docker-compose.3.6.yml mshk_gitlab

Gitlab 容器是以 stack 方法运行的,可以自行修改配置文件

root 帐号的密码默认是 MySuperSecretAndSecurePass0rd!

Gitlab 内部的一些配置,可以直接修改 gitlab.rb

运行docker service ls命令,可以看到 GitLab 的服务已经在运行:

> docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
qnh3srwc3qjo mshk_gitlab_mshk_gitlab replicated 1/1 idoall/gitlab-ce:11.3.9-ce.0 *:20050->80/tcp, *:20051->443/tcp, *:20052->22/tcp

2、域名在阿里云托管,申请免费的1年证书

在阿里云申请后,会有两个文件gitlab-ce.mshk.top.pemgitlab-ce.mshk.top.crt,下载到本地。

3、Gitlab 的 https 配置

这里可以在运行 Gitlab 容器前,根据 帮助 将本地的目录挂载到容器中,持久化运行。后面容器重启也不会丢数据。

将下载的gitlab-ce.mshk.top.pemgitlab-ce.mshk.topcrt证书文件,放到容器的/etc/gitlab/ssl/目录下面。

下面是我的docker.gitlab.ce.yml文件配置:

version: "3.6"
# https://docs.docker.com/compose/compose-file/
# support Docker version 17.05.0-ce
services: #################################### gitlab_ce ###################################################### gitlab_ce:
image: idoall/gitlab-ce:11.3.9-ce.0
hostname: gitlab_ce
ports:
- "20042:22"
- "20040:80"
- "20041:443"
dns:
- 114.114.114.114
- 9.9.9.9
volumes:
- /home/work/_app/_gitlab_ce/gitlab_data:/var/opt/gitlab
- /home/work/_app/_gitlab_ce/gitlab_logs:/var/log/gitlab
- /home/work/_app/_gitlab_ce/gitlab_config:/etc/gitlab
networks:
- mshk-top
environment:
GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')"
configs:
- source: gitlab
target: /omnibus_config.rb
deploy:
replicas: 1
update_config:
delay: 1s
restart_policy:
condition: on-failure configs:
gitlab:
file: ./docker.gitlab.ce.rb # 统一网络设置
networks:
mshk-top:
driver: overlay

下面是我的docker.gitlab.ce.rb文件配置:

external_url 'https://gitlab-ce.mshk.top'
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab-ce.mshk.top.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab-ce.mshk.top.key"
gitlab_rails['gitlab_shell_ssh_port'] = 20042 # 使用QQ企业邮件发邮件
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "noreply@mshk.top"
gitlab_rails['smtp_password'] = "*******"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'noreply@mshk.top'
gitlab_rails['smtp_domain'] = "exmail.qq.com" # 与Crowd结合,统一登录认证
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = true
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_providers'] = [
{
"name" => "crowd",
"args" => {
"crowd_server_url" => "http://crowd.mshk.top/crowd",
"application_name" => "gitlab",
"application_password" => "******"
}
}
]

调整好配置后,执行下面的命令,重启 Gitlab:

# 获取容器名称,赋值到一个变量中
CONTAINERNAME=`docker ps --format "{{.Names}}" | grep mshk_gitlab_mshk_gitlab.1` # 停止服务
docker exec $CONTAINERNAME sh -c 'gitlab-ctl stop' # 更新权限
docker exec $CONTAINERNAME update-permissions # 重新设置gitlab配置
docker exec $CONTAINERNAME sh -c 'gitlab-ctl reconfigure' # 启动服务
docker exec $CONTAINERNAME sh -c 'gitlab-ctl start'

4、Nginx 配置 https,反向代理指向 Gitlab 配置

这里有一点注意,配置证书的时候,Https服务设置的反向代理端口,是我们刚才设置的20041.

完整的Nginx的配置文件gitlab-ce.mshk.top.conf的格式如下:

## 将HTTP请求全部重定向至HTTPS
server {
listen 80;
server_name gitlab-ce.mshk.top;
charset utf-8;
access_log logs/gitlab.access.log;
error_log logs/gitlab.error.log;
rewrite ^ https://gitlab-ce.mshk.top;
} ## 请求转发到GitLab容器
server {
listen 443 ssl;
server_name gitlab-ce.mshk.top;
charset utf-8;
access_log logs/gitlab.access.log;
error_log logs/gitlab.error.log; ssl on;
# 服务的证书
ssl_certificate /usr/local/nginx/cert/gitlab-ce.mshk.top.pem;
# 服务端key
ssl_certificate_key /usr/local/nginx/cert/gitlab-ce.mshk.top.key;
# session超时时间
ssl_session_timeout 5m;
# 加密算法
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 允许SSL协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 启动加密算法
ssl_prefer_server_ciphers on; location / {
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 https;
proxy_pass https://localhost:20041;
} location ~ .*\.(js|css|png)$ {
proxy_pass https://localhost:20041;
}
}

最后重新载入Nginx配置,就可以生效了:

> nginx -s reload

下面是最终生效的截图:


博文作者:迦壹

博客地址:Nginx设置Https反向代理,指向Docker Gitlab11.3.9

转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!

假设您认为这篇文章对您有帮助,可以通过以下方式进行捐赠,谢谢!



比特币地址:1KdgydfKMcFVpicj5w4vyn3T88dwjBst6Y

以太坊地址:0xbB0a92d634D7b9Ac69079ed0e521CC2e0a97c420


Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务的更多相关文章

  1. nginx设置SSL反向代理

    Nginx的反向代理通常用来映射内网中提供的Apache.IIS.Lighttpd服务,以实现负载均衡:同时,由于动态服务程序运行在内网,服务器的整体安全性也有所提高,那么怎样用nginx设置SSL的 ...

  2. windows:nginx配置http、https反向代理

    一.下载 Windows 版本的 nginx nnginx下载:http://nginx.org/en/download.html 推荐稳定版本.下载完成后,解压得到 nginx-1.14.0 ,我把 ...

  3. Nginx介绍与反向代理

    Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...

  4. 五、Nginx多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. server_name的匹配顺序 Nginx中的s ...

  5. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  6. Nginx 七层反向代理

    目录 1.代理 2.正向代理 3.反向代理 4.Nginx 反向代理 5.Nginx 反向代理相关指令介绍 ①.listen ②.server_name ③.location ④.proxy_pass ...

  7. 【转】Nginx服务器的反向代理proxy_pass配置方法讲解

    [转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲Nginx的配置还是比较简单的, ...

  8. Nginx 之六: Nginx服务器的反向代理功能

    一:Nginx作为正向代理服务器: 1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代 ...

  9. nginx启用TCP反向代理日志配置

    Nginx使用TCP反向代理日志配置不同于http 修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式 stream { log_format pro ...

随机推荐

  1. 带你搭一个SpringBoot+SpringData JPA的环境

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...

  2. C# 接口的使用(工厂模式)

    接口(interface)与抽象类(abstract)的区别: 相同点: 1.都不能被直接实例化,都可以通过继承实现其抽象方法. 2.都是面向抽象编程的技术基础,实现诸多模式 不同点: 1.接口可以多 ...

  3. 在编写Arcgis Engine 过程中对于接口引用和实现过程过产生的感悟

    Engine10.2版本 在vs里面新建类GeoMaoAO,并定义接口,在class中定义并实现,如下代码 以平时练习为例,我定义了一个接口,在里面定义了许多的控件,并在类中想要实现这一接口.如果在v ...

  4. 改造断路器集群监控Hystrix Turbine实现自动注册消费者、实时监控多个服务

    在上一篇文章中,我们搭建了Hystrix Dashoard,对指定接口进行监控.但是只能对一个接口进行监听,功能比较局限: Turbine:汇总系统内多个服务的数据并显示到 Hystrix Dashb ...

  5. vue学习记录⑤(组件通信-父与子)

    今天我们看一下组件通信. 经过前面几篇文章,我们已经可以构建出完整的单个组件,并利用路由使其串联起来访问了. 但这明显还是不够的.一个页面不可能就是个单组件,一般是由多个组件合成的.正因为如此,组件之 ...

  6. 【Python实践-3】汉诺塔问题递归求解(打印移动步骤及计算移动步数)

    # -*- coding: utf-8 -*- #汉诺塔移动问题 # 定义move(n,a,b,c)函数,接受参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量 # 然后打印出把所有盘子从A借助B ...

  7. JVM回收器与调优

    定义: 使用编程语言将GC算法实现出来,产生的程序就是垃圾搜集器了 JVM给了三种选择:串行收集器.并行收集器.并发收集器 串行搜集器(serial collector):它只有一条GC线程,且就像前 ...

  8. JPA中EntityListeners注解的使用

    使用场景 EntityListeners在jpa中使用,如果你是mybatis是不可以用的 它的意义 对实体属性变化的跟踪,它提供了保存前,保存后,更新前,更新后,删除前,删除后等状态,就像是拦截器一 ...

  9. 微信公众号开发C#系列-2、微信公众平台接入指南

    概述 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流程是这样的,用户发送消息到微信服务器,微信服务器将接收到的消息post到用户接入时填写的url中,在url处理程序中,首先 ...

  10. 云计算OpenStack:云计算介绍及组件安装(一)--技术流ken

    云计算介绍 当用户能够通过互联网方便的获取到计算.存储等服务时,我们比喻自己使用到了“云计算”,云计算并不能被称为是一种计算技术,而更像是一种服务模式.每个运维人员心里都有一个对云计算的理解,而最普遍 ...