技术教程 · 2020年1月21日 0

如何在CentOS 8上使用HTTPS安装Gitea代码托管平台

Gitea是用Go编写的代码托管Web应用程序。顾名思义,它旨在与流行的源代码控制程序Git一起使用,类似于Gitlab和Github。本指南将说明使用Nginx HTTPS反向代理在CentOS 8上安装Gitea。

要求

  • 您具有root特权的CentOS 8系统。
  • 指向您的服务器的注册域名。
  • $ EDITOR环境变量应设置为您首选的文本编辑器。
  • 访问SMTP服务器以获取电子邮件通知(可选)。

确保您的(子)域指向带有A记录的服务器的IPv4地址。(可选)创建指向服务器的IPv6地址的AAAA记录。

注意:本指南假定SELinux设置为禁用或允许的。

步骤1:准备系统

首先安装任何可用的更新并重新启动:

dnf update -y
reboot

对于此设置,需要几个软件组件:

  • Git,是Gitea的依赖项。
  • PostgreSQL,因为Gitea需要数据库。
  • Nginx,将用作反向代理。
  • Sudo,以postgres系统用户身份运行命令。
  • Wget
  • Certbot,用于获取“让我们加密SSL”证书的实用程序。Certbot将被单独安装,因为它在CentOS软件存储库中不可用。

如下安装它们:

dnf install -y git postgresql postgresql-server nginx sudo wget

Certbot-auto是用于管理certbot的安装的脚本。下载它:

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

确保设置了正确的权限:

chmod 0755 /usr/local/bin/certbot-auto

运行以下命令以安装certbot。程序包管理器将提示您确认依赖项的安装,并回答“ y”。

certbot-auto --install-only

接下来,创建一个用户来运行Gitea:

useradd --system --shell /bin/bash --create-home --home-dir /home/gitea gitea

然后为Gitea创建目录结构:

mkdir -p /var/lib/gitea/{data,log} /etc/gitea /run/gitea

并设置所有权和权限,如下所示:

chown -R gitea:gitea /var/lib/gitea
chown -R gitea:gitea /var/run/gitea
chown -R root:gitea /etc/gitea
chmod -R 750 /var/lib/gitea
chmod 770 /etc/gitea

/ etc / gitea上的权限是临时的,运行Web安装程序后将被加强。

永久启用到端口80和443的流量:

firewall-cmd --add-port 80/tcp --add-port 443/tcp --permanent
firewall-cmd --reload

初始设置仅临时需要访问端口3000,因为我们将gitea配置为使用Unix套接字。

firewall-cmd --add-port 3000/tcp

步骤2:资料库设定

初始化Postgres:

postgresql-setup --initdb --unit postgresql

确保已启用并正在运行:

systemctl enable --now postgresql.service

登录到Postgres:

sudo -u postgres psql

然后创建一个供Gitea使用的用户角色和数据库:

postgres=# CREATE ROLE gitea LOGIN ENCRYPTED PASSWORD 'your_password';
postgres=# CREATE DATABASE gitea;
postgres=# GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea;
postgres=# \q

打开Postgres客户端身份验证配置文件:

$EDITOR /var/lib/pgsql/data/pg_hba.conf

 #IPv4本地连接之后添加以下行:

# IPv4 local connections:
host	gitea		gitea		127.0.0.1/32		md5

保存文件并重新启动Postgres:

systemctl restart postgresql.service

步骤3:安装Gitea

下载Linux的AMD64从Gitea的二进制版本Gitea的下载页面。例如:

wget https://dl.gitea.io/gitea/master/gitea-master-linux-amd64 -O /usr/local/bin/gitea

对下载的二进制文件设置正确的权限:

chmod 755 /usr/local/bin/gitea

接下来,创建一个systemd单位文件:

$EDITOR /etc/systemd/system/gitea.service

并输入以下内容:

