How to Deploy Lumen on a Vps


I built a super simple app last week, it gets a ping when sales have been made on my Gumroad product and send it to a Slack channel. I know I could have done it with Zapier of IFTT but they’re either super limited or super slow.

I wanted a minimalistic framework to do it (it’s 1 route and 1 API call). I also wanted a PHP based framework, it’s way easier to host on my VPS.

I chose Lumen, it’s a “mini-Laravel”. I didn’t know it, it looked pretty well done and easy to use. So I gave it a try.

The problem is, the documentation is also super minimalistic… I spend some time browsing the web looking for a tutorial on how to deploy Lumen in production on a VPS. I didn’t find any, so here is how I did it:

  • Git clone or zip your project and put it in your web folder, usually /var/www/html/
  • Double-check the permissions, it should be readable by www-data
  • Install composer, and run composer install

I use nginx as a webserver, to install a new app copy the default config file:  cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mynewapp.conf

And remplace the content by: 

server {
	listen 80;
	root /var/www/html/mynewapp/public;

	index index.html index.htm index.php;

	server_name mynewapp.com;

	location / {
	   try_files $uri $uri/ /index.php?$args;
       }

	# pass PHP scripts to FastCGI server
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;

		# With php-fpm (or other unix sockets):
		fastcgi_pass unix:/run/php/php7.3-fpm.sock;
	}

	# If you want to cache the static files
	location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
		expires max;
		log_not_found off;
	}
	#
}

Then link your file to the site-enabled directory: ln -s /etc/nginx/sites-available/mynewapp /etc/nginx/sites-enabled/

Check the nginx configuration: nginx -t, and restart it service nginx restart. You should be good!

It was quite easy after all, but it’s better with a tutorial, isn’t it?