# 🚀 راهنمای استقرار پنل VPN در Production

## 📋 پیش‌نیازها

### نرم‌افزارهای مورد نیاز:

- ✅ **PHP 7.4+** (توصیه: PHP 8.0+)
- ✅ **MySQL 5.7+** یا **MariaDB 10.3+**
- ✅ **Apache** یا **Nginx**
- ✅ **SSL Certificate** (Let's Encrypt)
- ✅ **Composer** (اختیاری)

### PHP Extensions:

```bash
# بررسی نصب شده بودن
php -m | grep -E 'pdo|mysqli|json|mbstring|openssl|curl'

# نصب در Ubuntu/Debian
sudo apt install php-mysql php-mbstring php-curl php-json

# نصب در CentOS/RHEL
sudo yum install php-mysqlnd php-mbstring php-curl php-json
```

---

## 🔧 تنظیمات سرور

### 1. تنظیمات PHP (php.ini)

```ini
; امنیت
expose_php = Off
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log

; Session
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_only_cookies = 1
session.cookie_samesite = "Lax"
session.gc_maxlifetime = 1800

; Upload & Memory
upload_max_filesize = 10M
post_max_size = 10M
memory_limit = 256M
max_execution_time = 60

; Security
allow_url_fopen = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
```

### 2. تنظیمات MySQL

```sql
-- ایجاد دیتابیس و کاربر
CREATE DATABASE vpn_panel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'vpn_user'@'localhost' IDENTIFIED BY 'strong_password_here';

GRANT SELECT, INSERT, UPDATE, DELETE ON vpn_panel.* TO 'vpn_user'@'localhost';

FLUSH PRIVILEGES;
```

### 3. تنظیمات Apache

#### فعال‌سازی mod_rewrite:

```bash
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
sudo systemctl restart apache2
```

#### Virtual Host:

```apache
<VirtualHost *:443>
    ServerName vpn.yourdomain.com
    DocumentRoot /var/www/vpn-panel
    
    # SSL
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem
    
    # Security Headers
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
    
    # HSTS (optional - be careful!)
    # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
    
    <Directory /var/www/vpn-panel>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
        
        # Prevent access to sensitive files
        <FilesMatch "^\.">
            Require all denied
        </FilesMatch>
    </Directory>
    
    # Protect config files
    <DirectoryMatch "^/.*/config">
        Require all denied
    </DirectoryMatch>
    
    # Protect install directory (after installation)
    <DirectoryMatch "^/.*/install">
        Require all denied
    </DirectoryMatch>
    
    ErrorLog ${APACHE_LOG_DIR}/vpn-panel-error.log
    CustomLog ${APACHE_LOG_DIR}/vpn-panel-access.log combined
</VirtualHost>

<VirtualHost *:80>
    ServerName vpn.yourdomain.com
    Redirect permanent / https://vpn.yourdomain.com/
</VirtualHost>
```

### 4. تنظیمات Nginx

```nginx
server {
    listen 443 ssl http2;
    server_name vpn.yourdomain.com;
    root /var/www/vpn-panel;
    
    # SSL
    ssl_certificate /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    
    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    
    # Main location
    location / {
        index index.php index.html;
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # PHP processing
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # Deny access to hidden files
    location ~ /\. {
        deny all;
    }
    
    # Deny access to config
    location ~* /config/ {
        deny all;
    }
    
    # Deny access to install (after installation)
    location ~* /install/ {
        deny all;
    }
    
    # Logging
    access_log /var/log/nginx/vpn-panel-access.log;
    error_log /var/log/nginx/vpn-panel-error.log;
}

server {
    listen 80;
    server_name vpn.yourdomain.com;
    return 301 https://$server_name$request_uri;
}
```

---

## 📦 نصب

### گام 1: آپلود فایل‌ها

```bash
# با Git
git clone https://github.com/your-repo/vpn-panel.git /var/www/vpn-panel

# یا با FTP/SFTP
# آپلود کل پوشه vpn-panel/ به سرور
```

### گام 2: تنظیم مجوزها

```bash
# مالکیت فایل‌ها
sudo chown -R www-data:www-data /var/www/vpn-panel

# مجوز دایرکتوری‌ها
sudo find /var/www/vpn-panel -type d -exec chmod 755 {} \;

# مجوز فایل‌ها
sudo find /var/www/vpn-panel -type f -exec chmod 644 {} \;

# مجوز نوشتن برای backups
sudo mkdir -p /var/www/vpn-panel/backend/backups
sudo chmod 775 /var/www/vpn-panel/backend/backups

# مجوز نوشتن برای sessions (اگر لازم باشد)
sudo mkdir -p /var/www/vpn-panel/backend/sessions
sudo chmod 775 /var/www/vpn-panel/backend/sessions
```

### گام 3: نصب از طریق مرورگر

```
1. باز کردن: https://vpn.yourdomain.com/install/
2. طی کردن مراحل نصب
3. ذخیره اطلاعات ادمین در جای امن
```

### گام 4: ایمن‌سازی بعد از نصب

```bash
# حذف یا غیرفعال کردن پوشه install
sudo mv /var/www/vpn-panel/install /var/www/vpn-panel/install.bak
# یا
sudo rm -rf /var/www/vpn-panel/install

# محافظت از config.php
sudo chmod 600 /var/www/vpn-panel/backend/config/config.php
```

---

## 🔒 بهینه‌سازی امنیتی

### 1. Firewall

```bash
# UFW (Ubuntu/Debian)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable

# firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
```

### 2. SSL/TLS با Let's Encrypt

```bash
# نصب Certbot
sudo apt install certbot python3-certbot-apache
# یا برای Nginx:
sudo apt install certbot python3-certbot-nginx

# دریافت گواهی
sudo certbot --apache -d vpn.yourdomain.com
# یا برای Nginx:
sudo certbot --nginx -d vpn.yourdomain.com

# تمدید خودکار
sudo crontab -e
# اضافه کردن این خط:
0 3 * * * certbot renew --quiet
```

### 3. Fail2Ban

```bash
# نصب
sudo apt install fail2ban

# تنظیمات
sudo nano /etc/fail2ban/jail.local
```

```ini
[vpn-panel-auth]
enabled = true
port = http,https
filter = vpn-panel-auth
logpath = /var/log/nginx/vpn-panel-access.log
maxretry = 5
bantime = 3600
```

### 4. تنظیمات امنیتی MySQL

```sql
-- حذف کاربران بدون رمز
DELETE FROM mysql.user WHERE Password='';

-- حذف دیتابیس‌های تست
DROP DATABASE IF EXISTS test;

-- تغییر رمز root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'strong_password';

FLUSH PRIVILEGES;
```

---

## 🎯 بهینه‌سازی عملکرد

### 1. OPcache (PHP)

```ini
; php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
```

### 2. MySQL Query Cache

```ini
; my.cnf
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
```

### 3. Gzip Compression (Apache)

```apache
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
    AddOutputFilterByType DEFLATE application/javascript application/json
</IfModule>
```

### 4. Browser Caching

```apache
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>
```

---

## 📊 Monitoring

### 1. Log Monitoring

```bash
# Real-time log watching
sudo tail -f /var/log/nginx/vpn-panel-error.log
sudo tail -f /var/log/php/error.log

# Log rotation
sudo nano /etc/logrotate.d/vpn-panel
```

```
/var/log/nginx/vpn-panel-*.log {
    daily
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
```

### 2. Database Backup

```bash
# Script خودکار
sudo nano /usr/local/bin/backup-vpn-db.sh
```

```bash
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_DIR="/var/backups/vpn-panel"
mkdir -p $BACKUP_DIR

mysqldump -u vpn_user -p'password' vpn_panel | gzip > $BACKUP_DIR/vpn_panel_$DATE.sql.gz

# حذف بکاپ‌های قدیمی‌تر از 30 روز
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
```

```bash
# اجازه اجرا
sudo chmod +x /usr/local/bin/backup-vpn-db.sh

# اضافه کردن به cron (هر شب ساعت 2)
sudo crontab -e
0 2 * * * /usr/local/bin/backup-vpn-db.sh
```

---

## 🔄 بروزرسانی

```bash
# Backup قبل از بروزرسانی
sudo cp -r /var/www/vpn-panel /var/www/vpn-panel.backup
sudo mysqldump -u vpn_user -p vpn_panel > vpn_panel_backup.sql

# دانلود نسخه جدید
git pull origin main

# اجرای Migration (اگر لازم باشد)
# ...

# بررسی کارکرد
# تست کامل سیستم
```

---

## ✅ چک لیست استقرار

- [ ] PHP و Extensions نصب شده
- [ ] MySQL تنظیم شده
- [ ] SSL نصب شده (HTTPS)
- [ ] Firewall تنظیم شده
- [ ] پوشه install حذف یا غیرفعال شده
- [ ] مجوزهای فایل درست تنظیم شده
- [ ] Backup خودکار فعال شده
- [ ] Log Rotation تنظیم شده
- [ ] Security Headers اضافه شده
- [ ] OPcache فعال شده
- [ ] Fail2Ban نصب شده (اختیاری)
- [ ] Monitoring راه‌اندازی شده

---

موفق باشید! 🚀
