Skip to content

Docker 安装 Gitea

系统:Ubuntu 24.04


创建工作目录

shell
# 预先创建 gitea 和 mysql 目录,稍后用于数据挂载
mkdir ~/gitea
mkdir ~/mysql

# 授权
cd ~
chown 1000:1000 gitea mysql

创建 docker-compose.yml

yaml
version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.23.7
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - ./tmp/gitea:/tmp
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: docker.io/library/mysql:8
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"

拉取镜像并启动 Gitea

shell
docker compose up -d

等待启动成功,访问 http://宿主机IP:3000 即可。

202505092329126

[可选]配置 Gitea

进入 gitea 容器或直接在宿主机找到挂载位置

shell
docker exec -it gitea /bin/bash

修改配置

shell
vi /data/gitea/conf/app.ini

退出并重启容器

shell
exit

docker restart gitea

禁用注册

ini
[service]
DISABLE_REGISTRATION = true

禁用OpenID登录

ini
[openid]
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false

禁用用户探索页面

ini
[service.explore]
DISABLE_USERS_PAGE = true

仅允许已登录的用户查看探索页面

ini
[service]
REQUIRE_SIGNIN_VIEW = true

启用登录注册验证码

ini
[service]
ENABLE_CAPTCHA = true
REQUIRE_CAPTCHA_FOR_LOGIN = true

修改更新镜像仓库 Cron

默认 @every 10m

ini
[cron.update_mirrors]
SCHEDULE = @every 3h
ini
[other]
SHOW_FOOTER_VERSION = false
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false
ini
[api]
ENABLE_SWAGGER = false

Nginx反向代理

如果没有在初始化 Gitea 时配置域名,就单独修改配置文件下方配置即可。

ini
[server]
ROOT_URL = https://你的域名/

Nginx 配置文件部分:

nginx
server {
    listen       443 ssl;
    server_name  你的域名;

    ssl_certificate      你的证书地址.pem;
    ssl_certificate_key  你的证书地址.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        # 确保 client_max_body_size 足够大,否则在上传大文件时会出现 "client_max_body_size" 错误
        client_max_body_size 512M;
        proxy_pass http://xx.xx.xx.xx:3000;

        # Proxy headers
        proxy_set_header Connection $http_connection;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
# HTTP 请求 将转发到 HTTPS
server {
    listen  80;
    server_name  你的域名;
    rewrite ^ https://$http_host$request_uri? permanent;
}

[可选]DIY

上方操作后, gitea 目录位置:/root/gitea

mkdir -p /root/gitea/gitea/templates/custom
mkdir -p /root/gitea/gitea/public/assets

修改完配置,注意重启。

shell
docker restart gitea

顶部链接

shell
cd /root/gitea/gitea/templates/custom
vim extra_links.tmpl
html
<a class="item" href="https://charles7c.top" target="_blank">博客</a>

尾部链接

shell
cd /root/gitea/gitea/templates/custom
vim extra_links_footer.tmpl
html
<a class="item" href="https://github.com/Charles7c" target="_blank">
  <svg class="svg" aria-hidden="true" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="m12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.385-1.335-1.755-1.335-1.755-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57 4.801-1.574 8.236-6.074 8.236-11.369 0-6.627-5.373-12-12-12"></path></svg><font _mstmutation="1">
  GitHub
</font></a>

自定义主题

主题 中选择一个你喜欢的,本次选择使用主题 Catppuccin - Soothing pastel theme for Gitea

shell
mkdir -p /root/gitea/gitea/public/assets/css

# 将主题文件放到此目录下
cd /root/gitea/gitea/public/assets/css

修改 ini 配置文件

ini
[ui]
THEMES = catppuccin-rosewater-auto,catppuccin-flamingo-auto,catppuccin-pink-auto,catppuccin-mauve-auto,catppuccin-red-auto,catppuccin-maroon-auto,catppuccin-peach-auto,catppuccin-yellow-auto,catppuccin-green-auto,catppuccin-teal-auto,catppuccin-sky-auto,catppuccin-sapphire-auto,catppuccin-blue-auto,catppuccin-lavender-auto

自定义首页

shell
cd /root/gitea/gitea/templates

vim home.tmpl
html
{{template "base/head" .}}
<div role="main" aria-label="{{if .IsSigned}}{{.locale.Tr "dashboard"}}{{else}}{{.locale.Tr "home"}}{{end}}" class="page-content home">
	<div class="gt-mb-5 gt-px-5">
		<div class="center">
			<img class="logo" width="220" height="220" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{.locale.Tr "logo"}}">
			<div class="hero">
				<h1 class="ui icon header title">
					{{AppName}}
				</h1>
				<h2>编写 & 测试 & 分享个人碎片化、结构化的开源项目代码</h2>
			</div>
		</div>
	</div>
	<div class="ui stackable middle very relaxed page grid">
		<div class="eight wide center column">
			<h1 class="hero ui icon header">
				{{svg "octicon-squirrel"}} 代码游乐场
			</h1>
			<p class="large">
				编写、测试和分享一些有趣的代码片段、脚本和项目
			</p>
		</div>
		<div class="eight wide center column">
			<h1 class="hero ui icon header">
				{{svg "octicon-database"}} 代码存储库
			</h1>
			<p class="large">
				同步、保存和归档来自 GitHub、Gitee 等其他平台的个人代码
			</p>
		</div>
	</div>
</div>
{{template "base/footer" .}}
shell
mkdir -p /root/gitea/gitea/public/assets/img

# 上传 logo.svg、favicon.svg
cd /root/gitea/gitea/public/assets/img

参考资料

1.客制化 Gitea:https://blog.fernvenue.com/zh/archives/gitea-customization/