docker搭建gitlab服务

422 阅读2分钟

ssh远程登录服务器

安装docker

搜索docker镜像

docker search gitlab

拉取gitlab镜像(gitlab-ce是免费的,gitlab-ee是企业级的)

docker pull gitlab/gitlab-ce:latest

启动gitlab容器

docker run -itd \
    --publish 8082:80 --publish 8083:22 \
    --privileged=true \
    --name gitlab_test \
    --restart always \
    --volume /data/gitlab/config:/etc/gitlab \
    --volume /data/gitlab/logs:/var/log/gitlab \
    --volume /data/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

解释:

1. --publish 8082:80 --publish 8083:22
为将容器内80端口映射至宿主机8082端口,这是访问gitlab的端口,将容器内22端口映射至宿主机9922端口,这是访问ssh的端口
2. --restart always 容器自启动
3. --privileged=true 让容器获取宿主机root权限
4. --name gitlab_test 设置容器名称为gitlab_test
5. gitlab/gitlab-ce:latest 镜像的名称,这里也可以写镜像ID

进入容器内部

sudo docker exec -it <containerId> /bin/bash

修改gitlab.rb配置

vi /etc/gitlab/gitlab.rb gitlab.rb

gitlab.rb文件里添加:

external_url 'http://IP+端口' // gitlab访问地址,不写端口默认是80   
gitlab_rails['gitlab_ssh_host'] = 'IP' // ssh主机ip 
gitlab_rail['gitlab_shell_ssh_port'] = '8083' // ssh连接端口 
nginx['listen_port'] = '8082' // nginx监听端口

执行配置修改命令

gitlab-ctl reconfigure

修改gitlab.yml文件

vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
// gitlab.yml配置修改:
gitlab:
    host: IP # 这里改成自己的IP
    port: 8082 # 这里改成8082
    https: false

重启gitlab

gitlab-ctl restart

可以在docker容器内访问

curl IP:8082

也可以再宿主机中访问

curl IP:8082

浏览器访问:http://IP+端口

修改密码

方式一:直接进入cat /data/gitlab/config/initial_root_password,查看初始密码,用root密码登入后网页上修改。
方式二:进入容器中,进入控制台: 
gitlab-rails console -e production(有点慢) 
user=User.where(id:1).first //查询root用户(即id为1) 
user.password='xxx' //设置密码
user.save! //保存 
exit //退出 

其他注意:

  1. 如果修改了external_url地址为'http://IP+8082',gitlab访问不了,是因为把docker内部的端口号改为8082了,而通过docker run映射出来的是80端口,所以要去修改服务的映射关系,或者一开始开启容器的时候就执行 docker run -itd \ --publish 8082:8082 --publish 8083:22 \ ......

  2. 如果内部curl成功而外部访问不到对应端口的服务,查看防火墙是否开启。

  3. 查看暴露的端口是否被占用。

  4. 我用的是别人的服务器,是在虚拟机里安装docker服务的,中间还要映射一遍,这个也需要注意下。

  5. gitlab体积大,启动时出现返回502要稍微等一会儿再请求。