1、检查docker是否安装,并且服务并且启动:
安装:yum install docker
启动:service docker start
2、搜索gitlab镜像,并下载:
搜索:docker search gitlab
下载:docker pull gitlab/gitlab-ce:latest
dockerHub中有常用的有两种gitlab-ce(社区版)和gitlab-ee(企业版)
3、运行镜像:
命令:
docker run --detach \
--publish 8443:443 --publish 8081:80 --publish 8022:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
执行命名将会下载最新的gitlab镜像(包含了第2步的操作),启动gitlab容器,同时会发布通过http,ssh,https访问的端口,并映射到宿主机的指定端口上,gitlab的文件存储在宿主机的/srv/gitlab目录下。
端口设置:
协议 |
gitlab容器 |
宿主机 |
HTTP |
80 |
8080 |
HTTPS |
443 |
8443 |
SSH |
22 |
8022 |
文件存储:gitlab容器数据文件挂在在宿主机的文件目录中,
宿主机目录 |
gitlab容器目录 |
作用 |
/srv/gitlab/data |
/var/opt/gitlab |
存储应用数据 |
/srv/gitlab/logs |
/var/log/gitlab |
存储日志文件 |
/srv/gitlab/config |
/etc/gitlab |
gitlab配置文件 |
注意:gitlab容器运行后,默认管理员用户名是root,第一次访问时需要设置root用户的密码。
4、gitlab配置文件
gitlab的配置文件在gitlab容器下的/etc/gitlab/gitlab.rb配置文件中,访问gitlab.rb配置文件需进入gitlab容器中,运行shell命令,:
登录gitlab容器:docker exec -it gitlab /bin/bash
编辑配置文件:vi /etc/gitlab/gitlab.rb
或者直接登录修改:docker exec -it gitlab vi /etc/gitlab/gitlab.rb
gitlab.rb配置文件修改会需要重新加载gitlab配置,并且重新启动服务:
直接重启gitlab容器:docker restart gitlab
或者登录到容器后,执行重载配置和重启gitlab服务命令:
gitlab-ctl reconfigure:重新加载配置
gitlab-ctl restart:重启gitlab服务
常用gitlab命令:
gitlab-ctl stop|start|restart|reconfigure
5、gitlab容器http访问配置:
5.1、gitlab容器内置了Nginx服务器对外提供服务,默认情况下nginx监听的http协议端口是80,外部若是要通过http协议访问,则容器运行时需要将Nginx监听的端口映射到宿主机端口上,如:
docker run --p 8081:80.....
http协议80端口映射到宿主机的8081端口上,外部则可以通过8081端口访问gitlab容器,如访问:http://192.168.146.128:8081/进入gitlab系统界面
5.2、external_url配置:配置显示在gitlab系统界面中clone的git仓库地址,如
external_url "http://192.168.146.128:8081"
注意8081是gitlab容器映射到宿主机上的端口,这里指定是外部能够直接访问的地址。并且若是使用https访问,则external_url中设置成https访问协议。
Nginx默认使用的是80端口,但是当设置了external_url配置后,Nginx则不会使用默认80端口,而是去使用external_url中指定的端口,如:http://192.168.146.128:8081,Nginx则会去使用8081端口,若是配置的external_url中没有指定端口,http协议则是80端口,https协议则是443端口。
5.3、手动指定Nginx监听端口,修改gitlab.rb配置文件,增加配置:
nginx['listen_port'] = 80
注:1、nginx使用端口的优先顺序:nginx['listen_port']手动指定 > external_url配置端口 > 默认80。
2、配置好nginx监听的端口后,需要将其映射到宿主机端口后,外部才能访问。external_url中配置的是外部能够访问地址,则端口则是映射出去的宿主机端口。
5.5、配置示例:
gitlab容器运行命令:docker run -d --p 18081:8081.....
external_url "http://192.168.146.128:18081"
nginx['listen_port'] = 8081
如上,gitlab容器中使用的http端口是8081,gitlab容器启动时将8081映射到了宿主机的18081端口上,则外部访问地址是:http://192.168.146.128:18081
若是不指定nginx['listen_port']配置,gitlab容器使用的http端口则是18081(根据external_url而来),但是运行容器时并没有将gitlab容器的18081映射出去,则访问http://192.168.146.128:18081时,访问失败。
所以,启动gitlab容器时需预先想好gitlab容器需要时用的http端口。
6、gitlab容器https访问配置:
6.1、设置外部访问的地址:
external_url "https://192.168.146.128:8443",外部使用https协议访问。设置external_url后,则nginx则会根据其配置监听8443端口,
6.2、同http配置一样,也可以手动配置https协议端口:
nginx['listen_port'] = 443 所以无论是http和https的端口都是同一个配置,gitlab容器中nginx只会监听该端口,然后根据external_url配置的协议进行判断。
6.3、若是nginx['listen_port'] = 443,指定的是https端口,则外部不能通过http协议访问了,因为nginx并没有监听额外的http协议端口。但是可以将http请求重定向到https请求上,配置:
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 8081
注意:8081是gitlab容器使用的http协议端口,并不是映射的宿主机端口。
6.4、https协议ssl证书指定,gitlab.rb配置文件中设置ssl证书的位置:
nginx['ssl_certificate'] = "/etc/gitlab/ssl/selfcert.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/selfcert.key"
默认情况下gitlab容器会去容器目录/etc/gitlab/ssl下加载证书文件,会根据external_url中设置的域名进行加载,如:external_url "http://gitlab.example.com",则默认加载的证书文件为:
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
注意:要移除ssl证书秘钥中密码短语,以及ssl证书目录的访问权限,默认目录为/etc/gitlab/ ssl,设置权限为600:
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl
6.5、https配置示例:
external_url "https://192.168.146.128:18443"
nginx['listen_port'] = 8443
nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 8081
nginx['ssl_certificate'] = "/etc/gitlab/ssl/selfcert.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/selfcert.key"
如上:gitlab容器使用的https端口是8443,映射到宿主机上的18443端口,则外部可以通过地址:https://192.168.146.128:18443访问gitlab
gitlab容器监听的http重定向端口是8081,映射到书主机的18081上后,当外部访问http://192.168.146.128:18081时,则会重定向到https访问地址:https://192.168.146.128:18443
6.6、SSL自签证书生成:
1. 创建 Private Key
sudo openssl genrsa -des3 -out /etc/gitlab/ssl/192.168.146.128.key 2048
记住输入的密码(Pass phrase)
2. 生成 Certificate Request
sudo openssl req -new -key /etc/gitlab/ssl/gitlab.domain.com.key -out /etc/gitlab/ssl/gitlab.domain.com.csr
注: 第一步和第二部可以合并成一条命令
openssl req -nodes -newkey rsa:2048 -keyout gitlab.domain.com.key -out gitlab.domain.com.cs
3. 移除Private Key 中的密码短语
sudo cp -v /etc/gitlab/ssl/gitlab.domain.com.{key,original}
sudo openssl rsa -in /etc/gitlab/ssl/gitlab.domain.com.original -out /etc/gitlab/ssl/gitlab.domain.com.key
sudo rm -v /etc/gitlab/ssl/gitlab.domain.com.original
4. 创建证书
sudo openssl x509 -req -days 1460 -in /etc/gitlab/ssl/gitlab.domain.com.csr -signkey /etc/gitlab/ssl/gitlab.domain.com.key -out /etc/gitlab/ssl/gitlab.domain.com.crt
5. 移除证书请求文件
sudo rm -v /etc/gitlab/ssl/gitlab.domain.com.csr
7、Gitlab git ssh端口配置:
gitlab容器使用22作为ssh协议的端口,gitlab界面clone地址也默认是22端口,若是gitlab容器映射到宿主机的端口不是22,则需要手动配置:
gitlab_rails['gitlab_shell_ssh_port'] = 8022
注意:这里配置是ssh协议22端口映射到宿主机上的端口。
git ssh key设置。。。。
https://www.jianshu.com/p/4111534b339f
https://docs.gitlab.com/omnibus/docker/#run-gitlab-ce-on-public-ip-address
https://docs.gitlab.com/omnibus/settings/nginx.html#enable-https
https://docs.gitlab.com/omnibus/settings/smtp.html
https://www.cnblogs.com/int32bit/p/5310382.html
https://www.iyunv.com/thread-433644-1-1.html
https://www.jianshu.com/p/aa307ee95442
https://www.cnblogs.com/amoyzhu/p/7250964.html