Ubuntu使用docker安装gitea

来自个人维基
跳转到导航 跳转到搜索

安装docker

推荐使用官方apt仓库安装

这是官方推荐的标准方法,步骤稍多但最可靠。

1. 安装依赖

首先,更新软件包索引并安装必要的软件包,以便apt能通过HTTPS使用仓库。

bash

sudo apt update
sudo apt install ca-certificates curl gnupg

2. 添加Docker官方GPG密钥

这一步是为了验证下载软件包的真实性,防止恶意篡改。

bash

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

3. 设置Docker稳定版仓库

将Docker的官方软件源添加到系统中,系统会自动识别你的Ubuntu版本。

bash

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. 安装Docker Engine

更新软件包索引并安装Docker及其核心组件。推荐安装包含最新插件(如docker-compose插件)的完整版。

bash

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

二、docker配置与验证

1. 启动并设置开机自启

bash

sudo systemctl enable --now docker

此命令会立即启动Docker服务,并设置其在系统启动时自动运行。

2. 验证安装是否成功

运行一个简单的测试容器,如果看到成功消息,说明Docker已正确安装。

bash

sudo docker run hello-world

3. (可选)允许普通用户运行Docker命令

默认情况下,docker命令需要使用sudo。为避免每次输入密码,可以将当前用户添加到docker用户组。

bash

sudo usermod -aG docker $USER

# 刷新组权限(或者注销重新登录)
newgrp docker

执行此命令后,需要注销并重新登录,或运行newgrp docker命令,组权限才会生效。

4. (可选)配置国内镜像加速器

如果拉取Docker镜像速度缓慢,可以配置国内的镜像加速器。创建或编辑Docker配置文件:

bash

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.1ms.run", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装gitea

一、准备工作

1. 确保Docker和Docker Compose已安装

检查Docker是否已安装

docker --version
docker compose version

如果未安装,可以参考之前的教程先安装Docker。

2. 创建Gitea工作目录

创建一个干净的目录,所有Gitea相关文件都会放在这里

mkdir -p ~/gitea/{data,config}
cd ~/gitea

这个 ~/gitea 目录就是未来迁移时需要整体打包的目录。

二、创建docker-compose.yml

使用以下命令创建配置文件:

bash

nano docker-compose.yml

粘贴以下内容:

services:
  server:
    # 使用官方稳定镜像
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    environment:
      # 容器内运行用户的UID/GID,默认1000即可,无需手动创建系统用户
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      # 数据持久化:所有仓库、配置、数据库都挂载到本地目录
      - ./data:/data
      - ./config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"   # Web访问端口
      - "2222:22"     # SSH访问端口(映射到2222,避免与主机SSH冲突)

如果需要配置Action,追加以下内容:

# 新增 Runner 服务
  runner:
    image: gitea/act_runner:latest
    container_name: gitea-runner
    restart: unless-stopped
    environment:
      # 注意:这里不能用 localhost,要用宿主机IP或直接使用https://你的域名
      - GITEA_INSTANCE_URL=http://宿主机IP:3000
      - GITEA_RUNNER_REGISTRATION_TOKEN=你的注册令牌
      # 可选:设置 Runner 名称
      - GITEA_RUNNER_NAME=docker-runner
      # 可选:设置 Runner 标签
      - GITEA_RUNNER_LABELS=docker,ubuntu-latest
    volumes:
      # 关键:挂载 Docker 套接字,让 Runner 能创建容器执行任务
      - /var/run/docker.sock:/var/run/docker.sock
      # 持久化 Runner 配置
      - ./runner_data:/data

关于用户设置的说明:

   这里的 USER_UID=1000 和 USER_GID=1000 是指定容器内部运行Gitea进程的用户ID
   不需要在宿主机上手动创建 git 系统用户
   1000 通常是Ubuntu第一个普通用户的UID,如果你当前的普通用户UID不是1000,可以用 id -u 查看后替换

