DEV Community

Dendi Handian
Dendi Handian

Posted on • Edited on

Laradock - A PHP Developer's best friend.

When you are about to develop a PHP application, you might run into these local web server solutions: XAMPP , WAMP , Laragon

XAMPP: This might be the very first thing you would use if you are a beginner in the PHP web application development. XAMPP provides only the most basic services for PHP web application, which are Apache2 as web server and MySQL as database server, and maybe database manager like phpMyAdmin.

WAMP: It's like XAMPP, but it has virtualhost manager that can be used to make your local website URL customizable and looks prettier.

Laragon: It's like WAMP, but it's supercharged with some modern services to support your development, like Redis, Memcached, mail catcher, and more. It's the second most complete local web server solution of all I about to tell you here in this post.

Those local web servers solutions are good, but what if I want ... more?

A ready to use Docker-based solution

Meet Laradock, a full PHP development environment based on Docker, it's pre-configured and ready to use. Using a modern services like Elasticsearch, Selenium, Sonarqube locally on your machine is not a dream anymore.

Setting Up Laradock for Local Development

Before we get started to use Laradock, make sure you have docker and docker-compose installed on your machine. Any operating systems (Linux, Windows, MacOS) should support the docker.

Let's assume you have your own awesome Laravel application and it's placed in a directory named projects.

- projects
  |_ my-awesome-laravel-app 
Enter fullscreen mode Exit fullscreen mode

Now grab the latest Laradock project from its official github page or clone it using git and place it in projects directory.

- projects
  |_ my-awesome-laravel-app 
  |_ laradock
Enter fullscreen mode Exit fullscreen mode

Inside the laradock directory, you will find env-example file. Clone it into a new file named .env

- projects
  |_ my-awesome-laravel-app 
  |_ laradock
     |_ ...
     |_ env-example
     |_ .env
Enter fullscreen mode Exit fullscreen mode

We are going to use the essential containers for our awesome Laravel app, they are nginx, mysql and probably phpMyAdmin

Setting up Nginx

Go to laradock > nginx > sites directory. You will find laravel.conf.example, clone it into a new file named my-awesome-laravel-app.test.conf (you can give this file any name you want but make sure it ends with .conf).

- projects
  |_ my-awesome-laravel-app 
  |_ laradock
     |_ ...
     |_ nginx
        |_ sites
           |_ ...
           |_ my-awesome-laravel-app.test.conf
           |_ laravel.conf.example
     |_ env-example
     |_ .env
Enter fullscreen mode Exit fullscreen mode

Inside the my-awesome-laravel-app.test.conf file, change the server_name into your desired domain URL and root into your awesome laravel app public folder path.

server {

    ...

    server_name my-awesome-laravel-app.test;
    root /var/www/my-awesome-laravel-app/public;
    index index.php index.html index.htm;

    ...
}

Enter fullscreen mode Exit fullscreen mode

That's it for nginx !

Setting up MySQL and PhpMyAdmin

No need to setup here...

The pre-configured users that can be used here are:

  • Root User:
    • username: root | password: root
  • Non-Root User:
    • username: default | password: secret

Setting up your awesome Laravel app .env file

Your app won't running, unless you configure the my-awesome-laravel-app/.env file right. The odd one is the DB_HOST, which its value must be mysql instead of localhost. Here are the env parameters you have to check:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:WqvIsN6XYA9NMHjTWIthKC1Mdi+WWi7/iRtz/GnibLQ=
APP_DEBUG=true
APP_URL=http://my-awesome-laravel-app.test

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=your_awesome_database
DB_USERNAME=default
DB_PASSWORD=secret

...

Enter fullscreen mode Exit fullscreen mode

Running the containers

If you are using services like apache2 or mysql on your machine that uses 8080, 80, 3306 ports, please stop them first before you run the laradock's containers.

By using your favorite command-line interface (I'm using Terminus by the way. It's a cool CLI) , go inside laradock directory and execute this docker-compose command:

docker-compose up -d nginx mysql phpmyadmin
Enter fullscreen mode Exit fullscreen mode

The above command will pull and build only the used containers (nginx, mysql, phpmyadmin) and the basic laradock container named workspace. The pull and build process will take long time (and your internet connection too) for the first time.

After all done, you can check the containers statuses whether they are running or not by executing:

docker-compose ps
Enter fullscreen mode Exit fullscreen mode

Now, the only one thing you have to do is adding the my-awesome-laravel-app.test domain into you machine hosts file. For Windows, it should be in C:\Windows\System32\drivers\etc\hosts and for linux-based, it should be in /etc/hosts.


...

127.0.0.1   my-awesome-laravel-app.test

...

Enter fullscreen mode Exit fullscreen mode

Now, your awesome laravel app should be accessible by opening the http://my-awesome-laravel-app.test on your browser.

Creating database using phpMyAdmin

Don't forget to create your_awesome_database using phpMyAdmin. It's should be accessible in http://localhost:8080 . You can use the any given user credentials above to login, and make sure you fill the server form with mysql instead of localhost.

Recently if you have an error that the 8080 port already taken by the workspace, you can set PMA_PORT=8081 in laradock/.env file, restart the container using docker-compose restart phpmyadmin and open http://localhost:8081 instead.

Entering the Workspace Container bash

You might be forgot to run the composer install inside the laravel app. Don't worry, you can use the workspace bash that has all the command-line utilities needed for your laravel app. To enter the bash, make sure you are inside laradock directory in your CLI and execute this docker-compose command:

docker-compose exec --user=laradock workspace bash
Enter fullscreen mode Exit fullscreen mode

The directory starting point should be in /var/www/ and your laravel app should be here too. You can go there to execute composer install command and some artisan command like php artisan migrate or maybe create another project using composer's composer create-project laravel/laravel my-another-laravel-app command.


There are a lot of laradock services that I want to cover later, but you can explore it yourself. Have fun!

Laravel version used: 5.5 LTS
Laradock MySQL version used: 8.0.20
Enter fullscreen mode Exit fullscreen mode

Top comments (0)