Установка
Для установки пакета infra и создания кластер Swarm необходим выделенный сервер с Linux-окружением.
Команды ниже приведены для примера установки на сервере с Ubuntu.
Команды выполняются в терминале через ssh — о том, что это такое и как пользоваться можно почитать в статьях:
Системные требования
Проект успешно работает для следующей конфигурации виртуального сервера:
| Ресурс | Значение |
|---|---|
| Операционная система | Ubuntu 20.04 LTS |
| Платформа | Intel Ice Lake |
| Гарантированная доля vCPU | 20% |
| vCPU | 2 |
| RAM | 2 ГБ |
| Объём дискового пространства | 15 ГБ |
Что нужно сделать перед началом работы?
После подключения по SSH может быть важным прописать свой публичный SSH-ключ, например:
echo 'ssh-rsa ... username@mail.example' >> ~/.ssh/authorized_keys
Чтобы терминал не отключался по простою, можно настроить конфигурацию sshd_config:
sudo tee /etc/ssh/sshd_config.d/my.conf << EOF
TCPKeepAlive yes
ClientAliveInterval 100
EOF
Как подготовить сервер к установке?
Обновить apt:
sudo apt-get update
Установить базовых пакеты:
sudo apt-get install ca-certificates curl gnupg lsb-release -y
Установить актуальную версию Docker:
sudo mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get install \
docker-ce docker-ce-cli containerd.io docker-compose-plugin \
-y
Установить утилиты:
sudo apt-get install jq mc bison -y
Настроить конфигурации git по умолчанию — игнорировать изменения прав в файлах:
sudo git config --global core.fileMode false
Настроить конфигурации git по умолчанию — сохранять ранее введённые пароли для доступа к репозиториям:
sudo git config --global credential.helper store
Установить актуальную версию Go:
export GVM_SOURCE=https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer
sudo bash < <(curl -s -S -L ${GVM_SOURCE})
source /root/.gvm/scripts/gvm
export GOLANG_ACTUAL_VERSION=go1.21.4
gvm install ${GOLANG_ACTUAL_VERSION}
gvm use ${GOLANG_ACTUAL_VERSION}
Добавить текущего пользователя в группу docker:
sudo usermod -aG docker ${USER}
Создать нужные каталоги и установить группу владения для используемых каталогов и файлов:
sudo mkdir /var/www && \
sudo touch /var/log/traefik_access.log && \
sudo chown ${USER}:docker \
/var /var/www /var/log /var/log/traefik_access.log
Как установить?
Клонировать репозитория:
cd /var/www && git clone https://bresh.gitlab.yandexcloud.net/cargo/infra.git
Помимо основного репозитория infra, можно в каталог /var/www установить сервисы, зависящие от infra.
Например, сервис auth:
cd /var/www && git clone https://bresh.gitlab.yandexcloud.net/cargo/auth.git
Как подготовиться к запуску?
Настроить права и группы владельцев для используемых файлов:
sudo chown ${USER}:docker -R /var/www \
&& sudo chmod -R 0777 /var/www \
&& sudo chmod 0600 /var/www/infra/traefik/acme.json
Установить еженедельную ротацию логов в /var/log/traefik_access.log:
cd /var/www/infra && sudo make logrotate
Если установка происходит для локального окружения, то сгенерировать SSL-сертификаты для localhost:
cd /var/www/infra && make traefik-localhost
Создать файл с переменными окружения:
cat <<- EOF > /var/www/infra/.env
DOMAIN=tetratrans.ru
SUBDOMAIN=tetramobile
# see for other environment variables
EOF
Пример файла с переменными окружения можно найти в файле .env.example.
Как запустить проект?
Выполнить команду:
cd /var/www/infra && make run
Что произойдёт после запуска?
В результате выполнения make run:
- Будет создан файл авторизации для
registryв./registry/auth/auth - Будет создан Docker Swarm кластер с лейблом
cluseter=swarm - Секреты созданного Docker Swarm будут записаны в файл
swarm.secret - Будет создан файл
./traefik/acme.jsonдля генерации сертификатов Let's Encrypt - Будут запущены сервисы:
traefikportainerregistrygraphitelokipromtailgrafana
Дополнительно
Оставшиеся сервисы можно запустить с помощью:
./deploy.sh <service>
Например, для запуска postgres:
./deploy.sh postgres
Названия сервисов нарочно совпадают с названиями каталогов, чтобы работало автодополнение.
Пример — если набрать ./deploy.sh po и нажать TAB, то автодополнение предложит:
# ./deploy.sh gra
grafana/ graphite/
Таким образом, можно легко выбрать название нужного сервиса, набрав, например ./deploy.sh graf + TAB.
Для остановки работы сервиса нужно выполнить:
./undeploy.sh <service>
Соответственно, перезапустить какой-либо сервис можно с помщью команд:
./undeploy.sh <service> && ./deploy.sh <service>
Очистка ресурсов
Со временем проект начинает занимать больше ресурсов.
Посмотреть какие каталоги сколько занимают места можно с помощью команды:
cd /var/www/infra && make disk-usage