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:
web@ppanel
2025-12-27 11:38:50 +00:00
parent 62d45bbac1
commit 912c5c4cb6
16 changed files with 2466 additions and 564 deletions
+1 -1
View File
@@ -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.
+94 -108
View File
@@ -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
+87 -66
View File
@@ -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
+76 -55
View File
@@ -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
+289
View File
@@ -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