First we installed Composer so we can get PHP dependencies:
# Become user root
# Pipe the composer installer to php, and pass the installer some flags
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Next, we want to get a Laravel project from Github.
We'll need access to Github. I chose to create a Deploy Key within Github, so the server has read-only access to a specific repository.
# Create an ssh key in /home/fideloper/.ssh
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "sfh-start-here"
# Copy the output into a new Deploy key within Github, under the repository settings
# Test our connection to github
ssh -T email@example.com
We copy the contents of the public at
/home/fideloper/.ssh/id_rsa.pub to Github while creating the Deploy key.
Then we can clone the repository. We clone it into user fideloper's home directory since we have permission to write new files there since we are logged in as user fideloper.
# Delete old webroot, which only had an index.php file in it
# We'll put our laravel application in this location
sudo rm -rf /var/www/html
# Ensure we have git
# sudo apt-get install -y git
# Go to our home directory and clone the repository into a new directory named "html"
git clone https://github.com/Servers-for-Hackers/server-start-here html
/etc/nginx/sites-available/default file, we update the
root to point to the Laravel web root, which is the
Edit the file
/etc/nginx/sites-available/default to update the
Then test the change and reload Nginx:
sudo nginx -t
sudo service nginx reload
We're ready to setup the application. First, we'll move it from user fideloper's home directory, to the
/var/www/html location that Nginx expects web files to live in.
Since the Laravel application contains a
public directory meant to be the web root, our change to the Nginx configuration will be correct when it points to
# Put the application in the /var/www directory
sudo mv ~/html /var/www/
# Create a new .env file
cp .env.example .env
# Install zip/unzip so composer can get Git-based dependencies
# from "dist" instead of having to clone each repository (slow!)
sudo apt-get install -y zip unzip
# Install composer dependencies
# Generate a new application key in the .env file
php artisan key:generate
# Ensure files are writable (particularly `storage` and `bootstrap` need to be writable by Laravel!)
# Otherwise we'll get the blank white screen of death
# We can see that PHP is running as user/group "www-data"
ps aux | grep php
# So we change our web files to that user/group, thus letting PHP write to those locations
sudo chown -R www-data: /var/www/html