Restructure documentation into separate files with links
This commit is contained in:
1 parent
9892c63f3b
commit
1d95b6d026
5 files changed
+489
-367
No files matched your search
@@ -0,0 +1,201 @@
|
||||
# Deployment Guide
|
||||
|
||||
## Option 1: Direct Copy (Simplest)
|
||||
|
||||
1. **On your local machine:**
|
||||
```bash
|
||||
# Build the React app
|
||||
cd client
|
||||
npm run build
|
||||
cd ..
|
||||
|
||||
# Create a deployment package
|
||||
# Copy these folders/files to remote:
|
||||
# - server/
|
||||
# - client/build/
|
||||
# - data/ (optional, will be created if missing)
|
||||
# - package.json
|
||||
# - .env.example
|
||||
```
|
||||
|
||||
2. **On the remote computer:**
|
||||
```bash
|
||||
# Install Node.js if not already installed
|
||||
# Copy the files to a directory (e.g., /opt/resource-monitor or C:\monitor)
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Copy .env.example to .env and configure
|
||||
cp .env.example .env
|
||||
nano .env # or use notepad on Windows
|
||||
|
||||
# Set NODE_ENV to production
|
||||
# Add to .env: NODE_ENV=production
|
||||
|
||||
# Start the server
|
||||
npm start
|
||||
```
|
||||
|
||||
3. **Access the dashboard:**
|
||||
- Visit `http://your-remote-ip:3001`
|
||||
|
||||
## Option 2: Git Repository (Best Practice)
|
||||
|
||||
1. **Initialize git and push to repository:**
|
||||
```bash
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial commit"
|
||||
git remote add origin your-git-repo-url
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
2. **On remote computer:**
|
||||
```bash
|
||||
git clone your-git-repo-url
|
||||
cd resource-monitor
|
||||
npm run install-all
|
||||
cd client && npm run build && cd ..
|
||||
cp .env.example .env
|
||||
nano .env # Configure your settings
|
||||
npm start
|
||||
```
|
||||
|
||||
## Option 3: Docker Deployment (Advanced)
|
||||
|
||||
Create `Dockerfile` in project root:
|
||||
```dockerfile
|
||||
FROM node:18
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
COPY . .
|
||||
WORKDIR /app/client
|
||||
RUN npm install && npm run build
|
||||
WORKDIR /app
|
||||
EXPOSE 3001
|
||||
CMD ["node", "server/index.js"]
|
||||
```
|
||||
|
||||
Then deploy:
|
||||
```bash
|
||||
docker build -t resource-monitor .
|
||||
docker run -d -p 3001:3001 -v ./data:/app/data --name monitor resource-monitor
|
||||
```
|
||||
|
||||
## Deployment Workflow (Critical!)
|
||||
|
||||
**⚠️ IMPORTANT: Always commit build files when deploying changes:**
|
||||
|
||||
```bash
|
||||
# Make your code changes
|
||||
npm run build
|
||||
git add -f client/build/
|
||||
git commit -m "Update build files"
|
||||
git push
|
||||
|
||||
# Then on remote server:
|
||||
cd /opt/resource-monitor
|
||||
git pull
|
||||
pm2 restart monitor
|
||||
# Hard-refresh browser (Ctrl+Shift+R) to clear cache
|
||||
```
|
||||
|
||||
### Why?
|
||||
|
||||
The React build creates new bundle file hashes each time. If you don't commit the build files:
|
||||
- ❌ Old cached HTML points to old JS bundle hashes
|
||||
- ❌ New JS files aren't in git, so remote server gets old builds
|
||||
- ❌ White screen / script loading errors
|
||||
|
||||
### Solution:
|
||||
Always commit build files to git before deploying!
|
||||
|
||||
## Running as a Service (Keep it Running)
|
||||
|
||||
### Linux (systemd)
|
||||
|
||||
Create `/etc/systemd/system/skywatch.service`:
|
||||
```ini
|
||||
[Unit]
|
||||
Description=SkyWatch
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=youruser
|
||||
WorkingDirectory=/opt/skywatch
|
||||
ExecStart=/usr/bin/node server/index.js
|
||||
Restart=always
|
||||
Environment=NODE_ENV=production
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Enable and start:
|
||||
```bash
|
||||
sudo systemctl enable resource-monitor
|
||||
sudo systemctl start resource-monitor
|
||||
```
|
||||
|
||||
### Windows (NSSM - Non-Sucking Service Manager)
|
||||
|
||||
```powershell
|
||||
# Download NSSM from nssm.cc
|
||||
nssm install ResourceMonitor "C:\Program Files\nodejs\node.exe"
|
||||
nssm set ResourceMonitor AppDirectory "C:\monitor"
|
||||
nssm set ResourceMonitor AppParameters "server\index.js"
|
||||
nssm start ResourceMonitor
|
||||
```
|
||||
|
||||
### Cross-platform (PM2)
|
||||
|
||||
```bash
|
||||
# Install PM2 globally
|
||||
npm install -g pm2
|
||||
|
||||
# Start the application
|
||||
pm2 start server/index.js --name resource-monitor
|
||||
|
||||
# Save the process list
|
||||
pm2 save
|
||||
|
||||
# Set PM2 to start on boot
|
||||
pm2 startup
|
||||
```
|
||||
|
||||
## Firewall Configuration
|
||||
|
||||
Make sure port 3001 is accessible:
|
||||
|
||||
### Linux (UFW)
|
||||
```bash
|
||||
sudo ufw allow 3001/tcp
|
||||
```
|
||||
|
||||
### Windows
|
||||
```powershell
|
||||
New-NetFirewallRule -DisplayName "SkyWatch" -Direction Inbound -LocalPort 3001 -Protocol TCP -Action Allow
|
||||
```
|
||||
|
||||
## Reverse Proxy (Optional but Recommended)
|
||||
|
||||
Use Nginx to serve on port 80/443:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:3001;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in new issue
Block a user