Panel/INSTALL_README.md
copilot-swe-agent[bot] e016d78206
fix: address code review feedback — escaping, CSRF token, gmdate, regex config parsing
Agent-Logs-Url: https://github.com/GameServerPanel/GSP/sessions/d2560591-832a-44dc-bd98-baf5c3e26cd5

Co-authored-by: iaretechnician <2749183+iaretechnician@users.noreply.github.com>
2026-04-27 20:39:47 +00:00

187 lines
6 KiB
Markdown

# GSP / WDS Panel — Installer Guide
> **GSP is a heavily customized fork of OGP maintained by WDS.**
---
## 1. Quick Install
### 1.1 Install Ubuntu 24.04 dependencies
```bash
sudo apt update
sudo apt install apache2 mysql-client unzip tar screen sudo subversion git rsync \
php8.3 php8.3-mysql php8.3-gd php8.3-curl php8.3-mbstring php8.3-zip \
php8.3-xml php8.3-xmlrpc php-pear libapache2-mod-php8.3 -y
sudo a2enmod rewrite
sudo systemctl restart apache2
```
### 1.2 Set file permissions
```bash
sudo chown -R www-data:www-data /var/www/html/gsp
sudo chmod -R 755 /var/www/html/gsp
sudo chmod 664 /var/www/html/gsp/includes/config.inc.php
```
### 1.3 Create database
```sql
CREATE DATABASE panel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON panel.* TO 'localuser'@'localhost';
FLUSH PRIVILEGES;
```
### 1.4 Run the installer
1. Open `http://your-server/check.php` — review dependency status (no hard blockers).
2. Open `http://your-server/install.php` — follow the wizard.
3. Fill in database credentials (host, port, name, user, password, table prefix).
4. Default table prefix: `gsp_`
5. Click **Next** to install.
---
## 2. Dependency Check (`check.php`)
`check.php` is a standalone page that checks your server environment **before or after install**. It never blocks installation and can be loaded at any time.
Checks include:
| Category | What's checked |
|---|---|
| PHP Runtime | PHP version (≥ 8.3 recommended) |
| PHP Extensions | mysqli, curl, gd, mbstring, zip, xml, json, openssl, fileinfo, session, xmlrpc |
| PHP Libraries | PEAR |
| Filesystem | Writable paths (includes/, modules/, upload/, cache/, log/, temp/) |
| Linux Commands | unzip, tar, screen, sudo, subversion, git, rsync, mysql |
| Apache | mod_rewrite |
| Database | Optional live connectivity test if config.inc.php exists |
**Statuses:**
-**OK** — Requirement satisfied
-**Warning** — Missing but non-fatal; installation can proceed
-**Missing** — Extension or binary not found
-**Unknown** — Cannot be determined (e.g. shell_exec disabled)
---
## 3. Installer Form Fields
| Field | Default | Description |
|---|---|---|
| Database Host | `localhost` | MySQL hostname or IP |
| Database Port | `3306` | MySQL TCP port |
| Database Name | _(empty)_ | Target database name |
| Database User | _(empty)_ | MySQL username |
| Database Password | _(empty)_ | MySQL password |
| Table Prefix | `gsp_` | Prefix for all panel tables |
**Generated `includes/config.inc.php`:**
```php
$db_host="HOST";
$db_port="3306";
$db_user="USER";
$db_pass="PASSWORD";
$db_name="DATABASE";
$table_prefix="gsp_";
$db_type="mysql";
```
---
## 4. Reinstall Flow
If you need to reinstall the panel (e.g. after a migration or reset):
1. Restore the full installer:
```bash
cp install.php.bak install.php
```
_Or_ open `install.php` in your browser — it will show a **Restore & Re-run Installer** button.
2. Navigate to `http://your-server/install.php` and follow the wizard again.
3. The installer will detect an existing database, back it up, then reinstall cleanly.
---
## 5. Backup Behavior
When the installer detects **existing tables** in the target database, it:
1. Displays a warning: _"Existing database detected. A backup will be created before reinstall."_
2. Creates a backup database named `{database_name}_BAK` (e.g. `panel_BAK` if your DB is `panel`).
- If `{database_name}_BAK` already exists, a timestamped name is used: `{database_name}_BAK_YYYYMMDD_HHMMSS`.
3. Copies schema + data for every table into the backup database.
4. Drops all tables from the target database.
5. Proceeds with a fresh install.
**To restore from backup:**
```sql
-- Example restore of a single table
INSERT INTO panel.gsp_users SELECT * FROM panel_BAK.gsp_users;
-- Or restore the full backup DB (replace panel_BAK with the actual backup name)
mysqldump panel_BAK | mysql panel
```
---
## 6. Post-Install Security
After installation completes:
- `install.php` is automatically replaced with a **stub page** (the full installer is saved as `install.php.bak`).
- The stub prevents accidental re-runs and offers an admin action to restore the installer.
- **Change the default admin password immediately** — default credentials are `admin` / `admin`.
- Secure `includes/config.inc.php`:
```bash
sudo chmod 640 includes/config.inc.php
sudo chown www-data:www-data includes/config.inc.php
```
---
## 7. Table Prefix Migration (ogp_ → gsp_)
If you are migrating from an older OGP installation:
- The installer automatically renames `ogp_*` tables to `gsp_*` (or your chosen prefix) when they don't already exist.
- Tables that already exist under the new prefix are skipped safely.
- You can choose a custom prefix (e.g. `mypanel_`) in the installer form.
**Module SQL files** containing `ogp_` references are dynamically converted to the chosen prefix at import time.
---
## 8. Modules
All modules found in the `modules/` directory are automatically detected and installed. Module SQL files are imported with dynamic prefix substitution.
- `modulemanager` is installed first (prerequisite for all other modules).
- Prerequisite failures are treated as warnings, not hard errors.
---
## 9. Rollback
| Scenario | Action |
|---|---|
| Bad install, want fresh start | Restore DB from `panel_BAK`, restore installer via `cp install.php.bak install.php`, re-run |
| Config broken | Edit `includes/config.inc.php` manually or re-run installer |
| Installer stub needs removal | `cp install.php.bak install.php` |
| Modules failed to install | Re-run installer (it detects existing DB and backs up first) |
---
## 10. Security Notes
- Passwords are **never printed** in check.php or any installer output.
- All user input is escaped with `htmlspecialchars()` before rendering.
- The `install.php.bak` stub restore action is unprotected — remove `install.php` and `install.php.bak` once you no longer need them.
- The default admin password is stored as MD5 to match the legacy panel login system. Change it immediately.