1.准备
系统:Ubuntu18.04 (或其他版本系统,这里以Ubuntu18.04为例)
配置:内存8G、CPU4核、硬盘30G (视个人需要保存资料大小而定)
域名:准备一个公网域名,没有的话就用IP地址吧。这里以 git.test.com 为例
2.部署
# 安装docker
snap install docker
# pull 镜像
docker pull twang2218/gitlab-ce-zh
# 宿主机安装Nginx
apt install nginx
# 宿主机配置docker资料文件,防止docker重启导致docker数据丢失
mkdir /opt/gitlab/config /opt/gitlab/data /opt/gitlab/logs
3.启动gitlab-docker
这里把1080端口映射到宿主机,即宿主机需要代理 git.test.com:1080 才能进入gitlab-docker服务。后面Nginx 443端口反向代理到1080端口。
docker run -d \
-p 10443:443 -p 1080:80 -p 10022:22 \
--name mygitlab \
--restart always \
--privileged=true \
--hostname git.test.com \
-v /opt/gitlab/config:/etc/gitlab \
-v /opt/gitlab/logs:/var/logs/gitlab/ \
-v /opt/gitlab/data:/var/opt/gitlab \
twang2218/gitlab-ce-zh
4.配置Nginx
4.1安装Nginx
sudo apt install nginx -y
cd /etc/nginx/conf.d
touch git.test.com.conf
4.2配置Nginx
默认80端口代理至1080端口,用户可忽略1080端口,方便使用
vim /etc/nginx/conf.d/git.test.com.conf
填入如下配置文件内容
server {
listen 80;
server_name git.test.com;
location / {
proxy_pass http://git.test.com:1080;
index index.html index.htm;
}
}
4.3使配置生效
sudo nginx -s reload
4.4配置ssh(可选)
如果是公网服务器的话,可以使用certbot生成ssl。
# 参考 https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal
# 配置插件
sudo snap install core
sudo snap refresh core
# 安装certbot
sudo snap install --classic certbot
# 环境生效
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 申请并生成ssl证书(有效期3个月)
# certbot 此时会去Nginx配置文件目录读取所有配置文件中的域名,并列出来,所以这一步一定需要先配置好域名的80端口Nginx配置
sudo certbot --nginx
# 证书自动续费(3个月有效期后自动生成新的证书)
sudo certbot renew --dry-run
5.可能比较得注意的地方
5.1账密方式
git clone,需要选择http(或者https)
例如:(前提是配置好ssl,详见4.4)
git clone https://git.test.com/test.git
或者:
git clone http://git.test.com/test.git
或者:
git clone http://git.test.com:1080/test.git
以上三个命令理论效果一样。
如果第一个和第二个不行,就尝试第三个,毕竟直达gitlab-docker服务器内部。
5.2密钥方式
大文件大仓库使用http方式提交数据,会容易失败,使用ssh方式可解决。同时ssh方式也更加安全(加密且不怕被劫持)。
# 修改gitlab的ssh地址,以便于在ssh地址栏中显示完整协议地址和端口
vim /opt/gitlab/config/gitlab.rb
# 在最末尾新增空行追加如下内容
gitlab_rails['gitlab_shell_ssh_port'] = 10022
# 重启docker容器
docker restart mygitlab
# 本地机器生成密钥对
ssh-keygen
# 复制本地生成的公钥到gitlab上
就可以免密clone了。
git clone ssh://git@git.test.com:10022/test/test.git
6.备份gitlab
备份命令:
进入mygitlab的dockers容器:
docker exec -it mygitlab /bin/bash
执行备份命令:
/opt/gitlab/bin/gitlab-rake gitlab:backup:create
备份的文件将被保存在mygitlab容器的/var/opt/gitlab/backups目录下,以及宿主机挂载的/opt/gitlab/data/backups目录下,两个目录下的文件是同一个文件。
7.迁移服务器,恢复gitlab
将备份新文件(以gitlab_backup.tar结尾,例如1691372759_2023_08_07_11.1.4_gitlab_backup.tar)复制到新服务器中,在新服务器中启动一个空的gitlab,启动命令与前面安装gitlab步骤一致(即安装一个全新的gitlab)。
然后进入新的gitlab容器中,执行恢复:
docker exec -it mygitlab
执行恢复(注意,最后的_gitlab_backup.tar就不要了,亲测加上会失败):
gitlab-rake gitlab:backup:restore BACKUP=1691372759_2023_08_07_11.1.4
提示Unpacking backup后,会提示即将清空自己创建的数据库,这里选择yes:
后面都执行yes。
最后重启dockers
# 退出容器
exit
# 重启docker生效
docker restart mygitlab
重启后,大约5分钟,就能正常使用了。(注意与旧服务器相同配置nginx也要在新服务器上配置好)
迁移完毕~!
============== 当我们被安全保护之后,没法被docker“伤害”,应该如何主动被docker“伤害”呢?===============
找一台可以上外网的服务器,或者自己本地可以上外网,安装好docker。
# 拉取docker镜像
docker pull twang2218/gitlab-ce-zh
# 保存docker镜像为tar包
docker save -o gitlab-ce-zh.tar twang2218/gitlab-ce-zh
# 将gitlab-ce-zh复制到服务器
scp gitlab-ce-zh.tar devops:/home/user
# 导入镜像
sudo docker load -i gitlab-ce-zh.tar
# 再启动docker
docker run -d \
-p 10443:443 -p 1080:80 -p 10022:22 \
--name mygitlab \
--restart always \
--privileged=true \
--hostname git.test.com \
-v /opt/gitlab/config:/etc/gitlab \
-v /opt/gitlab/logs:/var/logs/gitlab/ \
-v /opt/gitlab/data:/var/opt/gitlab \
twang2218/gitlab-ce-zh