DevOps  

How to Deploy Full Stack Application on VPS Server Using Docker

Introduction

Deploying a full stack application (frontend + backend + database) on a VPS server is a common requirement for modern developers. Traditionally, deployment can be complex due to environment setup, dependency conflicts, and scaling issues. Docker simplifies this process by packaging your application into containers that run consistently across environments.

In this article, you will learn how to deploy a full stack application on a VPS server using Docker in simple words. We will cover step-by-step setup, configuration, and real-world examples so you can confidently deploy your own project.

What is Docker?

Docker is a containerization platform that allows you to package your application and its dependencies into a container. This ensures your application runs the same way on any system.

What is a VPS Server?

A VPS (Virtual Private Server) is a virtual machine hosted on a cloud provider. It gives you full control like a dedicated server but at a lower cost.

Popular VPS providers:

  • DigitalOcean

  • AWS EC2

  • Linode

  • Vultr

Why Use Docker for Deployment?

  • Consistent environment across development and production

  • Easy setup and deployment

  • Isolated services (frontend, backend, database)

  • Scalability and portability

  • Faster deployment process

Application Architecture Overview

A typical full stack application includes:

  • Frontend (React, Angular, or Vue)

  • Backend (Node.js, .NET, or Python)

  • Database (MongoDB, MySQL, PostgreSQL)

Docker helps you run each of these as separate containers.

Step 1: Prepare Your VPS Server

Connect to your VPS using SSH:

ssh root@your_server_ip

Update system:

sudo apt update && sudo apt upgrade -y

Step 2: Install Docker

Install Docker on your VPS:

curl -fsSL https://get.docker.com | sh

Verify installation:

docker --version

Start Docker:

sudo systemctl start docker
sudo systemctl enable docker

Step 3: Install Docker Compose

Docker Compose helps manage multiple containers.

sudo apt install docker-compose -y

Check version:

docker-compose --version

Step 4: Create Project Structure

Example structure:

project/
 ├── frontend/
 ├── backend/
 ├── docker-compose.yml

Step 5: Create Dockerfile for Backend

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 5000
CMD ["node", "server.js"]

Step 6: Create Dockerfile for Frontend

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=0 /app/build /usr/share/nginx/html

Step 7: Create docker-compose.yml

version: '3'
services:
  backend:
    build: ./backend
    ports:
      - "5000:5000"

  frontend:
    build: ./frontend
    ports:
      - "80:80"

  database:
    image: mongo
    ports:
      - "27017:27017"

Step 8: Deploy Application

Navigate to project folder and run:

docker-compose up -d

This will:

  • Build images

  • Start containers

  • Run app in background

Step 9: Access Your Application

Open browser:

http://your_server_ip

Your full stack application should now be live.

Step 10: Use Domain and Nginx (Optional)

You can connect your domain and use Nginx as reverse proxy for better performance and HTTPS.

Step 11: Enable HTTPS with SSL

Install Certbot:

sudo apt install certbot

Generate SSL certificate:

sudo certbot certonly --standalone -d yourdomain.com

Step 12: Manage Containers

Useful commands:

docker ps
docker logs container_id
docker-compose down
docker-compose up -d --build

Performance Optimization Tips

  • Use lightweight base images

  • Enable caching

  • Use volumes for database persistence

  • Monitor container resources

Common Issues and Fixes

  • Container not starting → Check logs

  • Port already in use → Change ports

  • Database connection error → Check network settings

Difference Between Traditional Deployment and Docker Deployment

FeatureTraditionalDocker
SetupComplexSimple
Environment IssuesHighLow
PortabilityLowHigh
ScalabilityMediumHigh

Conclusion

Deploying a full stack application on a VPS server using Docker is one of the best modern practices. It simplifies deployment, improves consistency, and makes scaling easier.

By following this step-by-step guide, you can deploy your frontend, backend, and database in a structured and efficient way. Docker ensures your application runs smoothly in production and helps you focus more on development instead of configuration issues.