<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kenean </title>
    <description>The latest articles on Forem by Kenean  (@kenean50).</description>
    <link>https://forem.com/kenean50</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F441915%2Fc33f9723-5ad8-47fd-ac6d-66f1c158fc2d.jpg</url>
      <title>Forem: Kenean </title>
      <link>https://forem.com/kenean50</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kenean50"/>
    <language>en</language>
    <item>
      <title>Automate your Laravel app deployment with Github Actions</title>
      <dc:creator>Kenean </dc:creator>
      <pubDate>Fri, 10 Dec 2021 21:56:35 +0000</pubDate>
      <link>https://forem.com/kenean50/automate-your-laravel-app-deployment-with-github-actions-2g7j</link>
      <guid>https://forem.com/kenean50/automate-your-laravel-app-deployment-with-github-actions-2g7j</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvwn3f4vmb5lz5yqf50m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flvwn3f4vmb5lz5yqf50m.png" alt="Automate your Laravel app deployment with Github Actions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello again my fellow artisans!!&lt;/p&gt;

&lt;p&gt;In this article, I will go through the step-by-step process of how you can automate your Laravel app deployment on a VPS, for free of course.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting the scene...
&lt;/h3&gt;

&lt;p&gt;I am a part of a small team working on a Laravel project which is deployed on a VPS. Each of our team members will work on a particular task and when it's ready for production there is always a need for someone access to the server to deploy each change that is being pushed to our GitHub repo.&lt;/p&gt;

&lt;p&gt;This become a very repetitive and unpleasant task for all of us and a solution was needed within our scale and budget, that's when we turned to the mighty &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;Github Actions&lt;/a&gt; to automate our workflows.&lt;/p&gt;

&lt;p&gt;Let's dive into the simplified version of our workflow setup guide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assumptions
&lt;/h3&gt;

&lt;p&gt;In this guide, I assume you have the followings points in check.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You have a configured Linux server that is capable of running a Laravel application and Git is installed on it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You have a Laravel application Github repository. If you don't have one you can follow the first 2 sections on my previous post here &lt;a href="https://dev.to/kenean50/free-serverless-laravel-deployment-1e9n"&gt;free-serverless-laravel-deployment&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;On typical workflow a developer will create a new branch for a given task and make a pull request to the &lt;code&gt;main/master&lt;/code&gt; branch or make the changes on the &lt;code&gt;main/master&lt;/code&gt; branch it self (not advisable) and do a push. &lt;/p&gt;

&lt;p&gt;Both &lt;code&gt;pull request&lt;/code&gt; and &lt;code&gt;push&lt;/code&gt; are events on a given branch we can subscribe to with Github Actions. Therefor we can define a set of instructions that should be carried out when ever the given events happen on our repository. These instructions might be running our &lt;code&gt;Tests&lt;/code&gt;, &lt;code&gt;Builds&lt;/code&gt;, and &lt;code&gt;Deployments&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create deployment script
&lt;/h3&gt;

&lt;p&gt;The first thing we will do is create a deployment script that will contain all the necessary commands to deploy and run our application.&lt;/p&gt;

&lt;p&gt;In the root directory of your application create a folder called &lt;code&gt;.scripts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Inside the &lt;code&gt;.scripts&lt;/code&gt; directory create a file called &lt;code&gt;deploy.sh&lt;/code&gt; with the following content.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Refer to comments on the scripts to know what we are doing on each line.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a workflow
&lt;/h3&gt;

&lt;p&gt;A Github action workflow is a set of instructions that consists different jobs and steps that can be triggered on events we mentioned above.&lt;/p&gt;

&lt;p&gt;Workflows for a repository are stored inside &lt;code&gt;.github/workflows&lt;/code&gt; in the root directory of your applications.&lt;/p&gt;

&lt;p&gt;create a file called &lt;code&gt;deploy.yml&lt;/code&gt; inside &lt;code&gt;.github/workflows&lt;/code&gt; folder with the following content.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Commit the newly created files
&lt;/h3&gt;

