diff --git a/linux/Gitea.md b/linux/Gitea.md new file mode 100644 index 0000000..7259bbe --- /dev/null +++ b/linux/Gitea.md @@ -0,0 +1,226 @@ +# В данном гайде я рассмотрю установку сервиса 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 на имя пользователя, пароль и имя базы данных соответственно. +Эти шаги позволят вам восстановить всю необходимую информацию и данные на вашем сервере после сбоя или переноса на новый сервер. \ No newline at end of file