# 采用docker方式安装gitlab代码托管服务器(二)
gitlab是一个代码托管服务器,很多公司都习惯自建有自己的代码服务器,本文主要介绍两种搭建过程中的第二种。
使用gitlab的docker镜像的全部功能,包括nginx等,适用于直接访问nginx。
使用gitlab的docker镜像,但是关闭nginx功能,采用已有的nginx转发。
# 一. gitlab的主要目录
请参照上一篇
# 二. 占用端口(容器<-映射->宿主机)
workhorse: 8013<->8013
ssh: 22<->222
由于22端口一般被远程ssh占用,所以我们映射到222端口
# 三. 新建挂载目录
gitlab挂载目录的根目录选择放在
/home/docker/base/gitlab
下,分别创建shell脚本目录script
,配置文件目录conf
,数据目录data
,日志目录logs
创建脚本
mkdir -p /home/docker/base/gitlab cd /home/docker/base/gitlab mkdir script conf data logs
创建后的目录树结构
. └── gitlab ├── conf ├── data ├── logs └── script
# 四. 创建gitlab的shell脚本run-gitlab.sh
直接运行脚本即可生成并启动gitlab容器
#!/bin/bash home_dir=/home/docker/base/gitlab 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 \ --hostname git.ifar.top \ -p 8013:8013 \ -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)
- 邮箱配置
- 信任代理地址(git.ifar.top)
- 备份配置
- clone的ssh链接地址端口(222)
- 邮箱服务器配置
- workhorse配置
- 外部运行nginx用户
- 关闭内置nginx
完整的gitlab.rb配置文件
external_url "https://git.ifar.top" gitlab_rails['time_zone'] = 'Asia/Shanghai' 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代码服务" gitlab_rails['trusted_proxies'] = ["git.ifar.top"] #秒为单位,7天前的备份删除 gitlab_rails['backup_keep_time'] = 604800 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_workhorse['enable'] = true gitlab_workhorse['listen_network'] = "tcp" #这里IP不能直接用127.0.0.1,可以用git.ifar.top或容器IP gitlab_workhorse['listen_addr'] = "git.ifar.top:8013" user['git_user_email'] = "ifar@163.com" web_server['external_users'] = ["root"] nginx['enable'] = false
# 七. 重启gitlab容器
重启gitlab容器重新加载配置
docker restart gitlab
# 八. 测试配置
测试邮箱是否配置正确
docker exec -it gitlab /bin/bash gitlab-ctl reconfigure #进入控制台 gitlab-rails console #验证邮箱服务配置是否正确 Notify.test_email('soul0328@qq.com', '测试gitlab邮箱服务器配置是否正确', '当你看到这条信息,表明配置正确了').deliver_now quit exit
测试防火墙配置(端口是否可访问)
#在运行nginx的服务器执行以下命令 nc -zv 宿主机 8013 nc -zv 宿主机 222
# 九. 配置外部的nginx并访问
nginx的配置增加
upstream git_ifar_top_gitlab{ server <宿主机IP>:8013; } server { listen *:443 ssl http2; server_name git.ifar.top; server_tokens off; client_max_body_size 0; ssl_certificate ssl/ifar/git.ifar.top.crt; ssl_certificate_key ssl/ifar/git.ifar.top.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; fastcgi_intercept_errors on; location / { proxy_cache off; proxy_request_buffering off; proxy_pass http://git_ifar_top_gitlab/; } }
查看root的初始密码
cat /home/docker/base/gitlab/conf/initial_root_password
在浏览器访问登录后并修改密码
https://git.ifar.top
<------以上已经完成基本的安装,想要学习备份还原的继续向下看--------->
# 十. 备份配置和数据
手动备份配置
docker exec -t gitlab gitlab-ctl backup-etc
定时备份配置
crontab -e > o 13 0 * * * docker exec -t gitlab gitlab-ctl backup-etc > esc > :wq #或 mkdir -p /var/spool/cron && echo "13 0 * * * docker exec -t gitlab gitlab-ctl backup-etc" >> /var/spool/cron/root #或 echo "13 0 * * * root docker exec -t gitlab gitlab-ctl backup-etc" >> /etc/crontab
手动备份数据
docker exec -t gitlab gitlab-backup
定时备份数据
> crontab -e > o 13 3 * * * docker exec -t gitlab gitlab-backup > esc > :wq #或 mkdir -p /var/spool/cron && echo "13 3 * * * docker exec -t gitlab gitlab-backup" >> /var/spool/cron/root #或 echo "13 3 * * * root docker exec -t gitlab gitlab-backup" >> /etc/crontab
# 十一. 还原配置和数据
还原配置(直接解压替换)
#进入容器 docker exec -it gitlab /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 gitlab-backup restore BACKUP=1650621321_2022_04_22_14.6.1