Введение
Разработка модулей для Liferay может сталкиваться с рядом технических трудностей на этапе настройки окружения. Среди них:
	- отсутствие нужных системных пакетов или Java в ОС;
- сложность очистки портала или базы данных;
- нестабильность среды после неудачного деплоя модуля.
Чтобы минимизировать эти проблемы и сократить время на настройку, было принято решение создать docker-compose конфигурацию, позволяющую быстро и удобно развернуть портал Liferay с базой данных PostgreSQL в изолированном окружении.
Структура решения
Docker Compose-файл описывает два сервиса:
	- db — контейнер с PostgreSQL;
- liferay — контейнер с самим порталом.
Также настроены постоянные тома для хранения данных и удобной работы с модулями.
Пример docker-compose.yml
version: '3'
services:
  db:
    image: postgres:16
    container_name: liferay-db
    environment:
      - POSTGRES_USER=liferay
      - POSTGRES_PASSWORD=liferay
      - POSTGRES_DB=liferay
    volumes:
      - ./volumes/pg_data:/var/lib/postgresql/data
    ports:
      - "5432:5432" 
  liferay:
    image: liferay:latest
    container_name: liferay-app
    ports:
      - "8080:8080"
      - "9990:9990"
      - "5005:5005"
    volumes:
      - ./volumes/liferay_deploy:/opt/liferay/deploy
      - ./volumes/liferay_osgi:/opt/liferay/osgi
      - ./volumes/liferay_data:/opt/liferay/data
    depends_on:
      - db
Ключевые моменты
1. Отделённая база данных
PostgreSQL запускается отдельно от портала. Это упрощает администрирование, позволяет легко сбрасывать или переносить базу, а также использовать привычные инструменты для работы с СУБД.
2. Перенаправленные порты
Открыты порты:
	- 8080 — веб-интерфейс Liferay;
- 9990 — доступ к административному интерфейсу (например, Gogo shell через Telnet);
- 5005 — подключение отладчика (Remote JVM Debug).
3. Подключаемые тома
Тома позволяют:
	- быстро сбрасывать и пересоздавать окружение без потери важных данных;
- автоматически деплоить .jar и .war модули из liferay_deploy;
- сохранять данные и конфигурации между перезапусками.
./volumes/
├── pg_data/             # данные PostgreSQL
├── liferay_data/        # данные и конфиги портала
├── liferay_deploy/      # директория для деплоя модулей
├── liferay_osgi/        # директория с модулями OSGi
Зачем это нужно
Ранее, при локальной разработке, запуск портала мог осложняться:
	- отсутствием нужных Java или пакетов в системе;
- повреждённой базой данных после неудачного тестирования модуля;
- невозможностью быстро сбросить портал до "чистого" состояния.
С переходом на контейнерную разработку с Docker Compose:
	- запуск портала стал возможен одной командой: docker-compose up;
- откат изменений одной командой;
- модули можно деплоить просто копированием в volumes/liferay_deploy/;
- появилась единая изолированная среда, одинаково работающая у всей команды.
Использование
	- Склонируйте docker-compose.yml и создайте структуру директорий: 
 mkdir -p volumes/pg_data volumes/liferay_deploy volumes/liferay_osgi volumes/liferay_data
- Запустите: docker-compose up -d
- Перейдите на http://localhost:8080, чтобы открыть портал.
- Для деплоя модуля скопируйте .jar или .war в volumes/liferay_deploy.
- Чтобы сбросить портал и базу: docker-compose down -v