部署自己的git托管平台

如何使用docker部署git托管平台

对于不同开源库的对比,可以根据自己的实际情况选择适合你的一款; docs.gitea.com/zh-cn/insta...

这里介绍一下 gitLab & gitea

docker 部署 gitLab 社区版本

官方docs

使用 Docker Compose 部署 GitLab

置条件你的docker安装了Docker Compose

如果你想使用 Docker Compose 来管理 GitLab,可以使用下面的 docker-compose.yml 配置文件

创建 Docker Compose 文件
  1. 在你的服务器上创建一个目录用于存放 GitLab 的配置:
bash 复制代码
mkdir -p /srv/gitlab
cd /srv/gitlab
  1. 创建 docker-compose.yml 文件,内容如下:
yaml 复制代码
version: '3.6'
services:
  gitlab:
    # 安装的版本信息, 选择社区版本
    image: gitlab/gitlab-ce:<version>-ee.0
    container_name: gitlab
    restart: always
    # your docker adress
    hostname: 'gitlab.example.com'
    # 环境变量, 这里配置的端口是你gitlab仓库项目的地址端口
    environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.example.com:8929' gitlab_rails['gitlab_shell_ssh_port'] = 2424
    # 与容器的端口映射关系
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    # 卷映射
    volumes:
      - '$GITLAB_HOME/config:/etc/gitlab'
      - '$GITLAB_HOME/logs:/var/log/gitlab'
      - '$GITLAB_HOME/data:/var/opt/gitlab'
    # 最大运行内存
    shm_size: '256m'
  • volumes:映射 GitLab 配置、日志和数据目录到宿主机的目录,以保证数据持久化。
  • ports:将容器内的端口映射到宿主机的端口。
  • hostname:设置 GitLab 的主机名,可以使用你自己的域名。
  • external_url:GitLab 访问的 URL,建议使用 HTTP 或 HTTPS 协议。
  1. 启动 GitLab 服务: 使用以下命令启动 GitLab 容器:
bash 复制代码
docker-compose up -d

该命令会在后台启动 GitLab 服务,所有的配置会根据 docker-compose.yml 文件自动执行。

访问 GitLab

一切配置好后,打开浏览器并访问以下地址(根据你的配置修改域名或 IP):

  • http://gitlab.example.com(如果是 HTTP)
  • https://gitlab.example.com(如果配置了 SSL)

第一次登录时,GitLab 会要求你设置管理员密码,默认的管理员用户名是 root,密码就是你设置的密码。

root密码管理
  1. 初始密码

    /gitlab/config/password文件

  2. 忘记密码,重置密码

    sh 复制代码
    sudo gitlab-rake "gitlab:password:reset"
  3. 修改密码

    在左侧边栏上,选择您的头像 => 个人资料 => 侧边栏上,选择密码 => 即可修改

配置 GitLab 邮件服务

如果你希望 GitLab 能够发送邮件通知(如注册、密码重置等),你需要配置 SMTP 服务器。

在 GitLab 配置中,添加以下内容来启用 SMTP 配置:

  1. 修改 /srv/gitlab/config/gitlab.rb 配置文件(这个路径需要根据你的实际挂载路径进行调整)。

  2. 找到并修改如下配置:

    ruby 复制代码
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.yourdomain.com"
    gitlab_rails['smtp_port'] = 587
    gitlab_rails['smtp_user_name'] = "user@yourdomain.com"
    gitlab_rails['smtp_password'] = "password"
    gitlab_rails['smtp_domain'] = "yourdomain.com"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = false
  3. 配置好后,重新配置并重启 GitLab:

    bash 复制代码
    docker exec -it gitlab gitlab-ctl reconfigure
备份 GitLab 数据

为了防止数据丢失,建议定期备份 GitLab 数据。在容器内运行以下命令来创建备份:

bash 复制代码
docker exec -t gitlab gitlab-rake gitlab:backup:create

备份文件会存放在 /var/opt/gitlab/backups 目录下,确保你将该目录映射到宿主机的某个安全位置。

GitLab 数据恢复

如果需要恢复备份,可以使用以下命令:

