Установка и запуск GitFlic


Скачайте последнюю версию GitFlic self-hosted.

Для запуска приложения нужны следующие компоненты:

  • Java 11 (протестировано на openjdk 11)
  • Redis (протестировано на redis-server 6.2)
  • PostgreSQL (протестировано на версиях 11 и 12)
  • RabbitMQ 3.12 (для enterprise-версии)

Для корректной работы приложения, требуется расширение pgcrypto для postgresql, для конкретной базы данных в СУБД выполняем запрос: CREATE EXTENSION pgcrypto;

Также необходимы:

  • Конфигурация SMTP-сервера, для отправки писем из сервиса.
  • Генерация ключа key.pem для работы ssh-транспорта git.

Схема работы приложения GitFlic:

Схема

Минимальные системные требования:

Параметр Рекомендации
CPU 2 ядра Ice Lake
RAM 4 Гб
HDD Зависит от объёма ваших репозиториев. От 25 Гб

Установка Java 11

  • Ubuntu и debian-based дистрибутивы:
sudo apt install openjdk-11-jdk -y
sudo dnf install java-11-openjdk -y
  • Альт Сервер все команды в alt-server выполняются под root su -

  • Для запуска gitflic на Windows рекомендуем воспользоваться запуском через docker compose. Файлы для запуска в докере находятся в архиве с дистрибутивом.

sudo apt update && apt install java-11-openjdk
  • Рекомендации при проблемах с установкой java 11 по умолчанию:

Проверьте версию java командой:

java --version

Если версия java не 11 - можно удалить ненужную версию. Проверьте версии java в наличии:

rpm -qa --qf '%{name}\n' | grep java

Удалите ненужную версию командой:

apt-get remove пакет

Установка postgresql

sudo apt install postgresql-12 postgresql-contrib
  • Добавление репозиториев, установка для Ubuntu:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'  
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -  
sudo apt-get update  
sudo apt-get install postgresql-12 postgresql-contrib
sudo yum install postgresql-server postgresql-contrib
apt-get install postgresql12-server postgresql12-contrib

Создание системных баз данных postgresql

Инициализация сервера:

  • Ubuntu и debian-based дистрибутивы:
sudo /etc/init.d/postgresql initdb
  • РЕД ОС
sudo postgresql-setup initdb
  • Альт Сервер все команды в alt-server выполняются под root su -. Запуск сервера происходит как в других версиях, но без использования sudo
/etc/init.d/postgresql initdb
  • Запуск сервера и проверка статуса службы:
sudo systemctl enable postgresql
sudo systemctl status postgresql

Конфигурация postgresql

  • Ubuntu и debian-based, РЕД ОС
  • Зайдите под пользователем PostgreSQL:
sudo -i -u postgres
# для выхода
\q
  • Создайте пользователя и базу данных:
createuser gitflic
createdb gitflic
  • Войдите в базу данных:
psql --dbname "gitflic"
  • Дайте пароль пользователю:
alter user gitflic with password 'gitflic';
  • Загрузите расширение pgcrypto:
CREATE EXTENSION pgcrypto;
createuser -U postgres --no-superuser --no-createdb --no-createrole --encrypted --pwprompt gitflic

createdb -U postgres -O gitflic gitflic
  • Загрузка расширения pgcrypto:
psql -U postgres -d gitflic
# Выход по Ctrl+D или командой quit

alter user gitflic with password 'gitflic';

CREATE EXTENSION pgcrypto;

Возможные ошибки при настройке postresql можно посмотреть здесь.


Установка Redis

sudo apt-get install redis
  • РЕД ОС и RedHat дистрибутивы:
sudo dnf install redis -y
  • Альт Сервер
apt-get install redis

Запуск Redis:

# Разрешение и добавление сервиса в автозагрузку:
systemctl enable redis
# Для старта сервиса:
systemctl start redis
  • Проверка работы Redis:
redis-server --version

Состояние Redis:

sudo systemctl status redis

Убедиться, что Redis запущен (должно вернуться PONG)

redis-cli ping

Настройка SSH порта

Для того, чтобы было возможным использовать remote-url вида git@gitflic.ru:gitflic/gitflic.git ssh сервер должен быть запущен на стандартном для ssh соединения порту 22.

Во избежание конфликта с ssh gitflic, который слушает 22 порт, рекомендуем изменить стандартный порт для подключения по ssh. Обратите внимание: после внесения изменений, для подключения к серверу по ssh необходимо указывать новый порт, например ssh -p 2222 amazing@84.47.177.90:

# Меняем порт например на 2222
# Раскомментируйте строку Port 22 и изменим значение на 2222.
sudo nano /etc/ssh/sshd_config
# Перезагрузите демон SSH
sudo systemctl restart ssh
  • Альт сервер
nano /etc/openssh/sshd_config
# Раскоментировать строку Port и задать порт отличный от 22, например 2222
systemctl restart sshd
# Меняем порт например на 2222
sudo nano /etc/ssh/sshd_config 
# Применяем изменения в системе безопасности. Если их не применить - система заблокирует изменения порта.
sudo semanage port -a -t ssh_port_t -p tcp 2222
sudo systemctl restart sshd

Возможна проблема с semanage Для устранения в РЕДОС 7.3:

dnf install policycoreutils-python-utils

Нестандартный ssh порт на собственном ssh сервере GitFlic