&lt;p&gt;Now we have created all the necessary files for our automation let's commit them with the following commands.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ git add deploy.sh deploy.yml 
$ git commit -m "Deployment automation"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Create deployment branch and push to Github
&lt;/h3&gt;

&lt;p&gt;If you notice on our &lt;code&gt;deploy.sh&lt;/code&gt; and &lt;code&gt;deploy.yml&lt;/code&gt; files we have referred to a branch called &lt;code&gt;production&lt;/code&gt;. we will use this branch to add commits that are production-ready with a &lt;code&gt;push&lt;/code&gt; or &lt;code&gt;pull request&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Create this branch for your repository with the following git command and push them to GitHub.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ git checkout -b production 
$ git push -u origin production


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Setting up ssh key
&lt;/h3&gt;

&lt;p&gt;It's time to set up the connection between our server and Github's.&lt;/p&gt;

&lt;p&gt;To do this we first need to generate a new ssh key pair on our server. &lt;/p&gt;

&lt;p&gt;Run this command on your server to generate the ssh keys.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ ssh-keygen -t rsa -b 4096 -C "email@example.com"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When prompt to enter a file name and passphrase, just press enter and accept the defaults. &lt;/p&gt;

&lt;p&gt;This will create 2 ssh keys, public and private inside your home directory &lt;code&gt;.ssh/&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;And now add your newly generated ssh private key to the ssh-agent with the following commands.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And let's add our public key to the &lt;code&gt;authorized_keys&lt;/code&gt; file on our server with the following command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ cat ~/.ssh/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Copying ssh keys to Github
&lt;/h3&gt;

&lt;p&gt;Our above setup will allow:-&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Github Actions to authenticate itself to our server and run our &lt;code&gt;deploy.sh&lt;/code&gt; script.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For this to work, we have to let Github know how to authenticate to our server.&lt;/p&gt;

&lt;p&gt;As we prepared our ssh key above will provide it to GitHub alongside the server &lt;code&gt;HOST&lt;/code&gt;, the ssh &lt;code&gt;PORT&lt;/code&gt;, the ssh private &lt;code&gt;KEY&lt;/code&gt;, and the &lt;code&gt;USERNAME&lt;/code&gt; of our server.&lt;/p&gt;

&lt;p&gt;To do this go to your Github account on your browser and open your repository.&lt;/p&gt;

&lt;p&gt;Click on setting like shown below &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi19dq8kcjrgukfhefs0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi19dq8kcjrgukfhefs0f.png" alt="Github setting"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And on the sidebar menu click on secrets &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gymjr3sypgpgwnwy2xp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gymjr3sypgpgwnwy2xp.png" alt="github add button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Action Secret page, click on add a new repository secret.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotmbn6bzhzruvwhjpens.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fotmbn6bzhzruvwhjpens.png" alt="add button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the new secret page, add the following keys one by one.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;HOST&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;HOST&lt;/code&gt; secret is your server IP address, put in the &lt;code&gt;HOST&lt;/code&gt; keyword in the name field and your server IP address in the value field.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;PORT&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;PORT&lt;/code&gt; secret is your ssh port. use the &lt;code&gt;PORT&lt;/code&gt; keyword in the name and &lt;code&gt;22&lt;/code&gt; in the value to use the default ssh port.&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;code&gt;SSHKEY&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;SSHKEY&lt;/code&gt; secret is the private ssh key we generated on our server. normally you wouldn't share your private ssh key with anyone but since we are doing automation it's required.&lt;/p&gt;

&lt;p&gt;Use the &lt;code&gt;SSHKEY&lt;/code&gt; keyword for the name field.&lt;/p&gt;

&lt;p&gt;To copy your private key value go to your server and run the following command.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ cat ~/.ssh/id_rsa


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This will print your private ssh key on your terminal, copy it and past it inside the value field.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;USERNAME&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;The last secret would be the &lt;code&gt;USERNAME&lt;/code&gt; you want to authenticate with. &lt;/p&gt;

&lt;p&gt;To get this you can run &lt;code&gt;whoami&lt;/code&gt; on your server and get the value. Then use the &lt;code&gt;USERNAME&lt;/code&gt; keyword for the name field and past in the value.&lt;/p&gt;

