Local devenv set up - Shopware 6

Cover image for Local devenv set up - Shopware 6

1/15/2024

This blog post is mainly a reference for myself. So that I don’t always have to search for commands and places where I need to change something. Basically it shows the steps to set up a new instance with devenv and Shopware 6. It also shows how to enable xdebug if needed. And how to use an SSL certificate and what needs to be changed. I assume that devenv, direnv and cachix are already set up (if not, take a look at this devenv guide).

Steps for set up a new Shopware 6 instance

Tested with devenv (0.6.3) and Shopware 6.4.20.2

Open Terminal 1

git clone git@github.com:shopware/shopware.git shopware-6-4-20-2
cd shopware-6-4-20-2
direnv allow
git checkout tags/v6.4.20.2 -b v6.4.20.2
devenv up

Open Terminal 2

cd shopware-6-4-20-2
devenv shell
composer setup

Now check http://localhost:8000/ and http://localhost:8000/admin.

Command to install some demo data (optional, execute inside devenv shell)

APP_ENV=prod bin/console framework:demodata && bin/console dal:refresh:index

Xdebug

Changes needed in devenv.nix file of your project

extensions = [ "grpc" "xdebug" ];

ini = ''
  ...
  xdebug.mode = "debug"
  xdebug.start_with_request = "trigger"
  xdebug.discover_client_host = 1
  xdebug.var_display_max_depth = -1
  xdebug.var_display_max_data = -1
  xdebug.var_display_max_children = -1
  ...

Example command to use Xdebug with CLI inside devenv shell

export XDEBUG_MODE=debug XDEBUG_SESSION=1; export XDEBUG_CONFIG="idekey=PHPSTORM"; php bin/console theme:compile

SSL

Create a devenv.local.nix file in your project root

{ lib, config, ... }: {
  env.APP_URL = "https://localhost";

  certificates = [
    "localhost"
  ];

  services.caddy = {
      virtualHosts."localhost" = {
        extraConfig = ''
          tls .devenv/state/mkcert/localhost.pem .devenv/state/mkcert/localhost-key.pem

          @default {
            not path /theme/* /media/* /thumbnail/* /bundles/* /css/* /fonts/* /js/* /sitemap/*
          }

          root * public
          php_fastcgi @default unix/${config.languages.php.fpm.pools.web.socket} {
              trusted_proxies private_ranges
          }
          file_server
        '';
      };
    };
}

If you still have trouble that HTTPS is not working and you are not the root user (and using Linux) try executing this and afterwards restart devenv:

sudo sysctl net.ipv4.ip_unprivileged_port_start=80

Alternatives

Comments 💬 & Reactions ✨