Ubuntu使用docker安装gitea:修订间差异

来自个人维基
跳转到导航 跳转到搜索
Hovercool留言 | 贡献
无编辑摘要
 
Hovercool留言 | 贡献
无编辑摘要
 
(未显示同一用户的11个中间版本)
第1行: 第1行:
 
=安装docker=
=使用官方apt仓库安装(推荐)=
==推荐使用官方apt仓库安装==


这是官方推荐的标准方法,步骤稍多但最可靠。
这是官方推荐的标准方法,步骤稍多但最可靠。
==1. 安装依赖==
===1. 安装依赖===


首先,更新软件包索引并安装必要的软件包,以便apt能通过HTTPS使用仓库。
首先,更新软件包索引并安装必要的软件包,以便apt能通过HTTPS使用仓库。
第15行: 第15行:
</source>
</source>


==2. 添加Docker官方GPG密钥==
===2. 添加Docker官方GPG密钥===


这一步是为了验证下载软件包的真实性,防止恶意篡改。
这一步是为了验证下载软件包的真实性,防止恶意篡改。
第28行: 第28行:
</source>
</source>


==3. 设置Docker稳定版仓库==
===3. 设置Docker稳定版仓库===


将Docker的官方软件源添加到系统中,系统会自动识别你的Ubuntu版本。
将Docker的官方软件源添加到系统中,系统会自动识别你的Ubuntu版本。
第42行: 第42行:
</source>
</source>


==4. 安装Docker Engine==
===4. 安装Docker Engine===


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


三、安装后配置与验证
==二、docker配置与验证==
==1. 启动并设置开机自启==
===1. 启动并设置开机自启===
<source lang="bash">
<source lang="bash">


第65行: 第65行:


此命令会立即启动Docker服务,并设置其在系统启动时自动运行。
此命令会立即启动Docker服务,并设置其在系统启动时自动运行。
==2. 验证安装是否成功==
===2. 验证安装是否成功===


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


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


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


sudo usermod -aG docker $USER
sudo usermod -aG docker $USER
# 刷新组权限(或者注销重新登录)
newgrp docker


</source>
</source>


执行此命令后,需要注销并重新登录,或运行newgrp docker命令,组权限才会生效。
执行此命令后,需要注销并重新登录,或运行newgrp docker命令,组权限才会生效。
==4. (可选)配置国内镜像加速器==
===4. (可选)配置国内镜像加速器===


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


第102行: 第107行:
sudo systemctl restart docker
sudo systemctl restart docker


</source>
=安装gitea=
== 一、准备工作 ==
=== 1. 确保Docker和Docker Compose已安装 ===
检查Docker是否已安装
<source lang="bash">
docker --version
docker compose version
</source>
如果未安装,可以参考之前的教程先安装Docker。
=== 2. 创建Gitea工作目录 ===
创建一个干净的目录,所有Gitea相关文件都会放在这里
<source lang="bash">
mkdir -p ~/gitea/{data,config}
cd ~/gitea
</source>
这个 ~/gitea 目录就是未来迁移时需要整体打包的目录。
== 二、创建docker-compose.yml ==
使用以下命令创建配置文件:
<source lang="bash">


bash


nano docker-compose.yml


</source>


粘贴以下内容:
<source lang="bash">
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冲突)
</source>
如果需要配置Action,追加以下内容:
  <source lang="bash">
# 新增 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
</source>


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


== 三、启动Gitea ==
<source lang="bash">


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
sudo systemctl restart docker


mkdir -p ~/gitea/{data,config}
# 查看日志(如有问题)
cd ~/gitea
docker compose logs
 
</source>
 
== 四、Web界面初始化 ==
 
打开浏览器访问:http://你的服务器IP:3000
 
首次访问会进入安装页面:
<pre>
        数据库设置:保持默认的 SQLite3(最简单,无需额外数据库容器)
        站点标题:填写你的站点名称
        基础URL:填写 http://你的服务器IP:3000(如有域名则填域名)
</pre>
创建管理员账户:
<pre>
        滚动到页面下方,展开「可选设置」→「管理员账户设置」
        填写用户名、邮箱、密码
        点击「安装Gitea」完成
</pre>
== 五、配置SSH访问(推荐) ==
 
如果你希望通过SSH协议推送代码(而不是HTTPS),需要进行额外配置。
=== 方法一:使用容器SSH端口(推荐) ===
 
在Gitea的Web界面中:
<pre>
登录管理员账户
    进入「站点管理」→「配置」
    找到 SSH 配置:
        SSH 服务器域名:填写你的服务器IP或域名
        SSH 端口:填写 2222(因为我们在docker-compose.yml中映射的是2222)
</pre>


用户在克隆仓库时会看到: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容器,过程较复杂,建议先用方法一。
== 六、目录结构说明 ==
<pre>
~/gitea/
├── docker-compose.yml  # 配置文件(迁移时复制)
├── data/                # 核心数据:仓库、附件、头像等(迁移时复制)
└── config/              # Gitea配置文件 app.ini(迁移时复制)
</pre>


== 七、未来迁移步骤(尚未验证) ==
迁移时只需要打包整个 ~/gitea 目录,在新服务器上解压后执行 docker compose up -d 即可。
当你需要更换服务器时:
<source lang="bash">


bash


sudo usermod -aG docker $USER
# 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
docker compose up -d
</source>
整个过程只需要等待镜像拉取和容器启动,数据和配置完整保留。
== 八、更改域名 ==
除了更dns和ngnix配置外,需修改gitea配置 /data/gitea/conf/app.ini并重启:
<source lang="xml">
[server]
DOMAIN = git.your-new-domain.com
SSH_DOMAIN = git.your-new-domain.com
ROOT_URL = https://git.your-new-domain.com/
</source>

2026年6月28日 (日) 02:18的最新版本

安装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/