Laravel Docker #6 - Connect Laravel with PostgreSQL Database
Sometimes, we want to use PostgreSQL database instead of MySQL in our Laravel projects. Docker makes it very simple to setup Laravel with PostgreSQL in a clean way. In this tutorial we will see how to connect Laravel with PostgreSQL using Docker.
This guide is explained step by step in very simple words. Even if you are just starting with Laravel and Docker, you can follow this guide and get your app running with PostgreSQL database.

Step 1: Create Laravel Project
First, create a fresh Laravel project by running the command below:
laravel new my-appStep 2: Create Dockerfile
Now, create a Dockerfile in your project root. This file will setup PHP, Composer, and PostgreSQL extension inside Docker.
Dockerfile
FROM php:8.3-fpm
WORKDIR /var/www/html
RUN apt-get update & apt-get install -y     libzip-dev     unzip     Libpq-dev     && docker-php-ext-install zip pdo pdo_pgsql
# Install Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/html
# Install PHP dependencies
RUN composer install
RUN chown -R www-data:www-data /var/www/html
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache /var/www/html/vendor
RUN chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache /var/www/html/vendor
EXPOSE 80Step 3: Create NGINX Config File
Next, create the NGINX default configuration file to handle PHP requests and routing.
.docker/apache/default.conf
server {
    listen 80;
    index index.php index.html;
    root /var/www/html/public;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass web:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }
    location ~ /\.ht {
        deny all;
    }
}Step 4: Create docker-compose.yml
Now, create docker-compose.yml file. This file will configure Laravel with Nginx and PostgreSQL services.
docker-compose.yml
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    image: my-laravel-app
    volumes:
      - .:/var/www/html
      - /var/www/html/storage
      - /var/www/html/bootstrap/cache
      - /var/www/html/vendor
    working_dir: /var/www/html
    user: "www-data"
    depends_on:
      - db
  nginx:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:  
      - .:/var/www/html
      - ./.docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web
  
  db:
    image: postgress:15
    environment:
      POSTGRES_DB: laravel
      POSTGRES_USER: laravel
      POSTGRES_PASSWORD: secret
    ports:
      - "5433:5432"
    volumes:
      - dbdata:/var/lib/postgresql/data
volumes:
  dbdata:Run Laravel App:
All the required steps have been done, now you have to type the given below command and hit enter to run the Laravel app:
php artisan serveNow, Go to your web browser, type the given URL and view the app output:
http://localhost:8080Now you can use.
