:warning: Current project is not supported anymore. Please check out https://github.com/magento/magento2-kubernetes-devbox which is under development and may become an official devbox for Magento 2 in the future.
It's expected that the Magento 2 project source code will be located and managed on the host to allow quick indexing of project files by IDE. All other infrastructure is deployed on the guest machine.
Current Vagrant configuration aims to solve performance issues of Magento installed on Virtual Box for development. A custom solution is implemented for Windows hosts. See explanation of the proposed solution.
The environment for Magento EE development is also configured.
It is easy to install multiple Magento instances based on different codebases simultaneously.
The project initialization script configures a complete development environment:
checkout_source_from
option in etc/config.yaml)Installs NodeJS, NPM, Grunt and Gulp for front end development
:information_source: This box uses the n package manager to provide the latest NodeJS LTS version.
If you never used Vagrant before, read the Vagrant Docs first.
The software listed below should be available in PATH (except for PHP Storm).
Git - Ensure that SSH keys are generated and associated with your Github account. See how to check and how to configure, if not configured.
:information_source: To obtain the codebase without cloning, just use the Magento 2 codebase instead of vagrant-magento/magento2ce
. Either method will produce a successful installation.
:information_source: On Windows hosts Git must be v2.7+. Also make sure to set the following options to avoid issues with incorrect line separators:
git config --global core.autocrlf false
git config --global core.eol LF
git config --global diff.renamelimit 5000
:information_source: In case of any issues during installation, please read FAQ section
Open terminal and change your directory to the one you want to contain Magento project. On Windows use Git Bash, which is available after Git installation.
Download or clone the project with Vagrant configuration:
:warning: Do not open it in PhpStorm until init_project.sh
has completed PhpStorm configuration in the initialize project step below.
git clone git@github.com:paliarush/magento2-vagrant-for-developers.git vagrant-magento
Optionally, if you use private repositories on GitHub or download packages from the Magento Marketplace using Composer
etc/composer/auth.json
."github.com": "your-github-token"
to the github-oauth
section for GitHub authorization.repo.magento.com
section.etc/config.yaml
and make the necessary customizations.Initialize the project (this will configure the environment, install Magento, and configure the PHPStorm project):
cd vagrant-magento
bash init_project.sh
Use the vagrant-magento
directory as the project root in PHP Storm (not vagrant-magento/magento2ce
). This is important, because in this case PHP Storm will be configured automatically by init_project.sh. If NFS files sync is disabled in config and on Windows hosts verify the deployment configuration in PHP Storm.
Use the URL for accessing your Magento storefront in the browser as your Web server root URL. Typically this is the localhost, which refers to your development machine. Depending on how you've set up your VM you may also need a port number, like http://localhost:8080
.
Configure the remote PHP interpreter in PHP Storm. Go to Preferences, then Languages and Frameworks. Click PHP and add a new remote interpreter. Select Deployment configuration as a source for connection details.
Some of default settings are available for override. These settings can be found in the file etc/config.yaml.dist.
To override settings create a copy of the file under the name 'config.yaml' and add your custom settings.
When using init_project.sh, if not specified manually, random IP address is generated and is used as suffix for host name to prevent collisions, in case when two or more instances are running at the same time.
Upon a successful installation, you'll see the location and URL of the newly-installed Magento 2 application in console.
Web access:
http://magento2.vagrant<random_suffix>
http://magento2.vagrant<random_suffix>/admin/
admin/123123q
http://magento2.vagrant<random_suffix>:15672
, credentials guest
/guest
:information_source: Your admin URL, storefront URL, and admin user and password are located in etc/config.yaml.dist
.
Codebase and DB access:
echo ${MAGENTO_ROOT}
/var/www/magento2ce
localhost
(not accessible remotely)magento
, magento_integration_tests
root:<no password>
. In CLI just use mysql
with no user and password (root:<no password>
will be used by default)Codebase on host
vagrant_project_root/magento2ce
etc/config.yaml
: vagrant_project_root/magento2ce/magento2ee
Current vagrant project follows semantic versioning so feel free to pull the latest features and fixes, they will not break your project.
For example your current branch is 2.0
, then it will be safe to pull any changes from origin/2.0
. However branch 3.0
will contain changes backward incompatible with 2.0
.
Note, that semantic versioning is only used for x.0
branches (not for develop
).
:information_source: To apply changes run vagrant reload
.
Use commands described in Switch between CE and EE section with -f
flag. Before doing actual re-installation, these commands update linking of EE codebase, clear cache, update composer dependencies.
If no composer update and relinking of EE codebase is necessary, use the following command. It will clear Magento DB, Magento caches and reinstall Magento instance.
Go to the root of vagrant project in command line and execute:
bash m-reinstall
Go to the root of vagrant project in command line and execute:
bash m-clear-cache
Assume, that EE codebase is available in vagrant_project_root/magento2ce/magento2ee
.
The following commands will link/unlink EE codebase, clear cache, update composer dependencies and reinstall Magento.
Go to 'vagrant-magento' created earlier and run in command line:
bash m-switch-to-ce
OR
bash m-switch-to-ee
Force switch can be done using -f
flag even if already switched to the target edition. May be helpful to relink EE modules after switching between branches.
Upgrade can be performed instead of re-installation using -u
flag.
:information_source: On Windows hosts (or when NFS mode is disabled in config.yaml explicitly) you will be asked to wait until code is uploaded to guest machine by PhpStorm (PhpStorm must be launched). To continue the process press any key.
Make sure that ce_sample_data
and ee_sample_data
are defined in config.yaml and point CE and optionally EE sample data repositories.
During initial project setup or during bash init_project.sh -fc
(with -fc
project will be re-created from scratch), sample data repositories willl be checked out to vagrant_project_root/magento2ce/magento2ce-sample-data
and vagrant_project_root/magento2ce/magento2ee-sample-data
.
To install Magento with sample data set install_sample_data
in config.yaml to 1
and run bash m-switch-to-ce -f
or bash m-switch-to-ee -f
, depending on the edition to be installed. To disable sample data, set this option to 0
and force-switch to necessary edition (using the same commands).
Several entities are generated for testing purposes by default using REST API after Magento installation:
customer@example.com
:123123qQ
)To disable this feature, set magento/generate_basic_data
in config.yaml to 0
and run bash m-switch-to-ce -f
or bash m-switch-to-ee -f
, depending on the edition to be installed.
Go to 'vagrant-magento' created earlier and run in command line:
bash m-bin-magento <command_name>
e.g.
bash m-bin-magento list
XDebug is already configured to connect to the host machine automatically. So just:
To debug a CLI script:
phpstorm
as IDE keyRun CLI command on the guest as follows (xdebug.remote_host
value might be different for you):
php -d xdebug.remote_autostart=1 <path_to_cli_script>
To debug Magento Setup script, go to Magento installation script and find php ${install_cmd}
. Follow steps above for any CLI script
:information_source: In addition to XDebug support, config.yaml has several options in debug
section which allow storefront and admin UI debugging. Plus, desired Magento mode (developer/production/default) can be enabled using magento_mode
option, default is developer mode.
Answer can be found here
All emails are saved to 'vagrant-magento/log/email' in HTML format.
It is possible to view/modify majority of guest machine config files directly from IDE on the host. They will be accessible in etc/guest directory only when guest machine is running. The list of accessible configs includes: PHP, Apache, Mysql, Varnish, RabbitMQ. Do not edit any symlinks using PhpStorm because it may break your installation.
After editing configs in IDE it is still required to restart related services manually.
Sometimes it is necessary to test upgrade flow. This can be easily done as follows (assuming that you have installed instance):
composer.json
in case of composer-based installation-u
flagTo install several Magento instances based on different code bases, just follow Installation steps to initialize project in another directory on the host.
Unique IP address, SSH port and domain name will be generated for each new instance if not specified manually in etc/config.yaml
Go to 'vagrant-magento' created earlier and run in command line:
bash m-composer install
OR
bash m-composer update
See draft
Switch between PHP versions using "php_version:
Set use_varnish: 1
to use varnish along with apache in config.yaml. Changes will be applied on m-reinstall
.
It will use default file etc/magento2_default_varnish.vcl.dist generated from a Magento 2.1 instance. Magento 2.2+ supports additional Varnish features and you may need to provide custom version of VCL to enable them.
Varnish Version: 4.1
Use the following commands to enable/disable varnish without reinstalling Magento: m-varnish disable
or m-varnish enable
.
:information_source: Available in Magento EE only.
Set search_engine: "elasticsearch"
in config.yaml to use ElasticSearch as current search engine or search_engine: "mysql"
to use MySQL. Changes will be applied on m-reinstall
.
Use the following commands to switch between search engines without reinstalling Magento: m-search-engine elasticsearch
or m-search-engine mysql
.
:information_source: Available in Magento v2.0.6 and higher.
Redis is configured as cache backend by default. It is still possible to switch back to filesystem cache by changing environment_cache_backend
to filesystem
in config.yaml.
It is possible to reset project environment to default state, which you usually get just after project initialization. The following command will delete vagrant box and vagrant project settings. After that it will initialize project from scratch. Magento 2 code base (magento2ce
directory) and etc/config.yaml and PhpStorm settings will stay untouched, but guest config files (located in etc/guest) will be cleared.
Go to 'vagrant-magento' created earlier and run in command line:
bash init_project.sh -f
It is possible to reset Magento 2 code base at the same time. Magento 2 code base will be deleted and then cloned from the repositories specified in etc/config.yaml
bash init_project.sh -fc
To reset PhpStorm project configuration, in addition to -f
specify -p
option:
bash init_project.sh -fp
Ultimate project reset can be achieved by combining all available flags:
bash init_project.sh -fcp
By default, the box will install the latest NodeJS LTS
version using the n package manager. If you need another version of Node
because of Magento's package.json
requirements, simply run:
n <version>
Note: See Working with npm if after switching versions with n
, npm
is not working properly.
debug:vagrant_project
option in config.yaml to 1
use_nfs
option in config.yaml to 0
Composer Install Error: ZipArchive::extractTo(): Full extraction path exceed MAXPATHLEN (260)
exception during composer install
. This can be fixed in 2 ways: decrease path length to the project directory or set composer_prefer_source
option in config.yaml to 1
vagrant-magento
directory as project root in PHP Storm (not vagrant-magento/magento2ce
)vagrant-magento/.idea
. Run bash vagrant-magento/scripts/host/configure_php_storm.sh
. After opening project in PhpStorm again everything should look goodIf during a vagrant reload, the following message appears:
There was a problem while downloading the metadata for your box to check for updates. This is not an error, since it is usually due to temporary network problems. This is just a warning. The problem encountered was: The requested URL returned error: 404 Not Found
It is likely that your vagrant cli is caching an old url. Perform the following cli commands:
sed -i -- 's/atlas.hashicorp/vagrantcloud/g' ~/.vagrant.d/boxes/{name of your paliarush/ubuntu image}/metadata_url
mv ~/.vagrant.d/boxes/{name of your paliarush/ubuntu image}/metadata_url2 ~/.vagrant.d/boxes/{name of your paliarush/ubuntu image}/metadata_url