# 采用docker方式安装gitlab代码托管服务器(一)
gitlab是一个代码托管服务器,很多公司都习惯自建有自己的代码服务器,本文主要介绍两种搭建过程中的第一种,下一篇会介绍第二种。
使用gitlab的docker镜像的全部功能,包括nginx等,适用于直接访问nginx。
使用gitlab的docker镜像,但是关闭nginx功能,采用已有的nginx转发。
# 一. 初识gitlab的主要目录及重要配置文件
- gitlab的配置文件目录:
/etc/gitlab
- gitlab的数据目录:
/var/opt/gitlab
- gitlab的日志目录 :
/var/log/gitlab
- gitlab的主要配置文件:
/etc/gitlab/gitlab.rb
以上目录由于以后gitlab升级或删除容器时可能要保留,所以要把他们挂载到宿主机上。
# 二. 默认占用端口(容器<-->宿主机)
http: 80<-->80
https: 443<-->443
ssh: 22 <-->222
由于22端口一般被远程ssh占用,所以我们映射到222端口
# 三. 新建挂载目录
gitlab挂载目录的根目录选择放在
/home/docker/base/gitlab-nginx
下,分别创建shell脚本目录script
,配置文件目录conf
,数据目录data
,日志目录logs
创建脚本
mkdir -p /home/docker/base/gitlab-nginx cd /home/docker/base/gitlab-nginx mkdir script conf data logs
创建后的目录树结构
. └── gitlab-nginx ├── conf ├── data ├── logs └── script
# 四. 创建gitlab的shell脚本run-gitlab.sh
#!/bin/bash
home_dir=/home/docker/base/gitlab-nginx
ver=$1
if [ ! $ver ]; then
ver='latest'
fi
if [ ! -e "/etc/localtime" ]; then
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
fi
if [ ! -e "/etc/timezone" ]; then
echo Asia/Shanghai > /etc/timezone
fi
# hostname根据自己的域名修改。
docker run -d \
--name gitlab-nginx \
--hostname git.ifar.top \
-p 80:80 \
-p 443:443 \
-p 222:22 \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
-v $home_dir/conf:/etc/gitlab \
-v $home_dir/logs:/var/log/gitlab \
-v $home_dir/data:/var/opt/gitlab \
gitlab/gitlab-ce:$ver
hostname根据自己的域名修改,在这里使用git.ifar.top来举例
# 五. 运行run-gitlab.sh
#添加执行权限给脚本
chmod +x run-gitlab.sh
#运行脚本
./run-gitlab.sh
#查看运行情况
docker logs -f gitlab
# 六. 修改gitlab.rb
配置
主要包括以下配置:
- 外部url链接(http(s)😕/git.ifar.top)
- 时区配置(Asia/Shanghai)
- clone的ssh链接地址端口(222)
- 邮箱服务器配置
- 邮箱配置
- 备份配置
完整的
https
版的gitlab.rb配置文件external_url "https://git.ifar.top" #访问http协议自动重定向到https nginx['redirect_http_to_https'] = true gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['gitlab_shell_ssh_port'] = 222 #https域名对应的ssl文件 nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.ifar.top.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/git.ifar.top.key" gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "ifar@163.com" #开启smtp生成的密钥串 gitlab_rails['smtp_password'] = "VMEZGFVLSXFWKAL" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = "ifar@163.com" gitlab_rails['gitlab_email_display_name'] = "默远代码服务" gitlab_rails['gitlab_email_reply_to'] = "ifar@163.com" gitlab_rails['gitlab_email_subject_suffix'] = "gitlab代码服务" user['git_user_email'] = "ifar@163.com" #秒为单位,7天前的备份删除 gitlab_rails['backup_keep_time'] = 604800
完整的
http
版的gitlab.rb配置文件external_url "http://git.ifar.top" gitlab_rails['time_zone'] = 'Asia/Shanghai' gitlab_rails['gitlab_shell_ssh_port'] = 222 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "ifar@163.com" #开启smtp生成的密钥串 gitlab_rails['smtp_password'] = "VMEZGFVLSXFWKAL" gitlab_rails['smtp_domain'] = "163.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = 'ifar@163.com' gitlab_rails['gitlab_email_display_name'] = '默远代码服务' gitlab_rails['gitlab_email_reply_to'] = 'ifar@163.com' gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab代码服务' user['git_user_email'] = "ifar@163.com" #秒为单位,7天前的备份删除 gitlab_rails['backup_keep_time'] = 604800
# 七. 重启gitlab容器
重启gitlab容器
docker restart gitlab-nginx
# 八. 测试邮箱配置
测试邮箱是否配置正确
docker exec -it gitlab-nginx /bin/bash #进入控制台 gitlab-rails console #验证邮箱服务配置是否正确 Notify.test_email('soul0328@qq.com', '测试gitlab邮箱服务器配置是否正确', '当你看到这条信息,表明配置正确了').deliver_now quit exit
# 九. 访问并修改管理员密码
查看root的初始密码
cat /home/docker/base/gitlab-nginx/conf/initial_root_password
在浏览器访问登录后并修改密码
https://git.ifar.top
# 十. 备份配置和数据
手动备份配置
docker exec -t gitlab-nginx gitlab-ctl backup-etc
定时备份配置
crontab -e > o 13 0 * * * docker exec -t gitlab-nginx gitlab-ctl backup-etc > esc > :wq #或 mkdir -p /var/spool/cron && echo "13 0 * * * docker exec -t gitlab-nginx gitlab-ctl backup-etc" >> /var/spool/cron/root #或 echo "13 0 * * * root docker exec -t gitlab-nginx gitlab-ctl backup-etc" >> /etc/crontab
手动备份数据
docker exec -t gitlab-nginx gitlab-backup
定时备份数据
> crontab -e > o 13 3 * * * docker exec -t gitlab-nginx gitlab-backup > esc > :wq #或 mkdir -p /var/spool/cron && echo "13 3 * * * docker exec -t gitlab-nginx gitlab-backup" >> /var/spool/cron/root #或 echo "13 3 * * * root docker exec -t gitlab-nginx gitlab-backup" >> /etc/crontab
# 十一. 还原配置和数据
还原配置(直接解压替换)
#进入容器 docker exec -it gitlab-nginx /bin/bash #备份现有的配置 cp -r /etc/gitlab /etc/gitlab_$(date +%s) #找到备份配置,解压到/目录即可 tar -xf gitlab_config_1650770402_2022_04_24.tar -C /
还原数据(使用
restore
命令)#还原1650621321_2022_04_22_14.6.1_gitlab_backup.tar docker exec -it gitlab-nginx gitlab-backup restore BACKUP=1650621321_2022_04_22_14.6.1