二进制文件部署
1. 创建目录与下载程序
首先创建 /opt/gitea/ 及其子目录,下载二进制文件并配置好属于 yanchang 用户的权限。
Bash
# 创建统一的部署目录(包含自定义配置、数据、日志和主配置目录)
sudo mkdir -p /opt/gitea/{custom,data,log,conf}
# 下载 Gitea 二进制文件(以 1.22.0 版本为例)
sudo wget -O /opt/gitea/gitea https://dl.gitea.com/gitea/1.22.0/gitea-1.22.0-linux-amd64
sudo chmod +x /opt/gitea/gitea
# 将整个目录的所有权赋予 yanchang 用户
sudo chown -R yanchang:yanchang /opt/gitea
sudo chmod -R 750 /opt/gitea

2. 预设 Gitea 监听端口
为了让 Gitea 首次启动时就直接绑定在 127.0.0.1:****,我们先以 yanchang 用户的身份写入初始配置文件。
Bash
sudo -u yanchang nano /opt/gitea/conf/app.ini
填入以下基础配置:
[server]
# 仅监听本地环回地址及指定端口
HTTP_ADDR = 127.0.0.1
HTTP_PORT = *****3. 配置 Nginx 反向代理(在 sites-available 中)
在 /etc/nginx/sites-available/ 目录下创建名为 gitea 的配置文件:
Bash
sudo nano /etc/nginx/sites-available/gitea
填入以下完善的配置(Nginx 对外监听 *****,内部转发至 Gitea 的 ***** 端口):
Nginx
server {
# 1. Nginx 对外暴露 ***** 端口
listen ***** ssl;
server_name git.yourdomain.com;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/www.yanchang.pem;
ssl_certificate_key /etc/nginx/ssl/www.yanchang.key;
# SSL 协议优化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
# 允许大文件或 LFS 上传限制
client_max_body_size 512M;
location / {
# 2. 代理到 Gitea 的实际本地端口 *****
proxy_pass http://127.0.0.1:*****;
# 基础跳转与 Host 识别
proxy_set_header Host $http_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;
# WebSocket 与 SSE 长连接支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 关闭代理缓冲
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
# 超时时间优化
proxy_connect_timeout 300s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
}4. 配置 Systemd 系统服务
创建系统服务脚本,所有的路径、工作目录以及执行用户均指定为 /opt/gitea 和 yanchang。
Bash
sudo nano /etc/systemd/system/gitea.service
填入以下内容:
[Unit]
Description=Gitea (Git with a cup of tea)
After=network.target
[Service]
Type=simple
# 指定运行用户与组
User=yanchang
Group=yanchang
# 工作目录切换至 /opt/gitea
WorkingDirectory=/opt/gitea
# 执行命令并明确指定配置文件路径
ExecStart=/opt/gitea/gitea web -c /opt/gitea/conf/app.ini
Restart=always
RestartSec=5s
# 环境变量设置
Environment=USER=yanchang HOME=/home/yanchang GITEA_WORK_DIR=/opt/gitea
[Install]
WantedBy=multi-user.target5. 启用 Nginx 配置与启动服务
由于使用的是 sites-available 机制,需要将其创建软链接到 sites-enabled 目录以激活配置:
Bash
# 1. 创建软链接以启用该网站配置
sudo ln -sf /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
# 2. 重载 systemd 并启动 Gitea 服务
sudo systemctl daemon-reload
sudo systemctl enable gitea
sudo systemctl start gitea
# 检查 Gitea 状态,确保为 active (running)
sudo systemctl status gitea
# 3. 检查 Nginx 配置语法并热重载
sudo nginx -t
sudo systemctl reload nginx接着就可以去浏览器访问 https://你的域名:**** 进行 Gitea 的网页端初始化了
Docker部署
1. 环境准备与权限分配
创建专属目录,并将其所有权移交给你的日常运行账户,防止后续 Docker 产生的文件出现权限混乱。
Bash
# 创建部署目录
sudo mkdir -p /opt/gitea
# 将目录所有权赋予 yanchang 用户(假设其 UID/GID 均为 1000)
sudo chown -R yanchang:yanchang /opt/gitea
sudo chmod -R 750 /opt/gitea
2. 编写 Docker Compose 核心配置
进入 /opt/gitea 目录,创建 docker-compose.yml 文件。此配置禁用了内置 SSH,并将容器内的 3000 端口映射到本地的 33380 端口。
YAML
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.22.0
container_name: gitea
environment:
# 身份同步,确保产生的 data 数据归属 yanchang
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=sqlite3
# 彻底关闭 SSH 功能,仅使用 HTTPS 克隆
- GITEA__server__DISABLE_SSH=true
restart: always
networks:
- gitea
volumes:
- ./data:/data
# 挂载只读时区文件,保持容器与宿主机时间绝对同步
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
# 留给 Nginx 反向代理的本地接口
- "127.0.0.1:******:3000"
3. 配置 Nginx 反向代理
在 /etc/nginx/sites-available/ 下创建名为 gitea 的配置文件。对外暴露 ***** 端口,并将流量代理至本地的 *****端口,同时关闭缓存以支持推送进度和 Webhook。
Nginx
server {
# 外部监听 *****端口
listen **** ssl;
server_name git.yourdomain.com; # 请替换为实际域名
# SSL 证书
ssl_certificate /etc/nginx/ssl/www.yanchang.pem;
ssl_certificate_key /etc/nginx/ssl/www.yanchang.key;
# SSL 优化
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
# 允许大文件/LFS 上传
client_max_body_size 512M;
location / {
# 代理到 Docker 映射出来的 端口
proxy_pass http://127.0.0.1:******;
# 基础请求头
proxy_set_header Host $http_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;
# WebSocket 与 SSE 长连接支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 关闭代理缓冲,确保数据流实时
proxy_buffering off;
proxy_cache off;
chunked_transfer_encoding on;
# 超时时间延长至 1 小时
proxy_connect_timeout 300s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
}
}
启用 Nginx 配置:
Bash
sudo ln -sf /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
4. 配置 Systemd 系统服务
创建 /etc/systemd/system/gitea.service,利用 Systemd 的 oneshot 特性,优雅地接管 Docker Compose 项目的自启与停止。
Ini, TOML
[Unit]
Description=Docker Compose Gitea Service
After=docker.service network.target
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
User=yanchang
ExecStartPre=/bin/sleep 3
WorkingDirectory=/opt/gitea
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose stop
Restart=on-failure
RestartSec=30s
[Install]
WantedBy=multi-user.target
5. 启动与网页初始化
执行以下命令重载配置,让所有服务跑起来:
Bash
# 重载系统服务并启动 Gitea
sudo systemctl daemon-reload
sudo systemctl enable gitea.service
sudo systemctl start gitea.service
# 测试 Nginx 语法并热重载
sudo nginx -t
sudo systemctl reload nginx