From b8a15c84129834d6293975d26bfef62511b226a7 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 4 Jun 2026 19:31:54 +0200 Subject: [PATCH] Compact and correct README: PHP 8.5, php8.5-fpm, Ubuntu 26.04, remove changelogs --- README.md | 312 ++++++++++++------------------------------------------ 1 file changed, 67 insertions(+), 245 deletions(-) diff --git a/README.md b/README.md index b5890f9..496c609 100755 --- a/README.md +++ b/README.md @@ -3,117 +3,36 @@
Atom CMS -### The Ultimate Retro Hotel CMS - **Modern • Fast • Self-Repairing** [![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2?style=flat&logo=discord&logoColor=white)](https://discord.gg/pP6HyZedAj) [![Laravel](https://img.shields.io/badge/Laravel-13.x-FF2D20?style=flat&logo=laravel&logoColor=white)](https://laravel.com) -[![PHP](https://img.shields.io/badge/PHP-8.1+-777BB4?style=flat&logo=php&logoColor=white)](https://php.net) - +[![PHP](https://img.shields.io/badge/PHP-8.5+-777BB4?style=flat&logo=php&logoColor=white)](https://php.net)
--- ## Features -### Commandocentrum (Admin Panel) -- **Nitro V3 Update** — One-click update system for Emulator, Nitro-V3, and Nitro_Render_V3 -- **Configurable paths** — All directories (emulator, nitro client, renderer, gamedata, SQL, backups) configurable via the Housekeeping UI, stored in the database -- **Emulator control** — Start, stop, restart, and check emulator status -- **Hotel alert** — Send messages to all online users -- **Live monitoring** — Online users, emulator status, database status, server load, system diagnostics -- **Emulator logs viewer** — Live log viewer -- **Clothing sync** — Sync catalog clothing from FigureMap -- **Notification settings** — Email & Discord alerts with rank-based filtering -- **Social login** — Google, Discord, GitHub OAuth configuration -- **Staff activity log** — Track recent housekeeping actions - -### Radio Station -- DJ applications & rank system -- Live DJ sessions with schedule -- Song requests & voting -- Shoutbox -- Listener points & leaderboard -- Contests & giveaways -- Radio banners & history - -### Shop -- Product catalog with categories -- Virtual currency purchases -- Voucher/promo codes -- PayPal integration -- Order history - -### Community -- Articles with comments, reactions & tags -- Photo gallery -- Leaderboard -- Teams & team applications -- Staff page & staff applications -- Rare values tracker -- Badge draw/lottery system - -### Hotel Client -- Nitro (HTML5) client support -- VPN/proxy checker - -### User System -- Public profiles with guestbook -- Two-Factor Authentication (2FA) -- Referral system with rewards -- Account & password settings -- Session logs - -### Help Center -- Support ticket system with replies & status management -- Website rules -- FAQ with categories - -### Themes -- **Atom** — Default light theme -- **Dusk** — Dark theme - -### Filament Admin Panel -- User & ban management -- Radio management (applications, schedules, ranks, shouts, history, banners) -- Shop & order management with charts -- Article & tag management -- Emulator settings, texts & catalog editors -- Chatlog viewer (rooms & private messages) -- Word filters & moderation tools -- Housekeeping permissions -- Website navigation & settings -- Camera/photo management +**Commandocentrum** — Nitro V3 one-click updater, emulator start/stop/restart, hotel alert, live monitoring, emulator logs viewer, clothing sync, notification settings, social login (Google/Discord/GitHub), staff activity log +**Radio** — DJ apps, live sessions, song requests, shoutbox, leaderboard, contests +**Shop** — Product catalog, virtual currency, vouchers, PayPal integration +**Community** — Articles, photo gallery, leaderboard, teams, staff page, rare values, badge lottery +**Client** — Nitro (HTML5), VPN/proxy checker +**Users** — Public profiles, 2FA, referrals, session logs +**Help** — Ticket system, FAQ, rules +**Themes** — Atom (light), Dusk (dark) +**Filament Admin** — Users, bans, radio, shop, articles, emulator settings/texts/catalog, chatlogs, word filters, permissions, navigation, camera --- ## Nitro V3 Update System -The **Commandocentrum** page in the Filament admin panel provides a one-click update system for your entire retro hotel stack. +One-click update via **Commandocentrum** → "Configureer Paths" (9 configurable paths stored in DB) → "Run Update". -### How It Works - -1. **Configure paths** — Click "Configureer Paths" to set directories for your emulator, Nitro-V3 client, Nitro_Render_V3, Gamedata, SQL updates, and backups. Paths are stored in the database and editable at any time. -2. **Run Update** — Click "Run Update" to execute `update-Nitrov3.sh`, which performs: - - `git pull` on the emulator source - - Automatic database backup via `mariadb-dump` - - Import new SQL update files - - Maven build (`mvn package`) - - Update the emulator launch script to point to the newly built JAR - - `git pull` on Nitro_Render_V3 (with automatic `yarn install` if `package.json` changed) - - `git pull` on Nitro-V3 (with automatic `yarn install` if `package.json` changed) - - `yarn build` for Nitro-V3 - - Sync Gamedata configuration files (renderer-config, ui-config, UITexts) - - Cleanup old emulator logs (14+ days) and database backups (keep last 5) - - Clear Yarn cache - - Fix filesystem permissions - - Restart the emulator service - -### Sudo Configuration - -The update script requires `sudo` access for `www-data` to restart the emulator service and fix permissions. Add this sudoers file: +The script: `git pull` emulator → DB backup + SQL imports → Maven build → `git pull` Nitro_Render_V3 + Nitro-V3 → `yarn build` → sync Gamedata → cleanup old logs/backups → permissions fix → emulator restart. +### Sudoers (required for restart) ```bash sudo tee /etc/sudoers.d/www-data << 'EOF' www-data ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart emulator @@ -123,151 +42,100 @@ EOF sudo chmod 440 /etc/sudoers.d/www-data ``` -The script gracefully skips sudo operations if they're not available. - -### Configurable Paths - -| Setting | Default | Description | -| ------- | ------- | ----------- | -| Emulator hoofdmap | `/var/www/emulator` | Root emulator directory | -| Emulator service naam | `emulator` | systemd service name | -| Database naam | `habbo` | MySQL/MariaDB database | -| SQL updates map | `{emulator}/Database Updates` | Directory with `.sql` update files | -| Backup map | `{emulator}/Database Updates/backups` | Database backup storage | -| Gamedata config map | `/var/www/Gamedata/config` | Gamedata configuration | -| Nitro client config map | `{nitro}/public/configuration` | Client configuration output | -| Nitro-V3 bronmap | `/var/www/Nitro-V3` | Nitro client source | -| Nitro Render V3 bronmap | `/var/www/Nitro_Render_V3` | Nitro renderer source | - -Database credentials are read automatically from the Laravel `.env` file. - --- ## Environment Files -Two ready-to-use environment configurations are included: - -| File | Platform | Cache | Database | -| ---- | -------- | ----- | -------- | -| `.env.install` | — | — | Step-by-step setup guide | -| `.env.example.linux` | Linux (production) | Redis | MariaDB | -| `.env.example.windows` | Windows (development) | File-based | MySQL | +| File | Platform | Cache | DB | +| ---- | -------- | ----- | -- | +| `.env.install` | — | — | Setup guide | +| `.env.example.linux` | Linux (prod) | Redis | MariaDB | +| `.env.example.windows` | Windows (dev) | File | MySQL | ```bash -# Read the installation guide first -less .env.install - -# Linux -cp .env.example.linux .env - -# Windows -cp .env.example.windows .env - -# Always generate a fresh key after copying: +cp .env.example.linux .env # or .windows php artisan key:generate ``` +> **⚠️ XAMPP is not supported.** Extremely unsafe for production. + --- ## Requirements -| Component | Requirement | -| ------------- | ------------------------------- | -| **PHP** | 8.5 or higher | -| **Database** | MariaDB 10.6+ or MySQL 8.0+ | -| **Web Server**| Apache (mod_rewrite) or Nginx | -| **Node.js** | 20 or higher | -| **Yarn** | 1.22+ or 4.x (Berry) | -| **Composer** | 2.x | - -> **⚠️ XAMPP is not supported.** XAMPP is extremely unsafe for production environments — it uses default accounts with no password, lacks essential PHP security configurations, and provides no service isolation. We want to protect our users and their hotels from preventable risks. Use a proper Linux server with Nginx or Apache. +| Component | Requirement | +|-----------|-------------| +| **PHP** | 8.5+ | +| **Database** | MariaDB 10.6+ / MySQL 8.0+ | +| **Web Server** | Nginx / Apache | +| **Node.js** | 20+ | +| **Yarn** | 1.22+ | +| **Composer** | 2.x | --- -## Installation - -### Linux (Ubuntu 26.04 / Debian) +## Installation (Ubuntu 26.04) ```bash -# 1. System dependencies -sudo apt update -sudo apt install -y git curl wget unzip nginx mariadb-server \ - php8.5 php8.5-cli php8.5-fpm php8.5-mysql php8.5-xml \ - php8.5-mbstring php8.5-curl php8.5-zip php8.5-bcmath \ - php8.5-gd php8.5-sockets php8.5-intl +# 1. System deps +sudo apt update && sudo apt install -y git curl wget unzip nginx mariadb-server \ + php8.5 php8.5-{cli,fpm,mysql,xml,mbstring,curl,zip,bcmath,gd,sockets,intl} -# 2. Install Composer -curl -sS https://getcomposer.org/installer | php -sudo mv composer.phar /usr/local/bin/composer +# 2. Composer +curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer -# 3. Install Node.js & Yarn -curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - -sudo apt install -y nodejs -sudo corepack enable -corepack install -g yarn@latest +# 3. Node.js + Yarn +curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt install -y nodejs +sudo corepack enable && corepack install -g yarn@latest -# 4. Clone the project -git clone ssh://git@your-gitea-server:8422/remco/Atomcms-edit.git /var/www/atomcms -cd /var/www/atomcms +# 4. Clone +git clone ssh://git@your-gitea-server:8422/remco/Atomcms-edit.git /var/www/atomcms && cd /var/www/atomcms -# 5. Configure environment -cp .env.example.linux .env -php artisan key:generate +# 5. Configure +cp .env.example.linux .env && php artisan key:generate -# 6. Install PHP dependencies -composer install --no-dev --optimize-autoloader +# 6. Install deps +composer install --no-dev --optimize-autoloader && yarn install -# 7. Install frontend dependencies -yarn install - -# 8. Create database +# 7. Database mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS habbo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - -# 9. Run migrations & seeders php artisan migrate --seed -# 10. Build frontend assets +# 8. Build yarn build:all -# 11. Set permissions +# 9. Permissions sudo chown -R www-data:www-data storage bootstrap/cache public/build sudo chmod -R 775 storage bootstrap/cache - -# 12. Configure web server (Nginx example) ``` +### Nginx config (`/etc/nginx/sites-available/atomcms`) + ```nginx server { listen 80; server_name your-domain.com; root /var/www/atomcms/public; - + index index.php; + charset utf-8; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; - index index.php; - charset utf-8; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } + location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { - fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; + fastcgi_pass unix:/var/run/php/php8.5-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } - location ~ /\.(?!well-known).* { - deny all; - } + location ~ /\.(?!well-known).* { deny all; } } ``` ```bash sudo ln -sf /etc/nginx/sites-available/atomcms /etc/nginx/sites-enabled/ -sudo nginx -t && sudo systemctl reload nginx -sudo systemctl restart php8.3-fpm +sudo nginx -t && sudo systemctl reload nginx && sudo systemctl restart php8.5-fpm ``` --- @@ -275,73 +143,27 @@ sudo systemctl restart php8.3-fpm ## Yarn Scripts ```bash -# Build all themes -yarn build:all - -# Build single theme -yarn build:atom # Atom theme -yarn build:dusk # Dusk theme - -# Development -yarn dev # Start Vite dev server -yarn dev:atom # Dev server for Atom theme - -# Linting & Formatting -yarn lint # Check JS/Vue -yarn lint:fix # Fix JS/Vue -yarn format # Format everything - -# Cache -yarn clean # Clear Vite cache -yarn rebuild # Clean + install + build +yarn build:all # Build all themes +yarn build:atom # Atom theme +yarn build:dusk # Dusk theme +yarn dev # Vite dev server +yarn lint # Check JS/Vue +yarn lint:fix # Fix JS/Vue +yarn format # Format everything +yarn clean # Clear Vite cache +yarn rebuild # Clean + install + build ``` --- ## Tech Stack -- **Backend:** Laravel 13 -- **Frontend:** React 19 + Alpine.js -- **Build:** Vite 8 -- **CSS:** TailwindCSS 4 -- **Admin Panel:** Filament 5 -- **Database:** MariaDB / MySQL +Laravel 13 · React 19 + Alpine.js · Vite 8 · TailwindCSS 4 · Filament 5 · MariaDB/MySQL --- -## Changelog (May 27, 2026) - -- **Added OPcache troubleshooting** — 500 error after `php artisan optimize` fix in README -- **Fixed Dashboard navigation translation** — added `Dashboard` key to Dutch Filament `resources.php` -- **Fixed Homepage navigation label** — added `Homepage` translation to `nl.json` -- **Disabled OPcache in FPM** — `99-opcache.ini` set to `opcache.enable=0` to prevent stale cache issues - -## Changelog (May 26, 2026) - -- **Removed auto-recovery** — caused race conditions by running `view:clear` during live traffic, fixed `filemtime(): stat failed` errors -- **Fixed debug banner** — now uses `config('app.debug')` with proper `(bool)` cast, no more false positives -- **Added `(bool)` casts** to all `env()` calls with boolean defaults across 6 config files (habbo, activitylog, database, filesystems, log-viewer, session) -- **Removed dangerous public scripts** — `check_icons.php` and `test_open_basedir.php` (public Laravel bootstrap + DB queries) -- **Removed root `index.php`** — duplicate front controller, unsafe if docroot misconfigured -- **Cleaned Clockwork debug data** — 42 JSON files with SQL queries, tokens, and paths -- **Hardened `.htaccess`** — block `.env`/`.git`/`composer.json` access + security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy) -- **Fixed `robots.txt`** — blocks crawlers from `/admin`, `/filament`, `/log-viewer` -- **Disabled Log Viewer by default** — no longer accessible without explicit config -- **Disabled Boost browser logs watcher** — stopped logging JS errors from every visitor to disk -- **Fixed `REDIS_PASSWORD`** — was literal string `"null"`, now empty -- **Fixed Session `same_site`** — now reads from `.env` instead of being hardcoded -- **Fixed non-existent model import** — `App\Models\Article` didn't exist, now aliased to `WebsiteArticle` -- **Removed unused traits** — `HasNotificationUrl` and `HasCommonScopes` (dead code) -- **Restricted CORS headers** — from wildcard `['*']` to specific allowed list -- **Rebuilt all caches** — config, views, routes, opcache reset, PHP-FPM restart - ## Credits -- **Remco (Epicnabbo)** — Core Maintainer, System Architecture -- **Kasja** — Design & Themes -- **Kani** — RCON & API -- **Atom Community** — Testing & Feedback +**Remco (Epicnabbo)** — Core Maintainer · **Kasja** — Design & Themes · **Kani** — RCON & API · **Atom Community** — Testing & Feedback -
-Made with love for the Retro Community -
+
Made with love for the Retro Community