Docker Install nginx & GitLab
综述: 这里用的是 Docker 安装 nginx 以及 GitLab, 实际上运用与单独部署没什么特别大的差别.
唯一的不同就是 Docker 创建内部网络部分的小差别. 在文中有特别指出.
即便不采用 Docker 的方式, 只需要把主机名部分换成相应的 IP 即可. 很多运维偷懒或者弄不明白, 主要在网络设置部分与 GitLab 的设置上.
仔细看本文, 绝对可行.
1. 环境准备
Docker 新建网络
$docker network create .NET
Docker 安装 Nginx
$docker pull nginx
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;
- }
- }
运行 Nginx
$docker run -d -p 80:80 -p 443:443 --name nginx.local \
--restart=always --network .NET --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 .NET .NET 是我们新建的一个 Docker 内部隔离网络, 内部实例共享一个网络
--network-alias nginx.local Nginx 在内部网络中主机的名字
-v 3 个存储映射, 不多讲
Nginx 的运行环境
nginx 运行在 2 个网络中, 一个是 .NET, 一个是宿主机网络. 这样, 可以在宿主机的 80 以及 443 端口接受正常的 HTTP,HTTPS 请求, 并反向代理到其它的容器.
2 GitLab 部分
2.1 运行
$docker run -d -p 10022:22 --restart always --name GitLab.local --network .NET --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 .NET 容器的网络加入到叫 .NET 的内部网络
--network-alias GitLab.local 内部网络主机名叫做 "gitlab.local"
2.2 配置 GitLab
编辑配置文件
$docker exec -it 容器 ID VIM /etc/GitLab/GitLab.rb
修改如下
- # 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'
调用 GitLab 重新配置程序
$docker exec -it 容器 ID GitLab-ctl reconfigure
来源: http://www.bubuko.com/infodetail-3453030.html