Как развернуть FastAPI в контейнере Docker и сделать его доступным в интернете?

Как опубликовать контейнеры с PostgreSQL и FastAPI на сервере под своим доменным именем для доступа через Интернет?
  • 1 июля 2024 г. 5:12
Ответы на вопрос 2
Для разворачивания FastAPI в контейнере Docker и сделать его доступным в интернете, следуйте этим шагам:

1. Напишите Dockerfile для сборки образа Docker с вашим FastAPI приложением. Пример Dockerfile:

```Dockerfile
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9

COPY ./app /app
```

2. Соберите образ Docker:

```
docker build -t my-fastapi-app .
```

3. Запустите контейнер с вашим FastAPI приложением:

```
docker run -d -p 80:80 my-fastapi-app
```

Это запустит ваше FastAPI приложение на порту 80 в контейнере Docker.

Чтобы опубликовать контейнеры с PostgreSQL и FastAPI на сервере под своим доменным именем для доступа через Интернет, вам нужно изменить конфигурацию вашего сервера и проксировать запросы с вашего доменного имени на соответствующие контейнеры.

Это можно сделать с помощью инструмента управления контейнерами, такого как Docker Compose, и веб-сервера, например, Nginx. Настройка выглядит примерно так:

1. Создайте файл docker-compose.yml, в котором определены контейнеры для PostgreSQL и FastAPI:

```yaml
version: "3"

services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydatabase

  fastapi:
    build: .
    ports:
      - "8000:80"
```

2. Соберите и запустите контейнеры:

```
docker-compose up -d
```

3. Настройте Nginx для проксирования запросов к вашему доменному имени на соответствующие порты контейнеров FastAPI и PostgreSQL.

Пример конфигурации Nginx для проксирования FastAPI на порте 8000:

```
server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8000;
    }
}
```

4. Обновите DNS-записи вашего домена, чтобы он указывал на IP-адрес вашего сервера.

Теперь ваши контейнеры с PostgreSQL и FastAPI должны быть доступны через ваше доменное имя по соответствующим портам.
Вопрос слишком общий - используй docker-compose и пробрось порты с контейнеров на внешние 

https://testdriven.io/blog/fastapi-docker-traefik/

еще пример
https://github.com/AmishaChordia/FastAPI-PostgreSQ...
Похожие вопросы