以容器的方式运行GitLab
目录:
一、环境及实验目标
二、软硬件需求:
三、准备数据目录
四、运行容器
五、配置GitLab
六、访问页面
七、其他注意事项
八、运行附图
一、环境及实验目标
实验目标:在一台虚拟机上,准备好Docker环境,使用容器的方式运行gitlab镜像,搭建一台内部私有的gitlab服务器,要能通过http://gitlab.abc.com域名访问。
机器名:gitlab9
IP地址:192.168.3.169
访问网址:http://gitlab.abc.com
二、软硬件需求:
CPU :最少1核,也能跑,慢!建议2核以上;
内存:最少4GB(1GB Ram+3GB Swap),建议4GB Ram以上;
存储:根据各自需要而定,最少5-10GB以上可用空间,建议使用SSD;
软件:Ubuntu 16.04.03+Docker 1.12.3(我用的是这个版本)
不满足以上配置,在使用中要么会比较慢,要么会报500错误。
建议:2核4GB,20GB+空间,可满足100用户的基本使用。
实际生产中使用时,可根据用户数和存储量,确定硬件配置,
查询地址:https://docs.gitlab.com/ce/install/requirements.html
三、准备数据目录
#gitlab/gitlab-ce容器需要先创建三个目录
#分别存放应用数据、日志和配置文件
#宿主机上/gitlab/data对应容器中/var/opt/gitlab
#宿主机上/gitlab/logs对应容器中/var/log/gitlab
#宿主机上/gitlab/config对应容器中/etc/gitlab
sudo mkdir -p /gitlab/data
sudo mkdir -p /gitlab/logs
sudo mkdir -p /gitlab/config
四、运行容器gitlab/gitlab-ce
#启动一个gitlab-ce容器
#--hostname为GitLab容器的主机名,不是对外发布的网站名。
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /gitlab/config:/etc/gitlab \
--volume /gitlab/logs:/var/log/gitlab \
--volume /gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
#首次启动可能比较慢,需要等待几分钟的时间。
#可以使用sudo docker ps命令查看当前gitlab容器的状态。
#当它的状态由starting变为health时,说明成功启动了。
五、配置GitLab
#如果按照上述准备工作,配置好的宿主机上的三个目录,
#GitLab的配置文件在容器中为/etc/gitlab/gitlab.rb
#对应宿主机上的文件为/gitlab/config/gitlab.rb
#直接使用vi编辑器,在宿主机上编辑该文件即可。
sudo vi /gitlab/config/gitlab.rb
#注:使用Xshell的ssh远程登录到宿主机,
#再执行sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb
#试图到容器中运行vi命令,编辑配置文件,会出错!
#只要修改文件中的external_url参数即可,
#指向需要发布的http://gitlab.abc.com网站。
#然后重新启动gitlab容器
sudo docker restart gitlab
六、访问页面
#在客户端机器上(操作系统为Win7),ip地址为192.168.3.xxx
#修改C:\windows\system32\drivers\etc\hosts文件
#加入192.168.3.169 gitlab.abc.com
#通过网页访问http://gitlab.abc.com
#首次访问需要修改管理员密码,
#然后就可以使用root用户和新密码登录
七、其他问题及注意事项:
7.1如果启用了SELinux,Docker的运行命令是怎样的?:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /gitlab/config:/etc/gitlab:Z \
--volume /gitlab/logs:/var/log/gitlab:Z \
--volume /gitlab/data:/var/opt/gitlab:Z \
gitlab/gitlab-ce:latest
否则docker进程在挂载的卷上,没有足够的权限创建配置文件。
7.2访问页面报50x故障怎么办?升级后遇到权限问题怎么办?
#当访问页面遇到500错误时,可以尝试重启gitlab容器来解决。
sudo docker restart gitlab
#或者在升级新的Docker镜像时,遇到权限问题,
#可以尝试执行gitlab的更新权限命令解决:
sudo docker exec gitlab update-permissions
sudo docker restart gitlab
7.3容器已经重启好了,为什么不能访问页面?
#执行sudo docker restart gitlab命令,重启容器
#该命令虽然立刻就能执行完了,
#但容器内部的服务还没有完全起来,
#通过sudo docker ps查看容器状态,
#需要1分多的时间,健康状况才能从starting转换到health
#在此期间访问网站会报502错误!
#等待容器的状态转为health以后,才能正常访问网页。
7.4疑问:启动容器时的hostname是什么作用?是容器的主机名?
还是对外发布的网站名称?什么地方会用到这个域名?
答:--hostname参数为GitLab容器的主机名,不是对外发布的网站名。
7.5Gitlab容器使用了哪些端口?怎样避免冲突?
#gitlab容器内部开放了80/22/443/8080端口,
#这些端口号也是宿主机常用的端口,不能直接80到80,22到22,这样容易引起冲突,
#如果想要将这些端口正确暴露到宿主机上,可以使用--publish参数,
#调整宿主机到容器内的端口映射,避免和宿主机上的端口冲突。
#比如 --publish 8880:80访问主机的8880,实际会转到容器的80端口
#--publish 2222:22访问主机的2222,实际是在访问gitlab容器的22端口
7.6如果编译的方式安装,可以使用MySQL数据库吗?
#强烈建议用户使用PostgreSQL而不是MySQL,
#已使用MySQL的用户,也建议迁移到PostgreSQL。
#容器的方式运行gitlab,不存在此问题。
7.7可以在Docker Toolbox下安装GitLab吗?
#建议使用本地化的方式安装Docker,不要使用Docker Toolbox方式安装。
八、运行附图:
1-创建目录-运行容器-查看状态-正在启动中
5-gitlab容器的状态已正常
6-进入容器内部,查看gitlab容器信息
7-容器的主机名和IP地址
8-需要修改的网站URL
9-外部访问Gitlab的网址
A-重启gitlab容器以后,大约1分钟左右,容器的状态才从starting变为healthy
B-第一次访问gitlab.abc.com网站
C-使用root用户和修改后的密码登录到gitlab
D-容器重启后,如果时间未到,状态没有变为health,会报502错误
参考链接:
GitLab Docker images
https://docs.gitlab.com/omnibus/docker/
Configuration options
https://docs.gitlab.com/omnibus/settings/configuration.html
使用docker部署gitlab应用
http://www.jianshu.com/p/05e3bb375f64
gitlab-server环境搭建
http://www.cnblogs.com/gnool/p/6128546.html
gitlab / gitlab-ce
APT/YUM repository for GitLab Community Edition packages
https://packages.gitlab.com/gitlab/gitlab-ce/install