&lt;p&gt;when you are done you should have your secrets looking something like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68b789725qo14vxl0d38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F68b789725qo14vxl0d38.png" alt="github secrets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Our server to authenticate to Github and fetch the latest commits on our repository.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to Github allow access to our server we have to provide the ssh public key we generated earlier.&lt;/p&gt;

&lt;p&gt;if we have multiple repositories we can provide the public key at the account level, but if it is just one repository we can provide it in the repository and allow access only to that one repository on our account.&lt;/p&gt;

&lt;p&gt;To do that go to your repository settings again and click on Deploy keys &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38a6vu6hd907h01b9jyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F38a6vu6hd907h01b9jyq.png" alt="deploy keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add deploy keys..&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgit3i9avd1d099bg21e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgit3i9avd1d099bg21e.png" alt="add deploy keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give it a title that helps you remember the server, like &lt;code&gt;PROD_SERVER&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30v4rkqh2p0u5ixxqslr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30v4rkqh2p0u5ixxqslr.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And for the key field value go to your server and print your public key with the following command and copy it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$ cat ~/.ssh/id_rsa.pub


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Don't check to allow write access and just click on add key button. &lt;/p&gt;

&lt;p&gt;The last thing would be to change our remote origin on our server to use SSH instead of HTTPS and do a fetch to get the new commits on the server&lt;/p&gt;

&lt;p&gt;To do that go to your Github repository and click on the &lt;code&gt;code&lt;/code&gt; button and copy the link on the ssh tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyen82i3ao46aovd12ss.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyen82i3ao46aovd12ss.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then on your server go to your deployed application directory, most commonly inside &lt;code&gt;/var/html/www&lt;/code&gt; and run the following command.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
git fetch


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;replace the URL with the one you copied.&lt;/p&gt;

&lt;p&gt;Give your deploy.sh script execution permission &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo chmod +x ./REPOSITORY/.scripts/deploy.sh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There you have it, my friends, you have now a Laravel application deployment automation. create a test commit and push it to your &lt;code&gt;production&lt;/code&gt; branch to see the magic happen.&lt;/p&gt;

&lt;p&gt;You can go crazy with it by adding in more workflows for your test builds, staging environments, etc…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsodyq91hjnouja2955oa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsodyq91hjnouja2955oa.gif" alt="mic drop"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>github</category>
      <category>devops</category>
    </item>
    <item>
      <title>Free Serverless Laravel Deployment </title>
      <dc:creator>Kenean </dc:creator>
      <pubDate>Sat, 09 Oct 2021 12:54:17 +0000</pubDate>
      <link>https://forem.com/kenean50/free-serverless-laravel-deployment-1e9n</link>
      <guid>https://forem.com/kenean50/free-serverless-laravel-deployment-1e9n</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9ndmmz01bmmc5w2tg9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs9ndmmz01bmmc5w2tg9n.png" alt="Free Serverless Laravel Deployment"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have a small Laravel application and you don't want to go through the trouble of setting your own VPS or something like &lt;a href="https://vapor.laravel.com" rel="noopener noreferrer"&gt;Laravel Vapor&lt;/a&gt; you might want to read this one through.&lt;/p&gt;

&lt;p&gt;So in this ride we will see how we can set up and deploy our Laravel application on a serverless environment called &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;, including automated deployments and previews with out any cost.&lt;/p&gt;

&lt;p&gt;At this point you are probably thinking this sound too good to be true. Well... you are right, there are of course some gotchas. &lt;/p&gt;

&lt;p&gt;The primary thing is you have to find other ways to host and manage your database and other services your application need. &lt;/p&gt;

&lt;p&gt;And this set up would not be a replacement for the more robust deployment strategies on AWS and Laravel Vapor. &lt;/p&gt;

&lt;p&gt;Now we got that out of the way, Lets dig in! &lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a Laravel application
&lt;/h3&gt;

&lt;p&gt;If you already have a project you can skip this step. I will go ahead and create a new one using composer for the sake of clarity.&lt;/p&gt;

