Files
music-portfolio/README.md
2025-12-06 20:59:08 -06:00

222 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Music Portfolio
This project hosts a music portfolio with a **Node.js backend** serving music files and a **React frontend** displaying tracks. This guide explains how to run everything locally, convert music files to MP3, transfer files to your server, and set up the server with Nginx and SSL.
---
## Table of Contents
1. [Prerequisites](#prerequisites)
2. [Local Setup](#local-setup)
3. [Convert Music to MP3](#convert-music-to-mp3)
4. [Deploy to Server](#deploy-to-server)
5. [Server Setup](#server-setup)
6. [Nginx Configuration](#nginx-configuration)
---
## Prerequisites
* Node.js (v18+ recommended)
* npm / yarn
* Python3 + pip
* `pydub` Python library (for conversion)
* `ffmpeg` installed on both local and server machines
Install Python dependencies:
```bash
pip install pydub
```
Install Node dependencies in backend and frontend:
```bash
cd backend
npm install
cd ../frontend
npm install
npm run build
```
---
## Local Setup
### Backend
```bash
cd backend
node server.js
```
By default, the backend runs at:
```
http://localhost:3001
```
### Frontend
```bash
cd frontend
npm start
```
By default, the frontend runs at:
```
http://localhost:3000
```
---
## Convert Music to MP3
All music files must be in the `backend/music` folder. The project includes a Python script:
```bash
cd backend
python3 convert-to-mp3.py
```
This will:
* Convert `.flac`, `.wav`, `.m4a`, `.ogg` files to `.mp3`
* Delete the original files
* Keep the same filename but with `.mp3` extension
---
## Deploy to Server
### Copy Backend & Music Files
```bash
# Replace <user> and <server-ip> with your server details
scp -r backend/* <user>@<server-ip>:/var/www/musicportfolio.keshavanand.net/backend/
```
### Copy Frontend Build
```bash
scp -r frontend/dist/* <user>@<server-ip>:/var/www/musicportfolio.keshavanand.net/frontend/dist/
```
---
## Server Setup
### 1. Backend as a systemd service
Create `/etc/systemd/system/music-portfolio-backend.service`:
```ini
[Unit]
Description=Music Portfolio Backend
After=network.target
[Service]
User=www-data
WorkingDirectory=/var/www/musicportfolio.keshavanand.net/backend
ExecStart=/usr/bin/node server.js
Restart=always
Environment=PORT=3001
[Install]
WantedBy=multi-user.target
```
Enable and start:
```bash
sudo systemctl daemon-reload
sudo systemctl enable music-portfolio-backend
sudo systemctl start music-portfolio-backend
sudo systemctl status music-portfolio-backend
```
---
### 2. Nginx Configuration
Create `/etc/nginx/sites-available/musicportfolio.keshavanand.net`:
```nginx
server {
server_name musicportfolio.keshavanand.net www.musicportfolio.keshavanand.net;
root /var/www/musicportfolio.keshavanand.net/frontend/dist;
index index.html;
location / {
try_files $uri /index.html;
}
location /api/ {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /music/ {
alias /var/www/musicportfolio.keshavanand.net/backend/music/;
autoindex off;
types {
audio/mpeg mp3;
audio/wav wav;
}
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/musicportfolio.keshavanand.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/musicportfolio.keshavanand.net/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
listen 80;
server_name musicportfolio.keshavanand.net www.musicportfolio.keshavanand.net;
return 301 https://$host$request_uri;
}
```
Enable site and reload:
```bash
sudo ln -s /etc/nginx/sites-available/musicportfolio.keshavanand.net /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
---
### 3. SSL with Certbot
```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d musicportfolio.keshavanand.net -d www.musicportfolio.keshavanand.net
```
---
### 4. Permissions
Ensure the backend can read/write files:
```bash
sudo chown -R www-data:www-data /var/www/musicportfolio.keshavanand.net
```
---
## Notes
* Make sure the backend is running before loading the frontend.
* Frontend calls `/api/tracks` to fetch metadata.
* All music files must be in `.mp3` format for consistent browser support.
* Clear browser cache if changes arent reflected immediately.