Какие шаги нужно выполнить при первом запуске приложения fastapi / starlatte с использованием докера или без него на локальной машине?

Как реализовать сущность, которая будет выполняться только при первом запуске приложения и заполнять нужный столбец в PostgreSQL? Я пробовал использовать event, но он выполняется каждый раз при работе сервера. У меня нет идей, что можно еще попробовать. Какие у вас есть предложения?
  • 18 октября 2023 г. 13:31
Ответы на вопрос 2
При первом запуске приложения FastAPI/Starlette на локальной машине без Docker:

1. Установите Python и pip, если они еще не установлены.
2. Создайте виртуальное окружение для вашего проекта (опционально, но рекомендуется).
3. Установите необходимые зависимости, включая FastAPI/Starlette и psycopg2 (для работы с PostgreSQL). Выполните команду `pip install fastapi starlette psycopg2`.
4. Создайте файл main.py, где будет содержаться ваше приложение FastAPI/Starlette.

При первом запуске приложения FastAPI/Starlette с Docker:

1. Установите Docker, если он еще не установлен.
2. Создайте файл Dockerfile, в котором будет описано создание образа вашего приложения.
3. Соберите образ Docker с помощью команды `docker build -t <image_name>:<tag> .`.
4. Запустите контейнер с вашим приложением с помощью команды `docker run -p 8000:8000 <image_name>:<tag>`.

Чтобы реализовать сущность, которая будет выполняться только при первом запуске приложения и заполнять нужный столбец в PostgreSQL, можно использовать миграции базы данных.
Вот пример шагов:

1. Установите библиотеку Alembic для работы с миграциями базы данных в ваш проект. Выполните команду `pip install alembic`.
2. Создайте директорию `migrations` в корне вашего проекта.
3. Инициализируйте Alembic, выполнив команду `alembic init alembic`.
4. Отредактируйте файл alembic.ini, установив значения `sqlalchemy.url` и `script_location`.
5. Создайте первую миграцию с помощью команды `alembic revision --autogenerate -m "initial migration"`. Это создаст файл с SQL-скриптом в директории `migrations/versions`.
6. Отредактируйте созданный файл миграции, добавив соответствующий SQL-код для заполнения нужного столбца.
7. Выполните миграцию базы данных с помощью команды `alembic upgrade head`. Это применит миграцию и заполнит таблицу в PostgreSQL.

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

- Создайте скрипт и поместите его в папку `/docker-entrypoint-initdb.d/` внутри контейнера.
- Используйте файл `docker-compose.yaml` для настройки сервиса `postgres`:
```yaml
services:
  postgres:
    build: ./postgres
    volumes:
      - ./init-db.sql:/docker-entrypoint-initdb.d/setup.sql
    ports:
      - "5432:5432"
```
- Файл `init-db.sql` является скриптом для инициализации базы данных.
Похожие вопросы