# В данном гайде я рассмотрю установку сервиса 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 на имя пользователя, пароль и имя базы данных соответственно. Эти шаги позволят вам восстановить всю необходимую информацию и данные на вашем сервере после сбоя или переноса на новый сервер.