Laravel Aug 18 2019

How to deploy your Laravel app to Digital Ocean using Laravel Forge

In this tutorial I will be setting up my new Laravel website (ericbusch.ca) on Digital Ocean using Laravel Forge.

Laravel Forge makes it trivial to get your Laravel app up and running on Digital Ocean (and other providers).

However, there are a bunch of steps!

I've outlined all of the steps required to go from having your Laravel app in a GitHub repo to having it hosted on a server with a MySQL database, SSL certificate installed and a Queue Worker running.

If you have questions about any of the steps or get stuck, be sure to check out the free Laracasts course on Laravel Forge.

Let's begin!

Select Digital Ocean

Select Digital Ocean from the list of supported servers on Laravel Forge.

Configure your server

I made the following changes to my server but feel free to configure your server to meet your needs. Once your done configuring your server, click [Create Server].

  • Region

  • Server Size

  • Database

  • Enable Digital Ocean Weekly Backups

Copy passwords

While your server is being provisioned, save the provided Sudo Password and Database Password to somewhere safe and secure like in 1Password or LastPass.

Select your server

In the Active Servers section, you will see a list of your servers. Once your new server's status is set to Active, click the server name.

Select default site

Click on the "default" domain in the Active Sites section.

Select git repository

Select Git Repository to connect this site with an existing repository on Github.

Enter repository details

Add the name of your repository and configure any other settings you need. Then click the [Install Repository] button.

Wait...

After installing the repository, you'll need to wait a few moments.

Deploy

Click on the [Deploy Now] button in the Deployment box to deploy your code to Digital Ocean.

[optional] Enable quick deploy

Click the [Enable Quick Deploy] button to enable push-to-master deploys.

Update nameservers

Log into your Domain Registrar (I'm using Hover in this example) and point your nameservers to Digital Ocean.

  1. ns1.digitalocean.com

  2. ns2.digitalocean.com

  3. ns3.digitalocean.com

Go to Digital Ocean's "Domains" section

Go to Digital Ocean > Networking > Domains

Add domain

Add your domain then click the [Add Domain] button.

Add A record

Add a new A record with the following details and click the [Create Record] button.

  • HOSTNAME @

  • WILL DIRECT TO your droplet's name

Add CNAME record

Add a CNAME record and click the [Create Record] button.

  • HOSTNAME www

  • IS AN ALIAS OF @

Create a database

If your Laravel app requires a database, go back to the list of servers on Laravel Forge.

Enter database details

Click the new server you created and then click the Database menu item in the left sidebar and enter your database details. Once done, click the [Add Database] button.

Set up SSH keys

To connect your SSH key to Laravel Forge click the SSH Keys menu item in the left sidebar and add the name of your SSH key and the Public Key then click the [Add Key] button.

TIP You can quickly get your Public Key within Terminal by entering cat ~/.ssh/id_rsa.pub | pbcopy command which copies your Public Key to your Mac's clipboard ready to be pasted into the Public Key textarea.

Test database connection

To test the connection to your database open Sequel Pro (which does NOT currently work with MySQL 8) or TablePlus (which does work with MySQL 8) and add a new SSH connection with the following details:

  • Name: Any name

  • MySQL Host: 127.0.0.1

  • DB User: (Name of User created when you created the database above)

  • DB Password: (Password created when you created the database above)

  • Database: (Name of Database)

  • SSH Host: IP address of site (listed on Digital Ocean)

  • SSH User: forge

  • SSH Key: ~/.ssh/id_rsa

Sequel Pro

TablePlus

Update .env values

Now you need to edit your .env values. To do this go to the Sites drop down menu in Laravel Forge and select your new Site.

Click Environment

In the left sidebar, click the Environment menu item then click the [Edit Environment] button

Edit Environment

Update the .env with necessary production values. Values you might update in the .env file are:

  • APP_NAME

  • DB_DATABASE

  • DB_USERNAME

  • DB_PASSWORD

  • QUEUE_CONNECTION

  • MAIL_DRIVER

Associate with domain

Currently we haven't associated a domain. Let's fix that. For your Site, click the Meta link in the left sidebar. In the Domain section, replace default your website's domain name in the Site Domain field then click the [Update Domain] button.

Set up SSL

To configure your site to use SSL (which is recommended), click the SSL link in the left sidebar then select LetsEncrypt.

Obtain SSL certificate

You will see the Domains you are acquiring an SSL certificate for. Click the [Obtain Certificate] button to complete the process.

[optional] Start Queue Worker

If you have queued jobs and need a queue worker to trigger those jobs click the Queue link in the left sidebar. Fill in the details (as per your requirements). For my site, I'm just going to use a database connection which is the only change I make to the Worker. Click the [Start Worker] button after you have configured all of the fields.

Now your site is live!

Congrats, enjoy and build something awesome.

Last updated on April 2021