ScandiPWA (deprecated)
User ManualGitHubSlack
  • ScandiPWA (deprecated)
  • React & PWA for dummies
    • Setting Up Environment and Talking Theory
    • Learning React Hands-on
    • Styling It
    • Learning ScandiPWA Way
  • START & UPGRADE
    • Linux Docker setup
    • Mac Docker setup
    • Setting up the theme with remote M2 server
    • Theme Upgrade to the latest version
    • Automated setup (BETA)
  • A TO Z OVERVIEW
    • Motivation
    • Challenges
    • File structure and UI components
    • Rewriting and Extending A Theme
  • DESCRIPTION OF CONTAINERS
    • Ngrok
  • FAQ
    • Development
    • Installation
    • Billing and license
    • Product support
    • What is PWA?
  • HOW-TO TUTORIALS - INTRODUCTORY
    • Base template
    • Connecting to the GraphQL resolver
    • Extension mechanism
    • Creating GraphQL resolver
    • Debugging and Inspecting
    • Setting Up Frontend
    • File Structure
    • Data Flow
    • Technology Stack
    • Changing environment
    • Theme Build and Configuration
    • Implementing Caching for New Caching Identities
    • Implementing a parent theme
  • HOW-TO TUTORIALS - INTERMEDIATE
    • Debugging in Chrome
    • Configuring XDebug
    • CLI in Docker
    • Postman & GraphQL Playground
    • VSCode Extensions
    • Plugins: implementing
    • Plugins: using and publishing
    • ESlint & StyleLint
    • How To Contribute
    • Migrating to a Newer Version
    • Installation on Existing Magento 2 Sever
    • BEM and Coding Standards
    • Tools of ScandiPWA
    • React Best Practices
  • FAQ
    • Untitled
Powered by GitBook
On this page
  • Follow me setting the theme up
  • Before you start
  • When you are ready
  • How to access the site?
  • Sample-data? Yes, please!
  • Want some development guidance?
  • Something does not work?
  1. START & UPGRADE

Linux Docker setup

PreviousLearning ScandiPWA WayNextMac Docker setup

Last updated 4 years ago

Follow me setting the theme up

Before you start

  1. Make sure you have git and docker-compose binaries installed. To test, execute following command in the bash terminal:

git --version # it should be ^2
docker-compose -v # it should be ^1.24
  • Choose an installation directory. It can be anywhere on your computer. Folder /var/www/public is not necessary, prefer ~/Projects/ for ease of use.

# use `dc` to start without `frontend` container
alias dc="docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml"

# use `dcf` to start with `frontend` container
alias dcf="docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml"

# use `inapp` to quickly get inside of the app container
alias inapp="docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml exec -u user app"

# use `infront` to quickly get inside of the frontend container
alias infront="docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml exec -w /var/www/public/app/design/frontend/Scandiweb/pwa/ frontend"

# use `applogs` to quickly see the last 100 lines of app container logs
alias applogs="docker-compose logs -f --tail=100 app"

# use `frontlogs` to quickly see the last 100 lines of frontend container logs
alias frontlogs="docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml logs -f --tail=100 frontend"

Those aliases are required to have all services available at all times. Otherwise, if just using docker-compose only services defined in docker-composer.yml will be available.

  1. Make sure you have a valid Magento 2 COMPOSER_AUTH set. This is an environment variable set on your host machine. To test if it is set, use:

env | grep COMPOSER_AUTH

If the output of this command is empty, or, if the output (JSON object) does not contain "repo.magento.com" key, you need to set / update the environment variable.

  1. Now, using the following template, set the environment variable:

export COMPOSER_AUTH='{"http-basic":{"repo.magento.com": {"username": "<PUBLIC KEY FROM MAGENTO MARKETPLACE>", "password": "<PRIVATE KEY FROM MAGENTO MARKETPLACE>"}}}'
  1. Execute following command to add scandipwa.local to your /etc/hosts file and map it to the 127.0.0.1:

echo '127.0.0.1 scandipwa.local' | sudo tee -a /etc/hosts

When you are ready

  1. Get the copy of magento-docker - clone your fork, or clone the original repository. Do not try to download the release ZIP - it will contain outdated code.

# to clone the fork
git clone git@github.com:<YOUR GITHUB USERNAME>/magento-docker.git

# to clone the original repository
git clone git@github.com:scandipwa/magento-docker.git

# to clone via HTTPS (not recommended)
git clone https://github.com/scandipwa/magento-docker.git
git status # expected output `On branch 3.x-stable`

If any other output has been returned, execute the following command to checkout the correct branch:

git checkout 3.x-stable

2. Generate and trust a self-signed SSL certificate.

  1. Begin with generating a certificate. Use the following command for that:

make cert

3. Reload the Google Chrome. Sometimes, the Google Chrome caches the old-certificates. Make to completely exit chrome, before opening it back. Sometimes, the “invalid certificate” issues only disappears after the full host machine reload.

