小白搭建gitlab(docker)

761 阅读2分钟

gitlab介绍

gitlab是全球第二大代码托管仓库,同时支持和Jenkins结合,实现代码上传到gitlab后,在jenkins里自动化打包,部署,需要编写gitlab.yml

安装

1、启动docker,拉取gitlab镜像

docker pull gitlab/gitlab-ee

2、定义gitlab存放的默认路径

export GITLAB_HOME=/srv/gitlab

3、创建gitlab容器,将容器的配置文件映射到服务器本地,指定容器的映射端口,容器名,容器的hostname,使容器开机自启动

// --detach 以守护进程的方式启动 
// --hostname 设置主机名 
// --publish 10443:443 把容器的http端口443映射到外部10443端口
// --publish 80:80 把容器的web端口80映射到外部80端口 
// --publish 2222:22 把容器的ssh端口22映射到外部2222端口 
// --privileged=true 使得容器内的root拥有真正的root权限。否则容器内的root只是外部的一个普通用户权限 
// --name gitlab 容器的名称,用于启动或者停止容器用的:  启动,docker start gitlab,查看日志 docker logs gitlab 
// --restart always: 自动重启 
// --volume 将容器的路径映射到容器外部

sudo docker run --detach \ 
    --hostname gitlab.example.com \
    --publish 4443:443 --publish 8880:80 --publish 2222:22 \
    --name gitlab \
    --restart always \
    --volume $GITLAB_HOME/config:/etc/gitlab \
    --volume $GITLAB_HOME/logs:/var/log/gitlab \
    --volume $GITLAB_HOME/data:/var/opt/gitlab \
    gitlab/gitlab-ee:latest

4、查看gitlab的日志

sudo docker logs -f gitlab

5、访问gitlab,输入IP地址(虚拟机IP地址)加上端口号8880

用户名是root,密码需要进入gitlab容器获取

6、进入gitlab容器,并获取登录密码

sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

进入gitlab之后,修改root密码

优化

这里存在一个问题,我不想使用官方默认的http80端口,因为很容易被占用。我将其改成了8880,但这样造成一个问题,就是我能通过8880端口访问gitlab,但无法使用http协议去拉取分支代码。解决办法是将官方默认的80端口改成其它端口,映射的端口也是一样的。

修改创建容器的命令:

docker run -d \
    --hostname ip \
    --publish 4443:4443 --publish 8880:8880 --publish 2222:22 \
    --name gitlab \
    --restart always \
    --volume $GITLAB_HOME/config:/etc/gitlab \
    --volume $GITLAB_HOME/logs:/var/log/gitlab \
    --volume $GITLAB_HOME/data:/var/opt/gitlab \
    gitlab/gitlab-ee:latest

还需要修改gitlab.rb中的external_url,gitlab被我挂载到了宿主机安装gitlab里的config目录中了,对应容器中的/etc/gitlab目录。这里有两种改法: 方式一:直接将external_url的值改为http://ip:8880

external_url 'http://ip:8880'

方式二:

external_url 'http://192.168.0.128' # 不写端口,默认是80
nginx['redirect_http_to_https_port'] = 8880
nginx['listen_port'] = 8880

这样访问网站之后,可看到如下图:

image.png