三、启动Gitea

bash

# 启动服务(后台运行)
docker compose up -d

# 重启gitea
docker restart gitea
docker-compose restart gitea #docker-compose部署

# 查看运行状态
docker compose ps

# 重新读取配置文件,并让 Docker 重启生效
sudo systemctl daemon-reload
sudo systemctl restart docker

# 查看日志(如有问题)
docker compose logs

四、Web界面初始化

打开浏览器访问:http://你的服务器IP:3000

首次访问会进入安装页面:

        数据库设置:保持默认的 SQLite3(最简单,无需额外数据库容器)
        站点标题:填写你的站点名称
        基础URL:填写 http://你的服务器IP:3000(如有域名则填域名)

创建管理员账户:

        滚动到页面下方,展开「可选设置」→「管理员账户设置」
        填写用户名、邮箱、密码
        点击「安装Gitea」完成

五、配置SSH访问(推荐)

如果你希望通过SSH协议推送代码(而不是HTTPS),需要进行额外配置。

方法一:使用容器SSH端口(推荐)

在Gitea的Web界面中:

登录管理员账户
    进入「站点管理」→「配置」
    找到 SSH 配置:
        SSH 服务器域名:填写你的服务器IP或域名
        SSH 端口:填写 2222(因为我们在docker-compose.yml中映射的是2222)

用户在克隆仓库时会看到:ssh://git@服务器IP:2222/用户名/仓库名.git

🎯注意:一旦通过 SSH_PORT 指定了一个非 22 的端口,Gitea 就无法再“借用”外部默认的 SSH 服务了,START_SSH_SERVER = true 就成了启动内置服务的“强制要求”。
官方 Helm Charts 对此有一段权威的解释:
"For rootful Gitea images, the built-in OpenSSH server is reused, and Gitea itself does not listen on any SSH port. Therefore, the SSH_LISTEN_PORT setting has no effect. Explicitly setting START_SSH_SERVER helps avoid confusion and makes the behavior clearer."
简单翻译:对于在 root 用户下运行的 Gitea 容器(最常见的情况),它会默认复用宿主机的 SSH 服务 (openssh-server)。此时,Gitea 程序本身不监听任何端口,SSH_LISTEN_PORT 设置也完全无效。所以,即使你不写 START_SSH_SERVER = true,它也不启动内置服务。
这就是为什么,通常在默认端口 22 下,即使不显式设置,SSH 也能“用”(实际上是复用宿主机的服务)。很多配置文章里提到“必须设置为 true”,其实恰恰就是因为它们都在修改默认的 SSH 端口。

方法二:使用宿主机SSH(高级,暂不推荐)

此方式需要配置宿主机的SSH服务转发到Docker容器,过程较复杂,建议先用方法一。

六、目录结构说明

~/gitea/
├── docker-compose.yml   # 配置文件(迁移时复制)
├── data/                # 核心数据:仓库、附件、头像等(迁移时复制)
└── config/              # Gitea配置文件 app.ini(迁移时复制)

七、未来迁移步骤(尚未验证)

迁移时只需要打包整个 ~/gitea 目录,在新服务器上解压后执行 docker compose up -d 即可。
当你需要更换服务器时:

bash

# 1. 在旧服务器上打包
tar -czf gitea-backup.tar.gz ~/gitea/

# 2. 传到新服务器
scp gitea-backup.tar.gz 用户名@新服务器IP:~

# 3. 在新服务器上(已安装Docker)
tar -xzf gitea-backup.tar.gz
cd ~/gitea
docker compose up -d

整个过程只需要等待镜像拉取和容器启动,数据和配置完整保留。

八、更改域名

除了更dns和ngnix配置外,需修改gitea配置 /data/gitea/conf/app.ini并重启:

[server]
DOMAIN = git.your-new-domain.com
SSH_DOMAIN = git.your-new-domain.com
ROOT_URL = https://git.your-new-domain.com/