Настройка Docker Nginx и FastAPI на Python пошаговое руководство

Убедитесь, что на вашем компьютере установлены Docker и Docker Compose. Это основа для развертывания приложения. Если их нет, скачайте с официального сайта и выполните установку. Проверьте версии командой docker --version и docker-compose --version.

Создайте новую директорию для проекта. Внутри нее добавьте файл Dockerfile, который будет описывать контейнер для вашего приложения. Укажите базовый образ Python, например, python:3.9-slim, и установите зависимости через pip. Это позволит быстро развернуть окружение.

Добавьте файл docker-compose.yml для управления контейнерами. В нем опишите сервисы: FastAPI для обработки запросов и Nginx для проксирования и балансировки нагрузки. Укажите порты, зависимости и переменные окружения. Это упростит запуск и управление приложением.

Настройте Nginx для работы с FastAPI. Создайте конфигурационный файл nginx.conf, где укажите проксирование запросов на порт, который использует FastAPI. Это обеспечит корректную маршрутизацию и повысит производительность.

Запустите приложение командой docker-compose up --build. Проверьте, что все работает, открыв браузер и перейдя по адресу http://localhost. Если все настроено правильно, вы увидите ответ от FastAPI.

Установка и настройка Docker для FastAPI

Установите Docker, следуя официальной инструкции для вашей операционной системы. Для Linux используйте команду sudo apt-get install docker.io, для macOS скачайте Docker Desktop с сайта разработчика, а для Windows установите Docker Desktop через установщик.

Создайте директорию для вашего проекта FastAPI и перейдите в неё. Внутри создайте файл Dockerfile. Добавьте в него следующие строки:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Создайте файл requirements.txt и укажите в нём зависимости, например:

fastapi
uvicorn

Соберите Docker-образ, выполнив команду docker build -t fastapi-app .. Это создаст образ с именем fastapi-app.

Запустите контейнер с помощью команды docker run -d -p 80:80 fastapi-app. Флаг -d запускает контейнер в фоновом режиме, а -p 80:80 связывает порт 80 на вашем компьютере с портом 80 в контейнере.

Проверьте работоспособность приложения, открыв в браузере http://localhost. Если всё настроено правильно, вы увидите интерфейс FastAPI.

Для остановки контейнера используйте команду docker stop с указанием ID контейнера, который можно найти через docker ps.

Шаг 1: Установка Docker на локальную машину

Начните с загрузки Docker Desktop с официального сайта docker.com. Выберите версию, подходящую для вашей операционной системы: Windows, macOS или Linux.

Для установки на Windows:

  • Скачайте установочный файл и запустите его.
  • Следуйте инструкциям мастера установки.
  • После завершения перезагрузите компьютер.

Для macOS:

  • Откройте скачанный файл .dmg и перетащите Docker в папку Applications.
  • Запустите Docker из Applications и подтвердите установку.

Для Linux:

  • Установите Docker через терминал, используя команды для вашего дистрибутива. Например, для Ubuntu:
    1. Обновите пакеты: sudo apt-get update.
    2. Установите зависимости: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common.
    3. Добавьте официальный GPG-ключ Docker: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg.
    4. Добавьте репозиторий Docker: echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null.
    5. Установите Docker: sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io.

После установки проверьте, что Docker работает. Откройте терминал или командную строку и выполните команду: docker --version. Вы увидите текущую версию Docker, что подтвердит успешную установку.

Для запуска Docker на Linux может потребоваться добавить текущего пользователя в группу docker. Используйте команду: sudo usermod -aG docker $USER, затем перезагрузите систему.

Шаг 2: Создание Dockerfile для FastAPI приложения

Создайте файл с именем Dockerfile в корневой директории вашего проекта. Откройте его в текстовом редакторе и добавьте базовую конфигурацию. Начните с указания образа Python, который будет использоваться. Например, для Python 3.9 добавьте строку: FROM python:3.9-slim.

Установите рабочую директорию внутри контейнера с помощью команды: WORKDIR /app. Это упростит управление файлами и командами внутри контейнера.

Скопируйте файл requirements.txt в контейнер и установите зависимости. Используйте команды: COPY requirements.txt ./ и RUN pip install --no-cache-dir -r requirements.txt. Это гарантирует, что все необходимые библиотеки будут установлены.

Скопируйте остальные файлы вашего проекта в контейнер: COPY . .. Убедитесь, что копируются только нужные файлы, чтобы избежать увеличения размера образа.

Укажите порт, который будет использоваться приложением. Добавьте строку: EXPOSE 80. Это позволит контейнеру принимать запросы на этом порту.

Завершите Dockerfile командой для запуска приложения. Например, для FastAPI используйте: CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]. Это запустит сервер Uvicorn с вашим приложением.

Проверьте корректность Dockerfile, запустив сборку образа: docker build -t fastapi-app .. Если сборка завершится успешно, ваш Dockerfile готов к использованию.

Шаг 3: Сборка и запуск Docker-контейнера с приложением

Создайте Dockerfile в корневой директории вашего проекта, если он еще не существует. Добавьте следующие инструкции:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Убедитесь, что файл requirements.txt содержит все необходимые зависимости, включая fastapi и uvicorn.

Соберите Docker-образ, выполнив команду в терминале:

docker build -t my_fastapi_app .

После успешной сборки запустите контейнер:

docker run -d -p 80:80 --name my_fastapi_container my_fastapi_app

Проверьте, что приложение работает, открыв браузер и перейдя по адресу http://localhost. Если всё настроено правильно, вы увидите интерфейс FastAPI.

Для остановки контейнера используйте команду:

