目录

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. java基础(七)-----深入剖析Java中的装箱和拆箱

    本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...

  2. Lumen框架—升级改造之路-仓储层

    仓储层与逻辑层搭建  Lumen官方文档:https://lumen.laravel.com/docs/5.5 我的项目地址:https://github.com/BusinessL/big-lume ...

  3. Python中使用枚举类

    开发中我们经常定义常量, 其实有更好的方法:为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例.Python中提供了Enum类来实现这个功能: from enum im ...

  4. 《OdooERP应用与开发基础》试读:第一章-Odoo概述

    文/开源智造联合创始人老杨 本文来自<OdooERP应用与开发基础>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. Odoo是什么   Odoo,以前叫OpenERP,是比利时O ...

  5. JavaScript函数定义 ,参数调用

    一.JavaScript函数函数: 函数就是一种封装,由事件驱动的或者当它被调用时执行的可重复使用的代码块.定义函数:function 函数名(){函数体;}数不会自动执行,需要被调用才可以执行函数名 ...

  6. 一些常用Java序列化框架的比较

    概念 序列化:将Java对象转化为字节数组 反序列化:将字节数组转化为Java对象 在RPC应用中,进行跨进程远程调用的时候,需要使用特定的序列化技术,需要对进行网络传输的对象进行序列化和反序列化. ...

  7. shell编写小技巧整理

    1. if和else语句可以进行嵌套.if的条件判断部分可能会变得很长,可以使用逻辑运算符将它变得简洁一些. [ condition ] && action :如果condition为 ...

  8. 网卡也能虚拟化?网卡虚拟化技术 macvlan 详解

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 01 macv ...

  9. 【Spark篇】---SparkStreaming中算子中OutPutOperator类算子

    一.前述 SparkStreaming中的算子分为两类,一类是Transformation类算子,一类是OutPutOperator类算子. Transformation类算子updateStateB ...

  10. nginx 报错502Bad Gateway

    场景: 目前在ECS中起了多个node服务,使用forever进程守护,最近,打开线上页面发现报错502 Bad Gateway;同时部分静态资源访问不到.(之前可以的): 解决: 首先查看nginx ...