Install Magento 2.4.3 Community on Docker WSL2
Instructions on how I setup Magento 2 / Adobe commerce on Windows
Install and activate Windows WSL2
- Follow these instructions to setup your windows for linux subsystem
Setup Debian
- In windows search and open Microsoft store
- Search for Debian App and Install it
- Launch the Debian terminal and create a user account
- Switch to using the "root" user for the whole installation as this is doesnt cause file permission issues for magento generating files NOTE: Only do this on developer environments!
- Change the password for the root user.
sudo passwd root
- Then login under root
su root
- We then need to set root as the default user for Debian.
- Close Debian
- Open CMD or Powershell and run
debian config --default-user root
The root user has been set as the primary default user for Debian
Check if you have internet connectivity by running
apt update
- If not see this for more info gist.github.com/coltenkrauter/608cfe02319ce..
Install Docker Desktop
- See these instructions for installation
- Once installed, Open docker desktop > Settings > General and select "Use the WSL 2 based engine".
- Then click on Resources > WSL Integration and select Enable integration with my default WSL distro
- Apply and restart Docker desktop
- After Docker Desktop has reinitialized, restart windows to be save everything is set properly
Install php7.4 in Debian
- Update apt
sudo apt update
- Install wget
sudo apt install wget
- Install dependencies
sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https
- Enable SURY repo
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
- Install gnupg
apt-get update
apt install gnupg
- Import the GPG key for the repository
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
- Install PHP7.4
sudo apt update
sudo apt install php7.4
Check php is installedsudo apt-get install php7.4-{bcmath,curl,xml,fpm,gd,intl,mbstring,mysql,zip,soap}
php -v
Install composer in Debian
- Install curl
sudo apt install curl
- Get composer installer
curl -sS https://getcomposer.org/installer -o composer-setup.php
- Get composer key from here and update below Hash variable composer.github.io/pubkeys.html
HASH=906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8
- Check installer valid
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
- Install composer
Check installer is installedsudo php composer-setup.php --version=2.1.3 --install-dir=/usr/local/bin --filename=composer
composer -v
See WSL files
- Open your windows file explorer and put below in your search bar. You will see your Debian installation here
\\wsl$
Install magento on docker desktop
- Referencing these instructions
- Get magento community repository using composer
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition
- Get magento auth keys
- Following this link
- Rename auth.json.sample to auth.json and add your public and private keys here
- If asks for authentification required again using cli commands.
- Public key = username
- Private key = password
- Go to your install directory of magento
cd project-community-edition/
- Install magento ece tools
composer require --no-update --dev magento/ece-tools magento/magento-cloud-docker
- Add .magento.docker.yml file to your repository
- Check requirements devdocs.magento.com/guides/v2.4/install-gde..
- Add below code to .magento.docker.yml file (Make sure this is formatted properly)
name: magento system: mode: 'production' services: php: version: '7.4' extensions: enabled: - xsl - json - redis mysql: version: '10.4' image: 'mariadb' redis: version: '6.0' image: 'redis' elasticsearch: version: '7.9' image: 'magento/magento-cloud-docker-elasticsearch' hooks: build: | set -e php ./vendor/bin/ece-tools run scenario/build/generate.xml php ./vendor/bin/ece-tools run scenario/build/transfer.xml deploy: 'php ./vendor/bin/ece-tools run scenario/deploy.xml' post_deploy: 'php ./vendor/bin/ece-tools run scenario/post-deploy.xml' mounts: var: path: 'var' app-etc: path: 'app/etc' pub-media: path: 'pub/media' pub-static: path: 'pub/static'
- Run install script (this may error, just continue installing)
curl -sL https://github.com/magento/magento-cloud-docker/releases/download/1.2.3/init-docker.sh | bash -s -- --php 7.4
- If you get this error
Unable to find image 'magento/magento-cloud-docker-php:7.4-cli-1.1' locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
- Look at these links, this will help
- gist.github.com/coltenkrauter/608cfe02319ce..
- stackoverflow.com/questions/59360629/docker..
- This was my fix - commented out the registry one seems to work now
- Look at these links, this will help
- If you get this error
- Deploy your magento installation (run all at once or remove the && if you want to run one at a time)
composer update && docker volume create --name=magento-sync && docker volume create --name=mymagento-magento-sync && ./vendor/bin/ece-docker build:compose --mode="developer" --with-cron --expose-db-port=3306 --no-tls --host=magento2.docker && docker-compose up -d && docker-compose run --rm deploy php ./vendor/bin/ece-patches apply && docker-compose run --rm deploy cloud-deploy || true && docker-compose run --rm deploy cloud-deploy || true && docker-compose run --rm deploy magento-command deploy:mode:set developer && docker-compose run --rm deploy cloud-deploy || true && docker-compose run --rm deploy cloud-deploy || true && docker-compose run --rm deploy magento-command deploy:mode:set developer && docker-compose run --rm deploy magento-command config:set web/secure/use_in_adminhtml 0 && docker-compose run --rm deploy magento-command config:set web/secure/use_in_frontend 0 && docker-compose run --rm deploy magento-command config:set web/unsecure/base_url http://magento2.docker/ && docker-compose run --rm deploy magento-command config:set web/secure/base_url http://magento2.docker/ && docker-compose run --rm deploy cloud-deploy && docker-compose run --rm deploy magento-command deploy:mode:set developer
If you have any errors try redeploy few times
docker-compose run --rm deploy cloud-deploy &&
docker-compose run --rm deploy magento-command deploy:mode:set developer &&
docker-compose run --rm deploy magento-command config:set web/secure/use_in_adminhtml 0 &&
docker-compose run --rm deploy magento-command config:set web/secure/use_in_frontend 0 &&
docker-compose run --rm deploy magento-command config:set web/unsecure/base_url http://magento2.docker/ &&
docker-compose run --rm deploy magento-command config:set web/secure/base_url http://magento2.docker/ &&
docker-compose run --rm deploy cloud-deploy &&
docker-compose run --rm deploy magento-command deploy:mode:set developer
If errors on deploy, run cloud-deploy again until it works, this is just initially needs a few deploys
Call to undefined method Magento\Eav\Api\Data\AttributeExtension::setIsPagebuilderEnabled()#0 /app/vendor/magento/framework/Interception/Interceptor.php(146): Magento\ PageBuilder\Plugin\Catalog\Model\Product\Attribute\RepositoryPlugin->afterGet(Object(Magento\Catalog\Model\Product\Attribute\Repository\Interceptor), Object(Magento\Ca talog\Model\ResourceModel\Eav\Attribute\Interceptor), 'sku')
docker-compose run --rm deploy cloud-deploy
Set your URL to magento instance and https off because its local
docker-compose run --rm deploy magento-command deploy:mode:set developer && docker-compose run --rm deploy magento-command config:set web/secure/use_in_adminhtml 0 && docker-compose run --rm deploy magento-command config:set web/secure/use_in_frontend 0 && docker-compose run --rm deploy magento-command config:set web/unsecure/base_url http://magento2.docker/ && docker-compose run --rm deploy magento-command config:set web/secure/base_url http://magento2.docker/ && docker-compose run --rm deploy cloud-deploy && docker-compose run --rm deploy magento-command deploy:mode:set developer
Set varnish
docker-compose run --rm deploy magento-command config:set system/full_page_cache/caching_application 2 --lock-env && docker-compose run --rm deploy magento-command setup:config:set --http-cache-hosts=varnish && docker-compose run --rm deploy cloud-deploy && docker-compose run --rm deploy cloud-post-deploy && docker-compose run --rm deploy magento-command cache:clean
Add localhost ip to your windows host file
- Go to C:\Windows\System32\drivers\etc and open hosts file and add
127.0.0.1 magento2.docker
- Go to C:\Windows\System32\drivers\etc and open hosts file and add
Disable vernish as it was loading https
docker-compose run --rm deploy magento-command config:set system/full_page_cache/caching_application 0 --lock-env docker-compose run --rm deploy cloud-deploy docker-compose run --rm deploy magento-command cache:flush docker-compose run --rm deploy magento-command cache:clean
This should load a blank magento luma theme site! magento2.docker
To create an admin user run below, add your variables first.
docker-compose run --rm deploy magento-command admin:user:create --admin-user=<ADD_USER> --admin-password=<ADD_PASSWORD> --admin-email=<ADD_EMAIL>@gmail.com --admin-firstname=Az --admin-lastname=Codez
Credits
- Windows Image pngkit.com/view/u2q8a9o0u2o0y3t4_upgrade-go..
- Docker image mobile.twitter.com/docker
- Magento 2 logo en.wikipedia.org/wiki/Magento
- docs.docker.com
- devdocs.magento.com
- adobe.com
- debian.org
Feel free to comment questions or feedback✌️
Happy coding,
Az 👨🏾💻