Если вы настроите GitFlic с нестандартным ключом, то вам потребуется модифицировать ваш git-запрос, указав в нём нужный порт. Например, вы запустили GitFlic с параметром ssh.server.port=1234 (указывается в application.properties). В таком случае, запрос на клонирование репозитория будет выглядеть так:

git clone ssh://git@gitflic.ru:1234/adminuser/test.git

В данном запросе используются следующие параметры:

Параметр Описание
gitflic.ru Доменное имя вашего сервера
1234 Порт указанный в параметре ssh.server.port=1234 в application.properties
adminuser Учётная запись пользователя
test.git Название проекта

Генерация key.pem для работы ssh-транспорта git

Для генерации ssh ключа откройте терминал и выполните команду:

ssh-keygen -t ed25519

В консоль будет выведен следующий диалог:

Enter file in which to save the key (/home/user/.ssh/id_ed25519):

Нажмите на клавишу Enter.

Система предложит ввести кодовую фразу для дополнительной защиты SSH-подключения (можно пропустить): Enter passphrase (empty for no passphrase):

Ключ будет создан и помещен в директорию /home/user/.ssh/. Перейдите в директорию /home/user/.ssh и скопируйте файл с приватным ключом id_ed25519 в директорию cert/, после переименуйте его в key.pem. Папку cert/ можно создать где Вам удобно, путь к сертификату указывается при редактировании файла конфигурации application.properties. Можно разместить ключ в директории по умолчанию в application.properties.

# Создание папки для хранения ключа
mkdir -p /opt/gitflic/var/cert;
# Копирование созданного ключа в папку с переименованием
cp ~/.ssh/id_ed25519 /opt/gitflic/var/cert/key.pem;
# Переход в папку - для создания служебных каталогов
cd /opt/gitflic/var;
# Создание служебных каталогов (объявлены в application.properties)
mkdir repo img releases cicd registry

Также вы можете воспользоваться командами для создания ключа без дополнительных параметров.

  • Создание приватного ключа и копирование его в папку /tmp/gitflic/cert
ssh-keygen -t ed25519 -f id_ed25519 -N "" <br>
mkdir -p /opt/gitflic/var/cert <br>
cp ~/.ssh/id_ed25519 /opt/gitflic/var/cert/key.pem <br>
cd /opt/gitflic/var/ <br>
mkdir repo img releases cicd registry 

Установка RabbitMQ

☘️ Данное ПО устанавливается для платной версии self-hosted enterprise. RabbitMQ - это распределенный и горизонтально масштабируемый брокер сообщений, является одним из самых популярных средств для обмена данными между сервисами. Благодаря использованию RabbitMQ увеличивается отказоустойчивость и количество обрабатываемых сообщений в GitFlic.

  • Ubuntu и debian-based дистрибутивы:
sudo apt update -y
sudo apt install rabbitmq-server
  • Проверить успешную установку компонента erlang:
erl

для выхода из консоли нажмите Ctrl+C

После установки RabbitMQ сам запускается и добавляется в автозагрузку. Ниже приведены команды которые позволят это сделать вручную

sudo systemctl status rabbitmq-server.service 
sudo systemctl enable rabbitmq-server.service 

Запуск через JAR-файл

Перед запуском приложения , настройте конфигурацию в файле application.properties . C описанием параметров можно ознакомиться в разделе конфигурация application.properties Для запуска приложения в консоли необходимо выполнить команду из директории, где находится исполняемый файл gitflic.jar:

sudo java -jar gitflic.jar --spring.config.additional-location=file:default-config/

Обратите внимание, в примере указана директория с конфигурационным файлом относительно директории, в которой расположен jar пакет. Вы можете переместить конфиг-файл в любую удобную вам директорию, указав к ней путь в параметре --spring.config.additional-location. Обратите внимание, что путь к директории должен оканчиваться символом /

Стандартные пользователь и пароль:

  • Почта: adminuser@admin.local
  • Пароль: qwerty123

При возникновении проблем с запуском приложения, рекомендуем ознакомиться со страницей, где собраны ошибки, с которыми сталкивались пользователи.


Работа с большими репозиториями.

По умолчанию, для JVM автоматически устанавливается минимальное значение выделяемой оперативной памяти (-Xms) в размере 1/64 физической памяти, а максимальное значение (-Xmx) - 1/4 физической памяти. Рекомендуем увеличить максимальное значение при высокой нагрузке на сервер.

java -jar -Xmx3G  gitflic.jar --spring.config.additional-location=file:default-config/

Балансировка нагрузки (Кластеризация)

Есть возможность настроить приложение GitFlic с несколькими инстансами. Пример схемы работы приложения GitFlic с балансировкой:

Схема с балансировкой


Реестр пакетов

В нашем приложении, из-за уязвимости, связанной с использованием косой черты в кодировке URL (%2F) (источник) включен файрвол, блокирующий потенциально опасные запросы. В связи с этим, не будут работать реестры пакетов npm, пока не настроен nginx в качестве обратного прокси-сервера.

✅ Рекомендуемый вариант? Для работы с реестром пакетов npm необходимо настроить nginx в качестве обратного прокси-сервера приложения GitFlic.

❌ Не рекомендуемый вариант: Альтернатива - отключение файрвола. Не рекомендуем использовать данный вариант.

  • Внесите дополнительную настройку в application.properties
togglz.features.GITFLIC_FIREWALL_SLASH.enabled=true 
  • Запустить приложение с дополнительным ключом
-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true