1、拉取镜像

docker pull gitlab/gitlab-ce

2、创建数据挂载目录

srv 为 linux 下默认服务数据存储目录
其实不需要显示的创建数据存储目录,因为 Docker run 容器挂载时会自动创建不存在的文件目录。

mkdir -p /srv/gitlab/config
mkdir -p /srv/gitlab/logs
mkdir -p /srv/gitlab/data
mkdir -p /srv/gitlab/logs/reconfigur

3、启动容器

docker run -d \
   -p 10443:443  \
   -p 18090:80  \
   -p 10022:22 \
   --privileged=true  \
   --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 /srv/gitlab/logs/reconfigure:/var/log/gitlab/reconfigure \
   gitlab/gitlab-ce:latest

4、启动成功之后停止容器,修改生成的配置文件的内容(公网ip后不加端口)

cat >> /srv/gitlab/config/gitlab.rb << EOF
external_url 'http://172.16.0.9'     
gitlab_rails['gitlab_ssh_host'] = '172.16.0.9'  
gitlab_rails['gitlab_shell_ssh_port'] = 10022
unicorn['worker_processes'] = 2
EOF

32行: # external_url 'GENERATED_EXTERNAL_URL' => external_url 'http://172.16.0.9'
66行: # gitlab_rails['gitlab_ssh_host'] = 'ssh.host_example.com' => gitlab_rails['gitlab_ssh_host'] = '172.16.0.9'
651行:# gitlab_rails['gitlab_shell_ssh_port'] = 22 => gitlab_rails['gitlab_shell_ssh_port'] = 10022

5、防火墙开放 18090 端口

firewall-cmd --permanent --zone=public --add-port=18090/tcp --permanent
firewall-cmd --reload

6、重启容器

docker restart gitlab

7、重启容器报错(可能)

报错信息:

Error response from daemon: Cannot restart container gitlab: driver failed programming external connectivity on endpoint gitlab (7053a3c88de7688a861b393ec7995c0b941cc0288e2958b2bf03fb80db056e7b):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 18090 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1))

解决方案:

重启docker服务后再启动容器

systemctl restart docker
docker start gitlab

8、docker-compose安装gitlab

进入 /usr/local/src/other/gitlab 目录

mkdir /usr/local/src/other/gitlab
cd /usr/local/src/other/gitlab

创建docke-compose.yml文件

vim docke-compose.yml
version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    privileged: true #获取宿主机root权限(特殊权限)
    restart: always
    hostname: 'gitlab.example.com'
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
    ports:
      - "10443:443"
      - "10080:80"
      - "10022:22"
    environment:
      gitlab_omnibus_config: |
        external_url 'http://gitlab.example.com'
        gitlab_rails["time_zone"] = 'Asia/Shanghai'
        gitlab_rails['gitlab_shell_ssh_port'] = 10022
    shm_size: '256m'

执行创建命令

docker compose up -d

image.png

启动的注意事项

gitlab 体系庞大,所以启动时间较长并大量占用内存,所以执行启动命令后若访问http://xxxx:10080可能优先出现无法访问界面。
等待几分钟即可


9、访问172.16.0.9:18090(10080)

image.png

10、设置root账号密码

# 进入容器内部 (先通过 docker ps -a 查看容器Id)
docker exec -it gitlab /bin/bash

# 这一步可能很慢,耐心等待
gitlab-rails console -e production
# 查看用户管理员
user = User.where(username:"root").first
# 或者
user = User.where(id: 1).first

# 配置新密码 新密码建议 大于 8位 不然保存的时候会提示错误
user.password = "xxxxxxxx"
# 确认密码
user.password_confirmation = "xxxxxxxx"
# 保存
user.save!

11、登录root账号

image.png

12、注册新用户

image.png
image.png

点击注册之后会提示

image.png
翻译:您已经注册成功。但是,我们无法为您登录,因为您的帐户正在等待您的GitLab管理员的批准。

13、管理员账号审核批准

image.png


14、审核之后再次登录刚刚申请的账号


15、gitlab设置中文或者其他语言,gitlab汉化

登录后 ----> setting ----> preferences ----> language ----> 简体中文。然后别忘记刷新
image.png