Детали блога

ГлавнаяБлог

Докеризация Strapi: Полное руководство

Докеризация Strapi: Полное руководство

Докеризация Strapi: Полное руководство

Dockerизация Strapi необходима для современных процессов разработки. Это подробное руководство рассматривает настройку Strapi в Docker-контейнерах с поддержкой нескольких версий, что обеспечивает стабильные среды разработки и упрощённые процессы деплоя.

Ключевые выводы

Использование Docker со Strapi обеспечивает единообразные среды на всех этапах разработки, упрощает управление версиями и облегчает развёртывание на разных облачных платформах.

1. С чего начать: два подхода

У вас есть два варианта, чтобы приступить к dockerизации приложения Strapi:\n\n1. Сделать форк стартового репозитория: для удобства вы можете форкнуть наш репозиторий со всеми готовыми Docker-конфигурациями для Strapi. Это самый быстрый способ получить корректно настроенное окружение.\n\n2. Создать конфигурацию с нуля: вы можете добавить Docker в существующий проект или настроить новый. Достаточно создать Dockerfile и docker-compose.yml по образцам ниже и вставить соответствующий код.\n\nОба подхода рабочие — выбирайте тот, который лучше соответствует вашим требованиям и уровню владения Docker.

2. Создание Dockerfile

Dockerfile — основная конфигурация контейнера Strapi. Наш подход использует мультистейдж-сборку, которая позволяет переключаться между режимами разработки и продакшена. Перед dockerизацией необходимо вручную подготовить проект Strapi. Выполните шаги ниже, если ещё не сделали этого.\n\nШаг 1: создайте новый проект Strapi (убедитесь, что Node.js и npm установлены).\n\nШаг 2: перейдите в каталог проекта.\n\nШаг 3: после настройки Strapi добавьте конфигурацию Docker. Ниже приведены Dockerfile и docker-compose.yml для запуска проекта в контейнерах.


        # Step 1: Create a Strapi project (if not already created)
        npx create-strapi-app my-project --quickstart --no-run
        
        # Step 2: Navigate into the project directory
        cd my-project
        
        # Step 3: After setting up the Strapi project, you can proceed with Docker configuration
            
bash

3. Создание Dockerfile

Dockerfile — ядро конфигурации контейнера Strapi. Мы используем мультистейдж-сборку, чтобы гибко переключаться между режимами разработки и продакшена. Файл ниже универсален: он создаёт новый проект, если его ещё нет, или поднимает уже подготовленное приложение.



# dev | prod
ARG RUN_MODE=dev

# === Dev Mode ===

FROM node:18 as dev


WORKDIR /app

ADD ./ /app

RUN npm install

ENTRYPOINT [ "npm", "run", "develop" ]



# === Dev Mode ===

FROM node:18 as prod

WORKDIR /app

ADD ./ /app

RUN npm install


ENTRYPOINT [ "npm", "start"]

# Pick the container from selected run mode
FROM {RUN_MODE}
            
Dockerfile

4. Настройка Docker Compose

Docker Compose упрощает управление несколькими инстансами Strapi и их зависимостями. Такая конфигурация позволяет запускать разные версии Strapi параллельно для тестирования или разработки.


version: "3.9"
services:
  strapi:
    build:
      context: ./server
      dockerfile: Dockerfile
    ports:
      - "24000:1337"
    environment:
      DATABASE_CLIENT: postgres
      DATABASE_NAME: strapi
      DATABASE_HOST: postgres
      DATABASE_PORT: 5432
      DATABASE_USERNAME: strapi
      DATABASE_PASSWORD: strapi
      NODE_ENV: development
    volumes:
      - ./server:/app
      - /app/node_modules
      - /app/build
    depends_on:
      - postgres

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    tty: true
    stdin_open: true

  postgres:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_DB: strapi
      POSTGRES_USER: strapi
      POSTGRES_PASSWORD: strapi
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  postgres_data:
yaml

5. Структура проекта

