Менторы:
-
Тарасов Артём - Backend
-
Фикслер Леонид - Backend
-
Алёхин Владислав - СУБД
- Все комментарии на русском языке
- Все логи на английском языке
- У аббревиатур все буквы в одном регистре:
sessionId
sessionID
- В импортах между нашими пакетами и стандартными должна быть пустая строка
Сначала надо убедиться, что в трёх файлах используется не CRLF, а LF:
/database/postgres/start-postgres.sh
/database/postgres/certgen.sh
/database/redis/start-redis.sh
Далее надо сгенерировать сертификаты для Postgres вызовом скрипта /database/postgres/certgen.sh
. Вызывать его надо в той директории, где находится скрипт. Возможно, надо поставить OpenSSL. Этот скрипт сгенерирует самоподписанные сертификаты.
Надо оформить файл .env
. Пример:
CORS_ORIGIN = https://example.com
SERVER_NAME = example.com
# Важно - замыкающий слеш!
USER_UPLOADS_URL = https://example.com/uploads/
# Эту переменную надо задавать, если Вам надо создать миграции с помощью Atlas
TEST_DATABASE_URL = postgresql://3kybika:12345678@localhost:5432/migrate_gen_db?sslmode=disable
Далее надо подтянуть сертификаты для самого бэкенда. На проде надо сделать символьные ссылки на сертификаты в директории certs.
На локальной машине можно сгенерировать сертификаты для локалхоста через make gen-test-certs
.
В директории certs
должно быть два файла: cert.crt
и cert.pem
Потом можно запускать сами сервисы через Docker. Команда:
make build_all -j && docker compose up --build -d
Эта команда на хост-машине соберёт все бинари и будет исполнять их на докерах.
Это ещё не все шаги: мы не накатили миграции. Для миграций надо зайти в контейнер auth_service
и там вызвать команду make migrate-up
.
Имейте в виду, что auth_service, если не смог подключиться к PostgreSQL, ждёт 100 секунд, чтобы мы смогли накатить миграции и создать базу данных.
Также имейте в виду, что контейнер с PostgreSQL при первом запуске запускает наш самописный скрипт инициализации, поэтому не спешите выключать контейнер, дождитесь, пока база создастся.
Caution
Часто бывает, что в volume, где хранится сокет PostgreSQL, слетают права. Тогда postgres завершает свою работу, и бэк ложится. Если такой случай произошёл, надо удалить все контейнеры, удалить volume pumpkin-postgres-socket
и заново поднять docker compose
Надо сделать всё, что нужно для запуска сервера, но вместо make run
запустить make test
. Чтобы получить информацию о покрытии, надо запустить make coverage
Актуальная модель данных находится в директории database/schema.sql
Для создания миграций используется программа Atlas. Для применения используется go-migrate
После изменения модели данных надо сгенерировать миграцию. Чтобы её сгенерировать, понадобится dev-база (и развёрнутый Postgres), потому что без него Atlas не создаст миграции.
URL dev-базы надо указать в файлe .env
по имени TEST_DATABASE_URL
. Эта база должна быть пустая; после работы atlas очистит всё, что он насоздавал. У пользователя, который указан в TEST_DATABASE_URL
должны быть все права на базу, а также права на создание ролей. Его имя должно быть "postgres"
Миграцию надо генерировать командой make make-migrations
. Имя миграции не должно содержать пробелы, должно быть типа add_tags_table
Применять миграции надо командой make migrate-up
. Команда интерактивно попросит логин и пароль от root-пользователя. На проде надо делать миграции пользователем postgres
. Применение миграций доступно только из контейнера auth.