/frankenphp-magento2

Primary LanguageDockerfileCreative Commons Zero v1.0 UniversalCC0-1.0

[WIP] FrankenPHP + Magento 2

A POC to run Magento 2 using FrankenPHP.

The docker stack includes:

  • FrankenPHP - dunglas/frankenphp:1.0.3-php8.3
  • MySQL - arm64v8/mysql:8.0.34
  • OpenSearch - opensearchproject/opensearch:2.5.0
  • OpenSearch dashboard - opensearchproject/opensearch-dashboards:2.5.0
  • Redis - arm64v8/redis:7.0
  • RabbitMQ - arm64v8/rabbitmq:3.11-management
  • MailHog - mailhog/mailhog

Usage

To build and run the stack simply run:

docker-compose up -d --build

To open an interactive console within the PHP container:

docker exec -it frankenphp-magento2-php-1 bash

The Magento 2 files are expected in ./src. To install Magento from scratch is as follow:

## Download Magento 2
composer create-project --repository-url=https://repo.magento.com/ \
    "magento/project-community-edition" /app/public "2.4.x"

 ## Install Application
 bin/magento setup:install \
     --backend-frontname=backend \
     --amqp-host=rabbitmq \
     --amqp-port=5672 \
     --amqp-user=admin \
     --amqp-password=admin \
     --db-host=mysql \
     --db-name=magento \
     --db-user=magento \
     --db-password=magento \
     --search-engine=opensearch \
     --opensearch-host=opensearch \
     --opensearch-port=9200 \
     --opensearch-index-prefix=magento2 \
     --opensearch-enable-auth=0 \
     --opensearch-timeout=15 \
     --session-save=redis \
     --session-save-redis-host=redis \
     --session-save-redis-port=6379 \
     --session-save-redis-db=2 \
     --session-save-redis-max-concurrency=20 \
     --cache-backend=redis \
     --cache-backend-redis-server=redis \
     --cache-backend-redis-db=0 \
     --cache-backend-redis-port=6379 \
     --page-cache=redis \
     --page-cache-redis-server=redis \
     --page-cache-redis-db=1 \
     --page-cache-redis-port=6379

 ## Configure Application
 bin/magento config:set --lock-env web/unsecure/base_url "https://localhost/"

 bin/magento config:set --lock-env web/secure/base_url "https://localhost/"

 bin/magento config:set --lock-env web/secure/offloader_header X-Forwarded-Proto

 bin/magento config:set --lock-env web/secure/use_in_frontend 1
 bin/magento config:set --lock-env web/secure/use_in_adminhtml 1
 bin/magento config:set --lock-env web/seo/use_rewrites 1

 bin/magento config:set --lock-env system/full_page_cache/caching_application 2
 bin/magento config:set --lock-env system/full_page_cache/ttl 604800

 bin/magento config:set --lock-env catalog/search/enable_eav_indexer 1

 bin/magento config:set --lock-env dev/static/sign 0

 bin/magento deploy:mode:set -s developer
 bin/magento cache:disable block_html full_page

 bin/magento indexer:reindex
 bin/magento cache:flush

Issues

  • frankenphp/Dockerfile is a mess, I copied pasted what I could find online trying to resolve some issues, it will need major refactoring.
  • dunglas/frankenphp:1.0.3-php8.3 has to be used to resolve dunglas/frankenphp#567
  • I doubt mailhog will be connected as the sendmail configuration is missing. See this for more info.
  • It would be nice to switch from MySQL to MariaDB

Useful resources