Create Lumen development environment in 1 minute
Tags: laravel, webdev, docker, devops
Published: 2021-01-12 09:11:36

So recently I need to study lumen (from Laravel). I used Laravel back in version 4.2. A lot of things has changed. I need to setup the environment very quickly and dive right into writing application. 

Having not so pleasant setting up Laravel (with Homestead, Vagrant...) I decide to find a method that help me (and other people like me) to get started quickly. After a few hours, I finally have the setup I really like.

TLDR:
Here is the video:
https://www.youtube.com/watch?v=nympC_8CWwE&feature=youtu.be
Here is the git repo:
https://github.com/datmt/docker-microservices


For the patient reader, read on.
# Step 0: Clone the repo
This is a must.

# Step 1: choose a domain name, put in your hosts file.
Don't worry, you don't need to buy any domain. You can pick any domain, even `google.com`. 

In  my case, I used `cnn.com`.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/t8vmbhly1zsilrpvtoud.png)

# Step 2: Update the domain in default.conf file
Now, in the lumen-dev folder, there is a file called default.conf. This is the default configuration for nginx server. 

Find the part says `cnn.com` and replace it with your own domain.

This is the content of the default.conf file
```
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    root   /usr/share/nginx/html;
   
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php_server:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}


server {
    listen 80 default_server;

    
    root /usr/share/nginx/html/public;
    index index.php index.html index.htm;

    server_name cnn.com;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php_server:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }


}

```

# Step 3: Install composer packages
cd to `src` folder and run `composer install`. In case you don't have composer installed, download the `lumen.tar.gz` file under `archives` and extract it. There is a vendor folder there. 
Copy that vendor folder to `src/`.

# Step 4: Edit your port
My default configuration use port 8089. If you want to use other port, change it accordingly. One caution if you use port 80 is to make sure that port is free. Many applications use port 80 so you may not be able to start the application.
This is the docker-compose.yml file:
```
version: '3.8'

services:
    nginx:
        image: nginx:1.19.6
        container_name: nginx
        volumes:
            - ./src:/usr/share/nginx/html
            - ./default.conf:/etc/nginx/conf.d/default.conf
        ports:
            - 8089:80
        links:
            - php_server
    php_server:
        container_name: php_server
        image: php:7.4.14-fpm-buster
        volumes:
            - ./src:/usr/share/nginx/html


```
# Step 5: Use docker-compose to start the app
In `lumen-dev` folder (where you have docker-compose.yml file), run
```
docker-compose up -d
```
Now, you can open your browser and access your application at the port you choose. 

Have questions? Please let me know