## Composer First we installed Composer so we can get PHP dependencies: ```bash # Become user root sudo su # 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 ``` ## GitHub 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. ```bash # Create an ssh key in /home/fideloper/.ssh ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "sfh-start-here" cat ~/.ssh/id_rsa.pub # Copy the output into a new Deploy key within Github, under the repository settings # Test our connection to github ssh -T git@github.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. ```bash # 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 which git git --version # sudo apt-get install -y git # Go to our home directory and clone the repository into a new directory named "html" cd ~ git clone https://github.com/Servers-for-Hackers/server-start-here html ``` ## Nginx Within the `/etc/nginx/sites-available/default` file, we update the `root` to point to the Laravel web root, which is the `public` directory. Edit the file `/etc/nginx/sites-available/default` to update the `root` directive: ``` # Change: root /var/www/html; # To: root /var/www/html/public; ``` Then test the change and reload Nginx: ```bash sudo nginx -t sudo service nginx reload ``` ## Application 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 `/var/www/html/public`. ```bash # Put the application in the /var/www directory sudo mv ~/html /var/www/ # Create a new .env file cd /var/www/html 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 composer install # 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 ```