Убедитесь, что на вашем компьютере установлены 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:
- Обновите пакеты:
sudo apt-get update
. - Установите зависимости:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
. - Добавьте официальный GPG-ключ Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
. - Добавьте репозиторий 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
. - Установите 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
. Регулярно обновляйте сервер и используемые пакеты, чтобы устранить уязвимости.