Personal/linux/Gitea.md

20 KiB
Raw Blame History

В данном гайде я рассмотрю установку сервиса Gitea на собственном виртуальном сервере

Но для начала небольшой ликбез

Что такое и для чего нужна эта ваша Gitea

Если вам лень читать всё это полотно текста, то перейдите к началу установки

Gitea — это лёгкая и доступная система управления версиями на основе Git, созданная для удобства и эффективности работы как индивидуальных пользователей, так и команд. Эта платформа распространяется с открытым исходным кодом, что делает её свободно доступной для использования и модификации. Основное преимущество Gitea заключается в том, что она может быть развернута на собственном сервере пользователя, что обеспечивает полный контроль над данными и конфигурацией.

Gitea предлагает все основные функции Git, такие как ветвление, слияние и тегирование, а также дополнительные удобства для управления проектами, включая систему отслеживания задач, вики-страницы и инструменты для код-ревью. Это делает её идеальным решением для команд разработчиков, которые хотят совместно работать над проектами в изолированной и безопасной среде.

По мере того как всё больше организаций и частных лиц признают важность цифровой безопасности и автономности, Gitea выделяется как надёжное и удобное решение для самостоятельного управления данными и проектами. Наличие активного сообщества и обширной документации дополнительно облегчает внедрение и использование этой системы в самых разных контекстах.

Системы управления версиями, традиционно ассоциируются с разработкой программного обеспечения, однако их потенциал применения значительно шире. Для непрограммистов они могут стать мощным инструментом для решения разнообразных задач управления данными и координации проектов.

Один из ярких примеров — использование Gitea для синхронизации заметок. Например, пользователи приложения для заметок, такого как Obsidian, могут использовать Gitea для версионирования своих записей. Это позволяет отслеживать изменения, возвращаться к предыдущим версиям и даже работать над заметками совместно с другими пользователями.

Другой распространенный сценарий — использование Gitea в качестве инструмента для синхронизации и версионирования паролей с помощью менеджера паролей, такого как Pass. Такой подход увеличивает безопасность управления паролями, предоставляя историю изменений, синхронизацию между устройствами и возможность восстановления предыдущих состояний.

Системные администраторы и энтузиасты Linux также найдут Gitea особенно полезной. Для них система может служить надежным хранилищем для конфигурационных файлов систем и приложений. В случае необходимости можно легко отследить изменения, внесенные в файлы конфигурации, и при необходимости вернуться к более ранней версии. Это особенно важно, когда изменения в конфигурации могут повлиять на стабильность системы.

Также Gitea может служить для управления контентом и документацией проектов. Например, организации могут использовать встроенные вики для создания и хранения технических руководств, инструкций и других документов, что особенно полезно в условиях частых изменений и необходимости обеспечения доступа к актуальной информации.

Gitea поддерживается активным сообществом разработчиков и пользователей, которые регулярно обновляют и дополняют документацию, делая систему доступной для новичков и профессионалов. Пользователи могут обратиться за помощью через GitHub, специализированные форумы и чаты, где можно задать вопросы, обменяться опытом или найти решения для специфических проблем. Это обеспечивает надёжную поддержку и постоянное развитие платформы.

Альтернативы и в каких случаях стоит выбирать Gitea

Выбор подходящей системы управления версиями зависит от конкретных потребностей проекта или организации. Gitea выделяется среди подобных систем благодаря своей лёгкости и минимальным требованиям к ресурсам, что делает её идеальной для малых команд или индивидуальных разработчиков, которым нужен простой и эффективный инструмент без сложной инфраструктуры.

В отличие от GitHub, который является популярной коммерческой платформой, Gitea предоставляет возможность полного контроля над вашими данными, поскольку её можно развернуть в собственной инфраструктуре. Это может быть критически важно для организаций, требующих строгого соблюдения политик конфиденциальности и безопасности.

GitLab, хотя и предлагает обширные возможности для CI/CD, требует значительно больше ресурсов для своего функционирования и имеет сложную структуру, что может оказаться излишним для небольших проектов. Более того, не все функции GitLab доступны в бесплатной версии, что также может повлиять на выбор в пользу более доступных решений.

Таким образом, если ваша цель — обеспечить лёгкость управления, минимизировать затраты на инфраструктуру и удерживать полный контроль над системой и данными, Gitea представляет собой прекрасный выбор.

Начнём установку

В качестве тестового стенда я буду использовать виртуальную машину на базе Debian 12 с конфигурацией (1/2/30)
Начинать установку будем с уже классических apt update && apt upgrade -y
Далее установим MariaDB
apt install mariadb-server

После установки запустим скрипт безопасной настройки

mysql_secure_installation

Выполните установку следуя подсказкам на экране

После чего нужно войти в консоль MariaDB и создать пользователя и БД, которые будут использоваться системой

mysql -u root -p  
CREATE USER 'twgitea'@'%' IDENTIFIED BY 'secretpass'; (secretpass поменяйте на надёжный и безопасный пароль)
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'; 
GRANT ALL PRIVILEGES ON giteadb.* TO 'twgitea';
FLUSH PRIVILEGES;

Теперь установим саму Gitea

wget -O gitea https://dl.gitea.io/gitea/1.21.10/gitea-1.21.10-linux-amd64
chmod +x gitea

Так-же проверьте что на сервере установлен Git git --version

Создадим системного пользователя, под которым будет работать gitea

adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

Не забудем про директории для хранения данных, конфигураций и логов

mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea

Установим переменную окружения для рабочей директории и скопируем исполняемый файл в системный каталог

export GITEA_WORK_DIR=/var/lib/gitea/
cp gitea /usr/local/bin/gitea

Создание и настройка сервиса для systemd

nano /etc/systemd/system/gitea.service
И вставим туда  
  
[Unit]
Description=MyGitea
After=network.target
Wants=mariadb.service
After=mariadb.service

[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

[Install]
WantedBy=multi-user.target

Затем включим и запустим сервис

systemctl enable gitea
systemctl start gitea

И не забудем проверить его статус

systemctl status gitea

Завершим установку через web интерфейс ip:3000

  1. Настроим базу данных
    • В поле Database Type выберите MySQL, что соответствует типу вашей базы данных.
    • В поле Host значение по умолчанию
    • Введите имя пользователя базы данных в поле Username — в вашем случае это twgitea, при условии что вы его не меняли.
    • Введите пароль, который вы задали при создании пользователя базы данных, в поле Password.
    • В поле Database Name укажите имя вашей базы данных, которое вы задали ранее, — giteadb.
  2. Настройка общих параметров
    • В разделе General Settings вы можете оставить значения по умолчанию. Эти параметры включают настройки пути и базовых URL, которые можно будет изменить позже, если потребуется.
  3. Создание аккаунта администратора
    • В разделе Administrator Account Settings необходимо создать аккаунт администратора, указав желаемое имя пользователя, пароль и контактный email. Этот аккаунт будет использоваться для входа в систему и управления Gitea.
  4. Завершение установки
    • После заполнения всех необходимых данных нажмите на кнопку Install Gitea. Процесс установки начнется, и после его завершения вы сможете войти в систему с помощью созданного аккаунта администратора.

Настройка Nginx и SSL для домена

apt install nginx
nano /etc/nginx/sites-available/twgitea.test.ru (не забываем менять домен, на актуальный для вас)

И вставляем следующую конфигурацию (меняя домен на свой)

server {
    listen 80;
    server_name twgitea.test.ru;

    location / {
        client_max_body_size 512M;
        proxy_pass http://127.0.0.1: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;
        add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
    }
}

Активируем новую конфигурацию, создав символическую ссылку на неё в директории sites-enabled (меняя домен на свой):

ln -s /etc/nginx/sites-available/twgitea.test.ru /etc/nginx/sites-enabled/

Теперь установим SSL сертификат при помощи Certbot

apt install certbot python3-certbot-nginx
certbot --non-interactive -m mail@example.com --agree-tos --no-eff-email --nginx -d twgitea.test.ru   (меняем почту и домен на свои)
systemctl restart nginx

Теперь сервис будет доступен по безопасному https соединению

Дополнительно вы можете отредактировать файл конфигурации /etc/gitea/app.ini, чтобы настроить домен и уровень доступа. В сегменте [server] файла конфигурации измените значения SSH_DOMAIN, DOMAIN и ROOT_URL, указав вместо IP-адреса ваш домен. Это позволит корректно отображать ссылки в вашей системе управления версиями.

В разделе [service] файла /etc/gitea/app.ini вы можете установить параметр DISABLE_REGISTRATION в значение true, чтобы запретить регистрацию новых пользователей. Это увеличит безопасность вашей системы, ограничив доступ только к выбранным пользователям.

Для применения изменений необходимо перезапустить сервис командой: systemctl restart gitea

Быстренько настроим простейший FireWall

ufw reset 
ufw default deny incoming
ufw default allow outgoing 

Разрешение доступа к стандартным веб-портам и SSH:

ufw allow 80
ufw allow 443
ufw allow 22

Запретим доступ к нашему git-серверу по ip:3000 для внешних подключений:

ufw allow from 127.0.0.1 to any port 3000
ufw deny 3000

Активируем и проверим статус

ufw enable
ufw status 

Рассмотрим процес создания резервной копии

Регулярное создание резервных копий — ключевой аспект поддержания данных в безопасности. Для Gitea процесс создания резервной копии может быть выполнен следующим образом:
Переключитесь на пользователя, под которым работает Gitea:
su git Перейдите в директорию, где будет создан бэкап (например, /home/git):
cd /home/git Выполните команду для создания дампа данных:
/usr/local/bin/gitea dump -c /etc/gitea/app.ini Эта команда создаст архив с резервной копией, который включает базу данных, конфигурационные файлы, репозитории и другие важные данные. Созданный архив будет содержать важные компоненты, такие как:

  • app.ini — файл конфигурации (если он был вне стандартной папки custom/),
  • custom/ — все настройки кастомных решений, если такие используются,
  • data/ — данные приложения, включая вложения и аватары,
  • repos/ — полная копия директории репозиториев,
  • gitea-db.sql — дамп базы данных,
  • log/ — различные логи, хотя они не обязательны для восстановления.

Восстановление из резервной копии

Для восстановления данных из резервной копии выполните следующие шаги: Распакуйте архив резервной копии: unzip gitea-dump-id.zip Перейдите в директорию с распакованными данными: cd gitea-dump-id Восстановите основные компоненты:
Конфигурационные файлы: mv app.ini /etc/gitea/conf/app.ini Данные приложения: mv data/* /var/lib/gitea/data/ Логи: mv log/* /var/lib/gitea/log/ Репозитории: mv repos/* /var/lib/gitea/gitea-repositories/ Обновите права доступа: chown -R gitea:gitea /etc/gitea/conf/app.ini /var/lib/gitea Импортируйте дамп базы данных в MySQL: mysql --default-character-set=utf8mb4 -u$USER -p$PASS $DATABASE < gitea-db.sql Замените $USER, $PASS, и $DATABASE на имя пользователя, пароль и имя базы данных соответственно. Эти шаги позволят вам восстановить всю необходимую информацию и данные на вашем сервере после сбоя или переноса на новый сервер.