Nginx设置Https反向代理,指向Docker Gitlab11.3.9 Https服务
目录
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.pem
和gitlab-ce.mshk.top.crt
,下载到本地。
3、Gitlab 的 https 配置
这里可以在运行 Gitlab 容器前,根据 帮助 将本地的目录挂载到容器中,持久化运行。后面容器重启也不会丢数据。
将下载的gitlab-ce.mshk.top.pem
和gitlab-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服务的更多相关文章
- nginx设置SSL反向代理
Nginx的反向代理通常用来映射内网中提供的Apache.IIS.Lighttpd服务,以实现负载均衡:同时,由于动态服务程序运行在内网,服务器的整体安全性也有所提高,那么怎样用nginx设置SSL的 ...
- windows:nginx配置http、https反向代理
一.下载 Windows 版本的 nginx nnginx下载:http://nginx.org/en/download.html 推荐稳定版本.下载完成后,解压得到 nginx-1.14.0 ,我把 ...
- Nginx介绍与反向代理
Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...
- 五、Nginx多Server反向代理配置
Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. server_name的匹配顺序 Nginx中的s ...
- Nginx 部署、反向代理配置、负载均衡
Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...
- Nginx 七层反向代理
目录 1.代理 2.正向代理 3.反向代理 4.Nginx 反向代理 5.Nginx 反向代理相关指令介绍 ①.listen ②.server_name ③.location ④.proxy_pass ...
- 【转】Nginx服务器的反向代理proxy_pass配置方法讲解
[转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲Nginx的配置还是比较简单的, ...
- Nginx 之六: Nginx服务器的反向代理功能
一:Nginx作为正向代理服务器: 1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代 ...
- nginx启用TCP反向代理日志配置
Nginx使用TCP反向代理日志配置不同于http 修改nginx配置文档/usr/local/nginx/conf/nginx.conf 设置日志格式 stream { log_format pro ...
随机推荐
- java基础(七)-----深入剖析Java中的装箱和拆箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- Lumen框架—升级改造之路-仓储层
仓储层与逻辑层搭建 Lumen官方文档:https://lumen.laravel.com/docs/5.5 我的项目地址:https://github.com/BusinessL/big-lume ...
- Python中使用枚举类
开发中我们经常定义常量, 其实有更好的方法:为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例.Python中提供了Enum类来实现这个功能: from enum im ...
- 《OdooERP应用与开发基础》试读:第一章-Odoo概述
文/开源智造联合创始人老杨 本文来自<OdooERP应用与开发基础>的试读章节.书籍尚未出版,请勿转载.欢迎您反馈阅读意见. Odoo是什么 Odoo,以前叫OpenERP,是比利时O ...
- JavaScript函数定义 ,参数调用
一.JavaScript函数函数: 函数就是一种封装,由事件驱动的或者当它被调用时执行的可重复使用的代码块.定义函数:function 函数名(){函数体;}数不会自动执行,需要被调用才可以执行函数名 ...
- 一些常用Java序列化框架的比较
概念 序列化:将Java对象转化为字节数组 反序列化:将字节数组转化为Java对象 在RPC应用中,进行跨进程远程调用的时候,需要使用特定的序列化技术,需要对进行网络传输的对象进行序列化和反序列化. ...
- shell编写小技巧整理
1. if和else语句可以进行嵌套.if的条件判断部分可能会变得很长,可以使用逻辑运算符将它变得简洁一些. [ condition ] && action :如果condition为 ...
- 网卡也能虚拟化?网卡虚拟化技术 macvlan 详解
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 01 macv ...
- 【Spark篇】---SparkStreaming中算子中OutPutOperator类算子
一.前述 SparkStreaming中的算子分为两类,一类是Transformation类算子,一类是OutPutOperator类算子. Transformation类算子updateStateB ...
- nginx 报错502Bad Gateway
场景: 目前在ECS中起了多个node服务,使用forever进程守护,最近,打开线上页面发现报错502 Bad Gateway;同时部分静态资源访问不到.(之前可以的): 解决: 首先查看nginx ...