Personal/linux/Gitea.md

226 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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