bash 复制代码
docker exec -t gitlab gitlab-rake gitlab:backup:restore BACKUP=<timestamp_of_backup>

其中,<timestamp_of_backup> 是备份文件的时间戳。

根据path的升级,建议写sh脚本实现;

升级的路径可以根据这个tool

按照这个顺序依次进行升级; upgrade_gitlab.sh这个脚本下面会介绍;

bash 复制代码
./upgrade_gitlab.sh 16.11.10-ce.0
脚本说明:
  • 传入的新版本号:通过命令行参数传递。
  • 获取旧版本号 :通过读取 docker-compose.yml 文件中 image 配置来获取当前使用的版本号。
  • 备份当前数据:使用 GitLab 提供的备份命令进行备份。
  • 修改版本号 :根据传入的新版本号修改 docker-compose.yml 中的 GitLab 镜像版本。
  • 重新部署 :使用 docker-compose 重启服务以应用新版本。
  • 删除备份:升级成功后删除备份文件。
脚本代码:
bash 复制代码
#!/bin/bash

# 检查是否传入新版本号
if [ -z "$1" ]; then
  echo "请传入新的 GitLab 版本号"
  exit 1
fi

NEW_VERSION=$1

# 定义 GitLab 容器和备份目录
COMPOSE_FILE="docker-compose.yml"
BACKUP_DIR="/srv/gitlab/backups"
GITLAB_CONTAINER_NAME="gitlab"

# 获取当前 GitLab 版本
CURRENT_VERSION=$(grep "image: 'gitlab/gitlab-ce" $COMPOSE_FILE | awk -F: '{print $3}' | sed "s/'//g")

# 打印当前版本和新版本
echo "当前 GitLab 版本: $CURRENT_VERSION"
echo "将升级到的 GitLab 版本: $NEW_VERSION"

# 备份当前 GitLab 数据
echo "开始备份当前 GitLab 数据..."
docker exec -t $GITLAB_CONTAINER_NAME gitlab-rake gitlab:backup:create

# 确认备份是否成功
if [ $? -eq 0 ]; then
  echo "备份成功"
else
  echo "备份失败,脚本终止"
  exit 1
fi

# 修改 docker-compose.yml 文件中的 GitLab 版本
echo "正在升级 GitLab 镜像版本..."
sed -i "s|image: 'gitlab/gitlab-ce:$CURRENT_VERSION'|image: 'gitlab/gitlab-ce:$NEW_VERSION'|" $COMPOSE_FILE

# 启动新版本
echo "正在拉取新的 GitLab 镜像并重启容器..."
docker-compose pull
docker-compose up -d

# 等待容器启动完成
echo "GitLab 升级中,请稍等..."
sleep 30  # 等待 30 秒,给容器足够时间启动

# 检查 GitLab 容器是否成功启动
if docker ps | grep -q "$GITLAB_CONTAINER_NAME"; then
  echo "GitLab 升级成功!"
else
  echo "GitLab 升级失败,请检查日志。"
  exit 1
fi