&lt;p&gt;We will call our app &lt;strong&gt;laravel-vercel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open your terminal and run:&lt;br&gt;
&lt;code&gt;composer create-project laravel/laravel laravel-vercel&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Initialize a Git repository and push to Github
&lt;/h3&gt;

&lt;p&gt;After the application is created, we will need to go into the root directory and set up Git and push our code to Github.&lt;/p&gt;

&lt;p&gt;Run these commands to set up a Git repository:&lt;br&gt;
&lt;code&gt;cd laravel-vercel&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git init&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git commit -m "init"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now lets create a new repository on Github and push our application.&lt;/p&gt;

&lt;p&gt;Go to the Github repository creation page &lt;a href="https://github.com/new" rel="noopener noreferrer"&gt;here&lt;/a&gt; and create a repository called &lt;strong&gt;laravel-vercel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiari4qyzxu1cko50rq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiari4qyzxu1cko50rq4.png" alt="screencapture-github-com-new-1633704211118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After we create our repository we will see a page similar to the following image.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gmj1znclf786ps0vgbr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3gmj1znclf786ps0vgbr.png" alt="screencapture-github-com-kenean-50-laravel-vercel-1633704702417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy and run the commands highlighted in the image from your newly create Github repository page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create Vercel configuration files
&lt;/h3&gt;

&lt;p&gt;So for this magic to happen we have to create 2 Vercel configuration files in our application.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;app/index.php&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Create a php file called &lt;code&gt;index.php&lt;/code&gt; within a folder called &lt;code&gt;api&lt;/code&gt; in your application root directory.&lt;br&gt;
And then add the following content to it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;

&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="k"&gt;__DIR__&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/../public/index.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The default entry point for the serverless function on vercel is the &lt;code&gt;app&lt;/code&gt; directory. the above script will make sure the request is forwarded to our Laravel app entry point &lt;code&gt;public/index.php&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;vercel.json&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Create a new file again called &lt;code&gt;vercel.json&lt;/code&gt; in the root directory. This file will be responsible for setting up our Vercel configurations. This is where the real magic happens.&lt;/p&gt;

&lt;p&gt;Add the following content to your file and we will go through them in details.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"functions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"api/index.php"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"runtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"vercel-php@0.3.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"routes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/(.*)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"dest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/api/index.php"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_NAME"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Laravel Vercel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_ENV"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"production"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_DEBUG"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"false"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_URL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://laravel-vercel.vercel.app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

        &lt;/span&gt;&lt;span class="nl"&gt;"APP_CONFIG_CACHE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/config.php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_EVENTS_CACHE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/events.php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_PACKAGES_CACHE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/packages.php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_ROUTES_CACHE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/routes.php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APP_SERVICES_CACHE"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/services.php"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"VIEW_COMPILED_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"CACHE_DRIVER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"array"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"LOG_CHANNEL"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stderr"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SESSION_DRIVER"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cookie"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"VIEW_COMPILED_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/views"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"SSR_TEMP_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/tmp/ssr"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"NODE_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h5&gt;
  
  
  version
&lt;/h5&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;version&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
&lt;span class="c1"&gt;//This make sure to run our code on Vercel version 2&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h5&gt;
  
  
  functions
&lt;/h5&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;functions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api/index.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;runtime&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vercel-php@0.3.1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;api/index.php&lt;/code&gt; key will define our app entry point which will be forwarded to the Laravel app entry point &lt;code&gt;public/index.php&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"runtime": "vercel-php@0.3.1"&lt;/code&gt; will define our PHP runtime, which is basically a module that transform our code into &lt;a href="https://vercel.com/docs/concepts/functions/introduction" rel="noopener noreferrer"&gt;Serverless Functions&lt;/a&gt; for Vercel. &lt;/p&gt;

&lt;p&gt;In this set up we are using the community runtime for PHP called &lt;a href="https://github.com/juicyfx/vercel-php" rel="noopener noreferrer"&gt;vercel-php&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;
  
  
  routes
&lt;/h5&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;routes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/(.*)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/index.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The routes will tell Vercel to forward all URIs to our application serverless function.&lt;/p&gt;

