Files
laca-website/VPS-DEPLOYMENT-GUIDE.md
PhongPham 51f2505839 🚀 Complete Laca City Website with VPS Deployment
- Added complete Next.js frontend with responsive design
- Added NestJS backend with PostgreSQL and Redis
- Added comprehensive VPS deployment script (vps-deploy.sh)
- Added deployment guide and documentation
- Added all assets and static files
- Configured SSL, Nginx, PM2, and monitoring
- Ready for production deployment on any VPS
2025-08-12 07:06:15 +07:00

5.6 KiB

🚀 Laca City Website - VPS Deployment Guide

This guide will help you deploy your Laca City website to a VPS with a custom domain using a single script.

📋 Prerequisites

VPS Requirements

  • OS: Ubuntu 20.04+ or Debian 11+
  • RAM: Minimum 2GB (4GB recommended)
  • Storage: Minimum 20GB SSD
  • CPU: 2+ cores recommended
  • Root/Sudo access: Required

Domain Requirements

  • Domain name pointed to your VPS IP address
  • DNS A record: yourdomain.comyour-vps-ip
  • DNS A record: www.yourdomain.comyour-vps-ip

Before You Start

  • VPS is running Ubuntu/Debian
  • You have SSH access to your VPS
  • Domain DNS is properly configured
  • You have a valid email address for SSL certificate

🎯 Quick Deployment

Step 1: Upload Files to VPS

# Option 1: Using SCP
scp -r /path/to/your/project your-user@your-vps-ip:/home/your-user/

# Option 2: Using rsync
rsync -avz --progress /path/to/your/project/ your-user@your-vps-ip:/home/your-user/project/

# Option 3: Using Git (if your project is on GitHub)
git clone https://github.com/your-username/your-repo.git

Step 2: Run the Deployment Script

# SSH into your VPS
ssh your-user@your-vps-ip

# Navigate to your project directory
cd /path/to/your/project

# Run the deployment script
./vps-deploy.sh

Step 3: Follow the Interactive Setup

The script will ask you for:

  • Domain name: e.g., lacacity.com
  • Email: For SSL certificate (e.g., admin@lacacity.com)
  • Database password: Leave empty to auto-generate

🛠️ What the Script Does

System Setup

  • Updates Ubuntu/Debian packages
  • Installs Node.js 18.x and npm
  • Installs PM2 process manager
  • Configures UFW firewall
  • Installs and configures Nginx
  • Sets up Let's Encrypt SSL certificates

Database Setup

  • Installs and configures PostgreSQL
  • Creates database and user
  • Installs and configures Redis

Application Deployment

  • Installs frontend and backend dependencies
  • Creates production environment files
  • Builds Next.js frontend and NestJS backend
  • Configures PM2 for process management
  • Sets up Nginx reverse proxy

Monitoring & Maintenance

  • Sets up log rotation
  • Creates automated backup scripts
  • Configures SSL auto-renewal
  • Creates deployment update scripts

🔧 Post-Deployment Commands

Check Application Status

# View PM2 processes
pm2 list
pm2 monit

# View application logs
pm2 logs

# Check Nginx status
sudo systemctl status nginx

# Check database status
sudo systemctl status postgresql

Application Management

# Restart applications
pm2 restart all

# Stop applications
pm2 stop all

# Reload Nginx configuration
sudo systemctl reload nginx

# View SSL certificate info
sudo certbot certificates

Maintenance

# Manual backup
sudo /usr/local/bin/backup-laca-city

# Deploy updates (after uploading new code)
./deploy-update.sh

# View system resources
htop

🌐 Accessing Your Website

After successful deployment:

  • Website: https://yourdomain.com
  • API: https://yourdomain.com/api
  • SSL: Automatically configured with Let's Encrypt

📁 Important File Locations

/var/www/laca-city/          # Main application directory
├── frontend/                # Next.js frontend
├── backend/                 # NestJS backend
├── ecosystem.config.js      # PM2 configuration
└── deploy-update.sh         # Update deployment script

/etc/nginx/sites-available/laca-city    # Nginx configuration
/var/log/pm2/                          # Application logs
/var/backups/laca-city/                 # Backup directory

🔒 Security Features

  • HTTPS with automatic SSL renewal
  • Firewall configured (UFW)
  • Security headers in Nginx
  • Database with encrypted password
  • Environment variables for sensitive data

🚨 Troubleshooting

Common Issues

Domain not accessible:

# Check DNS
nslookup yourdomain.com

# Check Nginx
sudo nginx -t
sudo systemctl status nginx

# Check SSL
sudo certbot certificates

Applications not running:

# Check PM2 status
pm2 list
pm2 logs

# Restart applications
pm2 restart all

Database connection issues:

# Check PostgreSQL
sudo systemctl status postgresql

# Test database connection
sudo -u postgres psql -d laca_city_db

Getting Help

If you encounter issues:

  1. Check the logs: pm2 logs
  2. Verify all services are running
  3. Check firewall settings: sudo ufw status
  4. Verify DNS configuration

🔄 Updating Your Website

To deploy updates to your website:

  1. Upload new files to VPS
  2. Run the update script: ./deploy-update.sh

The update script will:

  • Create a backup
  • Install new dependencies
  • Rebuild applications
  • Restart services
  • Reload Nginx

💾 Backup & Recovery

Automated Backups

  • Daily backups at 2 AM
  • Keeps 7 days of backups
  • Location: /var/backups/laca-city/

Manual Backup

sudo /usr/local/bin/backup-laca-city

Restore from Backup

# Extract backup
cd /var/backups/laca-city
tar -xzf backup_YYYYMMDD_HHMMSS.tar.gz

# Restore database
sudo -u postgres psql -d laca_city_db < backup_YYYYMMDD_HHMMSS/database.sql

📞 Support

For additional support or questions about the deployment process, please check:

  • Application logs: pm2 logs
  • System logs: sudo journalctl -f
  • Nginx logs: sudo tail -f /var/log/nginx/error.log

🎉 Congratulations! Your Laca City website is now live and running on your VPS with a custom domain and SSL certificate!