yanchang
yanchang
发布于 2026-06-29 / 18 阅读
0
0

部署个人的gitea代码库

二进制文件部署



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/giteayanchang

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.target

5. 启用 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


评论