[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=gitea
Group=gitea
WorkingDirectory=/var/lib/gitea/
RuntimeDirectory=gitea
ExecStart=/usr/local/bin/gitea web -c /etc/gitea/app.ini
Restart=always
Environment=USER=gitea HOME=/home/gitea GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target

确保新单元已加载:

systemctl daemon-reload

然后指示systemd在引导时启动Gitea:

systemctl enable gitea.service

步骤4:配置Gitea

对于初始配置,我们将使用随附的Web安装程序。首先,启动Gitea:

systemctl start gitea.service

然后导航到http:// your_domain:3000 / install并填写所需的参数,如下所示:

  • 数据库类型:PostgreSQL
  • 主持人:127.0.0.1:5432
  • 用户名:gitea
  • 密码:输入您在创建Postgres角色时选择的密码。
  • 数据库名称:gitea
  • SSL:禁用
  • 网站标题:您选择的标题。
  • 存储库根路径:/var/lib/gitea/data/repositories
  • Git LFS根路径: /var/lib/gitea/data/lfs
  • 以用户名身份运行:gitea
  • SSH服务器域:your_domain
  • SSH服务器端口:22
  • Gitea HTTP监听帖子:3000
  • Gitea基本URL:https://您的域/
  • 日志路径:/var/lib/gitea/log

配置电子邮件以及认为合适的其余设置,然后单击“安装Gitea”。您将被重定向到错误的URL。这很正常,因为我们尚未配置Nginx或HTTPS。出于性能原因,我们现在将Gitea配置为在unix套接字上侦听而不是在默认TCP端口上侦听。

在继续之前停止Gitea:

systemctl stop gitea.service

如下所示,加强/ etc / gitea的权限。这样可以防止不在gitea组中的任何人读取app.ini,其中包含敏感信息,包括数据库凭据。

chmod 750 /etc/gitea
chown root:gitea /etc/gitea/app.ini
chmod 640 /etc/gitea/app.ini

打开其配置文件:

$EDITOR /etc/gitea/app.ini

服务器部分删除以下行:

HTTP_PORT = 3000

并在服务器部分添加以下行:

HTTP_ADDR        = /run/gitea/gitea.sock
PROTOCOL         = unix
UNIX_SOCKET_PERMISSION = 666

步骤5:反向代理设置

如果Nginx正在运行,请停止它,以允许certbot监听端口80:

systemctl stop nginx.service

使用以下命令为您的域获取证书:

certbot-auto certonly --standalone --agree-tos -m your_email@example.com -d your_domain

让我们加密将在颁发证书之前验证域所有权。您的证书,链和私钥将存储在/etc/letsencrypt/live/your_domain/

现在,我们可以配置Nginx。创建一个新的配置文件:

$EDITOR /etc/nginx/conf.d/gitea.conf

并输入以下服务器块:

server {
        listen 80;
        listen [::]:80;
        server_name your_domain;
        return 301 https://$server_name$request_uri;
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}
server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name your_domain;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        location / {
                proxy_pass http://unix:/var/run/gitea/gitea.sock;
	}
	access_log /var/log/nginx/gitea-proxy_access.log;
	error_log /var/log/nginx/gitea-proxy_error.log;
}

第一个服务器块仅用于将所有HTTP请求重定向到HTTPS。第二个块侦听HTTPS连接,并将它们代理到我们配置了Gitea进行侦听的Unix套接字。

保存上述配置后,请检查是否存在语法错误,并在必要时编辑配置:

nginx -t

最后,启动Nginx和Gitea:

systemctl start nginx.service gitea.service

您的Gitea实例现在应该可以成功运行。通过https://您的域访问它

可选步骤

记录配置

默认情况下,Gitea记录严重级别为Info或更高的消息。您很可能希望将其更改为WarnError。为此,打开/etc/gitea/app.ini并将[log]部分中的LEVEL参数更改为以下之一:跟踪,调试,信息,警告,错误,严重,致命,无。例如,要记录严重性为“ 警告”或更高级别的消息,请使用:

[log]
MODE = file
LEVEL = warn
ROOT_PATH = /var/lib/gitea/log

重新启动Gitea,以使更改生效:

systemctl restart gitea.service

单独的SSH服务器

Gitea可以选择使用其自己的SSH服务器。要启用它,请将以下行添加到[server]配置部分:

START_SSH_SERVER = true

并将SSH端口更改为1024以上的任何数字,例如:

SSH_PORT = 2222

然后重新启动Gitea以应用更改并启用到所选端口的流量:

firewall-cmd --add-port 2222/tcp --permanent
firewall-cmd --reload