loading...
Cover image for Setting Up A Laravel Local Dev Environment On Ubuntu 🐘🐧

Setting Up A Laravel Local Dev Environment On Ubuntu 🐘🐧

andrewbrooks profile image Andrew Brooks 👨‍💻 Updated on ・5 min read

Let's get a simple Laravel dev environment running on Ubuntu desktop 19.04 & 18.04 including a complete MySQL database connection.

This article assumes some familiarity with the Linux terminal.

Install PHP

Add and install the PHP 7.3 PPA

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.3

Verify the PHP version installed

php -v

Output:

PHP 7.3.8-1+ubuntu19.04.1+deb.sury.org+1 (cli) (built: Aug  7 2019 09:52:53) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.8-1+ubuntu19.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

Install MySQL database

sudo apt-get install php7.3-mysql
sudo apt-get install mysql-server
sudo mysql_secure_installation

Now you'll be presented with some prompts.

For a local dev environment I skip the 'Validate Password Plugin'.

You will be asked to enter a password for the root user.

From there remove the anonymous users, disallow the root user from remote access, and remove the test database.

When asked to reload privilege tables select yes.

Create a non-root user with root privilages

We will use this user when configuring our Laravel application later on.

Log into MySQL as root.

sudo mysql -u root -p

Run the following SQL to create a new user admin.

CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Enter exit to leave the MySQL CLI.

mysql> exit

Test out the new user by logging in as admin without using sudo.

mysql -u admin

You should see something like:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.27-0ubuntu0.19.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> _

Exit MySql and we'll move on to installing Composer.

mysql> exit

Install Composer

First, we need to update our package manager.

sudo apt update

Now we are going to install some dependencies needed for the Composer installation.

  • curl for downloading Composer
  • php-cli is needed to run the install
  • php-mbstring provides functions for a library used
  • git will allow Composer to download project dependencies
  • unzip for unzipping packages
sudo apt install curl php-cli php-mbstring git unzip

With that out of the way we can download the Composer installer.

Begin by moving into your home directory

cd ~

and starting the Composer installer download.

curl -sS https://getcomposer.org/installer -o composer-setup.php

Before we can run the installer it needs to be verified for corruption.

Visit https://composer.github.io/pubkeys.html and find the 'Installer Signature (SHA-384)'

Use the signature and run the following commands to verify your installer.

HASH=your_hash_goes_here
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

You should see the output of

Installer verified

otherwise you will need to re-download the installer and go through the verification steps again.

Run the installer

Now we are free to install Composer globally on the system.

sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Output:

All settings correct for using Composer
Downloading...

Composer (version 1.9.0) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

Lastly we need to update permissions to the composer directory.

sudo chown -R $USER ~/.composer/

Verify Composer is installed

⚠️ Do not run composer as root using sudo ⚠️

Simply run

composer

and you should see:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.9.0 2019-08-02 20:55:32

Time for Laravel!

But first, some dependencies.

sudo apt-get install php7.3-zip
sudo apt-get install php7.3-xml

Download the Laravel installer using Composer.

composer global require laravel/installer

Now we need to update the Linux $PATH

echo 'export PATH="$PATH:$HOME/.composer/vendor/bin"' >> ~/.bashrc

After updating the $PATH close your terminal window and open a fresh one.

Hello, World

Let's get a boilerplate Laravel app running on our localhost.

First we will need to create the database that we will be connecting to.

Log into MySql via the terminal using the admin user that was created earlier.

mysql -u admin

Now run the following SQL to create a database named laravel.

CREATE DATABASE laravel;

With our database created we can move to the Laravel side of things.

cd via the terminal into the folder you want to create your Laravel application in.

For me that's ~/dev/laravel/

Run the following command to scaffold the app:

laravel new hello-world

hello-world is just the name of the app so name it whatever you like.

Once this finishes cd into the new directory for your app.

cd hello-world

At this point we need to tell the Laravel app how to connect to our database.

For this we will edit the .env file in the root of the application.

sudo nano .env

The connection settings should look like this

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=admin
DB_PASSWORD=

You can save the changes from nano with ctrl+x-> 'y' -> [ENTER]

Now we need to test this connection.

For this we will edit /routes/web.php

It should end up looking like

Route::get('/', function () {
    // return view('welcome');
    try {
        DB::connection()->getPdo();
        $caught = false;
    } catch (Exception $e) {
        $caught = true;
        die("Could not connect to the database.  Please check your configuration. error:" . $e );
    }

    if(!$caught){
        echo 'Hello, world.';
    }
});

Now start the server by running

php artisan serve

Output:

Laravel development server started: <http://127.0.0.1:8000>

Now you can check it out in your browser at http://127.0.0.1:8000

You should see 'Hello, world.' printed to the screen signalling a successful connection to the database.

That's it! 🎉

You now have PHP 7.3, MySql, Composer, and the Laravel installer configured for your local Ubuntu development environment with a running starter Laravel app.


I'm Andrew, a full stack software developer from the deep south who makes internet things.

Hit me up on twitter @andrew_brooksie

Reach out if you have any questions or requests for future write-ups!

Posted on by:

andrewbrooks profile

Andrew Brooks 👨‍💻

@andrewbrooks

Full Stack Software Developer // #laravel is ♥️ I'm Andrew. Building things with code is my jam. Check out some of my writing or say hi!

Discussion

pic
Editor guide
 
 

Thanks, it works like charm ! I've shorten the process by simply running "sudo apt install composer" and to test the connection: "php artisan migrate" :-)