4. Pull all necessary container images

Note:

# if you have the alias set up
dcf pull

# without aliases (not recommended)
docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml pull

There are two ways to use the setup: with frontend container and without it. The setup with frontend container is called development. The alias running it is dcf. The alias for production-like run is dc. If this is your first time setting up, run the (production-like) setup first (follow the step 4), otherwise the frontend container will not function properly.

Note:

If you have already ran ScandiPWA in production-like mode once, you can safely skip to step 6. In case, of course, you plan on development.

4. Start the infrastructure in production-like mode

# if you have the alias set up
dc up -d --remove-orphans

# without aliases (not recommended)
docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml up -d --remove-orphans

Note:

the --remove-orphans flag is necessary to remove all left-over containers. In example, if you switched from development to production setup, the frontend container won’t keep running.

5. Wait until the infrastructure starts

After the previous command is executed, the site won’t be available quickly, it takes about 140s to start, you can see when the application is ready to receive the requests by watching app logs, using this command:

# if you have the alias set up
applogs

# without aliases (not recommended)
docker-compose logs -f --tail=100 app

If you can see following output, the application is ready!Copy

NOTICE: ready to handle connections

6. Start the development-setup (optional)

# if you have the alias set up
dcf up -d --remove-orphans

# without aliases (not recommended)
docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml up -d --remove-orphans

7. Wait until the development infrastructure starts

In development setup - the page will be available much faster rather than in production-like setup - right after the theme compilation in frontend container. You can track the progress using following command:

# if you have the alias set up
frontlogs

# without aliases (not recommended)
docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml logs -f --tail=100 frontend

If you can see following output, the frontend is ready!

ℹ 「wdm」: Compiled successfully

Note:

the requests to /graphql will still fail, you need to wait until the app container starts. See instruction in step 5 to see how.

How to access the site?

Note:

all application configurations, i.e. admin password, admin username, admin URL, application mode and more is located in .application file.

  1. To run any Magento-related command (composer, bin/magento) use inapp bash command on your host machine. Do not attempt to run them on your host machine.

  2. Open your favorite browser, i.e. Google Chrome

    1. In production the Magento (app container) is fully responsible for what you see in browser

    2. In development the webpack-dev-server (frontend container) is responsible for frontend, while /media, /graphql, /admin URLs are still coming from Magento.

Sample-data? Yes, please!

The module scandipwa/sample-data includes following:

  • Small amount of products

  • 2 Categories

  • 3 CMS blocks

  • 3 CMS Pages

  • 1 Slider

  • 1 Menu

  • Execute into the app component:

# if you have the alias set up
inapp bash

# without aliases (not recommended)
docker-compose -f docker-compose.yml -f docker-compose.local.yml -f docker-compose.ssl.yml -f docker-compose.frontend.yml exec -u user app

2. Require ScandiPWA sample-data:

composer require scandipwa/sample-data

3. Run sample-data migration scripts:

magento se:up

4. Flush configuration caches updated by migration:

magento c:f

Want some development guidance?

Stuck? Don’t know where to start? Checkout our development guide! It will guide you through the best-practices working with ScandiPWA! How to debug, configure the code-editor, code-style checker and create your first base-template! This, and much-much more in:

Something does not work?

Follow this simple algorithm:

If you plan to make changes to the theme make sure to , or into existing one.

Make sure you have a SSH key assigned to your GitHub account, and you current machine has the same key. Read .

Make sure to fork . Read .

If git was not found, please follow .

If docker-compose was not found, please follow .

Make sure the virtual memory max map count on your host machine is set high-enough. Follow to set it to appropriate level.

To make your life easier, make sure to create an aliases for docker-compose commands. Follow to create permanent aliases. We recommend defining following:

Make sure you have a valid Magento account. You can or on Magento Marketplace site.

Upon logging to your Magento Marketplace account follow the to locate and generate credentials.

To set the environment variables follow . Make sure to make them persist (stay between reloads).

2. Add certificate to the list of trusted ones. Use this (or ) to do it. The new-root-certificate.crt / foo.crt from these guide examples must be replaced with <PATH TO PROJECT ROOT>/opt/cert/scandipwa-ca.pem.

container image != media image. Read more about .

Regardless of production or development setup go to

To access the Maildev, go to

To access the Kibana, go to

Refer to the . It most probably already has the solution to your problem.

If the issue still persists, , and feel free to ask questions in #pwa_tech public channel.

Alternatively - however, the response time there will be a little-bit longer than in community Slack.

create GitHub account
sign in
how to setup SSH key on GitHub
scandipwa-base repository
how to fork repository on GitHub
this installation instruction
this installation instruction
the instruction
the guide
create
login to existing one
official guide
this guide
guide
guide for Arch linux
container images here
https://scandipwa.local
http://scandipwa.local:1080/maildev
http://scandipwa.local:5601
Our awesome development guide
FAQ page
join our community slack
create an issue on GitHub
ScandiPWA local setup on Linux