mirror of
https://github.com/th30d4y/OpenLearnX.git
synced 2026-05-26 11:25:49 +00:00
Deploy: Update backend deployment config and frontend environment
This commit is contained in:
@@ -0,0 +1,195 @@
|
||||
# OpenLearnX Localhost Deployment Guide
|
||||
|
||||
## Overview
|
||||
Deploy OpenLearnX on localhost with 5 components running in parallel:
|
||||
1. **MongoDB** - Database
|
||||
2. **Anvil** - Local Ethereum blockchain
|
||||
3. **Backend** - Flask API (Python)
|
||||
4. **Smart Contract** - Deploy to Anvil
|
||||
5. **Frontend** - Next.js (React/TypeScript)
|
||||
|
||||
---
|
||||
|
||||
## Terminal Setup (Use 5 separate terminal windows)
|
||||
|
||||
### Terminal 1: Start MongoDB
|
||||
```bash
|
||||
mongod --dbpath ~/mongodata --logpath /tmp/mongodb.log
|
||||
# Should show: "Waiting for connections on port 27017"
|
||||
```
|
||||
|
||||
### Terminal 2: Start Blockchain (Anvil)
|
||||
```bash
|
||||
export PATH="/home/w4nn4d13/.foundry/bin:$PATH"
|
||||
cd /home/w4nn4d13/Project/OpenLearnX
|
||||
anvil --fork-url https://eth.merkle.io
|
||||
# Save one of the printed private keys for MetaMask
|
||||
```
|
||||
|
||||
### Terminal 3: Deploy Smart Contract & Backend
|
||||
```bash
|
||||
export PATH="/home/w4nn4d13/.foundry/bin:$PATH"
|
||||
cd /home/w4nn4d13/Project/OpenLearnX/backend
|
||||
|
||||
# Create Python virtual environment
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||
|
||||
# Install dependencies
|
||||
pip install -r ../requirements.txt flask flask-cors python-dotenv pymongo web3 pyjwt
|
||||
|
||||
# Deploy smart contract
|
||||
python3 scripts/deploy.py
|
||||
# ⚠️ COPY THE CONTRACT ADDRESS FROM OUTPUT ⚠️
|
||||
|
||||
# Create .env file (update CONTRACT_ADDRESS with output from deploy.py)
|
||||
cat > .env << 'ENVFILE'
|
||||
FLASK_ENV=development
|
||||
SECRET_KEY=dev-secret-key-change-in-production
|
||||
MONGODB_URI=mongodb://localhost:27017/openlearnx
|
||||
WEB3_PROVIDER_URL=http://127.0.0.1:8545
|
||||
CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
|
||||
JWT_SECRET_KEY=jwt-secret-key
|
||||
ENVFILE
|
||||
|
||||
# Start backend
|
||||
python3 main.py
|
||||
# Should see: "Running on http://127.0.0.1:5000"
|
||||
```
|
||||
|
||||
### Terminal 4: Setup Frontend
|
||||
```bash
|
||||
cd /home/w4nn4d13/Project/OpenLearnX/frontend
|
||||
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
# If pnpm not installed: npm install -g pnpm
|
||||
|
||||
# Create .env.local (use CONTRACT_ADDRESS from Terminal 3)
|
||||
cat > .env.local << 'ENVFILE'
|
||||
NEXT_PUBLIC_API_URL=http://localhost:5000/api
|
||||
NEXT_PUBLIC_CHAIN_ID=31337
|
||||
NEXT_PUBLIC_CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
|
||||
NEXT_PUBLIC_RPC_URL=http://127.0.0.1:8545
|
||||
ENVFILE
|
||||
|
||||
# Start frontend
|
||||
pnpm dev
|
||||
# Should see: "Local: http://localhost:3000"
|
||||
```
|
||||
|
||||
### Terminal 5: Monitor & Test
|
||||
```bash
|
||||
# Check MongoDB
|
||||
mongosh --eval "db.version()"
|
||||
|
||||
# Check Anvil health
|
||||
curl http://127.0.0.1:8545 -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'
|
||||
|
||||
# Check Backend
|
||||
curl http://localhost:5000/health 2>/dev/null || curl http://localhost:5000 2>/dev/null || echo "Backend not ready"
|
||||
|
||||
# Check Frontend
|
||||
curl http://localhost:3000 -s | head -20
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quick Access
|
||||
|
||||
- **Frontend**: http://localhost:3000
|
||||
- **Backend API**: http://localhost:5000/api
|
||||
- **Anvil RPC**: http://127.0.0.1:8545
|
||||
|
||||
---
|
||||
|
||||
## Configuration Files
|
||||
|
||||
### .env (Backend)
|
||||
Located at: `backend/.env`
|
||||
- MONGODB_URI: Connection string to MongoDB
|
||||
- WEB3_PROVIDER_URL: Anvil RPC endpoint
|
||||
- CONTRACT_ADDRESS: Deployed certificate NFT contract address
|
||||
|
||||
### .env.local (Frontend)
|
||||
Located at: `frontend/.env.local`
|
||||
- NEXT_PUBLIC_API_URL: Backend API URL
|
||||
- NEXT_PUBLIC_RPC_URL: Anvil RPC endpoint
|
||||
- NEXT_PUBLIC_CONTRACT_ADDRESS: Contract address for blockchain interaction
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### MongoDB won't start
|
||||
```bash
|
||||
# Kill existing MongoDB process
|
||||
killall mongod
|
||||
|
||||
# Delete corrupted data and restart
|
||||
rm -rf ~/mongodata
|
||||
mkdir ~/mongodata
|
||||
mongod --dbpath ~/mongodata
|
||||
```
|
||||
|
||||
### Port already in use
|
||||
```bash
|
||||
# Find and kill process on port
|
||||
# MongoDB (27017)
|
||||
lsof -ti:27017 | xargs kill -9
|
||||
|
||||
# Anvil (8545)
|
||||
lsof -ti:8545 | xargs kill -9
|
||||
|
||||
# Backend (5000)
|
||||
lsof -ti:5000 | xargs kill -9
|
||||
|
||||
# Frontend (3000)
|
||||
lsof -ti:3000 | xargs kill -9
|
||||
```
|
||||
|
||||
### Python dependencies missing
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
pip install -r ../requirements.txt
|
||||
```
|
||||
|
||||
### Foundry not found
|
||||
```bash
|
||||
export PATH="/home/w4nn4d13/.foundry/bin:$PATH"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Success Indicators
|
||||
|
||||
✅ MongoDB running on 27017
|
||||
✅ Anvil running on 8545 with accounts printed
|
||||
✅ Backend running on 5000
|
||||
✅ Frontend accessible on 3000
|
||||
✅ Smart contract deployed to Anvil
|
||||
|
||||
---
|
||||
|
||||
## Cleanup (Stop Everything)
|
||||
|
||||
```bash
|
||||
# Terminal 1
|
||||
# Press Ctrl+C in MongoDB terminal
|
||||
|
||||
# Terminal 2
|
||||
# Press Ctrl+C in Anvil terminal
|
||||
|
||||
# Terminal 3
|
||||
# Press Ctrl+C in Backend terminal
|
||||
|
||||
# Terminal 4
|
||||
# Press Ctrl+C in Frontend terminal
|
||||
|
||||
# Terminal 5 (Clean up)
|
||||
pkill mongod
|
||||
pkill anvil
|
||||
pkill python3
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user