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