Установка gitea

Установка gitea.

Содержание

1 Информация

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

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

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

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

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

2.2 База данных

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

2.2.1 SqLite

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

2.2.2 PostgreSQL

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

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

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

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

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

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

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

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

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

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

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

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

2.3 Брандмауэр

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

3 Установка

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

  • Пакета gitea в Rocky Linux нет.
  • Устанавливать будем в локальную иерархию:
    cd /usr/local/bin
    
  • Скачаем последнюю версию gitea:
    curl -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
    
  • Установим права на выполнение файла:
    chmod +x /usr/local/bin/gitea
    
  • Восстановим метки безопасности:
    restorecon -rv /usr/local/bin/gitea
    

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

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

3.3 Сервис systemd

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

3.4 Запуск gitea

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

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

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

4.1 Установка nginx

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

4.2 Брандмауэр

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

4.3 SELinux

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

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

  • В файле /etc/nginx/conf.d/gitea.conf опишем конфигурацию для перенаправления:
    server {
            server_name hub.example.com;
    
            location / {
                client_max_body_size 512M;
                proxy_pass http://localhost:3000;
                proxy_set_header Host $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;
            }
    }
    

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

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

4.6 Настройка SSL

  • Установите certbot (см. Клиенты ACME. Certbot)
  • Создайте сертификат.
  • Конфигурационный файл Nginx будет иметь вид:
    server {
        listen              443 ssl http2;
        listen              [::]:443 ssl http2;
    
        server_name hub.example.com;
    
        ssl_certificate /etc/letsencrypt/live/hub.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hub.example.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
         charset utf-8;
         gzip on;
         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;
    
         proxy_read_timeout 300;
         proxy_connect_timeout 300;
         proxy_send_timeout 300;
    
    
        location / {
            client_max_body_size 512M;
            proxy_pass http://localhost:3000;
            proxy_set_header Connection $http_connection;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Host $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;
        }
    }
    
    server {
        # Redirect HTTP traffic to HTTPS
        listen         80;
        listen         [::]:80;
        server_name hub.example.com;
        return         301 https://$server_name$request_uri;
    }
    

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

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

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

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

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

Похожие