惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
博客园 - 【当耐特】
月光博客
月光博客
C
Check Point Blog
T
The Blog of Author Tim Ferriss
罗磊的独立博客
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
美团技术团队
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
L
LangChain Blog
The Cloudflare Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Building TheEpicBook: A Deep Dive into a Node.js Monolith...
Hezekiah Umo · 2026-05-26 · via DEV Community

Building TheEpicBook: A Deep Dive into a Node.js Monolithic Web Application

By a Full-Stack Developer | May 2026


Introduction

In an era where microservices and serverless architectures dominate tech conversations, there is still a strong case to be made for the classic monolithic application. TheEpicBook is a full-stack bookstore web application built as a monolith — a single, unified codebase that handles everything from serving HTML pages to managing a relational database. This post walks through the architecture, the tech stack, the challenges faced during deployment, and the lessons learned along the way.


What Is TheEpicBook?

TheEpicBook is an online bookstore application that allows users to browse a curated collection of books, view book details, add items to a shopping cart, and proceed through a checkout flow. The app greets visitors with the tagline "Discover Your Next Great Read" and delivers a clean, responsive UI backed by a real relational database.

At its core, TheEpicBook is a traditional server-rendered web application — no separate frontend framework calling a REST API, no independent microservices. Everything lives in one place, and the server does it all.


The Tech Stack

TheEpicBook is built on a straightforward but powerful stack:

  • Node.js + Express — the backbone of the application, handling routing, middleware, and HTTP request/response logic
  • Express-Handlebars — a server-side templating engine that renders dynamic HTML views on the server before sending them to the browser
  • Sequelize ORM — an abstraction layer over the MySQL database that lets the app interact with data using JavaScript models rather than raw SQL
  • MySQL — the relational database storing Authors, Books, Carts, Checkouts, and their relationships
  • Nginx — a reverse proxy sitting in front of the Node.js server, handling incoming traffic on port 80 and forwarding it to the app on port 8080
  • AWS EC2 — the cloud infrastructure running the entire application on an Ubuntu server

Application Architecture

The monolithic architecture means every concern — routing, templating, business logic, and database access — lives within a single deployable unit. Here is how the key layers fit together:

Models

Sequelize models define the database schema and relationships in JavaScript. TheEpicBook has five core models:

  • Author — stores author first and last names
  • Book — stores title, genre, publication year, price, inventory count, and description, with a foreign key linking to Author
  • Cart — tracks quantity and price for a shopping session
  • Checkout — stores shipping address and subtotal, linked to a Cart
  • Cartbook — a junction table managing the many-to-many relationship between Books and Carts

On startup, Sequelize syncs these models with the database, automatically creating tables if they do not exist.

Routes

Express routes define the URL structure of the application. Each route handler fetches data from the database via Sequelize and passes it to a Handlebars template for rendering.

Views

Handlebars templates receive data from route handlers and produce the final HTML sent to the browser. This server-side rendering approach means the browser receives fully-formed pages — no client-side data fetching required.

Static Assets

CSS, images, and client-side JavaScript are served as static files from the public directory via Express's built-in static middleware.


Deployment on AWS EC2

Deploying TheEpicBook to a live Ubuntu server on AWS involved several real-world challenges worth documenting.

Permissions Issues

After removing node_modules to resolve an npm rename conflict, the directory ended up owned by root due to a prior sudo npm install. Running sudo chown -R ubuntu:ubuntu /home/ubuntu/theepicbook restored correct ownership and allowed npm to install cleanly. The lesson: never run npm install with sudo inside a project directory.

Nginx as a Reverse Proxy

The server ships with Nginx pre-installed, which intercepts traffic on port 80. Rather than expose the Node.js process directly to the internet, Nginx is configured as a reverse proxy — forwarding requests from port 80 to the app running on port 8080. This is best practice for production Node.js apps, providing a clean entry point and making it easy to add SSL termination later.

Security Groups

On AWS, inbound traffic is controlled by Security Groups at the network level. Port 8080 must be explicitly opened in the EC2 inbound rules for direct access, and port 80 for Nginx proxied access. Missing this step is a common gotcha — the app runs fine on the server, but the browser simply times out.

Database Seeding

Sequelize creates the schema automatically on app startup, but an empty database shows no books. TheEpicBook ships with SQL seed files — author_seed.sql and books_seed.sql — that populate the database with initial data using a simple mysql import command.


The Case for Monoliths

TheEpicBook is a great example of why monolithic applications remain relevant and valuable, especially for smaller projects and early-stage products:

  • Simplicity — one codebase, one deployment, one process to manage
  • Easier debugging — the entire request lifecycle is traceable within a single application
  • Faster development — no API contracts to maintain between services, no network calls between components
  • Lower operational overhead — no service mesh, no inter-service authentication, no distributed tracing needed

The trade-offs come at scale — a monolith becomes harder to scale independently, and a bug in one module can affect the whole app. But for a bookstore with a well-defined domain and a small team, the monolith is the right tool for the job.


What's Next for TheEpicBook

There are several natural next steps to evolve the application:

  1. Process management with PM2 — keep the Node.js process alive across server restarts and crashes
  2. SSL with Let's Encrypt — add HTTPS via Certbot and Nginx for secure connections
  3. User authentication — session-based login so users can track their own carts and order history
  4. Admin dashboard — a protected route for adding, editing, and removing books without touching the database directly
  5. Extracting an API layer — a first step toward a more modular architecture, serving JSON alongside the server-rendered views

Conclusion

TheEpicBook demonstrates that a well-structured monolithic application can be a robust, maintainable, and deployable product. Built with Node.js, Express, Sequelize, and MySQL, and deployed on AWS EC2 behind Nginx, it covers the full stack from database to browser in a single cohesive codebase. The deployment journey — from permissions errors to Security Group configurations — reflects the real-world experience of shipping a web application to a live server.

Sometimes the right architecture is the simple one. TheEpicBook is proof of that.

---You want to follow and implement the this project:https://github.com/ntonous/theepicbook.git

Have questions about the stack or the deployment process? Drop a comment below.