An example deploying Next / Postgres / Nginx to a Ubuntu Linux server.
TypeScript
1,519
39 commits
updated Jan 31, 2026
This repo shows how to deploy a Next.js app and a PostgreSQL database on a Ubuntu Linux server using Docker and Nginx. It showcases using several features of Next.js like caching, ISR, environment variables, and more.
A DNS record pointing to your server IPv4 addressSSH into your server:
ssh root@your_server_ip
Download the deployment script:
curl -o ~/deploy.sh https://raw.githubusercontent.com/leerob/next-self-host/main/deploy.sh
You can then modify the email and domain name variables inside of the script to use your own.
Run the deployment script:
chmod +x ~/deploy.sh
./deploy.sh
This demo tries to showcase many different Next.js features.
I've included a Bash script which does the following:
.env file with your Postgres database credsOnce the deployment completes, your Next.js app will be available at:
http://your-provided-domain.com
Both the Next.js app and PostgreSQL database will be up and running in Docker containers. To set up your database, you could install npm inside your Postgres container and use the Drizzle scripts, or you can use psql:
docker exec -it myapp-db-1 sh
apk add --no-cache postgresql-client
psql -U myuser -d mydatabase -c '
CREATE TABLE IF NOT EXISTS "todos" (
"id" serial PRIMARY KEY NOT NULL,
"content" varchar(255) NOT NULL,
"completed" boolean DEFAULT false,
"created_at" timestamp DEFAULT now()
);'
For pushing subsequent updates, I also provided an update.sh script as an example.
If you want to run this setup locally using Docker, you can follow these steps:
docker-compose up -d
This will start both services and make your Next.js app available at http://localhost:3000 with the PostgreSQL database running in the background. We also create a network so that our two containers can communicate with each other.
If you want to view the contents of the local database, you can use Drizzle Studio:
bun run db:studio
docker-compose ps – check status of Docker containersdocker-compose logs web – view Next.js output logsdocker-compose logs cron – view cron logsdocker-compose down - shut down the Docker containersdocker-compose up -d - start containers in the backgroundsudo systemctl restart nginx - restart nginxdocker exec -it myapp-web-1 sh - enter Next.js Docker containerdocker exec -it myapp-db-1 psql -U myuser -d mydatabase - enter Postgres db6,147 followers · starred Oct 2024
72 followers · starred Oct 2024
136 followers · starred Oct 2024
845 followers · starred Oct 2024
An example deploying Next / Postgres / Nginx to a Ubuntu Linux server.
TypeScript
1,519
39 commits
updated Jan 31, 2026
This repo shows how to deploy a Next.js app and a PostgreSQL database on a Ubuntu Linux server using Docker and Nginx. It showcases using several features of Next.js like caching, ISR, environment variables, and more.
A DNS record pointing to your server IPv4 addressSSH into your server:
ssh root@your_server_ip
Download the deployment script:
curl -o ~/deploy.sh https://raw.githubusercontent.com/leerob/next-self-host/main/deploy.sh
You can then modify the email and domain name variables inside of the script to use your own.
Run the deployment script:
chmod +x ~/deploy.sh
./deploy.sh
This demo tries to showcase many different Next.js features.
I've included a Bash script which does the following:
.env file with your Postgres database credsOnce the deployment completes, your Next.js app will be available at:
http://your-provided-domain.com
Both the Next.js app and PostgreSQL database will be up and running in Docker containers. To set up your database, you could install npm inside your Postgres container and use the Drizzle scripts, or you can use psql:
docker exec -it myapp-db-1 sh
apk add --no-cache postgresql-client
psql -U myuser -d mydatabase -c '
CREATE TABLE IF NOT EXISTS "todos" (
"id" serial PRIMARY KEY NOT NULL,
"content" varchar(255) NOT NULL,
"completed" boolean DEFAULT false,
"created_at" timestamp DEFAULT now()
);'
For pushing subsequent updates, I also provided an update.sh script as an example.
If you want to run this setup locally using Docker, you can follow these steps:
docker-compose up -d
This will start both services and make your Next.js app available at http://localhost:3000 with the PostgreSQL database running in the background. We also create a network so that our two containers can communicate with each other.
If you want to view the contents of the local database, you can use Drizzle Studio:
bun run db:studio
docker-compose ps – check status of Docker containersdocker-compose logs web – view Next.js output logsdocker-compose logs cron – view cron logsdocker-compose down - shut down the Docker containersdocker-compose up -d - start containers in the backgroundsudo systemctl restart nginx - restart nginxdocker exec -it myapp-web-1 sh - enter Next.js Docker containerdocker exec -it myapp-db-1 psql -U myuser -d mydatabase - enter Postgres db6,147 followers · starred Oct 2024
72 followers · starred Oct 2024
136 followers · starred Oct 2024
845 followers · starred Oct 2024