Files
kniha_jizd_web/NETWORK_SETUP.md
Docker Config Backup 3b5d9fd940 Initial commit - Journey book (kniha jízd) automation system
Features:
- FastAPI backend for scraping attendance and journey book data
- Deterministic kilometer distribution with random variance
- Refueling form filling with km values
- Next.js frontend with date range selector
- Docker deployment setup

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 15:41:11 +02:00

165 lines
3.6 KiB
Markdown

# External Access Configuration
## Quick Setup
### 1. Get Your Server IP
```bash
# Find your server's IP address
ip addr show | grep "inet " | grep -v 127.0.0.1
# Or
hostname -I
```
### 2. Configure Frontend API URL
**Option A: Environment Variable (Recommended)**
```bash
# Edit frontend/.env.local
nano frontend/.env.local
# Set your server IP:
NEXT_PUBLIC_API_URL=http://YOUR_SERVER_IP:8000
```
**Option B: Docker Compose**
```bash
# Edit docker-compose.yml
nano docker-compose.yml
# Update the frontend environment section with your IP
```
### 3. Update Firewall Rules
**UFW (Ubuntu/Debian):**
```bash
sudo ufw allow 3000/tcp # Frontend
sudo ufw allow 8000/tcp # Backend API
sudo ufw reload
```
**Firewalld (CentOS/RHEL):**
```bash
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
```
**iptables:**
```bash
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
sudo iptables-save
```
### 4. Start the Application
```bash
./start.sh
# or
./start.sh docker
```
### 5. Access from External Device
```
Frontend: http://YOUR_SERVER_IP:3000
Backend API: http://YOUR_SERVER_IP:8000/docs
```
## Production Setup (Nginx Reverse Proxy)
For production, use Nginx with SSL:
### Install Nginx
```bash
sudo apt install nginx certbot python3-certbot-nginx
```
### Configure Nginx
```bash
sudo nano /etc/nginx/sites-available/kniha-jizd
```
```nginx
server {
listen 80;
server_name your-domain.com;
# Frontend
location / {
proxy_pass http://localhost:3000;
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;
}
# Backend API
location /api {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
### Enable Site & SSL
```bash
sudo ln -s /etc/nginx/sites-available/kniha-jizd /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
# Get SSL certificate
sudo certbot --nginx -d your-domain.com
```
### Update Frontend Config
```bash
# frontend/.env.local
NEXT_PUBLIC_API_URL=https://your-domain.com
```
## Security Recommendations
1. **Use HTTPS in production** - Never expose unencrypted credentials
2. **Restrict CORS** - Update `allow_origins` in `backend/api/main.py`
3. **Use environment variables** - Never commit credentials
4. **Enable rate limiting** - Prevent abuse
5. **Use VPN or SSH tunnel** - For development access
## Troubleshooting
### Can't connect from outside
```bash
# Check if ports are listening on all interfaces
sudo netss -tlnp | grep -E '3000|8000'
# Should show 0.0.0.0:3000 and 0.0.0.0:8000
```
### Connection refused
- Check firewall rules
- Verify Docker binds to 0.0.0.0
- Check cloud provider security groups (AWS/GCP/Azure)
### CORS errors
- Verify NEXT_PUBLIC_API_URL is set correctly
- Check backend CORS middleware allows your origin
- Clear browser cache
## Cloud Provider Notes
### AWS EC2
- Add inbound rules to Security Group for ports 3000, 8000
### Google Cloud
- Add firewall rules: `gcloud compute firewall-rules create`
### Azure
- Configure Network Security Group inbound rules
### DigitalOcean
- Configure Cloud Firewall or droplet firewall