docker部署gitLab
安装docker
# yum update -y
# yum install -y yum-utils
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum -y install docker-ce
# systemctl enable docker
# systemctl start docker
# docker version
命令出现docker版本号,至此docker安装成功。
安装gitLab
拉取GitLab镜像
# docker pull gitlab/gitlab-ce
启动一个gitLab容器
# docker run -d --hostname gitlab.example.com\
-p 443:443 -p 8181:80 -p 2222:22 \
--name gitlab \
--restart always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
-v /etc/localtime:/etc/localtime
gitlab/gitlab-ce:latest
可以在/root目录下,新建一个gitlab_startup.sh文件,用以存储上述命令。
查看所有的容器
docker ps
如果出现gitlab的容器,则表示gitLab启动成功。
GitLab配置
gitLab本身内置了nginx,使用内置nginx进行设置。配置文件是/etc/gitlab/gitlab.rb
进入目录/srv/gitlab/config,修改配置文件
`# vi gitlab.rb`
对应修改参数:
external_url "https://gitlab.example.com"
unicorn["port"]=8080
nginx["redirect_http_to _https"]=true
nginx["http2_enable"]=false
然后重启容器,docker restart gitlab
(或者进入docker 容器内,docker exec -it gitlab bash
[进入容器],然后在容器内执行gitlab-ctl reconfigure
[重启gitlab])。完成以上配置。由于我是内网建立的,所以我在服务器端和本地端加入两个指令,如果想要外部网址访问,自行配置即可。
配置服务器端和本地windows
- 服务器
`vi /etc/hosts`
在文件中新增如下一条数据:
[内网IP] gitlab.example.com
- 本地机器(windows)
进入C:/windows/system32/dirvers/etc
打开hosts文件,新增如下一条语句
[内网IP] gitlab.example.com
添加SSL证书支持HTTPS
SSL证书包括:
1、CA证书,也叫根证书或者中间级证书。如果是单向https认证的话,该证书是可选的。不安装CA证书的话,浏览器默认是不安全的。
2、服务器证书,必选项。通过key,证书请求文件csr,再通过CA证书签名,生成服务器证书。
3、客户端证书,可选项。若有客户端证书则是双向https验证。
以上所有证书都可以自己生成
文件后缀:
linux系统是不以后缀名来判断文件类型的,但是为了我们能够更好地判断文件用途,所以添加各种后缀。以下是约定成俗的后缀。
*.key:密钥文件,一般是SSL中的私钥;
*.csr:证书请求文件,里面包含公钥和其他信息,通过签名后就可以生成证书;
.crt, .cert:证书文件,包含公钥,签名和其他需要认证的信息,比如主机名称(IP)等。
*.pem:里面一般包含私钥和证书的信息。
服务器证书的生成
- 生成服务器私钥
在docker容器内,进入/etc/gitlab目录,新建ssl文件夹,mkdir ssl
,进入ssl文件夹,生成服务器私钥openssl genrsa -des3 -out gitlab.example.com.key 1024
,输入加密密码,用128位的rsa算法生成密钥,得到gitlab.example.com.key文件。
生成服务器证书请求(CSR)
openssl req -new -key gitlab.example.com.key -out gitlab.example.com.csr
在生成这个文件的过程中,有一点需要特别注意,Common Name 填入主机名(或者服务器IP)。
生成服务器证书
如果不使用CA证书,可用以下方式生成。
openssl req -x509 -days 3650 -key gitlab.example.com.key in gitlab.example.com.csr > gitlab.example.com.crt
用服务器密钥和证书请求生成证书 gitlab.example.com.crt , -days 参数指明证书有效期,单位为天。商业上来说,服务器证书是由通过第三方机构颁发的,该证书由第三方认证机构颁发的。
参考网址:https://www.cnblogs.com/vincentfu/p/5475248.html
Nginx添加SSL支持HTTPS后,脚本启动失败,Enter PEM pass phrase
报错信息如下:
SSL_CTX_use_PrivateKey_file("/etc/gitlab/ssl/gitlab.example.com.key") failed (SSL: error:0906406D:PEM routines:PEM_def_callback:problems getting password error:0906A068:PEM routines:PEM_do_header:bad password read error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
解决办法:
在docker容器,进入ssl文件夹:
cp gitlab.example.com.key gitlab.example.com.key.org
openssl rsa -in gitlab.example.com.key.org -out gitlab.example.com.key
替换ssl文件下的key,重启nginx。
参考网址:http://blog.csdn.net/mingjie1212/article/details/54615603
docker容器运行时,-p映射端口报错
报错信息如下:
Error response from daemon: Cannot start container eb9d501f56bc142d9bf75ddfc7ad88383b7388ca6a5959309af2165f1fff6292: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8081 -j DNAT --to-destination 172.17.0.164:8080 ! -i docker0: iptables: No chain/target/match by that name.
大致为网络问题。
解决办法:
首先进入docker容器内,验证内部网络是否能够ping通宿主机,如果能ping通,即可通过重建dicker0网络恢复。执行以下命令:
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d
systemctl restart docker
问题即可解决。
参考网址:http://blog.sina.com.cn/s/blog_8e032fb90102xuon.html
访问https://gitlab.example.com
页面返回502
解决办法:
进入/srv/gitlab/config/gitlab.rb做出如下修改
unicorn["port"]=8080
参考网址:http://blog.csdn.net/wangxicoding/article/details/43738137
git fetch 出现:SSL certificate problem: self signed certificate错误
解决办法:
进入客户git环境,输入下面程序:
git config http.sslVerify false
参考网址:https://gitlab.com/gitlab-org/gitlab-ce/issues/788
设置SSH方式访问GItLab
修改gitLab配置文件中的变量:
git_rails['gitlab_shell_ssh_port']=2222
此时gitLab的项目SSH路径为ssh://git@gitlab.example.com:2222/wch/wchTest.git
TortoiseGit设置私钥和公钥
因为我采用的TortoiseGit上传代码,所以需要配置TortoiseGit。
- 在本地电脑(windows),开始菜单的TortoiseGit/PuTTYgen,单击打开软件
单击“Generate”按钮,在等待进度条完成之前,在界面的空白处按住左键拖动鼠标。在等待进度条完成之后显示如下界面。
将上述界面的的公钥,全选复制,保存为authorized_keys。并且单击私钥保存,保存名为”private.ppk”。
- 进入gitLab界面,然后在“setting”处,“SSH Keys”处,将公钥内容复制到“Key”栏目里,Title为默认,单击“Add key”,及添加了公钥。
- 进入本地windows的开始菜单,“TortoiseGit/Pageant”,单击“Add key”选择上述生成的私钥“private.ppk”注意文件名需要和公钥的保持一致。
- 然后需要在新建项目的时候,在TortoiseGit/设置/远端,在putty密钥处加载之前的private.ppk即可。