This deployment matches exactly how you've been running the application locally:
- Backend:
npm run migrate→node promptworker.js→node server.js - Frontend:
npm run dev - MetaAPI:
python animation_api.py - Stripe:
stripe listen --forward-to localhost:3000/webhook
- Backend: Express.js server on port 3000
- PromptWorker: Separate container running
node PromptWorker.js - Frontend: Vite dev server on port 5173
- Animation API: Python Flask on port 5000
- Database: PostgreSQL
- Redis: For task queues
ssh -i your-key.pem username@137.184.162.109# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
exit && ssh back in
# Clone the deployment branch
git clone -b deployment https://github.com/UTSC-CSCC09-Programming-on-the-Web/project-meaaji.git
cd project-meaaji# Setup credentials
chmod +x setup-credentials.sh
./setup-credentials.sh
# Deploy
chmod +x deploy.sh
./deploy.shThe setup script will ask for:
- Database Password (PostgreSQL)
- JWT Secret (long random string)
- Google OAuth (Client ID & Secret)
- Stripe Live Keys (Secret, Publishable, Webhook Secret, Price ID)
- AI API Keys (Cohere, Stability AI)
After deployment:
- Main App: http://137.184.162.109
- Frontend Dev: http://137.184.162.109:5173
- Backend API: http://137.184.162.109:3000
- Animation API: http://137.184.162.109:5000
# View logs
docker-compose logs -f [service]
# Restart service
docker-compose restart [service]
# Stop all
docker-compose down
# Start all
docker-compose up -d- ✅ Now uses development mode (matches your
npm run dev) - ✅ No more TypeScript build errors
- ✅ Hot reload works
# Check all logs
docker-compose logs -f
# Check specific service
docker-compose logs -f frontend
docker-compose logs -f backend
docker-compose logs -f animation
# Check if services are running
docker-compose psAfter deployment, you'll need to:
- Install Stripe CLI on your VM:
curl -s https://packages.stripe.dev/api/security/keypair/stripe-cli-gpg/public | gpg --dearmor | sudo tee /usr/share/keyrings/stripe.gpg
echo "deb [signed-by=/usr/share/keyrings/stripe.gpg] https://packages.stripe.dev/stripe-cli-debian-local stable main" | sudo tee -a /etc/apt/sources.list.d/stripe.list
sudo apt update
sudo apt install stripe- Login to Stripe:
stripe login- Start webhook listener:
stripe listen --forward-to localhost:3000/webhook- Copy webhook secret to your
.envfile
This setup uses:
- ✅ Development frontend (Vite dev server with hot reload)
- ✅ Separate PromptWorker container (matches your setup)
- ✅ Volume mounting for live code changes
- ✅ WebSocket support for frontend hot reload
To update the application:
git pull
docker-compose down
docker-compose up --build -d# Check resource usage
docker stats
# Check disk space
df -h
# Check memory
free -hYour application will now run exactly like your local development setup, but in Docker containers on your VM!