docker stop my_fastapi_container

Чтобы удалить контейнер после остановки, выполните:

docker rm my_fastapi_container

Если потребуется внести изменения в код, обновите образ, пересобрав его с помощью команды docker build, и запустите контейнер заново.

Настройка Nginx как реверс-прокси для FastAPI

Установите Nginx, если он еще не установлен, используя команду sudo apt install nginx. После установки создайте новый конфигурационный файл для вашего проекта в директории /etc/nginx/sites-available/, например, fastapi_proxy.

Откройте файл в текстовом редакторе и добавьте следующий блок конфигурации:

server {
listen 80;
server_name ваш_домен_или_ip;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Замените ваш_домен_или_ip на фактический домен или IP-адрес вашего сервера. Этот конфигурационный блок перенаправляет все запросы на порт 8000, где работает ваш FastAPI-сервер.

Создайте символическую ссылку на этот файл в директории /etc/nginx/sites-enabled/ с помощью команды sudo ln -s /etc/nginx/sites-available/fastapi_proxy /etc/nginx/sites-enabled/.

Проверьте корректность конфигурации Nginx, выполнив команду sudo nginx -t. Если ошибок нет, перезапустите Nginx для применения изменений: sudo systemctl restart nginx.

Теперь ваш FastAPI-сервер будет доступен через Nginx на порту 80. Убедитесь, что FastAPI запущен и слушает порт 8000. Для этого используйте команду uvicorn ваш_файл:app --host 0.0.0.0 --port 8000.

Если вы используете HTTPS, добавьте конфигурацию для SSL-сертификата в блок server и измените порт на 443. Это обеспечит безопасное соединение между клиентом и сервером.

Шаг 1: Установка Nginx в Docker-контейнере

Создайте новый Docker-контейнер с Nginx, используя официальный образ из Docker Hub. Откройте терминал и выполните команду:

docker run -d --name my-nginx -p 80:80 nginx

Эта команда запускает контейнер в фоновом режиме (-d), присваивает ему имя my-nginx и связывает порт 80 контейнера с портом 80 вашей системы. После выполнения команды Nginx будет доступен по адресу http://localhost.

Чтобы проверить, что контейнер работает, выполните:

docker ps

Если контейнер активен, вы увидите его в списке. Для просмотра логов используйте:

docker logs my-nginx

Если вам нужно изменить конфигурацию Nginx, скопируйте файл конфигурации из контейнера на ваш компьютер:

docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf

Отредактируйте файл nginx.conf и загрузите его обратно в контейнер:

docker cp ./nginx.conf my-nginx:/etc/nginx/nginx.conf

Перезапустите контейнер, чтобы применить изменения:

docker restart my-nginx

Теперь ваш Nginx готов к использованию в Docker-контейнере с настроенной конфигурацией.

Шаг 2: Конфигурация Nginx для проксирования запросов

Создайте файл конфигурации для вашего проекта в директории /etc/nginx/sites-available/. Назовите его, например, my_fastapi_app. Внутри файла добавьте базовую конфигурацию для проксирования запросов к вашему FastAPI-приложению:


server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

Замените your_domain.com на ваш домен или IP-адрес сервера. Убедитесь, что FastAPI-приложение запущено на порту 8000, как указано в proxy_pass.

Создайте символическую ссылку на этот файл в директории /etc/nginx/sites-enabled/:


sudo ln -s /etc/nginx/sites-available/my_fastapi_app /etc/nginx/sites-enabled/

Проверьте корректность конфигурации Nginx с помощью команды:


sudo nginx -t

Если ошибок нет, перезагрузите Nginx для применения изменений:


sudo systemctl reload nginx

Теперь Nginx будет перенаправлять запросы к вашему FastAPI-приложению. Убедитесь, что ваш домен или IP-адрес доступен через браузер или инструменты для тестирования.

Для повышения безопасности и производительности добавьте в конфигурацию SSL-сертификат, используя Let’s Encrypt, и настройте сжатие данных:


server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
gzip on;
gzip_types text/plain application/json;
}

Этот подход обеспечивает безопасное и быстрое взаимодействие с вашим приложением.

Шаг 3: Настройка безопасности и SSL для Nginx

Начните с установки сертификата SSL для шифрования соединений. Используйте Let’s Encrypt для получения бесплатного сертификата. Установите Certbot, выполнив команду sudo apt install certbot python3-certbot-nginx. После этого запустите Certbot для автоматической настройки SSL: sudo certbot --nginx. Certbot добавит необходимые директивы в конфигурацию Nginx и настроит автоматическое обновление сертификата.

Добавьте базовые меры безопасности в конфигурацию Nginx. Убедитесь, что в файле конфигурации включены параметры server_tokens off; для скрытия версии сервера и add_header X-Frame-Options "SAMEORIGIN"; для защиты от кликджекинга. Также добавьте add_header X-Content-Type-Options "nosniff";, чтобы предотвратить MIME-спуфинг.

Настройте ограничение на размер загружаемых файлов, добавив директиву client_max_body_size 10M; в блок http или server. Это предотвратит перегрузку сервера большими запросами.

Включите защиту от DDoS-атак, настроив лимиты на количество запросов. Добавьте в конфигурацию блок limit_req_zone и примените его к нужным локациям. Например: limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; и limit_req zone=one burst=5;.

Проверьте конфигурацию на ошибки с помощью команды sudo nginx -t. Если всё в порядке, перезапустите Nginx: sudo systemctl restart nginx. Регулярно обновляйте сервер и используемые пакеты, чтобы устранить уязвимости.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии