ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AlmaLinux 9 上基于 PostgreSQL + Nginx 部署高可用轻量级 Gitea 服务

AlmaLinux 9 上基于 PostgreSQL + Nginx 部署高可用轻量级 Gitea 服务 前言Gitea 是一个用 Go 语言编写的极轻量、自建型的 Git 仓库服务。相比重量级的 GitLabGitea 内存占用极低仅需几十 MB 到上百 MB性能出众非常适合中小企业内部研发协同或个人私有代码托管。本文记录了在 AlmaLinux release 9.7 (x86_64) 环境下从零搭建 Gitea搭配 PostgreSQL 数据库并通过 Nginx 实现 443 HTTPS 反向代理的全过程。文末还重点复盘了 RHEL 9 系系统下 PostgreSQL 默认认证策略导致的 Ident / Password 认证失败 的排查与解决方案。部署环境与规划操作系统AlmaLinux release 9.7 (x86_64)数据库PostgreSQL 13Web 代理Nginx (监听 443 端口配置 SSL)宿主机 SSH 端口27892 (非标准端口)安全配置SELinux 与 Firewalld 处于关闭状态详细安装与配置步骤第一步PostgreSQL 安装与用户数据库初始化在 AlmaLinux 9 下安装 PostgreSQL 并启动# 1. 安装 PostgreSQL 服务端dnfinstall-ypostgresql-server postgresql-contrib# 2. 初始化数据库集群postgresql-setup--initdb# 3. 设置开机自启并立即启动systemctlenable--nowpostgresql第二步【避坑核心】修复 PostgreSQL 密码认证机制⚠️ 核心坑点说明RHEL/AlmaLinux 9 默认的 pg_hba.conf 会将本地 TCP (127.0.0.1/32) 认证模式设为 ident导致 Gitea 连接时抛出用户 “gitadmin” Ident 认证失败。必须将其改为 scram-sha-256 密码认证并使用对应的加密算法生成密码。# 1. 获取 pg_hba.conf 文件路径HBA$(sudo-upostgres psql-tAcSHOW hba_file)# 2. 备份原配置sudocp$HBA$HBA.bak# 3. 将本地 IPv4/IPv6 认证模式从 ident 替换为 scram-sha-256sudosed-i-Es/^host(\sall\sall\s127\.0\.0\.1\/32\s)ident/host\1scram-sha-256/$HBAsudosed-i-Es/^host(\sall\sall\s::1\/128\s)ident/host\1scram-sha-256/$HBA# 4. 重新加载配置生效sudo-upostgres psql-cSELECT pg_reload_conf();# 5. 使用 scram-sha-256 加密创建专用用户和数据库sudo-upostgres psql-cSET password_encryptionscram-sha-256; CREATE USER gitadmin WITH PASSWORD YourStrongPassword;sudo-upostgres psql-cCREATE DATABASE giteadb OWNER gitadmin ENCODING UTF8;# 6. 本地连接连通性验证PGPASSWORDYourStrongPasswordpsql-h127.0.0.1-p5432-Ugitadmin-dgiteadb-cSELECT current_user, current_database();若输出 gitadmin | giteadb说明数据库层完全就绪。不然回头配置web就会认证有问题如下图第三步创建专用运行环境与目录权限为了保证服务安全严禁使用 root 用户直接运行 Gitea。# 1. 创建专用的系统 git 用户adduser--system--shell/bin/bash--commentGit Version Control--create-home --home-dir /home/gitgit# 2. 创建 Gitea 所需的工作与配置目录mkdir-p/var/lib/gitea/{custom,data,log}mkdir-p/etc/gitea# 3. 配置目录属主与权限chown-Rgit:git /var/lib/giteachmod-R750/var/lib/giteachownroot:git /etc/giteachmod770/etc/gitea第四步下载 Gitea 并配置 Systemd 守护进程# 1. 下载官方二进制包并赋予可执行权限wget-O/usr/local/bin/gitea https://dl.gitea.com/gitea/1.21.11/gitea-1.21.11-linux-amd64chmodx /usr/local/bin/gitea# 2. 创建 Systemd 服务配置文件catEOF/etc/systemd/system/gitea.service[Unit] DescriptionGitea (Git with a cup of tea) Afternetwork.target postgresql.service Requirespostgresql.service [Service] RestartSec2s Typesimple Usergit Groupgit WorkingDirectory/var/lib/gitea/ ExecStart/usr/local/bin/gitea web --config /etc/gitea/app.ini Restartalways EnvironmentUSERgit HOME/home/git GITEA_WORK_DIR/var/lib/gitea [Install] WantedBymulti-user.target EOF# 3. 启动并设置开机自启systemctl daemon-reload systemctlenable--nowgitea第五步生成 SSL 证书与 Nginx 反向代理配置由于服务器 80 端口已被其他业务占用我们将 Gitea 挂载在 443 (HTTPS) 端口上反向代理后端的 127.0.0.1:3000。# 1. 生成自签名 SSL 证书如已有商业证书直接替换对应路径即可mkdir-p/etc/pki/nginx/ openssl req-x509-nodes-days3650-newkeyrsa:2048\-keyout/etc/pki/nginx/gitea.key\-out/etc/pki/nginx/gitea.crt\-subj/CNgitea.local# 2. 写入 Nginx 站点配置catEOF/etc/nginx/conf.d/gitea.confserver { listen 443 ssl http2; server_name _; ssl_certificate /etc/pki/nginx/gitea.crt; ssl_certificate_key /etc/pki/nginx/gitea.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 允许大文件提交 (根据需要调整) client_max_body_size 512M; location / { proxy_pass http://127.0.0.1:3000; 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; } } EOF# 3. 检查语法并重载 Nginxnginx-tsystemctl reload nginx第六步Web 初始化与命令行创建管理员打开浏览器访问https://你的服务器IP/在初始化安装页面填写如下关键参数数据库类型PostgreSQL数据库主机127.0.0.1:5432数据库用户名前面创建的用户名数据库用户密码YourStrongPassword数据库名称前面创建的库名SSL 模式DisableSSH服务端口27892填写你服务器真实的 SSH 端口Gitea 基本 URLhttps://你的服务器IP/其他的看着随便填不影响然后点击页面底部的 “立即安装”。命令行创建管理员账号避免表单超时或遗忘密码初始化完成后可直接在终端通过 CLI 命令秒建管理员su-git-c/usr/local/bin/gitea admin user create --admin --username gitadmin --password YourAdminPassword --email adminexample.com --config /etc/gitea/app.ini也可以通过页面注册第一个注册的账号默认是管理员第七步安全收尾锁定配置目录权限安装完成后必须收紧 /etc/gitea 及其配置文件的权限防止数据库明文密码泄露或被篡改chmod750/etc/giteachmod640/etc/gitea/app.ini附上安装后的界面深度复盘PostgreSQL 认证排错心得在本次搭建过程中最具代表性的问题就是 数据库认证机制引发的连锁反应1.Ident 认证失败原因Linux 发行版特别是 RHEL 9 系列初始化 PostgreSQL 后pg_hba.conf 默认配置为 ident。这种模式要求操作系统 登录用户与 PostgreSQL 角色名完全一致。而 Gitea 进程是以 git 用户运行并试图以 gitadmin 身份连接自然会被拒绝。解决必须将 pg_hba.conf 中的本地网段认证规则由 ident 改为 scram-sha-256。2.从 Ident 改为 SCRAM 后的 Password 认证失败原因如果在修改 pg_hba.conf 之前就创建了用户用户密码可能使用的是 md5 格式哈希而服务端切换为 scram-sha-256 后无法向下兼容校验。解决在 psql 中执行 SET password_encryption ‘scram-sha-256’; 并重新通过 ALTER USER gitadmin WITH PASSWORD ‘…’; 刷新密码哈希即可彻底解决。
返回列表