&lt;h5&gt;
  
  
  env
&lt;/h5&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;env&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_NAME&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Laravel Vercel&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_ENV&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;production&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_DEBUG&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_URL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://laravel-vercel.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_CONFIG_CACHE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/config.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_EVENTS_CACHE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/events.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_PACKAGES_CACHE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/packages.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_ROUTES_CACHE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/routes.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;APP_SERVICES_CACHE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/services.php&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VIEW_COMPILED_PATH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CACHE_DRIVER&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;array&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LOG_CHANNEL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stderr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SESSION_DRIVER&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cookie&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;VIEW_COMPILED_PATH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/views&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SSR_TEMP_PATH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp/ssr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;NODE_PATH&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As you already probably guessed this is going to be our application environment variable section. you can pass environment variables you have on your Laravel app &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;NOTICE! do not pass sensitive environment values like &lt;code&gt;APP_KEY&lt;/code&gt; and database config values since they will be tracked by git and would be visible on your repo. We later will see how we can pass those values in more secure way.&lt;/p&gt;

&lt;p&gt;Some of the unusual variables are Laravel's default values that we don't normally see in the our &lt;code&gt;env&lt;/code&gt; file. we have to pass them here since serverless applications are state-less and the only folder we can reliably modify at run-time is Vercel’s tmp folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Commit and push Changes to Github
&lt;/h3&gt;

&lt;p&gt;lets push our newly created file to our Github repo&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git commit -m "add Vercel configs"&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git push orgin Main&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Link our repository to Vercel
&lt;/h3&gt;

&lt;p&gt;Create your free account on &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; using your Github account.&lt;/p&gt;

&lt;p&gt;Once you are done, on your Vercel Dashboard you will see a button called New Project, something similar this the following image.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fun46albwgp398n4puok3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fun46albwgp398n4puok3.png" alt="screencapture-vercel-com-dashboard-1633776362674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you click on it you see the creation page and your Github repositories listed, on a much similar page like the following.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6k7mnuvusskh7x5nhsj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6k7mnuvusskh7x5nhsj.png" alt="screencapture-vercel-com-new-1633777753834"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Import on your &lt;code&gt;laravel-vercel&lt;/code&gt; repository (or what ever you named yours).&lt;/p&gt;

&lt;p&gt;If you are not seeing your repositories listed, click on the &lt;code&gt;Adjust GitHub App Permissions&lt;/code&gt; link and set up the permissions there.&lt;/p&gt;

&lt;p&gt;Once you click on import you will see the following like page&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ffifxz4ez71xiga6ep8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ffifxz4ez71xiga6ep8.png" alt="Screenshot from 2021-10-09 15-00-52"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can click on &lt;code&gt;skip&lt;/code&gt; for the Create a Team section and go to the Configure Project section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy85ycr5cjyato37vbcnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy85ycr5cjyato37vbcnx.png" alt="Screenshot from 2021-10-09 15-01-51"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the Environment Variable section, we will add our sensitive Laravel app env variables. &lt;br&gt;
These are:&lt;br&gt;
&lt;code&gt;APP_KEY&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_CONNECTION&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_HOST&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_PORT&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_DATABASE&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_USERNAME&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_PASSWORD&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Finally, click on &lt;code&gt;Deploy&lt;/code&gt; and sit back to see the magic happen.&lt;/p&gt;

&lt;p&gt;Your application will get built and deployed on Vercel. and you will see the following success page with a Vercel domain name to your application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pr9q86z2c5ebrtrd63f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pr9q86z2c5ebrtrd63f.png" alt="screencapture-vercel-com-kenean-50-laravel-vercel-1633782165938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you have new changes to be deployed all you have to do is commit and push your changes to your Github repository Main branch and it will automatically get built and deployed to your server, how cool is that! &lt;/p&gt;

&lt;p&gt;If you want to change the domain name to your app you can go to the settings tab on Vercel and there is a whole page to set up and manage your domain.&lt;/p&gt;

&lt;p&gt;Peace out ✌️&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>serverless</category>
    </item>
  </channel>
</rss>
