215 lines
4.7 KiB
Markdown
215 lines
4.7 KiB
Markdown
# Student Production Setup Guide
|
|
|
|
This guide explains how to set up and run the webstore backend in production mode.
|
|
|
|
## What You'll Receive
|
|
|
|
Your instructor will provide you with:
|
|
|
|
1. **webstore-production-images.tar** - Docker images archive (API + database)
|
|
2. **production.compose.yml** - Docker Compose configuration
|
|
3. **.production.env** - Environment variables template
|
|
4. **run-student-production.bat** - Easy start script
|
|
5. **Product images** - 17 placeholder product images
|
|
|
|
## Prerequisites
|
|
|
|
- **Docker Desktop** installed ([Download here](https://www.docker.com/products/docker-desktop))
|
|
- Windows 10 or later (for Docker)
|
|
- Minimum 2GB free disk space
|
|
- ~5 minutes for initial setup
|
|
|
|
## Step-by-Step Setup
|
|
|
|
### Step 1: Extract Docker Images
|
|
|
|
```
|
|
Right-click on webstore-production-images.tar
|
|
→ Select "Extract All"
|
|
→ Choose destination folder
|
|
```
|
|
|
|
Or use PowerShell/terminal:
|
|
```powershell
|
|
docker load -i webstore-production-images.tar
|
|
```
|
|
|
|
### Step 2: Configure Environment Variables
|
|
|
|
1. Open `.production.env` in a text editor
|
|
2. Update these values (if different from defaults):
|
|
|
|
```env
|
|
# Database Configuration
|
|
POSTGRES_DB=webstore_db
|
|
POSTGRES_USER=webstore_user
|
|
POSTGRES_PASSWORD=webstore_password
|
|
DB_PORT=5432
|
|
|
|
# API Configuration
|
|
PORT=3000
|
|
API_PORT=3000
|
|
|
|
# JWT Configuration
|
|
JWT_SECRET=your-secret-key-change-for-production
|
|
JWT_EXPIRES_IN=7d
|
|
|
|
# Security
|
|
COOKIE_NAME=webstore_token
|
|
COOKIE_SECURE=false # Set to true if using HTTPS
|
|
|
|
# Database URL (usually don't change this)
|
|
DATABASE_URL=postgresql://webstore_user:webstore_password@db:5432/webstore_db?schema=public
|
|
```
|
|
|
|
### Step 3: Start the Application
|
|
|
|
**Option A: Using the provided script (recommended)**
|
|
```
|
|
Double-click: run-student-production.bat
|
|
```
|
|
|
|
**Option B: Using Docker Compose directly**
|
|
```powershell
|
|
docker-compose -f production.compose.yml up
|
|
```
|
|
|
|
### Step 4: Verify Setup
|
|
|
|
Wait for logs to show:
|
|
```
|
|
webstore_api_prod | npm notice
|
|
webstore_api_prod | > webstore-backend@1.0.0 start
|
|
webstore_api_prod | > node src/Api/server.js
|
|
webstore_api_prod | Server running on port 3000
|
|
```
|
|
|
|
### Step 5: Test the API
|
|
|
|
Open in your browser:
|
|
```
|
|
http://localhost:3000/api/health
|
|
```
|
|
|
|
Expected response:
|
|
```json
|
|
{
|
|
"status": "ok",
|
|
"message": "CQRS backend running"
|
|
}
|
|
```
|
|
|
|
## Accessing the API
|
|
|
|
The API is available at: `http://localhost:3000`
|
|
|
|
### Key Endpoints
|
|
|
|
- `GET /api/health` - Health check
|
|
- `GET /api/shop/categories` - List all product categories
|
|
- `GET /api/shop/products` - List all products
|
|
- `GET /api/shop/products/:id` - Get product by ID
|
|
- `POST /api/shop/products` - Create product (with image upload)
|
|
- `POST /api/shop/products/:id/image` - Update product image
|
|
|
|
### Built-in Data
|
|
|
|
The database automatically seeds with:
|
|
|
|
**Test Users:**
|
|
```
|
|
Email: admin@test.com
|
|
Password: admin123
|
|
|
|
Email: john@test.com
|
|
Password: password123
|
|
|
|
Email: jane@test.com
|
|
Password: password123
|
|
```
|
|
|
|
**Products:**
|
|
- 16 sample products across 5 categories
|
|
- Each product has a placeholder image
|
|
- Sample prices range from 4,990 to 29,990 HUF
|
|
|
|
**Categories:**
|
|
- Shoes (4 products)
|
|
- Bags (4 products)
|
|
- Accessories (4 products)
|
|
- Clothing (3 products)
|
|
- Electronics (2 products)
|
|
|
|
## Stopping the Application
|
|
|
|
### Using Docker Compose:
|
|
```powershell
|
|
docker-compose -f production.compose.yml down
|
|
```
|
|
|
|
### Or simply close the terminal window
|
|
|
|
## Troubleshooting
|
|
|
|
### Port Already in Use
|
|
If you get "port 3000 already in use":
|
|
```powershell
|
|
# Change port in .production.env
|
|
API_PORT=3001
|
|
```
|
|
|
|
### Database Connection Failed
|
|
- Verify database container is running: `docker ps`
|
|
- Check DATABASE_URL in `.production.env`
|
|
- Ensure PostgreSQL image is loaded: `docker images | grep postgres`
|
|
|
|
### Docker Not Running
|
|
- Start Docker Desktop application
|
|
- Wait for Docker daemon to be ready (check system tray)
|
|
|
|
### Out of Disk Space
|
|
```powershell
|
|
# Clean up Docker
|
|
docker system prune -a
|
|
```
|
|
|
|
## Image Upload
|
|
|
|
Once running, you can upload product images:
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/api/shop/products/1/image \
|
|
-F "image=@path/to/image.jpg"
|
|
```
|
|
|
|
Images are stored in the `images/uploads/` directory and served automatically.
|
|
|
|
## Database Persistence
|
|
|
|
Product data is stored in PostgreSQL. Data persists between application restarts unless you:
|
|
```powershell
|
|
docker-compose -f production.compose.yml down -v
|
|
```
|
|
|
|
The `-v` flag removes data volumes (use carefully!).
|
|
|
|
## Connecting Frontend
|
|
|
|
Configure your frontend to use:
|
|
```
|
|
API Base URL: http://localhost:3000/api
|
|
```
|
|
|
|
Example (fetch):
|
|
```javascript
|
|
const response = await fetch('http://localhost:3000/api/shop/products');
|
|
const data = await response.json();
|
|
console.log(data);
|
|
```
|
|
|
|
## Questions or Issues?
|
|
|
|
Consult your instructor or check the main README.md for more information about the backend architecture and CQRS pattern.
|
|
|
|
Happy coding! 🚀
|