Структура проекта будет выглядеть примерно так. Dockerfile и docker-compose.yml расположены в корне, а каталоги strapi-4 и strapi-5 содержат соответствующие версии Strapi.

// Directory structure for a Strapi Project width Docker


strapi-docker-starter/
├── frontend/
│   └── Dockerfile
├── server/
│   ├── Dockerfile
│   ├── .strapi/
│   ├── .tmp/
│   ├── build/
│   ├── config/
│   ├── database/
│   ├── node_modules/
│   ├── public/
│   ├── src/
│   ├── types/
│   ├── .env
│   ├── package.json
│   └── ...
├── docker-compose.yml

            
javascript

6. Удалённая разработка в VS Code

Чтобы эффективно работать внутри контейнеров Docker, установите расширение «Remote - Containers» для VS Code. Оно позволяет подключаться к контейнеру напрямую, не устанавливая зависимости на локальную машину.


**Installing Remote Development Extension:**

1. Open VS Code  
2. Go to Extensions (or press Ctrl+Shift+X)  
3. Search for "Remote - Containers"  
4. Install the extension from Microsoft  
   [VS Code Remote Development Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack)

**Working with Containers:**

After installing the extension:

1. Click on the green button in the bottom-left corner of VS Code  
2. Select "Remote-Containers: Attach to Running Container" from the options  
3. Choose your Strapi container from the list  

**Setting Up Auto Save:**

Auto Save is crucial for efficient development. To enable it:

*For Windows 10 Pro/Enterprise/Education:*

1. In VS Code (while connected to container), go to File > Auto Save  
2. Or go to Settings (Ctrl+,) and search for "Auto Save"  
3. Set "Auto Save" to "afterDelay" and adjust the delay time as needed  

*For Windows 10 Home:*

Since Windows 10 Home has some limitations with Docker, you might need to manually configure Auto Save:

1. Open VS Code Settings (Ctrl+,)  
2. Search for "Auto Save"  
3. Set "Files: Auto Save" to "afterDelay"  
4. Set "Files: Auto Save Delay" to your preferred value (e.g., 1000 for 1 second)  

This ensures your changes are automatically saved, which is particularly important when working with containerized applications.

> 💡 Remember that all file operations happen inside the container, so any changes you make will be reflected directly in the container environment without needing to rebuild.            
            
            
{
  "files.autoSave": "afterDelay",
  "files.autoSaveDelay": 1000
}
json
Контейнеризация — это не просто упаковка приложений, а создание предсказуемых, масштабируемых сред, которые эволюционируют вместе с потребностями проекта. Docker и Strapi — идеальное сочетание гибкого управления контентом и стабильных деплойментов.

- Кэтрин Дженкинс, CTO CloudScale

Импликации для профессионалов

Это исследование имеет несколько важных импликаций для профессионалов в этой области:

  1. Единообразные среды для разработки, тестирования и продакшена
  2. Упрощённое онбординг-разработчиков
  3. Лёгкое управление версиями и миграциями
  4. Минимизация дрейфа конфигураций между средами
  5. Более надёжные CI/CD-пайплайны
  6. Лучшая изоляция компонентов приложения
  7. Упрощённое горизонтальное масштабирование в продакшене
  8. Проще резервное копирование и восстановление
  9. Улучшенный локальный рабочий процесс
  10. Более стройные сценарии деплоя в облако

Заключение

Dockerизация Strapi приносит серьёзные выгоды командам разработки: от стабильности окружений до упрощённого деплоя. Следуя описанному подходу, вы построите надёжную Docker-инфраструктуру для разработки, тестирования и боевого запуска. Независимо от того, форкаете ли вы наш шаблон или создаёте конфигурацию с нуля, контейнеризация окупается повышением продуктивности и надёжности приложения.

Готовы докеризировать ваш Strapi?

Начните с нашей готовой Docker-конфигурации для Strapi. Клонируйте репозиторий, следуйте инструкциям в README, и ваш экземпляр Strapi будет работать в Docker за считанные минуты.

Сделать форк стартового репозитория