mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-08 21:14:47 +09:00
Introduces a production-ready Dockerfile, a comprehensive CONTRIBUTING.md, and new documentation files (API, installation, roadmap). Updates .env.example with improved comments and structure, enhances .gitignore, and refines the README with expanded features, requirements, and setup instructions. Roadmap and planning files are reorganized, and obsolete HTML is removed.
549 lines
12 KiB
Markdown
549 lines
12 KiB
Markdown
# ServerKit Installation Guide
|
|
|
|
This guide covers installing ServerKit on Ubuntu 22.04/24.04 LTS. ServerKit is a modern server management panel for managing web applications, databases, Docker containers, and more.
|
|
|
|
## Table of Contents
|
|
|
|
- [Requirements](#requirements)
|
|
- [Quick Install (Docker)](#quick-install-docker)
|
|
- [Manual Installation](#manual-installation)
|
|
- [Post-Installation Setup](#post-installation-setup)
|
|
- [Security Configuration](#security-configuration)
|
|
- [Notification Setup](#notification-setup)
|
|
- [Troubleshooting](#troubleshooting)
|
|
|
|
---
|
|
|
|
## Requirements
|
|
|
|
### Minimum System Requirements
|
|
|
|
- **OS**: Ubuntu 22.04 LTS or 24.04 LTS (64-bit)
|
|
- **CPU**: 1 vCPU (2+ recommended)
|
|
- **RAM**: 1 GB minimum (2+ GB recommended)
|
|
- **Disk**: 10 GB free space
|
|
- **Network**: Public IP with ports 80, 443, and 5000 accessible
|
|
|
|
### Software Requirements
|
|
|
|
For Docker installation:
|
|
- Docker Engine 24.0+
|
|
- Docker Compose v2.0+
|
|
|
|
For manual installation:
|
|
- Python 3.11+
|
|
- Node.js 20+
|
|
- Nginx (optional, for reverse proxy)
|
|
|
|
---
|
|
|
|
## Quick Install (Docker)
|
|
|
|
This is the recommended installation method.
|
|
|
|
### Step 1: Install Docker
|
|
|
|
```bash
|
|
# Update system packages
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Install prerequisites
|
|
sudo apt install -y ca-certificates curl gnupg
|
|
|
|
# Add Docker's official GPG key
|
|
sudo install -m 0755 -d /etc/apt/keyrings
|
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
|
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
|
|
|
# Add Docker repository
|
|
echo \
|
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
|
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
|
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
|
|
# Install Docker
|
|
sudo apt update
|
|
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
|
|
# Add your user to docker group (logout/login required)
|
|
sudo usermod -aG docker $USER
|
|
|
|
# Verify installation
|
|
docker --version
|
|
docker compose version
|
|
```
|
|
|
|
### Step 2: Clone ServerKit
|
|
|
|
```bash
|
|
# Clone the repository
|
|
git clone https://github.com/yourusername/ServerKit.git
|
|
cd ServerKit
|
|
```
|
|
|
|
### Step 3: Configure Environment
|
|
|
|
```bash
|
|
# Copy example environment file
|
|
cp .env.example .env
|
|
|
|
# Generate secure keys
|
|
echo "SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_hex(32))')" >> .env
|
|
echo "JWT_SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_hex(32))')" >> .env
|
|
|
|
# Edit configuration
|
|
nano .env
|
|
```
|
|
|
|
**Important**: Update these values in `.env`:
|
|
- `SECRET_KEY` - Unique random string for Flask sessions
|
|
- `JWT_SECRET_KEY` - Unique random string for JWT tokens
|
|
- `CORS_ORIGINS` - Your domain (e.g., `https://panel.yourdomain.com`)
|
|
|
|
### Step 4: Start ServerKit
|
|
|
|
```bash
|
|
# Build and start containers
|
|
docker compose up -d
|
|
|
|
# View logs
|
|
docker compose logs -f
|
|
|
|
# Check status
|
|
docker compose ps
|
|
```
|
|
|
|
### Step 5: Access ServerKit
|
|
|
|
Open your browser and navigate to:
|
|
- **HTTP**: `http://your-server-ip`
|
|
- **HTTPS**: `https://your-server-ip` (if SSL configured)
|
|
|
|
Create your admin account on first visit.
|
|
|
|
---
|
|
|
|
## Manual Installation
|
|
|
|
For installations without Docker.
|
|
|
|
### Step 1: Install System Dependencies
|
|
|
|
```bash
|
|
# Update system
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Install Python 3.11
|
|
sudo apt install -y python3.11 python3.11-venv python3.11-dev python3-pip
|
|
|
|
# Install Node.js 20
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
sudo apt install -y nodejs
|
|
|
|
# Install build tools and libraries
|
|
sudo apt install -y build-essential libffi-dev libssl-dev libpq-dev
|
|
|
|
# Install Nginx (for reverse proxy)
|
|
sudo apt install -y nginx
|
|
|
|
# Install ClamAV (for malware scanning)
|
|
sudo apt install -y clamav clamav-daemon clamav-freshclam
|
|
|
|
# Install other useful tools
|
|
sudo apt install -y git curl wget
|
|
```
|
|
|
|
### Step 2: Clone and Setup Backend
|
|
|
|
```bash
|
|
# Clone repository
|
|
cd /opt
|
|
sudo git clone https://github.com/yourusername/ServerKit.git
|
|
sudo chown -R $USER:$USER ServerKit
|
|
cd ServerKit
|
|
|
|
# Create Python virtual environment
|
|
python3.11 -m venv venv
|
|
source venv/bin/activate
|
|
|
|
# Install Python dependencies
|
|
cd backend
|
|
pip install -r requirements.txt
|
|
pip install gunicorn gevent gevent-websocket
|
|
```
|
|
|
|
### Step 3: Build Frontend
|
|
|
|
```bash
|
|
# Navigate to frontend directory
|
|
cd /opt/ServerKit/frontend
|
|
|
|
# Install Node dependencies
|
|
npm ci
|
|
|
|
# Build production bundle
|
|
npm run build
|
|
```
|
|
|
|
### Step 4: Configure Environment
|
|
|
|
```bash
|
|
# Create environment file
|
|
cd /opt/ServerKit/backend
|
|
cp ../.env.example .env
|
|
|
|
# Generate and set secure keys
|
|
SECRET=$(python3 -c 'import secrets; print(secrets.token_hex(32))')
|
|
JWT_SECRET=$(python3 -c 'import secrets; print(secrets.token_hex(32))')
|
|
|
|
sed -i "s/SECRET_KEY=.*/SECRET_KEY=$SECRET/" .env
|
|
sed -i "s/JWT_SECRET_KEY=.*/JWT_SECRET_KEY=$JWT_SECRET/" .env
|
|
|
|
# Edit other settings
|
|
nano .env
|
|
```
|
|
|
|
### Step 5: Create ServerKit Directories
|
|
|
|
```bash
|
|
# Create required directories
|
|
sudo mkdir -p /etc/serverkit
|
|
sudo mkdir -p /var/log/serverkit
|
|
sudo mkdir -p /var/quarantine
|
|
|
|
# Set permissions
|
|
sudo chown -R $USER:$USER /etc/serverkit
|
|
sudo chown -R $USER:$USER /var/log/serverkit
|
|
sudo chown -R $USER:$USER /var/quarantine
|
|
```
|
|
|
|
### Step 6: Create Systemd Service
|
|
|
|
```bash
|
|
sudo nano /etc/systemd/system/serverkit.service
|
|
```
|
|
|
|
Add the following content:
|
|
|
|
```ini
|
|
[Unit]
|
|
Description=ServerKit Server Management Panel
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=root
|
|
WorkingDirectory=/opt/ServerKit/backend
|
|
Environment="PATH=/opt/ServerKit/venv/bin"
|
|
Environment="FLASK_ENV=production"
|
|
ExecStart=/opt/ServerKit/venv/bin/gunicorn \
|
|
--worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker \
|
|
--workers 1 \
|
|
--bind 127.0.0.1:5000 \
|
|
--timeout 120 \
|
|
--access-logfile /var/log/serverkit/access.log \
|
|
--error-logfile /var/log/serverkit/error.log \
|
|
run:app
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Enable and start the service:
|
|
|
|
```bash
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable serverkit
|
|
sudo systemctl start serverkit
|
|
sudo systemctl status serverkit
|
|
```
|
|
|
|
### Step 7: Configure Nginx Reverse Proxy
|
|
|
|
```bash
|
|
sudo nano /etc/nginx/sites-available/serverkit
|
|
```
|
|
|
|
Add the following configuration:
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name your-domain.com; # Change to your domain or IP
|
|
|
|
# Frontend (static files)
|
|
location / {
|
|
root /opt/ServerKit/frontend/dist;
|
|
try_files $uri $uri/ /index.html;
|
|
}
|
|
|
|
# Backend API
|
|
location /api/ {
|
|
proxy_pass http://127.0.0.1:5000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
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;
|
|
proxy_read_timeout 86400;
|
|
}
|
|
|
|
# WebSocket support
|
|
location /socket.io/ {
|
|
proxy_pass http://127.0.0.1:5000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
}
|
|
}
|
|
```
|
|
|
|
Enable the site:
|
|
|
|
```bash
|
|
sudo ln -s /etc/nginx/sites-available/serverkit /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
### Step 8: Setup SSL with Let's Encrypt (Recommended)
|
|
|
|
```bash
|
|
# Install Certbot
|
|
sudo apt install -y certbot python3-certbot-nginx
|
|
|
|
# Obtain SSL certificate
|
|
sudo certbot --nginx -d your-domain.com
|
|
|
|
# Auto-renewal is configured automatically
|
|
sudo systemctl status certbot.timer
|
|
```
|
|
|
|
---
|
|
|
|
## Post-Installation Setup
|
|
|
|
### 1. Create Admin Account
|
|
|
|
1. Open ServerKit in your browser
|
|
2. Click "Register" to create your admin account
|
|
3. The first registered user automatically becomes admin
|
|
|
|
### 2. Update ClamAV Definitions
|
|
|
|
```bash
|
|
# Update virus definitions
|
|
sudo freshclam
|
|
|
|
# Restart ClamAV daemon
|
|
sudo systemctl restart clamav-daemon
|
|
```
|
|
|
|
### 3. Configure Firewall (UFW)
|
|
|
|
```bash
|
|
# Enable UFW
|
|
sudo ufw enable
|
|
|
|
# Allow SSH (important!)
|
|
sudo ufw allow ssh
|
|
|
|
# Allow HTTP and HTTPS
|
|
sudo ufw allow 80/tcp
|
|
sudo ufw allow 443/tcp
|
|
|
|
# Check status
|
|
sudo ufw status
|
|
```
|
|
|
|
---
|
|
|
|
## Security Configuration
|
|
|
|
### Enable Two-Factor Authentication
|
|
|
|
1. Go to **Settings > Security**
|
|
2. Click "Enable Two-Factor Authentication"
|
|
3. Scan the QR code with your authenticator app
|
|
4. Enter the verification code
|
|
5. **Save your backup codes securely!**
|
|
|
|
### Configure Notification Webhooks
|
|
|
|
Get alerts for security events, server issues, and more:
|
|
|
|
1. Go to **Settings > Notifications**
|
|
2. Configure your preferred channels:
|
|
- **Discord**: Create a webhook in your server settings
|
|
- **Slack**: Create an incoming webhook app
|
|
- **Telegram**: Create a bot via @BotFather
|
|
|
|
### Enable File Integrity Monitoring
|
|
|
|
1. Go to **Security > File Integrity**
|
|
2. Click "Initialize Baseline" to create a snapshot
|
|
3. Periodically run "Check Integrity" to detect changes
|
|
|
|
---
|
|
|
|
## Notification Setup
|
|
|
|
### Discord Webhook
|
|
|
|
1. Open Discord and go to your server
|
|
2. Right-click a channel → Edit Channel → Integrations → Webhooks
|
|
3. Create a new webhook and copy the URL
|
|
4. In ServerKit: Settings → Notifications → Discord
|
|
5. Paste the webhook URL and enable
|
|
|
|
### Slack Webhook
|
|
|
|
1. Go to [Slack API](https://api.slack.com/apps)
|
|
2. Create a new app → Incoming Webhooks
|
|
3. Add a new webhook to your workspace
|
|
4. Copy the webhook URL
|
|
5. In ServerKit: Settings → Notifications → Slack
|
|
|
|
### Telegram Bot
|
|
|
|
1. Message @BotFather on Telegram
|
|
2. Send `/newbot` and follow instructions
|
|
3. Copy the bot token
|
|
4. Get your chat ID from @userinfobot
|
|
5. In ServerKit: Settings → Notifications → Telegram
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Docker Issues
|
|
|
|
**Container won't start:**
|
|
```bash
|
|
# Check logs
|
|
docker compose logs backend
|
|
|
|
# Check if port is in use
|
|
sudo lsof -i :5000
|
|
sudo lsof -i :80
|
|
```
|
|
|
|
**Permission denied errors:**
|
|
```bash
|
|
# Fix Docker socket permissions
|
|
sudo chmod 666 /var/run/docker.sock
|
|
```
|
|
|
|
### Manual Installation Issues
|
|
|
|
**Python module not found:**
|
|
```bash
|
|
# Ensure virtual environment is activated
|
|
source /opt/ServerKit/venv/bin/activate
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
**Nginx 502 Bad Gateway:**
|
|
```bash
|
|
# Check if backend is running
|
|
sudo systemctl status serverkit
|
|
|
|
# Check backend logs
|
|
sudo tail -f /var/log/serverkit/error.log
|
|
```
|
|
|
|
**Database errors:**
|
|
```bash
|
|
# Reset database (WARNING: deletes all data)
|
|
cd /opt/ServerKit/backend
|
|
rm -f instance/serverkit.db
|
|
python -c "from app import create_app, db; app = create_app(); app.app_context().push(); db.create_all()"
|
|
```
|
|
|
|
### ClamAV Issues
|
|
|
|
**ClamAV not starting:**
|
|
```bash
|
|
# Check status
|
|
sudo systemctl status clamav-daemon
|
|
|
|
# Update definitions first
|
|
sudo systemctl stop clamav-freshclam
|
|
sudo freshclam
|
|
sudo systemctl start clamav-freshclam
|
|
sudo systemctl start clamav-daemon
|
|
```
|
|
|
|
### Getting Help
|
|
|
|
- Check logs in `/var/log/serverkit/`
|
|
- Docker logs: `docker compose logs -f`
|
|
- Open an issue on GitHub
|
|
|
|
---
|
|
|
|
## Updating ServerKit
|
|
|
|
### Docker Update
|
|
|
|
```bash
|
|
cd /path/to/ServerKit
|
|
git pull
|
|
docker compose down
|
|
docker compose build --no-cache
|
|
docker compose up -d
|
|
```
|
|
|
|
### Manual Update
|
|
|
|
```bash
|
|
cd /opt/ServerKit
|
|
git pull
|
|
|
|
# Update backend
|
|
source venv/bin/activate
|
|
pip install -r backend/requirements.txt
|
|
|
|
# Update frontend
|
|
cd frontend
|
|
npm ci
|
|
npm run build
|
|
|
|
# Restart service
|
|
sudo systemctl restart serverkit
|
|
```
|
|
|
|
---
|
|
|
|
## Uninstalling
|
|
|
|
### Docker
|
|
|
|
```bash
|
|
cd /path/to/ServerKit
|
|
docker compose down -v # -v removes volumes (data)
|
|
cd ..
|
|
rm -rf ServerKit
|
|
```
|
|
|
|
### Manual
|
|
|
|
```bash
|
|
sudo systemctl stop serverkit
|
|
sudo systemctl disable serverkit
|
|
sudo rm /etc/systemd/system/serverkit.service
|
|
sudo rm /etc/nginx/sites-enabled/serverkit
|
|
sudo rm /etc/nginx/sites-available/serverkit
|
|
sudo rm -rf /opt/ServerKit
|
|
sudo rm -rf /etc/serverkit
|
|
sudo rm -rf /var/log/serverkit
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl reload nginx
|
|
```
|