Перейти к содержанию

Установка

Для установки пакета 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
  • Будут запущены сервисы:
    • traefik
    • portainer
    • registry
    • graphite
    • loki
    • promtail
    • grafana

Дополнительно

Оставшиеся сервисы можно запустить с помощью:

./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