Установка gitea

Установка gitea.

Содержание

1 Информация

1.1 Поддерживаемые базы данных

  • MySQL (>=5.7)
  • PostgreSQL (>=10)
  • SQLite3
  • MSSQL (>=2008R2 SP3)
  • TiDB (MySQL protocol)

2 Пререквизиты

2.1 Пользователь

  • Создадим пользователя для работы с gitea.
    • Ubuntu/Debian:
      1adduser \
      2          --system \
      3          --shell /bin/bash \
      4          --gecos 'Git Version Control' \
      5          --group \
      6          --disabled-password \
      7          --home /home/git \
      8          git
      
    • Fedora/RHEL/CentOS:
      1groupadd --system git
      2adduser \
      3          --system \
      4          --shell /bin/bash \
      5          --comment 'Git Version Control' \
      6          --gid git \
      7          --home-dir /home/git \
      8          --create-home \
      9          git
      

2.2 База данных

  • Установите нужную базу данных.

2.2.1 SqLite

  • Установите sqlite:
    1dnf install sqlite
    
  • Настроек не требуется.

2.2.2 PostgreSQL

  • Установите postgresql:

    1dnf install postgresql-server postgresql
    
  • Создайте начальную базу данных:

    1/usr/bin/postgresql-setup --initdb
    
  • Запустите PostgreSQL:

    1systemctl enable --now postgresql
    
  • Если требуется удалённая настройка PostgreSQL, добавьте адрес для прослушивания вашего IP-адреса, отредактировав listen_addresses в /var/lib/pgsql/data/postgresql.conf:

    1listen_addresses = 'localhost, 203.0.113.3'
    
  • PostgreSQL по умолчанию использует схему запрос-ответ md5 для аутентификации.

    • В настоящее время эта схема не считается безопасной.
    • Вместо этого используйте схему SCRAM-SHA-256, отредактировав postgresql.conf:
      1password_encryption = scram-sha-256
      
  • На сервере базы данных войдите в консоль базы данных как суперпользователь:

    1su -c psql - postgres
    
  • Создайте пользователя базы данных с правами входа и паролем:

    1CREATE ROLE gitea WITH LOGIN PASSWORD 'gitea';
    
    • Замените имя пользователя и пароль соответствующим образом.
    • Сменить пароль потом можно будет следующим образом:
      • На сервере базы данных войдите в консоль базы данных как суперпользователь:
        1su -c psql - postgres
        
      • Смените пароль пользователю gitea:
        1\password gitea
        
  • Создайте базу данных с кодировкой UTF-8, принадлежащую пользователю базы данных, созданному ранее:

    1CREATE DATABASE gitea WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'ru_RU.UTF-8' LC_CTYPE 'ru_RU.UTF-8';
    
    • Замените имя базы данных соответствующим образом.
  • Разрешите пользователю базы данных доступ к базе данных, созданной выше, добавив следующее правило аутентификации в файл /var/lib/pgsql/data/pg_hba.conf.

    • Для локальной базы данных:
      1local    gitea    gitea    scram-sha-256
      2host     gitea    gitea    127.0.0.1/32    scram-sha-256
      
    • Для удаленной базы данных:
      1host    gitea    gitea    192.0.2.10/32    scram-sha-256
      
    • Замените имя базы данных, пользователя и IP-адрес экземпляра Gitea на свои собственные.
  • Перезапустите PostgreSQL, чтобы применить новые правила аутентификации:

    1systemctl restart postgresql.service
    
  • На вашем сервере Gitea проверьте соединение с базой данных.

    • Для локальной базы данных:
      1psql -U gitea -d giteadb
      
    • Для удаленной базы данных:
      1psql "postgres://gitea@203.0.113.3/giteadb"
      
    • gitea : пользователь базы данных,
    • giteadb : имя базы данных;
    • 203.0.113.3 : IP-адрес экземпляра вашей базы данных.
  • Вам будет предложено ввести пароль для пользователя базы данных и подключиться к базе данных.

2.3 Брандмауэр

  • Если не будете включать проксирование через web-сервер, то разрешите работать по порту 3000:
    1firewall-cmd --permanent --zone=public --add-port=3000/tcp
    2firewall-cmd --reload
    

3 Установка

3.1 Установка бинарного пакета

  • Пакета gitea в Rocky Linux нет.
  • Устанавливать будем в локальную иерархию:
    1cd /usr/local/bin
    
  • Скачаем последнюю версию gitea:
    1curl -s  https://api.github.com/repos/go-gitea/gitea/releases/latest |grep browser_download_url  |  cut -d '"' -f 4  | grep '\linux-amd64$' | wget -i - -O /usr/local/bin/gitea
    
  • Установим права на выполнение файла:
    1chmod +x /usr/local/bin/gitea
    
  • Восстановим метки безопасности:
    1restorecon -rv /usr/local/bin/gitea
    

3.2 Структура папок

  • Создадим рабочую структур папок:
    1mkdir -p /etc/gitea /var/lib/gitea/{custom,data,indexers,public,log}
    2chown git:git /var/lib/gitea/{data,indexers,log}
    3chmod 750 /var/lib/gitea/{data,indexers,log}
    4chown root:git /etc/gitea
    5chmod 770 /etc/gitea
    