# 删除备份
echo "删除旧的备份文件..."
rm -rf $BACKUP_DIR/*

echo "升级过程完成,备份已删除。"
脚本的详细步骤:
  1. 检查版本号参数 :脚本会检查是否传入新的 GitLab 版本号($1)。如果没有传入版本号,脚本会退出并提示用户输入。
  2. 获取当前版本号 :通过 docker-compose.yml 文件,脚本读取当前使用的 GitLab 镜像版本号。
  3. 备份当前 GitLab 数据 :通过 docker exec 执行 GitLab 内部的 gitlab-rake gitlab:backup:create 命令进行数据备份。
  4. 修改版本号 :使用 sed 命令修改 docker-compose.yml 文件中的 GitLab 镜像版本号为新的版本。
  5. 拉取新版本并重启容器 :使用 docker-compose pull 拉取新版本的镜像,然后使用 docker-compose up -d 重启容器。
  6. 检查容器是否正常启动 :脚本通过 docker ps 检查 GitLab 容器是否正常运行。
  7. 删除备份:在升级成功后,脚本会删除备份文件以释放空间。
使用方式:
  1. 将此脚本保存为 upgrade_gitlab.sh 文件。

  2. 给脚本添加可执行权限:

    bash 复制代码
    chmod +x upgrade_gitlab.sh
  3. 运行脚本并传入新的版本号:

    bash 复制代码
    ./upgrade_gitlab.sh 14.9.2-ce.0

    其中 14.9.2-ce.0 是你要升级到的 GitLab 版本号。


docker 部署 gitea

官方docs

部署步骤

可以根据官方步骤进行,有中文文档,这里就不阐述了

数据的备份恢复以及定期清理

在 Gitea 中进行数据的备份和恢复,可以通过脚本自动化管理。为了确保数据的安全性,并且避免长期积累过多的备份,我们可以创建一个脚本来定期备份 Gitea 数据、保存 7 天内的备份文件并清理过期的备份。

目标
  • 定期备份 Gitea 数据(例如数据库、配置、存储等)。
  • 每次备份时保留最近 7 天的备份,删除超过 7 天的备份文件。
思路
  1. 备份 Gitea 数据 :使用 docker exec 或相应的命令对 Gitea 的数据库和配置文件进行备份。
  2. 压缩备份文件:为了节省空间,可以将备份文件压缩。
  3. 保留 7 天的备份:在每次备份时,检查备份目录中哪些文件已经超过 7 天,并删除它们。
  4. 定期执行备份:可以通过定时任务(cron)来定期执行该备份脚本。
脚本实现
bash 复制代码
#!/bin/bash

# 配置路径和备份目录
GITEA_CONTAINER_NAME="gitea"           # Gitea 容器的名称
BACKUP_DIR="/srv/gitea/backup"        # 备份文件存放的路径
DATE=$(date +"%Y%m%d_%H%M%S")         # 当前日期时间,用于备份文件的命名
BACKUP_FILE="$BACKUP_DIR/gitea_backup_$DATE.tar.gz"  # 备份文件名
GITEA_DATA_DIR="/data/gitea"          # Gitea 数据目录(可能存储数据库、存储、配置等)

# 备份目录检查和创建
mkdir -p $BACKUP_DIR

# 获取 Gitea 数据库类型(假设你使用的是 SQLite 或 MySQL)
DB_TYPE=$(docker exec $GITEA_CONTAINER_NAME cat /data/gitea/conf/app.ini | grep -i "DB_TYPE" | cut -d'=' -f2 | tr -d '[:space:]')

# 备份 Gitea 数据
echo "开始备份 Gitea 数据..."

if [ "$DB_TYPE" == "sqlite3" ]; then
    # 对于 SQLite 数据库,直接复制数据库文件
    docker exec $GITEA_CONTAINER_NAME cp /data/gitea/gitea.db /tmp/gitea.db
    docker cp $GITEA_CONTAINER_NAME:/tmp/gitea.db $BACKUP_FILE
    rm -f /tmp/gitea.db  # 删除临时文件
elif [ "$DB_TYPE" == "mysql" ]; then
    # 对于 MySQL 数据库,使用 mysqldump 备份
    docker exec $GITEA_CONTAINER_NAME mysqldump -u root -p<your_password> gitea > /tmp/gitea_backup.sql
    docker cp $GITEA_CONTAINER_NAME:/tmp/gitea_backup.sql $BACKUP_FILE
    rm -f /tmp/gitea_backup.sql  # 删除临时文件
else
    echo "不支持的数据库类型:$DB_TYPE"
    exit 1
fi

# 备份 Gitea 配置和存储目录
echo "正在备份 Gitea 配置和存储文件..."
tar -zcvf $BACKUP_DIR/gitea_data_$DATE.tar.gz -C /srv/gitea backup

# 删除超过 7 天的备份文件
echo "删除超过 7 天的备份文件..."
find $BACKUP_DIR -type f -mtime +7 -exec rm -f {} ;

# 输出备份信息
echo "备份完成: $BACKUP_FILE"
脚本说明:
  1. Gitea 容器名称与备份路径 :在脚本中,我们指定了 Gitea 容器的名称 gitea 和备份文件存储的路径 /srv/gitea/backup。可以根据实际情况修改这两个路径。

  2. 数据库类型识别 :脚本通过检查 Gitea 配置文件(app.ini)来自动识别数据库类型。支持 sqlite3mysql,可以根据实际情况修改脚本以支持其他数据库类型。

  3. 备份数据库

    • 对于 SQLite,直接从容器中复制数据库文件。
    • 对于 MySQL,使用 mysqldump 命令备份数据库。
  4. 备份 Gitea 配置与存储 :使用 tar 命令将 Gitea 的配置和存储目录进行备份。

  5. 清理过期备份 :使用 find 命令查找并删除超过 7 天的备份文件。

  6. 备份文件命名:备份文件的命名包含了当前日期和时间,确保备份文件的唯一性。

自动化定期备份

为了定期执行该脚本,可以使用 cron 来设置定时任务。以下是设置每日备份的步骤:

  1. 编辑 crontab: 使用以下命令打开 cron 配置文件:

    bash 复制代码
    crontab -e
  2. 添加定时任务 : 在 crontab 文件中添加如下行,使得该脚本每天凌晨 2 点执行一次备份:

    bash 复制代码
    0 2 * * * /path/to/your/backup_script.sh

    /path/to/your/backup_script.sh 替换为你的脚本实际路径。

  3. 保存并退出 :保存并退出 crontab 文件后,cron 会自动根据你设置的计划执行备份任务。

恢复备份的脚本

恢复 Gitea 数据的脚本主要是根据备份文件恢复数据库、配置文件和存储目录。以下是一个恢复备份的简单脚本:

bash 复制代码
#!/bin/bash

# 配置路径和备份文件
BACKUP_DIR="/srv/gitea/backup"
BACKUP_FILE="$1"  # 从命令行参数传入备份文件名

if [ -z "$BACKUP_FILE" ]; then
  echo "请提供备份文件路径"
  exit 1
fi

# 恢复数据库
echo "恢复数据库..."
if [[ "$BACKUP_FILE" =~ .*gitea_backup_.*.tar.gz$ ]]; then
  # 对 SQLite 恢复
  docker cp $BACKUP_FILE $GITEA_CONTAINER_NAME:/tmp/gitea.db
  docker exec $GITEA_CONTAINER_NAME mv /tmp/gitea.db /data/gitea/gitea.db
elif [[ "$BACKUP_FILE" =~ .*gitea_backup_.*.sql$ ]]; then
  # 对 MySQL 恢复
  docker cp $BACKUP_FILE $GITEA_CONTAINER_NAME:/tmp/gitea_backup.sql
  docker exec $GITEA_CONTAINER_NAME mysql -u root -p<your_password> gitea < /tmp/gitea_backup.sql
  rm -f /tmp/gitea_backup.sql
else
  echo "不支持的备份文件类型"
  exit 1
fi

# 恢复配置和数据目录
echo "恢复配置和存储数据..."
tar -zxvf $BACKUP_DIR/gitea_data_$BACKUP_FILE -C /srv/gitea

# 重启 Gitea 容器
echo "重启 Gitea 容器..."
docker restart $GITEA_CONTAINER_NAME

echo "恢复完成"

说明:

  • 输入参数:通过命令行参数传入备份文件路径。
  • 恢复数据库:恢复 SQLite 或 MySQL 数据库。
  • 恢复配置和存储:恢复配置文件和存储数据。
  • 重启 Gitea 容器:确保恢复完成后重启容器
相关推荐
cdg==吃蛋糕37 分钟前
docker代理配置
docker·容器·eureka
sin220138 分钟前
idea集合git使用
git
web135085886351 小时前
使用docker compose安装gitlab
docker·容器·gitlab
IT机器猫2 小时前
Docker完整技术汇总
运维·docker·容器
董健正2 小时前
Docker安装
docker·容器·docker-compose
gs801402 小时前
替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案
docker·harbor
coco_1998_22 小时前
nvidia docker, nvidia docker2, nvidia container toolkits区别
docker·容器
木心3 小时前
Git基本操作快速入门(30min)
git·github
团儿.3 小时前
Docker服务发现新纪元:探索Consul的无限魅力
运维·docker·云计算·服务发现·consul
赵大仁3 小时前
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
linux·运维·服务器·ide·ubuntu·centos·计算机基础