В разных командах использовали различные совместные репозитарии для разработки, такие как Gitlab, Bitbucket.
В конце июля 2025 года на своих каналах я презентовал начало разработки отечественных микроконтроллеров по программе импортозамещения и так как в сформированной команде, преимущественно использовался gitflic, было принято решение развернуть локальную версию, так же называемую GitFlic Self-Hosted.
GitFlic — альтернатива GitLab, которая была основана в 2020 году небольшой командой людей, а в 2023 вошла в состав ГК «Астра». На сегодняшний день сервис доступен как в веб-версии, так и в качестве self-hosted решения. Имеет базовую функциональность системы контроля версий Git, возможность реализовать систему CI/CD, а также может использоваться в качестве хранилища для артефактов сборок maven, pypi и т. д.
Здесь для памяти выкладываю, как происходила установка.
Для начала устанавливаем зависимые приложения согласно официальным инструкциям, такие как:
На нашем сервере установлен Ubuntu 22.04.2 LTS и дальнейшее изложение будет для него.
Перед установкой проверяем, а не стоят ли у нас эти приложения.
systemctl status postgresql
● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2025-06-09 03:38:42 BST; 2 months 28 days ago
Сразу проверим его версию - я смотрю какой кластер запущен:
systemctl list-units |grep postgresql
postgresql@14-main.service loaded active running PostgreSQL Cluster 14-main system-postgresql.slice loaded active active Slice /system/postgresql
Значит пропускаем установку Postgresql, запоминая какая у нас версия (14-я), возможно придется вернутся и обновить.
Смотрим далее:
systemctl status redis
Unit redis.service could not be found.
Устанавливаем:
apt update
apt install redis
The following NEW packages will be installed: libjemalloc2 liblua5.1-0 liblzf1 lua-bitop lua-cjson redis redis-server redis-tools
Идем дальше, устанавливаем KeyDb:
echo "deb https://download.keydb.dev/open-source-dist $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/keydb.list
wget -O /etc/apt/trusted.gpg.d/keydb.gpg https://download.keydb.dev/open-source-dist/keyring.gpg
ещё раз обновим список пакетов, так добавили репозитарий KeyDb, после чего устанавливаем приложение
apt update
apt install keydb
The following NEW packages will be installed: keydb keydb-server keydb-tools
Переходим к установке OpenJDK 11
apt install openjdk-11-jdk
The following NEW packages will be installed: alsa-topology-conf alsa-ucm-conf at-spi2-core ca-certificates-java dbus-user-session dconf-gsettings-backend dconf-service fonts-dejavu-core fonts-dejavu-extra gsettings-desktop-schemas java-common libasound2 libasound2-data libatk-bridge2.0-0 libatk-wrapper-java libatk-wrapper-java-jni libatk1.0-0 libatk1.0-data libatspi2.0-0 libdconf1 libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libfontenc1 libgl1 libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgraphite2-3 libharfbuzz0b libice-dev libice6 libllvm15 libpciaccess0 libpcsclite1 libpthread-stubs0-dev libsm-dev libsm6 libx11-dev libx11-xcb1 libxau-dev libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcb1-dev libxcomposite1 libxdmcp-dev libxfixes3 libxft2 libxi6 libxinerama1 libxkbfile1 libxmu6 libxrandr2 libxrender1 libxshmfence1 libxt-dev libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 openjdk-11-jdk openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless session-migration x11-common x11-utils x11proto-dev xorg-sgml-doctools xtrans-dev
И завершающее зависимое приложение RabbitMQ
Здесь так же нужно прописать репозитарий и скачать ключ доступа:
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Modern Erlang/OTP releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-erlang/ubuntu/noble noble main
## Provides modern RabbitMQ releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb1.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main
deb [arch=amd64 signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://deb2.rabbitmq.com/rabbitmq-server/ubuntu/noble noble main
EOF
ещё раз обновим список пакетов
apt update
Устанавливаем пакеты Erlang
apt install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
Вот здесь пошли конфликты с версиями
The following packages have unmet dependencies:
erlang-base : Depends: libc6 (>= 2.38) but 2.35-0ubuntu3.7 is to be installed
Recommends: libsctp1 (>= 1.0.19+dfsg) but it is not going to be installed
erlang-crypto : Depends: libssl3t64 (>= 3.0.0) but it is not installable
erlang-os-mon : Depends: libc6 (>= 2.38) but 2.35-0ubuntu3.7 is to be installed
erlang-runtime-tools : Depends: libc6 (>= 2.38) but 2.35-0ubuntu3.7 is to be installed
Попробуем понизить версию Erlang
apt-cache policy erlang-base
Кандидат у нас 1:27.3.4.2-1
попробуем понижать по одной:
apt install -y erlang-base=1:26.2.5.5-1
такие же зависимости, ещё понизим, как раз из репозитария ubuntu,возможно и не имело смысла, добавлять свежий:
apt install -y erlang-base=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-base libsctp1
Доставим остальное:
автоматически не подтянулись, поэтому у всех зависимых проверяем версии и выбираем репозитарий ubuntu
apt-cache policy erlang-crypto
apt install -y erlang-crypto=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed:
erlang-crypto
apt-cache policy erlang-os-mon
apt install -y erlang-os-mon=1:24.2.1+dfsg-1ubuntu0.5
The following packages have unmet dependencies: erlang-os-mon : Depends: erlang-mnesia (= 1:24.2.1+dfsg-1ubuntu0.5) but 1:27.3.4.2-1 is to be installed Depends: erlang-snmp (= 1:24.2.1+dfsg-1ubuntu0.5) but it is not going to be installed
Сразу ставим без проверки указанные пакеты
apt install -y erlang-mnesia=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-mnesia
apt install -y erlang-snmp=1:24.2.1+dfsg-1ubuntu0.5
The following packages have unmet dependencies: erlang-snmp : Depends: erlang-mnesia (= 1:24.2.1+dfsg-1ubuntu0.5) but 1:27.3.4.2-1 is to be installed Depends: erlang-runtime-tools (= 1:24.2.1+dfsg-1ubuntu0.5) but it is not going to be installed
apt install -y erlang-runtime-tools=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-runtime-tools
и ещё раз
apt install -y erlang-snmp=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-snmp
и теперь общий список, то что осталось:
apt install -y erlang-asn1 erlang-eldap erlang-ftp erlang-inets \
erlang-parsetools erlang-public-key \
erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
И не дает, надеюсь вы сначала прочли полностью руководство, а потом приступили к установке, так как лучше не добавлять репозитарий RabbitMQ. Вручную ставлю каждый пакет, проверяя какая версия в репозитарии ubuntu
apt-cache policy erlang-asn1
apt install -y erlang-asn1=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-asn1
apt-cache policy erlang-public-key
apt install -y erlang-public-key=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-public-key
apt-cache policy erlang-ssl
apt install -y erlang-ssl=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-ssl
apt-cache policy erlang-eldap
apt install -y erlang-eldap=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-eldap
apt-cache policy erlang-ftp
apt install -y erlang-ftp=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-ftp
apt-cache policy erlang-tftp
apt install -y erlang-tftp=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-tftp
apt-cache policy erlang-inets
apt install -y erlang-inets=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-inets
apt-cache policy erlang-parsetools
apt install -y erlang-parsetools=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-parsetools
apt-cache policy erlang-syntax-tools
apt install -y erlang-syntax-tools=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-syntax-tools
apt-cache policy erlang-tools
apt install -y erlang-tools=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-tools
apt-cache policy erlang-xmerl
apt install -y erlang-xmerl=1:24.2.1+dfsg-1ubuntu0.5
The following NEW packages will be installed: erlang-xmerl
и уберем новый репозитарий
rm /etc/apt/sources.list.d/rabbitmq.list
apt update
Установим rabbitmq-server и его зависимости
apt-cache policy rabbitmq-server
apt install rabbitmq-server=3.9.27-0ubuntu0.2 -y
pgcrypto
Для корректной работы приложения , необходимо установить расширение pgcrypto в БД с которой планируется использовать приложение.
pgcrypto — доверенное расширение для PostgreSQL, добавляющее набор криптографических функций непосредственно в SQL. Модуль позволяет выполнять хеширование и шифрование данных внутри самой БД, что делает его мощным инструментом.
Внедрение шифрования на уровне БД продиктовано современными требованиями безопасности и необходимостью противостоять сложным угрозам. Основные причины для использования pgcrypto можно свести к нескольким ключевым стратегическим преимуществам.
Добавляется оно после подключения к БД командой :
CREATE EXTENSION IF NOT EXISTS pgcrypto;
После установки postgresql выполним следующие команды в терминале:
su postgres
Создание пользователя gitflic с паролем gitflic
psql -c "CREATE USER gitflic WITH PASSWORD 'gitflic'"
Создание базы данных с именем gitflic
psql -c "CREATE DATABASE gitflic WITH OWNER gitflic"
Установка расширения pgcrypto в базу данных gitflic
psql -d gitflic -c "CREATE EXTENSION pgcrypto"
Установка расширения pg_trgm в базу данных gitflic
psql -d gitflic -c "CREATE EXTENSION pg_trgm"
Для пробного запуска приложения, обязательная конфигурация SMTP сервера не требуется. Новых пользователей можно создать через панель администратора.
*При необходимости, SMTP сервер можно будет сконфигурировать и подключить позднее
echo "deb [signed-by=/etc/apt/keyrings/gitflic.asc] https://registry.gitflic.ru/company/gitflic/package/-/deb main stable" | sudo tee -a /etc/apt/sources.list.d/gitflic.list
curl https://registry.gitflic.ru/company/gitflic/package/-/deb/dists/main/public-key.asc -o /etc/apt/keyrings/gitflic.asc
apt update && apt install gitflic-server-onpremise -yq
Создадим файлы сертификатов и ключ для SSH сервера
ssh-keygen -t ed25519 -N "" -q -f /opt/gitflic/cert/key.pem
openssl genpkey -algorithm RSA -out /opt/gitflic/cert/private_key.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in /opt/gitflic/cert/private_key.pem -out /opt/gitflic/cert/public_key.pem
chown -R gitflic:gitflic /opt/gitflic/cert
Откроем на редактирование юнит systemd
systemctl edit --full gitflic-server.service
Вставим необходимые параметры для запуска
Description=Startup unit for run Gitflic service Documentation=https://docs.gitflic.ru/ After=network.target [Service] Type=simple User=gitflic Group=gitflic WorkingDirectory=/opt/gitflic/ ExecStart=/usr/bin/java -jar /opt/gitflic/bin/gitflic.jar --spring.config.additional-location=file:/etc/gitflic/ ExecStop=/bin/kill -s 15 $MAINPID Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target
Итоговый рабочая конфигурация у меня выглядит так:
[Unit] Description=Startup unit for run Gitflic service Documentation=https://docs.gitflic.space/ Requires=network.target After=network.target [Service] Type=simple User=gitflic Group=gitflic WorkingDirectory=/opt/gitflic/bin ExecStart=/usr/bin/java -jar /opt/gitflic/bin/gitflic.jar --spring.config.additional-location=file:/etc/gitflic/application.properties Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target
Перезагружаем юниты в системе
systemctl daemon-reload
Включаем автозапуск и запускаем агента
systemctl enable gitflic-server.service
systemctl start gitflic-server.service
перейдя по адресу. который мы сделали (конфигурация тут /etc/gitflic/application.properties) для нашего gitflic получаем:

Стандартный пользователь и пароль
- Почта - adminuser@admin.local
- Пароль - qwerty123
Конечно для красоты сделаем отдельный субдомен для захода, но это уже отдельная история!