docs: Add one-click installation script for PPanel with Docker support
- Introduced `install-ppanel.sh` script for automated installation of PPanel using Docker Compose. - Updated installation documentation to include one-click deployment options and detailed configuration steps. - Enhanced configuration files for MySQL and Redis with necessary parameters. - Improved Docker Compose setup with health checks and custom network configurations. - Added instructions for firewall configuration and reverse proxy setup for production environments. - Included troubleshooting tips and advanced options for non-interactive installations and proxy environments.
This commit is contained in:
@@ -209,7 +209,7 @@ docker compose ps
|
||||
After successful installation, you can access:
|
||||
|
||||
- **User Panel**: `http://your-server-ip:8080`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin/`
|
||||
|
||||
::: warning Default Credentials
|
||||
Please change the default admin password immediately after first login for security.
|
||||
|
||||
@@ -23,19 +23,29 @@ uname -m
|
||||
|
||||
Visit the [GitHub Releases](https://github.com/perfect-panel/ppanel/releases) page or download directly:
|
||||
|
||||
::: tip Installation Directory
|
||||
You can install PPanel in any directory. This guide uses `/opt/ppanel` as an example. If you choose a different directory, adjust the paths in subsequent commands accordingly.
|
||||
:::
|
||||
|
||||
```bash
|
||||
# Create installation directory
|
||||
# Create installation directory (customizable)
|
||||
sudo mkdir -p /opt/ppanel
|
||||
cd /opt/ppanel
|
||||
|
||||
# Download for Linux amd64
|
||||
wget https://github.com/perfect-panel/ppanel/releases/latest/download/ppanel-linux-amd64.tar.gz
|
||||
wget https://github.com/perfect-panel/ppanel/releases/latest/download/gateway-linux-amd64.tar.gz
|
||||
|
||||
# Or for Linux arm64
|
||||
# wget https://github.com/perfect-panel/ppanel/releases/latest/download/ppanel-linux-arm64.tar.gz
|
||||
# wget https://github.com/perfect-panel/ppanel/releases/latest/download/gateway-linux-arm64.tar.gz
|
||||
|
||||
# Or for macOS amd64
|
||||
# wget https://github.com/perfect-panel/ppanel/releases/latest/download/gateway-darwin-amd64.tar.gz
|
||||
|
||||
# Or for macOS arm64 (Apple Silicon)
|
||||
# wget https://github.com/perfect-panel/ppanel/releases/latest/download/gateway-darwin-arm64.tar.gz
|
||||
|
||||
# Extract
|
||||
tar -xzf ppanel-linux-amd64.tar.gz
|
||||
tar -xzf gateway-linux-amd64.tar.gz
|
||||
|
||||
# Verify extracted files
|
||||
ls -la
|
||||
@@ -44,8 +54,7 @@ ls -la
|
||||
Expected files:
|
||||
```
|
||||
/opt/ppanel/
|
||||
├── ppanel-server # Main server binary
|
||||
├── gateway # Gateway binary
|
||||
├── gateway # Gateway executable
|
||||
└── etc/ # Configuration directory
|
||||
└── ppanel.yaml # Configuration file
|
||||
```
|
||||
@@ -55,52 +64,92 @@ Expected files:
|
||||
### Step 1: Prepare Configuration
|
||||
|
||||
```bash
|
||||
# Copy sample configuration
|
||||
sudo cp etc/ppanel.yaml etc/ppanel.yaml.backup
|
||||
|
||||
# Edit configuration
|
||||
sudo nano etc/ppanel.yaml
|
||||
sudo nano /opt/ppanel/etc/ppanel.yaml
|
||||
```
|
||||
|
||||
**Basic Configuration Example:**
|
||||
**Configuration Example:**
|
||||
|
||||
::: tip Relative Paths
|
||||
Paths in the configuration (such as `Path`, `logs`, etc.) support relative paths. Relative paths are relative to the program's working directory (WorkingDirectory), which is `/opt/ppanel` in the systemd service.
|
||||
:::
|
||||
|
||||
```yaml
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
mode: release # debug, release, or test
|
||||
Host: 0.0.0.0
|
||||
Port: 8080
|
||||
TLS:
|
||||
Enable: false
|
||||
CertFile: ""
|
||||
KeyFile: ""
|
||||
Debug: false
|
||||
|
||||
database:
|
||||
type: sqlite
|
||||
path: /opt/ppanel/data/ppanel.db
|
||||
# For MySQL/PostgreSQL:
|
||||
# type: mysql
|
||||
# host: localhost
|
||||
# port: 3306
|
||||
# user: ppanel
|
||||
# password: your_password
|
||||
# database: ppanel
|
||||
Static:
|
||||
Admin:
|
||||
Enabled: true
|
||||
Prefix: /admin
|
||||
Path: ./static/admin
|
||||
User:
|
||||
Enabled: true
|
||||
Prefix: /
|
||||
Path: ./static/user
|
||||
|
||||
log:
|
||||
level: info # debug, info, warn, error
|
||||
path: /opt/ppanel/logs
|
||||
JwtAuth:
|
||||
AccessSecret: your-secret-key-change-this
|
||||
AccessExpire: 604800
|
||||
|
||||
gateway:
|
||||
port: 8080
|
||||
timeout: 30s
|
||||
Logger:
|
||||
ServiceName: ApiService
|
||||
Mode: console
|
||||
Encoding: plain
|
||||
TimeFormat: "2006-01-02 15:04:05.000"
|
||||
Path: logs
|
||||
Level: info
|
||||
MaxContentLength: 0
|
||||
Compress: false
|
||||
Stat: true
|
||||
KeepDays: 0
|
||||
StackCooldownMillis: 100
|
||||
MaxBackups: 0
|
||||
MaxSize: 0
|
||||
Rotation: daily
|
||||
FileTimeFormat: 2006-01-02T15:04:05.000Z07:00
|
||||
|
||||
MySQL:
|
||||
Addr: localhost:3306
|
||||
Username: your-username
|
||||
Password: your-password
|
||||
Dbname: ppanel
|
||||
Config: charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
|
||||
MaxIdleConns: 10
|
||||
MaxOpenConns: 10
|
||||
SlowThreshold: 1000
|
||||
|
||||
Redis:
|
||||
Host: localhost:6379
|
||||
Pass: your-redis-password
|
||||
DB: 0
|
||||
```
|
||||
|
||||
::: warning Required Configuration
|
||||
**MySQL and Redis are required.** Please configure the following before deployment:
|
||||
- `JwtAuth.AccessSecret` - Use a strong random secret (required)
|
||||
- `MySQL.*` - Configure your MySQL database connection (required)
|
||||
- `Redis.*` - Configure your Redis connection (required)
|
||||
:::
|
||||
|
||||
### Step 2: Create Required Directories
|
||||
|
||||
```bash
|
||||
# Create data and log directories
|
||||
sudo mkdir -p /opt/ppanel/data
|
||||
sudo mkdir -p /opt/ppanel/logs
|
||||
sudo mkdir -p /opt/ppanel/static
|
||||
|
||||
# Set proper permissions
|
||||
sudo chmod 755 /opt/ppanel
|
||||
sudo chmod 700 /opt/ppanel/data
|
||||
sudo chmod 755 /opt/ppanel/logs
|
||||
sudo chmod 755 /opt/ppanel/static
|
||||
```
|
||||
|
||||
## Running the Service
|
||||
@@ -110,16 +159,12 @@ sudo chmod 755 /opt/ppanel/logs
|
||||
For quick testing:
|
||||
|
||||
```bash
|
||||
# Make binaries executable
|
||||
sudo chmod +x /opt/ppanel/ppanel-server
|
||||
# Make binary executable
|
||||
sudo chmod +x /opt/ppanel/gateway
|
||||
|
||||
# Run server directly
|
||||
# Run directly
|
||||
cd /opt/ppanel
|
||||
sudo ./ppanel-server
|
||||
|
||||
# In another terminal, run gateway (if separate)
|
||||
# sudo ./gateway
|
||||
sudo ./gateway
|
||||
```
|
||||
|
||||
Press `Ctrl+C` to stop.
|
||||
@@ -147,7 +192,7 @@ Wants=network-online.target
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/ppanel
|
||||
ExecStart=/opt/ppanel/ppanel-server
|
||||
ExecStart=/opt/ppanel/gateway
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
@@ -262,7 +307,7 @@ ps aux | grep ppanel
|
||||
### Access the Application
|
||||
|
||||
- **User Panel**: `http://your-server-ip:8080`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin/`
|
||||
|
||||
### Configure Firewall
|
||||
|
||||
@@ -312,70 +357,11 @@ sudo systemctl reload nginx
|
||||
|
||||
## Upgrading
|
||||
|
||||
### Backup Before Upgrade
|
||||
Upgrade PPanel directly from the **Admin Dashboard**. On the dashboard homepage, you can check for new versions and upgrade with one click.
|
||||
|
||||
```bash
|
||||
# Stop service
|
||||
sudo systemctl stop ppanel
|
||||
|
||||
# Backup current version
|
||||
sudo cp -r /opt/ppanel /opt/ppanel-backup-$(date +%Y%m%d)
|
||||
|
||||
# Backup database
|
||||
sudo cp /opt/ppanel/data/ppanel.db /opt/ppanel/data/ppanel.db.backup-$(date +%Y%m%d)
|
||||
|
||||
# Backup configuration
|
||||
sudo cp /opt/ppanel/etc/ppanel.yaml /opt/ppanel/etc/ppanel.yaml.backup-$(date +%Y%m%d)
|
||||
```
|
||||
|
||||
### Download and Install New Version
|
||||
|
||||
```bash
|
||||
# Download new version
|
||||
cd /tmp
|
||||
wget https://github.com/perfect-panel/ppanel/releases/latest/download/ppanel-linux-amd64.tar.gz
|
||||
|
||||
# Extract to temporary location
|
||||
mkdir ppanel-new
|
||||
tar -xzf ppanel-linux-amd64.tar.gz -C ppanel-new
|
||||
|
||||
# Backup old binaries
|
||||
sudo mv /opt/ppanel/ppanel-server /opt/ppanel/ppanel-server.old
|
||||
sudo mv /opt/ppanel/gateway /opt/ppanel/gateway.old
|
||||
|
||||
# Install new binaries
|
||||
sudo cp ppanel-new/ppanel-server /opt/ppanel/
|
||||
sudo cp ppanel-new/gateway /opt/ppanel/
|
||||
|
||||
# Set permissions
|
||||
sudo chmod +x /opt/ppanel/ppanel-server
|
||||
sudo chmod +x /opt/ppanel/gateway
|
||||
|
||||
# Start service
|
||||
sudo systemctl start ppanel
|
||||
|
||||
# Check status
|
||||
sudo systemctl status ppanel
|
||||
```
|
||||
|
||||
### Rollback
|
||||
|
||||
If upgrade fails:
|
||||
|
||||
```bash
|
||||
# Stop service
|
||||
sudo systemctl stop ppanel
|
||||
|
||||
# Restore old binaries
|
||||
sudo mv /opt/ppanel/ppanel-server.old /opt/ppanel/ppanel-server
|
||||
sudo mv /opt/ppanel/gateway.old /opt/ppanel/gateway
|
||||
|
||||
# Restore database (if needed)
|
||||
sudo cp /opt/ppanel/data/ppanel.db.backup-YYYYMMDD /opt/ppanel/data/ppanel.db
|
||||
|
||||
# Start service
|
||||
sudo systemctl start ppanel
|
||||
```
|
||||
::: tip
|
||||
The system will automatically handle the upgrade process, including downloading the new binary and restarting the service.
|
||||
:::
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
@@ -413,14 +399,14 @@ sudo systemctl restart ppanel
|
||||
```bash
|
||||
# Check architecture compatibility
|
||||
uname -m
|
||||
file /opt/ppanel/ppanel-server
|
||||
file /opt/ppanel/gateway
|
||||
|
||||
# Check if executable
|
||||
ls -la /opt/ppanel/ppanel-server
|
||||
sudo chmod +x /opt/ppanel/ppanel-server
|
||||
ls -la /opt/ppanel/gateway
|
||||
sudo chmod +x /opt/ppanel/gateway
|
||||
|
||||
# Check for missing libraries (should be none for static binary)
|
||||
ldd /opt/ppanel/ppanel-server
|
||||
ldd /opt/ppanel/gateway
|
||||
```
|
||||
|
||||
### High Memory Usage
|
||||
@@ -497,7 +483,7 @@ sudo nano /etc/systemd/system/ppanel.service
|
||||
# Change: User=ppanel
|
||||
|
||||
# If binding to port < 1024, grant capability
|
||||
sudo setcap 'cap_net_bind_service=+ep' /opt/ppanel/ppanel-server
|
||||
sudo setcap 'cap_net_bind_service=+ep' /opt/ppanel/gateway
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart ppanel
|
||||
|
||||
@@ -77,17 +77,17 @@ Create a `docker-compose.yml` file with the following content:
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ppanel:
|
||||
ppanel-service:
|
||||
image: ppanel/ppanel:latest
|
||||
container_name: ppanel
|
||||
container_name: ppanel-service
|
||||
restart: always
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- ./ppanel-config:/app/etc:ro
|
||||
- ppanel-data:/app/data
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=UTC
|
||||
- ./config:/app/etc:ro
|
||||
- ./web:/app/static
|
||||
networks:
|
||||
- ppanel-net
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"]
|
||||
interval: 30s
|
||||
@@ -95,43 +95,94 @@ services:
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
volumes:
|
||||
ppanel-data:
|
||||
driver: local
|
||||
networks:
|
||||
ppanel-net:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
**Configuration Explanation:**
|
||||
|
||||
- **image**: Docker image to use (latest or specific version like `v0.1.2`)
|
||||
- **ports**: Map container port 8080 to host port 8080
|
||||
- **container_name**: Set a custom container name
|
||||
- **ports**: Map container port 8080 to host port 8080 (change host port if needed)
|
||||
- **volumes**:
|
||||
- `./ppanel-config:/app/etc:ro` - Configuration directory (read-only)
|
||||
- `ppanel-data:/app/data` - Persistent data storage
|
||||
- **restart**: Auto-restart policy
|
||||
- **environment**: Set timezone (change to your timezone like `Asia/Shanghai`)
|
||||
- `./config:/app/etc:ro` - Configuration directory (read-only)
|
||||
- `./web:/app/static` - Static files directory (admin and user frontend)
|
||||
- **networks**: Create a custom network for service isolation
|
||||
- **restart**: Auto-restart policy (always restart on failures)
|
||||
- **healthcheck**: Monitor service health
|
||||
|
||||
### Step 3: Prepare Configuration
|
||||
|
||||
```bash
|
||||
# Create configuration directory
|
||||
mkdir -p ppanel-config
|
||||
mkdir -p config
|
||||
|
||||
# Create configuration file
|
||||
cat > ppanel-config/ppanel.yaml <<EOF
|
||||
# PPanel Configuration
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
cat > config/ppanel.yaml <<EOF
|
||||
Host: 0.0.0.0
|
||||
Port: 8080
|
||||
TLS:
|
||||
Enable: false
|
||||
CertFile: ""
|
||||
KeyFile: ""
|
||||
Debug: false
|
||||
|
||||
database:
|
||||
type: sqlite
|
||||
path: /app/data/ppanel.db
|
||||
Static:
|
||||
Admin:
|
||||
Enabled: true
|
||||
Prefix: /admin
|
||||
Path: ./static/admin
|
||||
User:
|
||||
Enabled: true
|
||||
Prefix: /
|
||||
Path: ./static/user
|
||||
|
||||
# Add more configuration as needed
|
||||
JwtAuth:
|
||||
AccessSecret: your-secret-key-change-this
|
||||
AccessExpire: 604800
|
||||
|
||||
Logger:
|
||||
ServiceName: ApiService
|
||||
Mode: console
|
||||
Encoding: plain
|
||||
TimeFormat: "2006-01-02 15:04:05.000"
|
||||
Path: logs
|
||||
Level: info
|
||||
MaxContentLength: 0
|
||||
Compress: false
|
||||
Stat: true
|
||||
KeepDays: 0
|
||||
StackCooldownMillis: 100
|
||||
MaxBackups: 0
|
||||
MaxSize: 0
|
||||
Rotation: daily
|
||||
FileTimeFormat: 2006-01-02T15:04:05.000Z07:00
|
||||
|
||||
MySQL:
|
||||
Addr: localhost:3306
|
||||
Username: your-username
|
||||
Password: your-password
|
||||
Dbname: ppanel
|
||||
Config: charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
|
||||
MaxIdleConns: 10
|
||||
MaxOpenConns: 10
|
||||
SlowThreshold: 1000
|
||||
|
||||
Redis:
|
||||
Host: localhost:6379
|
||||
Pass: your-redis-password
|
||||
DB: 0
|
||||
EOF
|
||||
```
|
||||
|
||||
::: warning Required Configuration
|
||||
**MySQL and Redis are required.** Please configure the following before deployment:
|
||||
- `JwtAuth.AccessSecret` - Use a strong random secret (required)
|
||||
- `MySQL.*` - Configure your MySQL database connection (required)
|
||||
- `Redis.*` - Configure your Redis connection (required)
|
||||
:::
|
||||
|
||||
::: tip
|
||||
For detailed configuration options, please refer to the [Configuration Guide](/guide/configuration).
|
||||
:::
|
||||
@@ -169,7 +220,7 @@ docker compose logs -f ppanel
|
||||
After successful installation, you can access:
|
||||
|
||||
- **User Panel**: `http://your-server-ip:8080`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin/`
|
||||
|
||||
::: warning Default Credentials
|
||||
Please change the default admin password immediately after first login for security.
|
||||
@@ -272,43 +323,11 @@ Using `docker compose down -v` will delete all data volumes. Only use this if yo
|
||||
|
||||
## Upgrading
|
||||
|
||||
### Backup Before Upgrade
|
||||
Upgrade PPanel directly from the **Admin Dashboard**. On the dashboard homepage, you can check for new versions and upgrade with one click.
|
||||
|
||||
```bash
|
||||
# Backup configuration
|
||||
tar czf ppanel-config-backup-$(date +%Y%m%d).tar.gz ppanel-config/
|
||||
|
||||
# Backup data volume
|
||||
docker run --rm \
|
||||
-v ppanel_ppanel-data:/data \
|
||||
-v $(pwd):/backup \
|
||||
alpine tar czf /backup/ppanel-data-backup-$(date +%Y%m%d).tar.gz /data
|
||||
```
|
||||
|
||||
### Upgrade Steps
|
||||
|
||||
```bash
|
||||
# Pull latest image
|
||||
docker compose pull
|
||||
|
||||
# Recreate containers with new image
|
||||
docker compose up -d
|
||||
|
||||
# View logs to verify
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
### Rollback
|
||||
|
||||
If you encounter issues after upgrading:
|
||||
|
||||
```bash
|
||||
# Edit docker-compose.yml and change image to previous version
|
||||
# image: ppanel/ppanel:v0.1.1
|
||||
|
||||
# Restart with previous version
|
||||
docker compose up -d
|
||||
```
|
||||
::: tip
|
||||
The system will automatically handle the upgrade process, including pulling the new image and restarting the service.
|
||||
:::
|
||||
|
||||
## Advanced Configuration
|
||||
|
||||
@@ -317,8 +336,10 @@ docker compose up -d
|
||||
To use a different port, edit `docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
ports:
|
||||
- "3000:8080" # Host port 3000 -> Container port 8080
|
||||
services:
|
||||
ppanel-service:
|
||||
ports:
|
||||
- "3000:8080" # Host port 3000 -> Container port 8080
|
||||
```
|
||||
|
||||
### Multiple Instances
|
||||
@@ -403,10 +424,10 @@ sudo lsof -i :8080
|
||||
|
||||
```bash
|
||||
# Fix configuration directory permissions
|
||||
sudo chown -R $USER:$USER ppanel-config/
|
||||
sudo chown -R $USER:$USER config/
|
||||
|
||||
# Make sure files are readable
|
||||
chmod 644 ppanel-config/ppanel.yaml
|
||||
chmod 644 config/ppanel.yaml
|
||||
```
|
||||
|
||||
### Cannot Access from Outside
|
||||
|
||||
@@ -67,53 +67,106 @@ mkdir -p ~/ppanel-config
|
||||
|
||||
# Create configuration file
|
||||
cat > ~/ppanel-config/ppanel.yaml <<EOF
|
||||
server:
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
Host: 0.0.0.0
|
||||
Port: 8080
|
||||
TLS:
|
||||
Enable: false
|
||||
CertFile: ""
|
||||
KeyFile: ""
|
||||
Debug: false
|
||||
|
||||
database:
|
||||
type: sqlite
|
||||
path: /app/data/ppanel.db
|
||||
Static:
|
||||
Admin:
|
||||
Enabled: true
|
||||
Prefix: /admin
|
||||
Path: ./static/admin
|
||||
User:
|
||||
Enabled: true
|
||||
Prefix: /
|
||||
Path: ./static/user
|
||||
|
||||
JwtAuth:
|
||||
AccessSecret: your-secret-key-change-this
|
||||
AccessExpire: 604800
|
||||
|
||||
Logger:
|
||||
ServiceName: ApiService
|
||||
Mode: console
|
||||
Encoding: plain
|
||||
TimeFormat: "2006-01-02 15:04:05.000"
|
||||
Path: logs
|
||||
Level: info
|
||||
MaxContentLength: 0
|
||||
Compress: false
|
||||
Stat: true
|
||||
KeepDays: 0
|
||||
StackCooldownMillis: 100
|
||||
MaxBackups: 0
|
||||
MaxSize: 0
|
||||
Rotation: daily
|
||||
FileTimeFormat: 2006-01-02T15:04:05.000Z07:00
|
||||
|
||||
MySQL:
|
||||
Addr: localhost:3306
|
||||
Username: your-username
|
||||
Password: your-password
|
||||
Dbname: ppanel
|
||||
Config: charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai
|
||||
MaxIdleConns: 10
|
||||
MaxOpenConns: 10
|
||||
SlowThreshold: 1000
|
||||
|
||||
Redis:
|
||||
Host: localhost:6379
|
||||
Pass: your-redis-password
|
||||
DB: 0
|
||||
EOF
|
||||
```
|
||||
|
||||
::: warning Required Configuration
|
||||
**MySQL and Redis are required.** Please configure the following before deployment:
|
||||
- `JwtAuth.AccessSecret` - Use a strong random secret (required)
|
||||
- `MySQL.*` - Configure your MySQL database connection (required)
|
||||
- `Redis.*` - Configure your Redis connection (required)
|
||||
:::
|
||||
|
||||
### Step 3: Run Container
|
||||
|
||||
**Basic Command:**
|
||||
```bash
|
||||
docker run -d \
|
||||
--name ppanel \
|
||||
--name ppanel-service \
|
||||
-p 8080:8080 \
|
||||
-v ~/ppanel-config:/app/etc:ro \
|
||||
-v ppanel-data:/app/data \
|
||||
--restart unless-stopped \
|
||||
-v ~/ppanel-web:/app/static \
|
||||
--restart always \
|
||||
ppanel/ppanel:latest
|
||||
```
|
||||
|
||||
**With All Options:**
|
||||
```bash
|
||||
docker run -d \
|
||||
--name ppanel \
|
||||
--name ppanel-service \
|
||||
-p 8080:8080 \
|
||||
-v ~/ppanel-config:/app/etc:ro \
|
||||
-v ppanel-data:/app/data \
|
||||
-e TZ=UTC \
|
||||
--restart unless-stopped \
|
||||
-v ~/ppanel-web:/app/static \
|
||||
--restart always \
|
||||
--memory="2g" \
|
||||
--cpus="2" \
|
||||
--network ppanel-net \
|
||||
ppanel/ppanel:latest
|
||||
```
|
||||
|
||||
**Parameter Explanation:**
|
||||
- `-d`: Run in detached mode (background)
|
||||
- `--name ppanel`: Set container name
|
||||
- `--name ppanel-service`: Set container name
|
||||
- `-p 8080:8080`: Map port (host:container)
|
||||
- `-v ~/ppanel-config:/app/etc:ro`: Mount configuration (read-only)
|
||||
- `-v ppanel-data:/app/data`: Create data volume
|
||||
- `-e TZ=UTC`: Set timezone
|
||||
- `--restart unless-stopped`: Auto-restart policy
|
||||
- `--memory="2g"`: Memory limit
|
||||
- `--cpus="2"`: CPU limit
|
||||
- `-v ~/ppanel-web:/app/static`: Mount static files directory
|
||||
- `--restart always`: Auto-restart policy (always restart)
|
||||
- `--memory="2g"`: Memory limit (optional)
|
||||
- `--cpus="2"`: CPU limit (optional)
|
||||
- `--network ppanel-net`: Connect to custom network (optional)
|
||||
|
||||
### Step 4: Verify Running
|
||||
|
||||
@@ -181,43 +234,11 @@ docker volume rm ppanel-data
|
||||
|
||||
## Upgrading
|
||||
|
||||
### Backup Data
|
||||
Upgrade PPanel directly from the **Admin Dashboard**. On the dashboard homepage, you can check for new versions and upgrade with one click.
|
||||
|
||||
```bash
|
||||
# Backup configuration
|
||||
tar czf ppanel-config-backup-$(date +%Y%m%d).tar.gz ~/ppanel-config/
|
||||
|
||||
# Backup data volume
|
||||
docker run --rm \
|
||||
-v ppanel-data:/data \
|
||||
-v $(pwd):/backup \
|
||||
alpine tar czf /backup/ppanel-data-backup-$(date +%Y%m%d).tar.gz /data
|
||||
```
|
||||
|
||||
### Upgrade Process
|
||||
|
||||
```bash
|
||||
# Pull latest image
|
||||
docker pull ppanel/ppanel:latest
|
||||
|
||||
# Stop old container
|
||||
docker stop ppanel
|
||||
|
||||
# Remove old container
|
||||
docker rm ppanel
|
||||
|
||||
# Start new container with same configuration
|
||||
docker run -d \
|
||||
--name ppanel \
|
||||
-p 8080:8080 \
|
||||
-v ~/ppanel-config:/app/etc:ro \
|
||||
-v ppanel-data:/app/data \
|
||||
--restart unless-stopped \
|
||||
ppanel/ppanel:latest
|
||||
|
||||
# Verify
|
||||
docker logs -f ppanel
|
||||
```
|
||||
::: tip
|
||||
The system will automatically handle the upgrade process, including pulling the new image and restarting the service.
|
||||
:::
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
# One-Click Deployment
|
||||
|
||||
The quickest way to deploy PPanel using automated installation scripts. Perfect for quick testing or production deployment.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Clean Linux server (Ubuntu 20.04+, Debian 10+, CentOS 8+)
|
||||
- Root or sudo access
|
||||
- Basic network connectivity
|
||||
|
||||
## Installation Steps
|
||||
|
||||
### Option 1: Complete Installation (Recommended)
|
||||
|
||||
Install both Docker and PPanel in one command:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-docker.sh | sudo bash && \
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-ppanel.sh | bash
|
||||
```
|
||||
|
||||
### Option 2: Step-by-Step Installation
|
||||
|
||||
If you prefer to install components separately:
|
||||
|
||||
#### Step 1: Install Docker & Docker Compose
|
||||
|
||||
```bash
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-docker.sh | sudo bash
|
||||
```
|
||||
|
||||
This script will:
|
||||
- ✅ Automatically detect your operating system
|
||||
- ✅ Install Docker Engine and Docker Compose Plugin
|
||||
- ✅ Configure Docker service to start on boot
|
||||
- ✅ Add current user to docker group
|
||||
- ✅ Verify installation
|
||||
|
||||
#### Step 2: Install PPanel
|
||||
|
||||
```bash
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-ppanel.sh | bash
|
||||
```
|
||||
|
||||
This script will:
|
||||
- ✅ Check Docker environment
|
||||
- ✅ Check port availability
|
||||
- ✅ Create installation directories
|
||||
- ✅ Interactive configuration (MySQL, Redis)
|
||||
- ✅ Generate JWT secret automatically
|
||||
- ✅ Create docker-compose.yml
|
||||
- ✅ Pull Docker images and start services
|
||||
- ✅ Display access information
|
||||
|
||||
## Configuration During Installation
|
||||
|
||||
The installation script will prompt you for the following information:
|
||||
|
||||
### MySQL Configuration (Required)
|
||||
|
||||
```
|
||||
MySQL Address (default: localhost:3306):
|
||||
MySQL Username (default: ppanel):
|
||||
MySQL Password: [your-password]
|
||||
MySQL Database (default: ppanel):
|
||||
```
|
||||
|
||||
### Redis Configuration (Required)
|
||||
|
||||
```
|
||||
Redis Address (default: localhost:6379):
|
||||
Redis Password (optional): [your-password]
|
||||
Redis DB (default: 0):
|
||||
```
|
||||
|
||||
::: tip
|
||||
The installation script will automatically generate a secure JWT secret for you.
|
||||
:::
|
||||
|
||||
## Custom Installation Directory
|
||||
|
||||
By default, PPanel is installed to `~/ppanel`. You can specify a custom directory:
|
||||
|
||||
```bash
|
||||
INSTALL_DIR=/opt/ppanel curl -fsSL https://ppanel.dev/scripts/en/install-ppanel.sh | bash
|
||||
```
|
||||
|
||||
## Custom Port
|
||||
|
||||
By default, PPanel listens on port 8080. To use a different port:
|
||||
|
||||
```bash
|
||||
HOST_PORT=3000 curl -fsSL https://ppanel.dev/scripts/en/install-ppanel.sh | bash
|
||||
```
|
||||
|
||||
## Post-Installation
|
||||
|
||||
### Access Your Installation
|
||||
|
||||
After successful installation, you can access:
|
||||
|
||||
- **User Panel**: `http://your-server-ip:8080`
|
||||
- **Admin Panel**: `http://your-server-ip:8080/admin/`
|
||||
|
||||
### Common Commands
|
||||
|
||||
The installation script displays these useful commands:
|
||||
|
||||
```bash
|
||||
# Navigate to installation directory
|
||||
cd ~/ppanel
|
||||
|
||||
# Check service status
|
||||
docker compose ps
|
||||
|
||||
# View logs
|
||||
docker compose logs -f
|
||||
|
||||
# Restart services
|
||||
docker compose restart
|
||||
|
||||
# Stop services
|
||||
docker compose stop
|
||||
|
||||
# Start services
|
||||
docker compose start
|
||||
```
|
||||
|
||||
### Configure Firewall
|
||||
|
||||
**Ubuntu/Debian:**
|
||||
```bash
|
||||
sudo ufw allow 8080/tcp
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
**CentOS/RHEL:**
|
||||
```bash
|
||||
sudo firewall-cmd --permanent --add-port=8080/tcp
|
||||
sudo firewall-cmd --reload
|
||||
```
|
||||
|
||||
### Setup Reverse Proxy (Recommended)
|
||||
|
||||
For production deployments, configure a reverse proxy with HTTPS:
|
||||
|
||||
**Nginx:**
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name your-domain.com;
|
||||
|
||||
ssl_certificate /path/to/cert.pem;
|
||||
ssl_certificate_key /path/to/key.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:8080;
|
||||
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;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Caddy:**
|
||||
```
|
||||
your-domain.com {
|
||||
reverse_proxy localhost:8080
|
||||
}
|
||||
```
|
||||
|
||||
## Upgrading
|
||||
|
||||
Upgrade PPanel directly from the **Admin Dashboard**. On the dashboard homepage, you can check for new versions and upgrade with one click.
|
||||
|
||||
::: tip
|
||||
The system will automatically handle the upgrade process, including pulling the new image and restarting the service.
|
||||
:::
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Installation Failed
|
||||
|
||||
If the installation fails, check:
|
||||
|
||||
1. **Internet connectivity**: Ensure your server can access Docker Hub and GitHub
|
||||
2. **System requirements**: Verify your OS is supported
|
||||
3. **Permissions**: Make sure you have sudo/root access
|
||||
4. **Port availability**: Check if port 8080 is available
|
||||
|
||||
### Docker Not Found
|
||||
|
||||
If you get "Docker not found" error:
|
||||
|
||||
```bash
|
||||
# Check if Docker is installed
|
||||
docker --version
|
||||
|
||||
# If not installed, run the Docker installation script first
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-docker.sh | sudo bash
|
||||
```
|
||||
|
||||
### Service Won't Start
|
||||
|
||||
Check the logs for errors:
|
||||
|
||||
```bash
|
||||
cd ~/ppanel
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
Common issues:
|
||||
- MySQL connection failed: Check MySQL credentials
|
||||
- Redis connection failed: Check Redis credentials
|
||||
- Port already in use: Change the HOST_PORT
|
||||
|
||||
### Permission Denied
|
||||
|
||||
If you get permission errors with Docker:
|
||||
|
||||
```bash
|
||||
# Add user to docker group
|
||||
sudo usermod -aG docker $USER
|
||||
|
||||
# Log out and log back in, or run:
|
||||
newgrp docker
|
||||
```
|
||||
|
||||
## Uninstalling
|
||||
|
||||
To completely remove PPanel:
|
||||
|
||||
```bash
|
||||
cd ~/ppanel
|
||||
docker compose down
|
||||
cd ~
|
||||
rm -rf ~/ppanel
|
||||
```
|
||||
|
||||
## Advanced Options
|
||||
|
||||
### Non-Interactive Installation
|
||||
|
||||
For automated deployments, you can pre-configure settings using environment variables:
|
||||
|
||||
```bash
|
||||
export INSTALL_DIR=/opt/ppanel
|
||||
export HOST_PORT=8080
|
||||
export MYSQL_ADDR=localhost:3306
|
||||
export MYSQL_USER=ppanel
|
||||
export MYSQL_PASSWORD=your-password
|
||||
export MYSQL_DB=ppanel
|
||||
export REDIS_HOST=localhost:6379
|
||||
export REDIS_PASS=your-redis-password
|
||||
export REDIS_DB=0
|
||||
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-ppanel.sh | bash
|
||||
```
|
||||
|
||||
### Installation Behind Proxy
|
||||
|
||||
If your server is behind a proxy:
|
||||
|
||||
```bash
|
||||
export HTTP_PROXY=http://proxy.example.com:8080
|
||||
export HTTPS_PROXY=http://proxy.example.com:8080
|
||||
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-docker.sh | sudo bash
|
||||
curl -fsSL https://ppanel.dev/scripts/en/install-ppanel.sh | bash
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [Configuration Guide](/guide/configuration) - Customize your PPanel setup
|
||||
- [Admin Dashboard](/admin/dashboard) - Start managing your panel
|
||||
- [API Reference](/api/reference) - Integrate with your applications
|
||||
|
||||
## Need Help?
|
||||
|
||||
- Check [GitHub Issues](https://github.com/perfect-panel/ppanel/issues)
|
||||
- Review installation logs
|
||||
- Join our community for support
|
||||
Reference in New Issue
Block a user