介绍
近几天访问 GitHub 加载太慢,因此心血来潮准备搭建一个自己的代码托管仓库(Gitlab)
docker中安装gitlab
准备
centos服务器一台,确保网络畅通。安装之前最好能更新一下 yum
源。
yum update -y
安装docker
- 安装docker。我们使用阿里云官方提供的dockers安装方式。>Docker CE 镜像源站<
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# (或者) systemctl start docker
# Step 5: 设置Docker开机启动(可选)
sudo systemctl enable docker
# Step 6: 关闭开机启动
sudo systemctl disable docker
注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
-
设置镜像加速器。同样也使用阿里云提供的加速方式。>官方镜像加速<
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["<your accelerate address>"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
安装gitlab
gitlab有汉化版的,有需要的可以选择汉化版的镜像进行安装(>汉化版gitlab<),汉化版的安装方式和原版安装方式一样。
这里我们使用原版镜像安装。
==拉取镜像==
# 拉取gitlab镜像 可先使用 docker search gitlab 搜索一下
docker pull gitlab/gitlab-ce
# Using default tag: latest
# latest: Pulling from gitlab/gitlab-ce
# fe703b657a32: Pull complete
# f9df1fafd224: Pull complete
# a645a4b887f9: Pull complete
# 57db7fe0b522: Pull complete
# 0a4b36a7e931: Pull complete
# 38d84da06c3b: Pull complete
# c7b836a13c8d: Pull complete
# 386adf1ba197: Pull complete
# 46fd1f50a1fb: Pull complete
# 05974e78692a: Pull complete
# Digest: sha256:ec7be7237e66512dc668cb1af9bb3b0221cfb7fc29c791812435ab8dfcd9766e
# Status: Downloaded newer image for gitlab/gitlab-ce:latest
# 拉取完成可使用如下命令查看所有镜像
docker images
==创建挂载数据卷==
拉取完之后我们在宿主机上创建三个文件夹,用于挂载gitab数据。
# /dockerDir这个路径随意,主要的是/gitlab/* 这三个目录
mkdir /dockerDir/gitlab/etc
mkdir /dockerDir/gitlab/logs
mkdir /dockerDir/gitlab/data
==启动gitlab容器==
以下是本次用到的启动命令。>查看更多命令<
docker run \
--detach \
--publish 80:80 \ # 映射宿主机80端口到容器中80端口
--publish 443:443 \ # 映射https端口, 可不配
--publish 22:22 \ # 映射22端口, 可不配
--name gitlab \ # 容器名称
--restart always \ # 总是重启服务
--hostname 192.168.x.x \ # 宿主机的ip, 如果映射了域名也可直接写域名(个人建议使用ip)
-v /dockerDir/gitlab/etc:/etc/gitlab \ # 挂载gitlab的配置文件
-v /dockerDir/gitlab/logs:/var/log/gitlab \ # 挂载gitlab的日志文件
-v /dockerDir/gitlab/data:/var/opt/gitlab \ # 挂载gitlab的数据
--privileged=true \ # 在容器中能以root身份执行操作
gitlab/gitlab-ce # 需要运行的镜像
# 启动后使用如下命令查看运行中的容器
docker ps
# 查看所有容器,包括未运行的
docker ps -a
刚启动就使用 docker ps 查看容器,可能会看到 gitlab 容器的 status 为 (healthy starting)
,等待一会儿后就会变成 (healthy)
。这时我们可以直接访问 宿主机IP+容器80端口映射的外部端口
即可(这里我们映射的宿主机端口也是80)。比如:192.168.x.x:8080
==访问gitlab==
启动好之后访问gitlab,会转到设置密码页面,我们输入密码后会转到登录界面,默认的账户是root
。
设置gitlab的git地址
我们知道,使用 http
方式拉取仓库代码时,会提供给我们一个http
地址,然后使用 git clone http://xxx
的方式拉取代码,现在我们需要做的就是设置这个http
地址。
编辑 /dockerDir/gitlab/data/gitlab-rails/etc/gitlab.yml
文件,将其中的host
改为gitlab
的ip
或域名,port
改为gitlab
的端口即可。(当然如果host
和ip
已经是你需要的值,就无需改动了)
然后进入容器重启gitlab
。
# 进入容器
docker exec -it gitlab /bin/bash
# 重启容器
gitlab-ctl restart
配置gitlab邮件服务
- 配置
gitlab
发送邮件功能
gitlab
中很多地方都用到了邮件功能,因此将邮件功能配置好还是很有必要的一件事。本次我们使用QQ邮件服务来配置。>查看更多邮箱配置<
使用QQ邮箱前,需要先开启SMTP
服务才行。>开启SMTP服务<
编辑 /dockerDir/gitlab/etc/gitlab.rb
文件,在Email Settings
处添加如下配置:
### Email Settings
# ......
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xxx@qq.com'
gitlab_rails['gitlab_email_display_name'] = '发送邮件人名称?'
gitlab_rails['gitlab_email_reply_to'] = 'xxx@qq.com'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "发送邮件人名称?"
gitlab_rails['smtp_password'] = "从QQ邮箱获取的授权码"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
然后进入容器刷新gitlab
配置:
# 进入容器
docker exec -it gitlab /bin/bash
# 刷新gitlab配置
gitlab-ctl reconfigure
# 配置刷新完成后,直接在容器内测试邮件服务
# 进入邮件控制台
gitlab-rails console
# 发送测试邮件
Notify.test_email('receive@qq.com', 'Test Subject', 'Test Body').deliver_now
如果接收到了邮件,那么邮件服务配置完成(如果没有接收到邮件,可以重新检查配置或查看邮件是否在垃圾箱里)。
gitlab
的用户想要能够接收到邮件,还需要设置用户自己的邮件,具体步骤可在gitlab
的个人设置里配置。
centos 上安装gitlab
上面介绍了使用 docker 安装 gitlab,下面介绍在 centos 中使用 rpm 包安装的方式。
PS:以下操作方式在离线环境中也适用。
机器信息
[root@localhost ~]# uname -a
Linux localhost 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
前置依赖
这种方式安装需要依赖另一些程序,这里先列出来:
# rpm -ivh policycoreutils-python-2.5-33.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep policycoreutils-python
policycoreutils-python-2.5-33.el7.x86_64
[root@localhost ~]# rpm -qa | grep openssh
openssh-clients-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
[root@localhost ~]# rpm -qa | grep postfix
postfix-2.10.1-7.el7.x86_64
# rpm -ivh audit-libs-python-2.8.5-4.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep audit-libs-python
audit-libs-python-2.8.5-4.el7.x86_64
# rpm -ivh checkpolicy-2.5-8.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep checkpolicy
checkpolicy-2.5-8.el7.x86_64
# rpm -ivh libcgroup-0.41-21.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep libcgroup
libcgroup-0.41-21.el7.x86_64
libcgroup-tools-0.41-21.el7.x86_64
# rpm -ivh libsemanage-python-2.5-14.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep libsemanage-python
libsemanage-python-2.5-14.el7.x86_64
# rpm -ivh python-IPy-0.75-6.el7.noarch.rpm
[root@localhost ~]# rpm -qa | grep python-IPy
python-IPy-0.75-6.el7.noarch
# rpm -ivh setools-libs-3.3.8-4.el7.x86_64.rpm
[root@localhost ~]# rpm -qa | grep setools-libs
setools-libs-3.3.8-4.el7.x86_64
PS:本人在安装 gitlab 之前,以上依赖均已安装好,后续安装 gitlab 也很顺利。如若你在安装时提示缺少依赖,直接按照提示将缺少的依赖安装即可。
rpm 包下载地址:http://rpm.pbone.net
直接搜索需要的 rpm 包,下载后安装即可。
下载 gitlab rpm 安装包
官方下载地址:https://packages.gitlab.com/gitlab/gitlab-ce
清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum
选择el/7版本,EL7 软件包用于在Red Hat 7.x, CentOS 7.x, and CloudLinux 7.x的安装。
本次我选择的是:gitlab-ce-12.1.17-ce.0.el7.x86_64.rpm 版本。
安装配置 gitlab
下载好之后直接安装:
rpm -ivh gitlab-ce-12.1.17-ce.0.el7.x86_64.rpm
修改 ip 地址及端口:
[root@localhost ~]# vim /etc/gitlab/gitlan.rb
# 访问 gitlab 的 ip 和端口
external_url 'http://192.168.19.110:8888'
# 修改or添加这个配置,不能和上面的external_url端口一样
unicorn['port'] = 9999
加载 gitlab 配置并重新启动:
[root@localhost ~]# gitlab-ctl reconfigure
....
[root@localhost ~]# gitlab-ctl restart
....
开放8888端口
# 开放服务器8888端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=8888/tcp --permanent
# 重新加载防火墙
[root@localhost ~]# firewall-cmd --reload
# 查看所有已开放的端口
[root@localhost ~]# firewall-cmd --zone=public --list-ports
查看错误日志
如果在启动过程中报错,或者访问 gitlab 一直是502。
# 查看gitlab运行日志
[root@localhost ~]# gitlab-ctl tail
# 或者进入gitlab相关文件夹查看日志文件,比如查看unicorn的日志
[root@localhost ~]# less /var/log/gitlab/unicorn/unicorn_stderr.log
......
Errno::EADDRINUSE: Address already in use - bind(2) for 127.0.0.1:8080
......
以上错误信息表示 unicorn 默认的8080端口已被占用,上面配置的 unicorn['port'] = 9999 是我修改后的端口。
查看日志信息发现问题后,做响应的处理后重新加载gitlab配置并重启。
邮件服务配置
这个和上面 docker 方式中介绍的配置步骤一样。
gitlab 常见问题
gitlab常用命令
# 重新应用gitlab的配置
gitlab-ctl reconfigure
# 重启gitlab服务
gitlab-ctl restart
# 查看gitlab运行状态
gitlab-ctl status
#停止gitlab服务
gitlab-ctl stop
# 查看gitlab运行日志
gitlab-ctl tail
禁止注册功能
点击页面上方的 扳手图标(Admin area) -->> Settings -->> General -->> Sign-up restrictions,去掉勾选的允许注册即可。
切换中文
点击右上角用户头像 -->> Settings -->> Preferences -->> Localozation,切换到中文后保存,重新登录生效。
Import urlis blocked
问题场景:新搭建了一个 gitlab 服务,想着把另一个git仓库的代码同步过来。于是新建一个项目:
新建项目 -->> Import project -->> Repo by URL ,填写好相关信息后,保存报错。
解决方案:
点击页面上方的 扳手图标(Admin area) -->> Settings -->> Network -->> Outbound requests,勾上 "Allow requests to the local network from hooks and services" 保存即可。
-- end --