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也要在新服务器上配置好)

迁移完毕~!

本内容为合法授权发布,文章内容为作者独立观点,不代表开发云立场,未经允许不得转载。

CSDN开发云