3.3 Сервис systemd

  • Скачает файл сервиса:
    1wget https://raw.githubusercontent.com/go-gitea/gitea/master/contrib/systemd/gitea.service -P /etc/systemd/system/
    
  • Перечитает файлы сервисов:
    1systemctl daemon-reload
    

3.4 Запуск gitea

  • Запустим gitea:
    1systemctl enable --now gitea
    

4 Проксирование

  • Можно настроить проксирование gitea через nginx.
  • Это не обязательно.

4.1 Установка nginx

  • Установим nginx:
    1dnf install nginx
    

4.2 Брандмауэр

  • Настроим брандмауэр:
    1firewall-cmd --add-servic={http,https} --permanent
    2firewall-cmd --reload
    

4.3 SELinux

  • Разрешите nginx перенаправление:
    1setsebool -P httpd_can_network_connect 1
    2setsebool httpd_can_network_connect 1
    

4.4 Конфигурация nginx

  • В файле /etc/nginx/conf.d/gitea.conf опишем конфигурацию для перенаправления:
     1server {
     2        server_name hub.example.com;
     3
     4        location / {
     5            client_max_body_size 512M;
     6            proxy_pass http://localhost:3000;
     7            proxy_set_header Host $host;
     8            proxy_set_header X-Real-IP $remote_addr;
     9            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    10            proxy_set_header X-Forwarded-Proto $scheme;
    11        }
    12}
    

4.5 Конфигурационный файл app.ini

  • Добавьте в /etc/gitea/app.ini в секцию [security] чтобы задать доверенные прокси-серверы:
    1[security]
    2REVERSE_PROXY_LIMIT = 1
    3REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.1/8
    

4.6 Настройка SSL

  • Установите certbot (см. Клиенты ACME. Certbot)
  • Создайте сертификат.
  • Конфигурационный файл Nginx будет иметь вид:
     1server {
     2    listen              443 ssl http2;
     3    listen              [::]:443 ssl http2;
     4
     5    server_name hub.example.com;
     6
     7    ssl_certificate /etc/letsencrypt/live/hub.example.com/fullchain.pem;
     8    ssl_certificate_key /etc/letsencrypt/live/hub.example.com/privkey.pem;
     9    include /etc/letsencrypt/options-ssl-nginx.conf;
    10    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    11
    12     charset utf-8;
    13     gzip on;
    14     gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
    15
    16     proxy_read_timeout 300;
    17     proxy_connect_timeout 300;
    18     proxy_send_timeout 300;
    19
    20
    21    location / {
    22        client_max_body_size 512M;
    23        proxy_pass http://localhost:3000;
    24        proxy_set_header Connection $http_connection;
    25        proxy_set_header Upgrade $http_upgrade;
    26        proxy_set_header Host $host;
    27        proxy_set_header X-Real-IP $remote_addr;
    28        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    29        proxy_set_header X-Forwarded-Proto $scheme;
    30    }
    31}
    32
    33server {
    34    # Redirect HTTP traffic to HTTPS
    35    listen         80;
    36    listen         [::]:80;
    37    server_name hub.example.com;
    38    return         301 https://$server_name$request_uri;
    39}
    

5 Начальная конфигурация

  • Без проксирования: подключитесь к хосту с gitea по порту 3000 (http://yourserver-ip-address:3000).
  • C проксированием: подключитесь к хосту с gitea (http://yourserver-ip-address).
  • Заполните настройки gitea:
    • Тип базы данных: PostgreSQL.
    • Имя пользователя: gitea
    • Пароль: пароль, который Вы задали.
    • Имя базы данных: gitea

6 Дополнительные настройки

6.1 fail2ban

  • Настроим fail2ban (см. fail2ban. Основные настройки)
  • Документация: https://docs.gitea.com/next/administration/fail2ban-setup
  • Добавьте фильтр /etc/fail2ban/filter.d/gitea.conf:
    1# gitea.conf
    2[Definition]
    3failregex =  .*(Failed authentication attempt|invalid credentials|Attempted access of unknown user).* from <HOST>
    4ignoreregex =
    
  • Добавьте ограничение /etc/fail2ban/jail.d/80-gitea.conf:
    1[gitea]
    2enabled = true
    3filter = gitea
    4logpath = /var/log/gitea/gitea.log
    5maxretry = 10
    6findtime = 3600
    7bantime = 900
    8action = iptables-allports
    
  • Поправьте секцию [log] в /etc/gitea/app.ini:
    1[log]
    2MODE = file
    3LEVEL = info
    4ROOT_PATH = /var/log/gitea
    
  • Создайте нужный каталог:
    1mkdir -p /var/log/gitea
    2chown git:git /var/log/gitea
    

6.2 Имя ветки по умолчанию

  • Gitea устанавливает имя главной ветки по умолчанию на main.
  • Имя ветка по умолчанию можно установить в файле /etc/gitea/app.ini:
    1[repository]
    2DEFAULT_BRANCH = master
    

Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие