From 411490ab82e269fff916b0e7ba80ac08d11ea37c Mon Sep 17 00:00:00 2001 From: Ivan Razin Date: Wed, 24 Jun 2026 10:33:07 +0300 Subject: [PATCH] Initial commit: modular single-file 3x-ui installer Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 56 ++ README.md | 63 ++ assets/fake-sites/site-01/index.html | 114 ++++ assets/fake-sites/site-02/index.html | 102 ++++ assets/fake-sites/site-03/index.html | 88 +++ assets/fake-sites/site-04/index.html | 135 +++++ assets/fake-sites/site-05/index.html | 76 +++ assets/fake-sites/site-06/index.html | 67 ++ assets/fake-sites/site-07/index.html | 108 ++++ assets/fake-sites/site-08/index.html | 97 +++ assets/fake-sites/site-09/index.html | 136 +++++ assets/fake-sites/site-10/index.html | 108 ++++ assets/fake-sites/site-11/index.html | 97 +++ assets/fake-sites/site-12/index.html | 108 ++++ assets/fake-sites/site-13/index.html | 119 ++++ assets/fake-sites/site-14/index.html | 113 ++++ assets/fake-sites/site-15/index.html | 99 +++ assets/fake-sites/site-16/index.html | 114 ++++ assets/fake-sites/site-17/index.html | 141 +++++ assets/fake-sites/site-18/index.html | 118 ++++ assets/fake-sites/site-19/index.html | 123 ++++ assets/fake-sites/site-20/index.html | 118 ++++ assets/fake-sites/site-21/index.html | 97 +++ assets/fake-sites/site-22/index.html | 111 ++++ assets/fake-sites/site-23/index.html | 129 ++++ assets/fake-sites/site-24/index.html | 131 ++++ assets/fake-sites/site-25/index.html | 189 ++++++ assets/fake-sites/site-26/index.html | 162 +++++ assets/fake-sites/site-27/index.html | 122 ++++ assets/fake-sites/site-28/index.html | 155 +++++ assets/fake-sites/site-29/index.html | 126 ++++ assets/fake-sites/site-30/index.html | 176 ++++++ assets/fake-sites/site-31/index.html | 147 +++++ assets/fake-sites/site-32/index.html | 123 ++++ assets/fake-sites/site-33/index.html | 171 ++++++ assets/fake-sites/site-34/index.html | 166 +++++ assets/fake-sites/site-35/index.html | 139 +++++ assets/fake-sites/site-36/index.html | 171 ++++++ assets/fake-sites/site-37/index.html | 188 ++++++ assets/fake-sites/site-38/index.html | 171 ++++++ assets/fake-sites/site-39/index.html | 195 ++++++ assets/fake-sites/site-40/index.html | 190 ++++++ assets/fake-sites/site-41/index.html | 200 ++++++ assets/fake-sites/site-42/index.html | 127 ++++ assets/fake-sites/site-43/index.html | 169 ++++++ assets/fake-sites/site-44/index.html | 160 +++++ assets/fake-sites/site-45/index.html | 195 ++++++ assets/fake-sites/site-46/index.html | 166 +++++ assets/fake-sites/site-47/index.html | 172 ++++++ assets/fake-sites/site-48/index.html | 207 +++++++ assets/fake-sites/site-49/index.html | 210 +++++++ assets/fake-sites/site-50/index.html | 94 +++ x-ui-latest.sh | 872 +++++++++++++++++++++++++++ 53 files changed, 7931 insertions(+) create mode 100644 CLAUDE.md create mode 100644 README.md create mode 100644 assets/fake-sites/site-01/index.html create mode 100644 assets/fake-sites/site-02/index.html create mode 100644 assets/fake-sites/site-03/index.html create mode 100644 assets/fake-sites/site-04/index.html create mode 100644 assets/fake-sites/site-05/index.html create mode 100644 assets/fake-sites/site-06/index.html create mode 100644 assets/fake-sites/site-07/index.html create mode 100644 assets/fake-sites/site-08/index.html create mode 100644 assets/fake-sites/site-09/index.html create mode 100644 assets/fake-sites/site-10/index.html create mode 100644 assets/fake-sites/site-11/index.html create mode 100644 assets/fake-sites/site-12/index.html create mode 100644 assets/fake-sites/site-13/index.html create mode 100644 assets/fake-sites/site-14/index.html create mode 100644 assets/fake-sites/site-15/index.html create mode 100644 assets/fake-sites/site-16/index.html create mode 100644 assets/fake-sites/site-17/index.html create mode 100644 assets/fake-sites/site-18/index.html create mode 100644 assets/fake-sites/site-19/index.html create mode 100644 assets/fake-sites/site-20/index.html create mode 100644 assets/fake-sites/site-21/index.html create mode 100644 assets/fake-sites/site-22/index.html create mode 100644 assets/fake-sites/site-23/index.html create mode 100644 assets/fake-sites/site-24/index.html create mode 100644 assets/fake-sites/site-25/index.html create mode 100644 assets/fake-sites/site-26/index.html create mode 100644 assets/fake-sites/site-27/index.html create mode 100644 assets/fake-sites/site-28/index.html create mode 100644 assets/fake-sites/site-29/index.html create mode 100644 assets/fake-sites/site-30/index.html create mode 100644 assets/fake-sites/site-31/index.html create mode 100644 assets/fake-sites/site-32/index.html create mode 100644 assets/fake-sites/site-33/index.html create mode 100644 assets/fake-sites/site-34/index.html create mode 100644 assets/fake-sites/site-35/index.html create mode 100644 assets/fake-sites/site-36/index.html create mode 100644 assets/fake-sites/site-37/index.html create mode 100644 assets/fake-sites/site-38/index.html create mode 100644 assets/fake-sites/site-39/index.html create mode 100644 assets/fake-sites/site-40/index.html create mode 100644 assets/fake-sites/site-41/index.html create mode 100644 assets/fake-sites/site-42/index.html create mode 100644 assets/fake-sites/site-43/index.html create mode 100644 assets/fake-sites/site-44/index.html create mode 100644 assets/fake-sites/site-45/index.html create mode 100644 assets/fake-sites/site-46/index.html create mode 100644 assets/fake-sites/site-47/index.html create mode 100644 assets/fake-sites/site-48/index.html create mode 100644 assets/fake-sites/site-49/index.html create mode 100644 assets/fake-sites/site-50/index.html create mode 100644 x-ui-latest.sh diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..a7ddc60 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,56 @@ +# x-ui-pro-refactor + +Refactored single-file installer for 3x-ui VPN panel (based on x-ui-pro). + +## Repository structure + +``` +x-ui-latest.sh — main installer script (single file, run remotely) +assets/ + fake-sites/ + site-01/ … site-50/ — static HTML cover pages (index.html per site) +x-ui-installer/ — reference project (do not modify) +x-ui-pro/ — original project (do not modify) +``` + +## What the script does + +1. Stops / cleans any previous install +2. Parses CLI arguments (`-install y`, `-subdomain`, `-reality_domain`, `-auto_domain y`, `-uninstall y`) +3. Installs packages (`install_packages`) — nginx-full, certbot, sqlite3, curl, wget, jq, ufw +4. Obtains Let's Encrypt certs via certbot standalone (`get_ssl_certs`) — two domains: panel + reality +5. Installs 3x-ui panel from MHSanaei/3x-ui latest release (`install_panel`) +6. Configures nginx (`configure_nginx`) — SNI stream, per-domain vhosts, shared includes snippet +7. Pushes all settings and inbounds into x-ui.db (`configure_xui_db`) — untouched from original +8. Downloads a random fake cover site from this repo (`install_fake_site`) → `/var/www/html/` +9. Tunes kernel/BBR (`tune_system`) +10. Sets up cron (`setup_cron`) — daily x-ui restart + nginx reload, monthly certbot renew +11. Configures UFW (`setup_firewall`) — 22/80/443 tcp, 443 udp +12. Prints panel URL + credentials (`show_results`) + +## What was intentionally removed vs original + +- `sub2singbox` binary install and `@reboot` cron entry +- Custom web subscription page (`/var/www/subpage`, clash.yaml, sub-3x-ui.html) +- `web_path` and `sub2singbox_path` nginx locations +- Call to external `randomfakehtml.sh` → replaced with `install_fake_site()` using local assets + +## Inbounds created + +| Protocol | Port | Transport | +|--------------|---------------|-----------| +| vless | 8443 | REALITY / TCP | +| vless | `$ws_port` | WebSocket | +| vless | UDS socket | XHTTP (gRPC) | +| trojan | `$trojan_port`| gRPC | + +## GitHub raw URL for fake sites + +`https://raw.githubusercontent.com/mozaroc/3x-ui-pro/main/assets/fake-sites/site-NN/index.html` + +## Running + +```bash +bash <(curl -fsSL https://raw.githubusercontent.com/mozaroc/3x-ui-pro/main/x-ui-latest.sh) \ + -install y -subdomain panel.example.com -reality_domain r.example.com +``` diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b2f5f7 --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +## x-ui-pro (x-ui + nginx) modification of https://github.com/GFW4Fun/x-ui-pro for REALITY +- Auto Installation (lightweight) +- Auto SSL renewal / Daily reload Nginx X-ui +- Handle **REALITY** and **WebSocket** via **nginx**. +- Multi-user and config via port **443** +- Auto enabled subscriptions via port **443** +- Auto configured VLESS+Reality and VLESSoverWebSocket +- **Custom Web Sub Page** +- Feature that allows the use of **custom client configurations for SING-BOX & CLASH META** +- **Local instance sub2sing-box** +- Auto configured Firewall +- More security and low detection with nginx +- Compatible with Cloudflare (only for WebSocket/GRPC) +- Random 150+ fake template! +- Linux Debian12/Ubuntu24! + > + **You need TWO domains or subdomains** + 1. For panel and WebSocket/GRPC/HttpUgrade/SplitHttp + 2. For REALITY destination + > + Get Free subdomains - https://scarce-hole-1e2.notion.site/14d1666462e48069818cf42553bfae1f?pvs=74 + > + RU instruction - https://scarce-hole-1e2.notion.site/3X-UI-pro-with-REALITY-panel-and-inbaunds-on-port-443-10d1666462e48085be0fee4c136ce417 + +➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ + +### Install X-UI-PRO + +``` +bash <(wget -qO- https://github.com/mozaroc/x-ui-pro/raw/master/x-ui-pro.sh) -install yes -panel 1 -ONLY_CF_IP_ALLOW no +``` +> +> Do not change SubDomain for renew SSL❗ + + +**Uninstall X-UI-PRO**:x: +``` +sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/mozaroc/x-ui-pro/master/x-ui-pro.sh) -Uninstall yes" +``` + +**backup panel and nginx configs**:x: +``` +sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/mozaroc/x-ui-pro/master/backup.sh)" +``` + +➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖ +### Screenshots :wrench:🐧⚙️ +> +**How to open custom web sub page?** +> +![](https://github.com/legiz-ru/x-ui-pro/blob/master/media/CustomWebSubHow2Open.png?raw=true) +> +**Main Page custom web sub** +> +![](https://github.com/legiz-ru/x-ui-pro/blob/master/media/CustomWebSub.png?raw=true) +> +**sub2sing-box section on custom web sub page** +> +![](https://github.com/legiz-ru/x-ui-pro/blob/master/media/CustomWebSubSingBox.png?raw=true) +> +**local instance sub2sing-box fork by legiz** +> +![](https://github.com/legiz-ru/x-ui-pro/blob/master/media/sub2sing.png?raw=true) diff --git a/assets/fake-sites/site-01/index.html b/assets/fake-sites/site-01/index.html new file mode 100644 index 0000000..c9aaf67 --- /dev/null +++ b/assets/fake-sites/site-01/index.html @@ -0,0 +1,114 @@ + + + + + +Nexus Systems — Coming Soon + + + +
NX
+

Something big is on its way

+

Coming Soon

+
+
+
00Days
+
00Hours
+
00Minutes
+
00Seconds
+
+

Nexus Systems — Redefining Infrastructure

+ + + diff --git a/assets/fake-sites/site-02/index.html b/assets/fake-sites/site-02/index.html new file mode 100644 index 0000000..d1c30a6 --- /dev/null +++ b/assets/fake-sites/site-02/index.html @@ -0,0 +1,102 @@ + + + + + +BuildRight Co. — Under Construction + + + +
+
🚧
+

Under Construction

+

+ We're working hard to build something great for you. + Our team is putting the finishing touches on our new website. +

+
Work in progress
+
+

68% complete

+

BuildRight Co. — Building Better Together

+
+ + diff --git a/assets/fake-sites/site-03/index.html b/assets/fake-sites/site-03/index.html new file mode 100644 index 0000000..89ec523 --- /dev/null +++ b/assets/fake-sites/site-03/index.html @@ -0,0 +1,88 @@ + + + + + +GreenLeaf Tech — Launching Soon + + + +
🌿
+

GreenLeaf Tech

+

We're Launching
Soon

+

+ We're building a greener future through sustainable technology. + Our platform is almost ready — join us as we grow something remarkable. +

+
+ Sustainable Cloud + Carbon Neutral + Open Source +
+ + + diff --git a/assets/fake-sites/site-04/index.html b/assets/fake-sites/site-04/index.html new file mode 100644 index 0000000..5c6cc79 --- /dev/null +++ b/assets/fake-sites/site-04/index.html @@ -0,0 +1,135 @@ + + + + + +Alex Chen — Portfolio Coming Soon + + + +
+

Portfolio

+

Alex Chen —
Designer

+

UI / UX  •  Brand Identity  •  Motion

+
+

+ Something carefully crafted is on the way. A new portfolio showcasing + the intersection of form, function, and feeling. Coming soon. +

+ Currently in development +
+
+
+
Work preview
+
+
+ + diff --git a/assets/fake-sites/site-05/index.html b/assets/fake-sites/site-05/index.html new file mode 100644 index 0000000..abe09ca --- /dev/null +++ b/assets/fake-sites/site-05/index.html @@ -0,0 +1,76 @@ + + + + + +ShopNow Store — Maintenance Mode + + + +
🔧
+

ShopNow Store

+

Maintenance Mode

+

We'll be back soon!

+
+ What's happening? + We're performing scheduled maintenance to improve your shopping experience. + All existing orders are safe and processing normally. +
+

Estimated downtime: a few hours  •  Thank you for your patience

+ + diff --git a/assets/fake-sites/site-06/index.html b/assets/fake-sites/site-06/index.html new file mode 100644 index 0000000..2c7b2ff --- /dev/null +++ b/assets/fake-sites/site-06/index.html @@ -0,0 +1,67 @@ + + + + + +Studio Minimal — New Website In Progress + + + +
+
+

New website in progress

+
+ + + diff --git a/assets/fake-sites/site-07/index.html b/assets/fake-sites/site-07/index.html new file mode 100644 index 0000000..71e10a3 --- /dev/null +++ b/assets/fake-sites/site-07/index.html @@ -0,0 +1,108 @@ + + + + + +The Luxe Hotel — Grand Opening Soon + + + +
—  ♦  —
+
The Luxe Hotel
+

Est. 2025  •  Timeless Elegance

+
+

Grand Opening Soon

+

+ We are putting the final touches on an experience of rare distinction. + Where luxury meets artistry — a sanctuary unlike any other. +

+
+
🍸Fine Dining
+
💧Spa & Wellness
+
🏠Elite Suites
+
+
+

Reservations opening soon  •  info@theluxehotel.com

+ + diff --git a/assets/fake-sites/site-08/index.html b/assets/fake-sites/site-08/index.html new file mode 100644 index 0000000..3012552 --- /dev/null +++ b/assets/fake-sites/site-08/index.html @@ -0,0 +1,97 @@ + + + + + +Bloom Wellness — Something Exciting Is Coming + + + +
🍦
+

Bloom Wellness

+

Something Exciting
Is Coming

+

+ We're preparing a holistic wellness experience designed to help you + flourish — mind, body, and spirit. Stay tuned for something beautiful. +

+
+
+
+
+ + + diff --git a/assets/fake-sites/site-09/index.html b/assets/fake-sites/site-09/index.html new file mode 100644 index 0000000..de33155 --- /dev/null +++ b/assets/fake-sites/site-09/index.html @@ -0,0 +1,136 @@ + + + + + +TechFix Support — Under Maintenance + + + +
+
TechFix Support
+
+
+
🔧
+
⚠ Scheduled Maintenance
+

Under Maintenance

+

+ Our support portal is currently undergoing scheduled system maintenance. + We apologize for the inconvenience and appreciate your patience. + For urgent issues, please contact your account manager directly. +

+
+
+
Status
+
In Progress
+
+
+
Estimated Time
+
2–4 Hours
+
+
+
Affected Systems
+
Customer Portal
+
+
+
Emergency Line
+
1-800-TECHFIX
+
+
+
+
TechFix Support © 2025  •  All rights reserved
+ + diff --git a/assets/fake-sites/site-10/index.html b/assets/fake-sites/site-10/index.html new file mode 100644 index 0000000..da2aa95 --- /dev/null +++ b/assets/fake-sites/site-10/index.html @@ -0,0 +1,108 @@ + + + + + +Initializing... Please Wait + + + +
+
+
+ ____ ____ ____ ____ +/ ___|| _ \| _ \/ ___| +\___ \| |_) | | | \___ \ + ___) | _ <| |_| |___) | +|____/|_| \_\____/|____/ +
+
[BOOT] BIOS v2.4.1 loaded
+
[BOOT] Mounting root filesystem... OK
+
[INIT] Loading kernel modules... OK
+
[INIT] Starting network services... OK
+
[INIT] Checking integrity... OK
+
[WARN] Web interface offline — maintenance in progress
+
[SYS ] Rebuilding index...
+
[SYS ] Migrating database...
+
[SYS ] Deploying new build...
+
+ Progress: 85% +
+
+ Initializing... Please Wait +
+
+ + diff --git a/assets/fake-sites/site-11/index.html b/assets/fake-sites/site-11/index.html new file mode 100644 index 0000000..2a73ee8 --- /dev/null +++ b/assets/fake-sites/site-11/index.html @@ -0,0 +1,97 @@ + + + + + +Petal Boutique — We're Getting Ready + + + + +

Petal Boutique

+

We're Getting Ready

+

+ Our new collection and boutique experience are being carefully prepared. + Something lovely is on its way to you soon. +

+
+
Curation & sourcing complete
+
Photography complete
+
Website build in progress
+
Online store going live soon
+
+ + + diff --git a/assets/fake-sites/site-12/index.html b/assets/fake-sites/site-12/index.html new file mode 100644 index 0000000..a5f9272 --- /dev/null +++ b/assets/fake-sites/site-12/index.html @@ -0,0 +1,108 @@ + + + + + +RedLine Media — Website Redesign In Progress + + + +
+
+ +
Creative Agency  •  Since 2018
+

Website
Redesign
In Progress

+

We're rebuilding from the ground up

+
+
12Years
+
340+Projects
+
98%Satisfaction
+
+

RedLine Media © 2025  —  New site dropping soon

+
+
+ + diff --git a/assets/fake-sites/site-13/index.html b/assets/fake-sites/site-13/index.html new file mode 100644 index 0000000..b4610b9 --- /dev/null +++ b/assets/fake-sites/site-13/index.html @@ -0,0 +1,119 @@ + + + + + +CloudPath Consulting — Soaring to New Heights + + + +
+
+
+
+
+
✈️
+

CloudPath Consulting

+
CloudPath
+

Soaring to
New Heights

+

+ Our new platform is taking flight. We're redesigning the way + businesses navigate cloud infrastructure — clearer skies ahead. +

+
+ Cloud Strategy + Migration + Architecture + Security +
+ +
+ + diff --git a/assets/fake-sites/site-14/index.html b/assets/fake-sites/site-14/index.html new file mode 100644 index 0000000..579c216 --- /dev/null +++ b/assets/fake-sites/site-14/index.html @@ -0,0 +1,113 @@ + + + + + +Pine Ridge Resort — Temporarily Closed for Updates + + + +
🌳 🌳 🌳
+

Pine Ridge Resort

+

Est. 1994 — Pacific Northwest

+
+

Temporarily Closed
for Updates

+

+ We are refreshing our resort website to better reflect the + natural beauty and warmth of Pine Ridge. We'll welcome you + back to our digital home shortly. +

+
+ For reservations & inquiries during this period,
+ please call us at (503) 555-0194
+ or email hello@pineridgeresort.com +
+ + + diff --git a/assets/fake-sites/site-15/index.html b/assets/fake-sites/site-15/index.html new file mode 100644 index 0000000..2e1239c --- /dev/null +++ b/assets/fake-sites/site-15/index.html @@ -0,0 +1,99 @@ + + + + + +Loading Something Great... + + + +

Slate & Teal Studio

+

Loading Something Great

+

+ We're putting the final pieces together. Something worth waiting for + is almost ready to launch. Check back very soon. +

+
+

Please stand by  —  we're nearly there

+ + diff --git a/assets/fake-sites/site-16/index.html b/assets/fake-sites/site-16/index.html new file mode 100644 index 0000000..04d871f --- /dev/null +++ b/assets/fake-sites/site-16/index.html @@ -0,0 +1,114 @@ + + + + + +Morning Roast Coffee — We're Brewing Something New + + + +
+
+
+
+
+
+

Morning Roast Coffee

+

We're Brewing
Something New

+
+

+ Our new website is steeping nicely. We'll be ready to share our + story, our beans, and our passion for the perfect cup — very soon. +

+
+ Single Origin + Small Batch + Ethically Sourced +
+ + + diff --git a/assets/fake-sites/site-17/index.html b/assets/fake-sites/site-17/index.html new file mode 100644 index 0000000..0ff6836 --- /dev/null +++ b/assets/fake-sites/site-17/index.html @@ -0,0 +1,141 @@ + + + + + +Pulse Analytics — Next Generation Platform + + + +
+

Pulse Analytics

+
PULSE.IO
+

Next Generation
Platform

+

+ We're engineering the future of real-time data analytics. + Faster insights. Smarter decisions. Launching very soon. +

+
+
10xFaster Processing
+
99.9%Uptime SLA
+
<1msLatency
+
+ Notify Me at Launch +
+ +
+ + diff --git a/assets/fake-sites/site-18/index.html b/assets/fake-sites/site-18/index.html new file mode 100644 index 0000000..1efbb30 --- /dev/null +++ b/assets/fake-sites/site-18/index.html @@ -0,0 +1,118 @@ + + + + + +Mira Fashion — New Collection Dropping Soon + + + +
+

Mira Fashion

+
Mira
+

New Collection
Dropping Soon

+

+ Something extraordinary is being crafted for the new season. + Our upcoming collection redefines elegance with a modern touch. +

+ Autumn / Winter 2025 +
+
+
+
+
Collection reveal
coming soon
+
+
+ + diff --git a/assets/fake-sites/site-19/index.html b/assets/fake-sites/site-19/index.html new file mode 100644 index 0000000..8d09a62 --- /dev/null +++ b/assets/fake-sites/site-19/index.html @@ -0,0 +1,123 @@ + + + + + +Orbit Space Academy — Exploring New Frontiers + + + +
+
+
🌐
+

Orbit Space Academy

+
Orbit Academy
+

Exploring
New Frontiers

+

+ We're launching a new era of space education. Our platform is being + assembled in orbit — mission launch is imminent. +

+
+ +
+ + + diff --git a/assets/fake-sites/site-20/index.html b/assets/fake-sites/site-20/index.html new file mode 100644 index 0000000..7ed78d1 --- /dev/null +++ b/assets/fake-sites/site-20/index.html @@ -0,0 +1,118 @@ + + + + + +Fieldwork Agency — Site Being Upgraded + + + +
+ Fieldwork Agency + Est. 2019 +
+
+
System Notice
+

Site is being
upgraded.

+

+ We are currently upgrading our digital infrastructure. + All existing client work and deliverables remain unaffected. + We'll be back online shortly. +

+
    +
  • Back-end migration complete
  • +
  • Content audit complete
  • +
  • Front-end rebuild — in progress
  • +
  • QA and testing — pending
  • +
  • Go live — soon
  • +
+
+ + + diff --git a/assets/fake-sites/site-21/index.html b/assets/fake-sites/site-21/index.html new file mode 100644 index 0000000..76cbbf1 --- /dev/null +++ b/assets/fake-sites/site-21/index.html @@ -0,0 +1,97 @@ + + + + + +Voltage Creative — Big Things Are Coming + + + +
+

Voltage Creative

+

Big
Things

+

Are Coming — Stay Charged

+
New website launching very soon
+
+
08Years Active
+
200+Campaigns
+
40+Awards
+
+ + + diff --git a/assets/fake-sites/site-22/index.html b/assets/fake-sites/site-22/index.html new file mode 100644 index 0000000..3ea1b8e --- /dev/null +++ b/assets/fake-sites/site-22/index.html @@ -0,0 +1,111 @@ + + + + + +Almost Ready... + + + +
+
🚀
+

Apex Digital

+

Almost Ready...

+

We're putting the final pieces in place before our big launch. Things are looking great — just a little longer.

+
+
Design100%
+
+
Development78%
+
+
Content & Testing45%
+
+
+
+ +
+ + diff --git a/assets/fake-sites/site-23/index.html b/assets/fake-sites/site-23/index.html new file mode 100644 index 0000000..737ca56 --- /dev/null +++ b/assets/fake-sites/site-23/index.html @@ -0,0 +1,129 @@ + + + + + +Terra Design Studio — Under Construction + + + +
+
+
+

Est. 2017

+
Terra Design Studio
+

Under Construction

+

Check back soon —

+
+ We're reshaping our digital presence with the same care and craft + we bring to every project. Warm tones, honest work, and bold ideas — coming soon. +
+
+ Brand Identity + Print Design + Environmental +
+ +
+
+ + diff --git a/assets/fake-sites/site-24/index.html b/assets/fake-sites/site-24/index.html new file mode 100644 index 0000000..18dc71b --- /dev/null +++ b/assets/fake-sites/site-24/index.html @@ -0,0 +1,131 @@ + + + + + +Arctic Digital — New Website Launching Soon + + + +
+

Arctic Digital

+
Arctic Digital
+

New Website
Launching Soon

+

Clear, Fast & Precise

+

+ We're crafting a crisp new digital experience that reflects our + commitment to clarity and precision in everything we do. +

+
+
Status
Building
+
ETA
Q3 2025
+
Design
Complete
+
Dev
In Progress
+
+ + + diff --git a/assets/fake-sites/site-25/index.html b/assets/fake-sites/site-25/index.html new file mode 100644 index 0000000..f0f734d --- /dev/null +++ b/assets/fake-sites/site-25/index.html @@ -0,0 +1,189 @@ + + + + + +Indigo Labs — The Wait Is Almost Over + + + +
+
+
+
+
+

Indigo Labs

+
Indigo Labs
+

The Wait Is
Almost Over

+

+ We've been heads-down building something that will change how teams + collaborate, create, and ship. The countdown has begun. +

+
+
00Days
+
00Hours
+
00Minutes
+
00Seconds
+
+
+ AI-Powered + Real-Time + Team Collaboration + Enterprise Ready +
+ + + + diff --git a/assets/fake-sites/site-26/index.html b/assets/fake-sites/site-26/index.html new file mode 100644 index 0000000..7b7f88a --- /dev/null +++ b/assets/fake-sites/site-26/index.html @@ -0,0 +1,162 @@ + + + + + +System Upgrade in Progress + + + +
+SYS.VER 4.2.0 +NODE: ALPHA-7 +UPLINK: SECURE +● ONLINE +
+
SYSTEM UPGRADE
+
// in progress //
+
+
> Initializing core modules... [OK]
+
> Flushing legacy cache... [OK]
+
> Migrating database clusters... [73%]
+
> Deploying new architecture... [PENDING]
+
>
+
+
+
+
+
UPGRADE SEQUENCE :: 73% COMPLETE :: EST. 6 HOURS REMAINING
+
+ + diff --git a/assets/fake-sites/site-27/index.html b/assets/fake-sites/site-27/index.html new file mode 100644 index 0000000..e2bbd8e --- /dev/null +++ b/assets/fake-sites/site-27/index.html @@ -0,0 +1,122 @@ + + + + + +Fresh Market Online — Opening Soon + + + +
+
+ 🌿 +
Fresh Market Online
+

Freshly Redesigned —
Opening Soon

+
+

We're giving our online shop a fresh makeover. New products, better navigation, and a smoother experience are on the way.

+

Our farmers and artisan suppliers are ready. We just need a little more time to get everything looking as good as it tastes.

+
+
🥬Seasonal Produce
+
🧀Artisan Goods
+
🚚Local Delivery
+
+
Check back very soon
+
+
+ + diff --git a/assets/fake-sites/site-28/index.html b/assets/fake-sites/site-28/index.html new file mode 100644 index 0000000..6d144f4 --- /dev/null +++ b/assets/fake-sites/site-28/index.html @@ -0,0 +1,155 @@ + + + + + +Hold Tight — We're Working On It + + + +
+
+
+
+
+
+
+
Scheduled Maintenance
+

Hold tight,
we're working on it.

+
+

Our team is currently performing essential maintenance. Everything will be back online shortly — we appreciate your patience.

+
+
+
+
API Live
+
+
+
+
Web UI
+
+
+
+
Portal
+
+
+
+ + diff --git a/assets/fake-sites/site-29/index.html b/assets/fake-sites/site-29/index.html new file mode 100644 index 0000000..91ccb2e --- /dev/null +++ b/assets/fake-sites/site-29/index.html @@ -0,0 +1,126 @@ + + + + + +The Cellar Restaurant — Temporarily Unavailable + + + +
+
+ +
The Cellar Restaurant
+

Temporarily Unavailable

+
+ + + +
+

We have taken our online reservation system offline for a brief period while we transition to a new service. We apologise for any inconvenience this may cause.

+

The Cellar remains open for dining. Please contact us directly to make a reservation during this time.

+
+
Dining Hours
+
Tuesday – Thursday6:00 pm – 10:00 pm
+
Friday – Saturday5:30 pm – 11:00 pm
+
Sunday5:30 pm – 9:00 pm
+
MondayClosed
+
+ +
+ + diff --git a/assets/fake-sites/site-30/index.html b/assets/fake-sites/site-30/index.html new file mode 100644 index 0000000..3cb860f --- /dev/null +++ b/assets/fake-sites/site-30/index.html @@ -0,0 +1,176 @@ + + + + + +Website in Press + + + +
+
VOL. XXIV  •  NO. 318
+
The Daily Construct
+
Est. 2001
Digital Edition
+
+
+
+
+
+
Site Status
+
+

After extensive deliberation with our editorial and technical teams, it has been determined that the current state of our online presence requires a comprehensive review and overhaul.

+

The press room is active. Typesetters and developers alike are burning the midnight oil to ensure a seamless transition.

+
+
"The presses never stop."
+

Expect a fresh layout, improved archives, and restored search functionality upon our return to print.

+
+
+
WEBSITE
IN PRESS
+
Our digital edition is currently being typeset and readied for publication. We expect to resume full online service imminently.
+
+

The management of The Daily Construct wishes to inform all readers and subscribers that this publication's website is temporarily offline as we undertake a significant redesign of our digital infrastructure.

+

This downtime, while regrettable, is necessary in order to bring our readers a significantly improved reading experience. Our archives will be fully preserved and searchable upon relaunch.

+

Subscribers with active accounts need not take any action — all credentials and preferences will be migrated automatically to the new platform.

+
+
+
+
From the Editor
+
+

Change is never easy, but it is often necessary. This redesign represents years of reader feedback distilled into a single coherent vision.

+

We remain committed to the standards of journalism that have guided this publication for over two decades.

+

The Editor-in-Chief

+
+
Notice
+
+

Print edition continues on schedule. Digital access will resume shortly. No subscriptions have been affected.

+
+
+
+ + + diff --git a/assets/fake-sites/site-31/index.html b/assets/fake-sites/site-31/index.html new file mode 100644 index 0000000..f1e4bbe --- /dev/null +++ b/assets/fake-sites/site-31/index.html @@ -0,0 +1,147 @@ + + + + + +Sunrise Media Group — A New Day Is Coming + + + +
+
+
+
+
+
+
+
+
+
+
+
+
Sunrise Media Group
+

A New Day
Is Coming

+
Illuminating Stories Since 2009
+
+

We're rebuilding our digital home from the ground up to bring you a brighter, clearer, and more inspiring media experience.

+

Our journalists and creators are hard at work. The sun is almost up.

+
+
Breaking News
+
Long-form Journalism
+
Documentaries
+
Podcasts
+
+
+ + diff --git a/assets/fake-sites/site-32/index.html b/assets/fake-sites/site-32/index.html new file mode 100644 index 0000000..7d014fa --- /dev/null +++ b/assets/fake-sites/site-32/index.html @@ -0,0 +1,123 @@ + + + + + +Our New Site Is On Its Way + + + +
+
🍰 🍵 🌼
+
Isabelle & Co.
+
Personal Chef & Artisan Bakery
+

"Our New Site Is
On Its Way"

+
❧ ❧ ❧
+

Something delightful is baking behind the scenes. We are crafting a beautiful new home online where you will be able to browse seasonal menus, order custom cakes, and book private dining experiences.

+

All the things you love about us — the warmth, the flavour, the care — are being poured into every pixel.

+
+ — Isabelle + Chef & Founder +
+
+ + + diff --git a/assets/fake-sites/site-33/index.html b/assets/fake-sites/site-33/index.html new file mode 100644 index 0000000..da4d969 --- /dev/null +++ b/assets/fake-sites/site-33/index.html @@ -0,0 +1,171 @@ + + + + + +Platform Migration in Progress + + + +
+
+
+
+ Bridgepoint Systems +
+
+

Migrating to a Better Platform

+
Our team is working to move everything to a faster, more reliable infrastructure.
+ +
+
Database Transfer100%
+
+
File Storage Migration87%
+
+
DNS Propagation62%
+
+
SSL Certificate Renewal41%
+
+
Final Testing15%
+
+
+ +
+
+
Overall Progress
+
61%
+
+
+
Est. Completion
+
~4 hrs
+
+
+ +
+ + diff --git a/assets/fake-sites/site-34/index.html b/assets/fake-sites/site-34/index.html new file mode 100644 index 0000000..3ef6b5e --- /dev/null +++ b/assets/fake-sites/site-34/index.html @@ -0,0 +1,166 @@ + + + + + +New Collection Preview Coming + + + +
+
+
+
+
Voss & Crane Photography
+
+
+
// Portfolio Update
+

New
Collection
Preview
Coming

+
+
+

We are preparing an entirely new body of work for your eyes. Portraits, landscapes, editorial — all reimagined through a different lens.

+

Our new portfolio site is being built with care. Every image handpicked. Every layout deliberate.

+
+
+
024
+
Images Ready
+
+
+
+
+
Voss & Crane Photography  •  New Collection Preview Coming  •  Stay Tuned  •  Fine Art & Editorial  •  Portraits  •  Commercial Work  • 
+
+ + diff --git a/assets/fake-sites/site-35/index.html b/assets/fake-sites/site-35/index.html new file mode 100644 index 0000000..15cbf35 --- /dev/null +++ b/assets/fake-sites/site-35/index.html @@ -0,0 +1,139 @@ + + + + + +Sage Wellness Spa — Temporarily Closed for Maintenance + + + +
+ +
Sage Wellness Spa
+
Body & Mind
+
⚠ Maintenance Notice
+

Temporarily Closed
for Maintenance

+
✧ ✧ ✧
+

We are performing essential maintenance on our online booking system to give you a smoother, more tranquil experience when scheduling your next visit.

+

We expect to be back online within 24 hours. Our spa remains open during this time — please call us directly to book.

+
+
+ 🕐 + Maintenance Window: Approx. 24 hours +
+
+ 💬 + Appointments: Please call to book during maintenance +
+
+ 🏢 + Spa Hours: Mon–Sat 9am–7pm, Sun 10am–5pm +
+
+ + Gift Cards: Remain valid — no action required +
+
+ +
+ + diff --git a/assets/fake-sites/site-36/index.html b/assets/fake-sites/site-36/index.html new file mode 100644 index 0000000..d8cd090 --- /dev/null +++ b/assets/fake-sites/site-36/index.html @@ -0,0 +1,171 @@ + + + + + +We're Refreshing Our Look + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

We're
Refreshing
Our Look

+
Big changes. Bold ideas. Coming soon.
+
+

Our studio is currently in the process of a full visual identity overhaul. New brand, new site, same great creative energy. We'll be back with something worth the wait.

+
+
+
+
+
+
+
+ + diff --git a/assets/fake-sites/site-37/index.html b/assets/fake-sites/site-37/index.html new file mode 100644 index 0000000..598d6bf --- /dev/null +++ b/assets/fake-sites/site-37/index.html @@ -0,0 +1,188 @@ + + + + + +Scheduled Maintenance Window — Nexbridge IT + + + +
+ +
Enterprise Technology Solutions
+
+
+
+
+ Scheduled Maintenance Window — Services Temporarily Unavailable +
+

Scheduled Maintenance Window

+
We are performing planned infrastructure upgrades. All customer portals and web services will be restored upon completion.
+
+
+
🛡
+
Security Patches
+
Critical OS and firmware updates being applied across all production nodes.
+
+
+
🔄
+
Load Balancer
+
Reconfiguring routing rules and upgrading balancer firmware to latest stable release.
+
+
+
💾
+
Backup Verification
+
Full off-site backup integrity checks being conducted prior to upgrade completion.
+
+
+
+
Maintenance Schedule
+
00:00Maintenance window begins — services redirectedDone
+
01:30Security patches applied to all nodesIn Progress
+
03:00Load balancer reconfiguration and testingPending
+
05:00Final verification and service restorationPending
+
+ +
+ + diff --git a/assets/fake-sites/site-38/index.html b/assets/fake-sites/site-38/index.html new file mode 100644 index 0000000..4321c73 --- /dev/null +++ b/assets/fake-sites/site-38/index.html @@ -0,0 +1,171 @@ + + + + + +The Countdown Has Begun + + + + +
+
+
👑
+
Aurelius & Co.  •  Premium Goods
+

The Countdown
Has Begun

+
Something extraordinary is on its way.
+
+
+
30
+
Days
+
+
:
+
+
00
+
Hours
+
+
:
+
+
00
+
Minutes
+
+
:
+
+
00
+
Seconds
+
+
+
We have been working quietly and carefully on something we are genuinely proud of. When this countdown reaches zero, you will see what we mean.
+
✳ ✳ ✳
+
+ + diff --git a/assets/fake-sites/site-39/index.html b/assets/fake-sites/site-39/index.html new file mode 100644 index 0000000..fd246a1 --- /dev/null +++ b/assets/fake-sites/site-39/index.html @@ -0,0 +1,195 @@ + + + + + +Something Beautiful Is Being Built — Mauve Studio + + + +
+
+
+
Mauve Interior Design Studio
+

Something Beautiful
Is Being
Built

+
+

We are transforming our digital presence to reflect the spaces we create — thoughtful, layered, and alive with intention.

+

Every room we design tells a story. Our new site will tell ours.

+
+
Residential Interior Design
+
Commercial Spaces
+
Concept & Styling
+
Bespoke Furniture Curation
+
+
+
+
+
From the Studio
+
"Design is not just what it looks like and feels like. Design is how it works."
+
+
+
+ Design System +
+ 90% +
+
+ Portfolio +
+ 75% +
+
+ Development +
+ 55% +
+
+
+
+ + diff --git a/assets/fake-sites/site-40/index.html b/assets/fake-sites/site-40/index.html new file mode 100644 index 0000000..52b0a21 --- /dev/null +++ b/assets/fake-sites/site-40/index.html @@ -0,0 +1,190 @@ + + + + + +Temporarily Suspended — Hargrove & Associates + + + +
+
+ +
+
+
+
+
+
+
Official Notice
+
+
+

Temporarily Suspended

+
REF: HGA-SITE-2024-11  •  Web Services
+
+

The online portal for Hargrove & Associates is currently suspended pending a comprehensive review and migration to a new case management platform.

+

During this period, all client matters will be handled through direct correspondence with your assigned solicitor. All existing case files, documentation, and correspondence remain fully accessible to the firm's staff.

+

We anticipate the portal to be restored within five to seven business days. We thank you for your understanding and patience during this transition.

+
+
+ Hargrove & Associates LLP + Regulated by the SRA + Authorised & Regulated +
+
+
+ + + diff --git a/assets/fake-sites/site-41/index.html b/assets/fake-sites/site-41/index.html new file mode 100644 index 0000000..6bc2aab --- /dev/null +++ b/assets/fake-sites/site-41/index.html @@ -0,0 +1,200 @@ + + + + + +Back in a Moment — Verdant Earth + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
🌿
+
+
Verdant Earth
+
Sustainable Living
+
+
+

Back in
a Moment

+
❀ ❀ ❀
+

We're tending to our digital garden — weeding out the old and planting something new and better for the future.

+

Nature takes time. So does getting things right. We'll be back soon, greener than ever.

+
+
★ Carbon Neutral
+
♥ Plastic Free
+
✦ Ethical Source
+
+
+
+ + diff --git a/assets/fake-sites/site-42/index.html b/assets/fake-sites/site-42/index.html new file mode 100644 index 0000000..d788ec3 --- /dev/null +++ b/assets/fake-sites/site-42/index.html @@ -0,0 +1,127 @@ + + + + + +SYSTEM INITIALIZING + + + +
+
+
+
+
+
init.sh — bash — 80x24
+
+
+
BIOS v2.8.1 Copyright (C) 2024
+
CPU: 8x 3.6GHz RAM: 32768MB OK
+
────────────────────────────────────────────
+
Loading kernel module... [OK]
+
Mounting filesystems... [OK]
+
Starting network services... [OK]
+
Checking disk integrity... [OK]
+
Loading web application... [WAIT]
+
> Unpacking assets...
+
> Compiling templates...
+
> Connecting to database...
+
────────────────────────────────────────────
+
SYSTEM INITIALIZING
+
────────────────────────────────────────────
+
The system is currently initializing.
+
Please wait while all services come online.
+
 
+
[############################..........] 72%
+
 
+
Estimated time to completion: ~8 minutes
+
 
+
root@server:~#
+
+
+ + diff --git a/assets/fake-sites/site-43/index.html b/assets/fake-sites/site-43/index.html new file mode 100644 index 0000000..ed7d2c1 --- /dev/null +++ b/assets/fake-sites/site-43/index.html @@ -0,0 +1,169 @@ + + + + + +Printing New Pages — The Inkwell Studio + + + +
+
+
The Inkwell Studio
+
Creative Agency
Est. 2011
+
+
Printing New Pages
+
We are composing something entirely new. Stand by for the next edition.
+
+
+

The presses are running. Every element of our new website is being set by hand — metaphorically speaking — with the same care and craft we bring to every client project.

+

We believe in taking the time to do things properly. Our old site served us well, but the story has moved on, and so must the page.

+
+
+

Good design, like good writing, rewards patience. We are not rushing this. Every layout, every typographic choice, every piece of copy is being considered and reconsidered.

+
"A blank page is not an absence of ideas — it's an invitation."
+
+
+ +
+ + diff --git a/assets/fake-sites/site-44/index.html b/assets/fake-sites/site-44/index.html new file mode 100644 index 0000000..2033e0d --- /dev/null +++ b/assets/fake-sites/site-44/index.html @@ -0,0 +1,160 @@ + + + + + +Up in the Clouds — CloudNine Solutions + + + +
+
+
+
+
+
+
+
+
+ + CloudNine Solutions +
+
+

Up in the
Clouds

+
We're migrating to something that lives higher.
+
+

Our platform is currently undergoing a major cloud infrastructure upgrade. We're moving everything to a distributed, globally-replicated system designed for the next decade.

+

Your data is safe, your services will resume shortly, and the experience on the other side will be noticeably better.

+
+
+
3x Faster
+
🛡99.9% Uptime
+
🌍Global CDN
+
🔒Zero-Trust
+
+
+ + diff --git a/assets/fake-sites/site-45/index.html b/assets/fake-sites/site-45/index.html new file mode 100644 index 0000000..c07560c --- /dev/null +++ b/assets/fake-sites/site-45/index.html @@ -0,0 +1,195 @@ + + + + + +The Thornfield — Under Renovation + + + +
+ +
+
🏰
+
The Thornfield
+
Hotel & Event Venue  •  Est. 1892
+
+
Notice to Our Guests
+

Our Website Is Currently
Under Renovation

+
+ + + +
+

The Thornfield is undergoing a full renovation of our online presence. Our new website will reflect the updated look and feel of our recently restored interiors.

+

We sincerely apologise for any disruption to your booking experience. Our reservations team remains fully operational and available to assist you directly.

+
+
+
Reservations
+
By telephone
+
+
+
Site Return
+
Within 2 weeks
+
+
+
Hotel Status
+
Open as usual
+
+
+
Events
+
Fully bookable
+
+
+
— The Management of The Thornfield
+
+
+ + + diff --git a/assets/fake-sites/site-46/index.html b/assets/fake-sites/site-46/index.html new file mode 100644 index 0000000..fccb111 --- /dev/null +++ b/assets/fake-sites/site-46/index.html @@ -0,0 +1,166 @@ + + + + + +ENTERING NEW DIMENSION — VORTEX + + + +
+
+
+
+
+
+
+
+ +
ENTERING
+

NEW
DIMENSION

+
+

Our universe is being rebuilt from the ground up. New mechanics, new visuals, new everything. What comes next will redefine the game.

+

Stand by for transmission.

+
+
Engine v5
+
New Worlds
+
Full Rebuild
+
Q1 2025
+
+
+ + diff --git a/assets/fake-sites/site-47/index.html b/assets/fake-sites/site-47/index.html new file mode 100644 index 0000000..48ba34b --- /dev/null +++ b/assets/fake-sites/site-47/index.html @@ -0,0 +1,172 @@ + + + + + +Crafting Something Special — Birch & Thread + + + +
+
+
+
+
+
+
+
+
+
+
+
Birch & Thread
+
Handmade Goods & Craft Supplies
+
+

Crafting Something
Special

+
✲ ✲ ✲
+

We're putting the same love and attention into our new website that we put into everything we make. Hand-selected, carefully composed, and made to last.

+

Our shop will be back up soon with new products, new stories, and a much nicer place to browse.

+
+
Handmade
+
Natural Materials
+
Small Batch
+
Made with Care
+
+
+
+
+
+
+
+
+
Back soon  •  Worth the wait
+ + diff --git a/assets/fake-sites/site-48/index.html b/assets/fake-sites/site-48/index.html new file mode 100644 index 0000000..628b8a7 --- /dev/null +++ b/assets/fake-sites/site-48/index.html @@ -0,0 +1,207 @@ + + + + + +Riding New Waves — Tidebreak Surf + + + +
+
+
+
+
+
+
+
+
+
+
🌊 Tidebreak Surf
+
Boards • Gear • Culture
+
+

Riding
New Waves

+
+ + + +
+

We're paddling out to a whole new site. New boards, new gear, new vibes — and a much better online shop for everything you need in the water and out of it.

+

The swell is building. We'll see you out there soon.

+
+
+
📏
+
4-6 ft
+
New Features
+
+
+
🌬
+
Offshore
+
Design Direction
+
+
+
📅
+
Soon
+
Launch Window
+
+
+
+ + diff --git a/assets/fake-sites/site-49/index.html b/assets/fake-sites/site-49/index.html new file mode 100644 index 0000000..488426e --- /dev/null +++ b/assets/fake-sites/site-49/index.html @@ -0,0 +1,210 @@ + + + + + +The Future Is Loading — Aphelion + + + +
+
+
+
+
Aphelion  •  Space & Technology Platform
+
+

The Future
Is Loading

+
▲ 48.3°N  •  SECTOR 7  •  T-MINUS: SOON
+

We're in the final stages of launching our new platform. The infrastructure has been built for what comes next — faster, smarter, further reaching than anything we've shipped before.

+

The universe doesn't wait. Neither will we.

+
+
+
98.6%
+
Systems Ready
+
+
+
< 48h
+
To Launch
+
+
+
+
Potential
+
+
+
+ + diff --git a/assets/fake-sites/site-50/index.html b/assets/fake-sites/site-50/index.html new file mode 100644 index 0000000..0f27393 --- /dev/null +++ b/assets/fake-sites/site-50/index.html @@ -0,0 +1,94 @@ + + + + + +New Chapter, Coming Soon — Aurore + + + +
+
+
+
+
+
+
Rosé & Co.
+ +
+
+
+
Coming Soon
+

A New Chapter,
Coming Soon

+
+ + + +
+

We're reimagining our corner of the world.
A fresh space, a new story — curated with love and intention.

+
Back Soon  —  Thank You for Waiting
+
+
+ + + diff --git a/x-ui-latest.sh b/x-ui-latest.sh new file mode 100644 index 0000000..58dd332 --- /dev/null +++ b/x-ui-latest.sh @@ -0,0 +1,872 @@ +#!/bin/bash +#################### x-ui-pro-refactor @ github.com/mozaroc ############################# +[[ $EUID -ne 0 ]] && echo "not root!" && sudo su - + +# ─── Output helpers ────────────────────────────────────────────────────────── +msg_ok() { echo -e "\e[1;42m $1 \e[0m"; } +msg_err() { echo -e "\e[1;41m $1 \e[0m"; } +msg_inf() { echo -e "\e[1;34m$1\e[0m"; } + +echo; msg_inf ' ___ _ _ _ ' +msg_inf ' \/ __ | | | __ |_) |_) / \ ' +msg_inf ' /\ |_| _|_ | | \ \_/ '; echo + +# ─── Constants ─────────────────────────────────────────────────────────────── +XUIDB="/etc/x-ui/x-ui.db" +GITHUB_RAW="https://raw.githubusercontent.com/mozaroc/3x-ui-pro/main" +FAKE_SITE_COUNT=50 + +# ─── Default argument values ───────────────────────────────────────────────── +domain="" +reality_domain="" +UNINSTALL="x" +INSTALL="n" +AUTODOMAIN="n" +CFALLOW="n" + +# ─── Stop & clean previous install ─────────────────────────────────────────── +systemctl stop x-ui 2>/dev/null || true +rm -rf /etc/systemd/system/x-ui.service +rm -rf /usr/local/x-ui +rm -rf /etc/x-ui +rm -rf /etc/nginx/sites-enabled/* +rm -rf /etc/nginx/sites-available/* +rm -rf /etc/nginx/stream-enabled/* + +# ─── Port / path generators ────────────────────────────────────────────────── +get_port() { + echo $(( ((RANDOM<<15)|RANDOM) % 49152 + 10000 )) +} + +gen_random_string() { + local length="$1" + head -c 4096 /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c "$length" + echo +} + +check_free() { + nc -z 127.0.0.1 "$1" &>/dev/null + return $? +} + +make_port() { + while true; do + local PORT + PORT=$(get_port) + if ! check_free "$PORT"; then + echo "$PORT" + break + fi + done +} + +# ─── Generate ports & paths (done once at startup) ─────────────────────────── +sub_port=$(make_port) +panel_port=$(make_port) +ws_port=$(make_port) +trojan_port=$(make_port) + +sub_path=$(gen_random_string 10) +json_path=$(gen_random_string 10) +panel_path=$(gen_random_string 10) +ws_path=$(gen_random_string 10) +trojan_path=$(gen_random_string 10) +xhttp_path=$(gen_random_string 10) +config_username=$(gen_random_string 10) +config_password=$(gen_random_string 10) + +# ─── Argument parsing ──────────────────────────────────────────────────────── +while [ "$#" -gt 0 ]; do + case "$1" in + -auto_domain) AUTODOMAIN="$2"; shift 2 ;; + -install) INSTALL="$2"; shift 2 ;; + -subdomain) domain="$2"; shift 2 ;; + -reality_domain) reality_domain="$2"; shift 2 ;; + -ONLY_CF_IP_ALLOW) CFALLOW="$2"; shift 2 ;; + -uninstall) UNINSTALL="$2"; shift 2 ;; + *) shift 1 ;; + esac +done + +# ─── Detect package manager ─────────────────────────────────────────────────── +Pak=$(type apt &>/dev/null && echo "apt" || echo "yum") + +# ───────────────────────────────────────────────────────────────────────────── +# UNINSTALL +# ───────────────────────────────────────────────────────────────────────────── +uninstall_xui() { + printf 'y\n' | x-ui uninstall 2>/dev/null || true + rm -rf /etc/x-ui/ /usr/local/x-ui/ /usr/bin/x-ui/ + $Pak -y remove nginx nginx-common nginx-core nginx-full python3-certbot-nginx + $Pak -y purge nginx nginx-common nginx-core nginx-full python3-certbot-nginx + $Pak -y autoremove + $Pak -y autoclean + rm -rf /var/www/html/ /etc/nginx/ /usr/share/nginx/ +} + +if [[ ${UNINSTALL} == *"y"* ]]; then + uninstall_xui + clear && msg_ok "Completely Uninstalled!" && exit 0 +fi + +# ───────────────────────────────────────────────────────────────────────────── +# GET SERVER IP +# ───────────────────────────────────────────────────────────────────────────── +IP4_REGEX="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" +IP6_REGEX="([a-f0-9:]+:+)+[a-f0-9]+" + +get_server_ip() { + IP4=$(ip route get 8.8.8.8 2>&1 | grep -Po -- 'src \K\S*') + IP6=$(ip route get 2620:fe::fe 2>&1 | grep -Po -- 'src \K\S*') + [[ $IP4 =~ $IP4_REGEX ]] || IP4=$(curl -s ipv4.icanhazip.com | tr -d '[:space:]') + [[ $IP6 =~ $IP6_REGEX ]] || IP6=$(curl -s ipv6.icanhazip.com | tr -d '[:space:]') +} + +# Early IP fetch for auto-domain +IP4=$(ip route get 8.8.8.8 2>&1 | grep -Po -- 'src \K\S*') +[[ $IP4 =~ $IP4_REGEX ]] || IP4=$(curl -s ipv4.icanhazip.com | tr -d '[:space:]') + +if [[ ${AUTODOMAIN} == *"y"* ]]; then + domain="${IP4}.cdn-one.org" + reality_domain="${IP4//./-}.cdn-one.org" +fi + +# ───────────────────────────────────────────────────────────────────────────── +# DOMAIN VALIDATION +# ───────────────────────────────────────────────────────────────────────────── +validate_domains() { + while true; do + [[ -n "$domain" ]] && break + echo -en "Enter available subdomain (sub.domain.tld): " && read -r domain + done + domain=$(echo "$domain" | tr -d '[:space:]') + SubDomain=$(echo "$domain" | sed 's/^[^ ]* \|\..*//g') + MainDomain=$(echo "$domain" | sed 's/.*\.\([^.]*\..*\)$/\1/') + [[ "${SubDomain}.${MainDomain}" != "${domain}" ]] && MainDomain=${domain} + + while true; do + [[ -n "$reality_domain" ]] && break + echo -en "Enter available subdomain for REALITY (sub.domain.tld): " && read -r reality_domain + done + reality_domain=$(echo "$reality_domain" | tr -d '[:space:]') + RealitySubDomain=$(echo "$reality_domain" | sed 's/^[^ ]* \|\..*//g') + RealityMainDomain=$(echo "$reality_domain" | sed 's/.*\.\([^.]*\..*\)$/\1/') + [[ "${RealitySubDomain}.${RealityMainDomain}" != "${reality_domain}" ]] && RealityMainDomain=${reality_domain} +} + +# ───────────────────────────────────────────────────────────────────────────── +# INSTALL PACKAGES +# ───────────────────────────────────────────────────────────────────────────── +install_packages() { + ufw disable 2>/dev/null || true + + if [[ ${INSTALL} == *"y"* ]]; then + local version + version=$(grep -oP '(?<=VERSION_ID=")[0-9]+' /etc/os-release) + [[ "$version" == "20" || "$version" == "22" ]] && echo "System: Ubuntu $version" + + $Pak -y update + $Pak -y install curl wget jq bash sudo nginx-full certbot python3-certbot-nginx sqlite3 ufw netcat-openbsd + systemctl daemon-reload && systemctl enable --now nginx + fi + + apt-get install -yqq --no-install-recommends ca-certificates +} + +# ───────────────────────────────────────────────────────────────────────────── +# SSL CERTIFICATES +# ───────────────────────────────────────────────────────────────────────────── +get_ssl_certs() { + systemctl stop nginx 2>/dev/null || true + fuser -k 80/tcp 80/udp 443/tcp 443/udp 2>/dev/null || true + + if [[ ${AUTODOMAIN} == *"y"* ]]; then + local resolve_ok=true + for d in "$domain" "$reality_domain"; do + local a + a=$(getent ahostsv4 "$d" 2>/dev/null | awk 'NR==1{print $1}') + if [[ "$a" != "$IP4" ]]; then + msg_err "Auto-domain $d does not resolve to $IP4. Fix DNS and retry." + resolve_ok=false + fi + done + [[ $resolve_ok == false ]] && exit 1 + fi + + certbot certonly --standalone --non-interactive --agree-tos \ + --register-unsafely-without-email -d "$domain" + if [[ ! -d "/etc/letsencrypt/live/${domain}/" ]]; then + systemctl start nginx >/dev/null 2>&1 + msg_err "$domain SSL could not be generated! Check Domain/IP." && exit 1 + fi + + certbot certonly --standalone --non-interactive --agree-tos \ + --register-unsafely-without-email -d "$reality_domain" + if [[ ! -d "/etc/letsencrypt/live/${reality_domain}/" ]]; then + systemctl start nginx >/dev/null 2>&1 + msg_err "$reality_domain SSL could not be generated! Check Domain/IP." && exit 1 + fi + + mkdir -p /root/cert/${domain} + chmod 755 /root/cert/* + ln -sf /etc/letsencrypt/live/${domain}/fullchain.pem /root/cert/${domain}/fullchain.pem + ln -sf /etc/letsencrypt/live/${domain}/privkey.pem /root/cert/${domain}/privkey.pem +} + +# ───────────────────────────────────────────────────────────────────────────── +# CONFIGURE NGINX +# ───────────────────────────────────────────────────────────────────────────── +configure_nginx() { + mkdir -p /etc/nginx/stream-enabled /etc/nginx/snippets + + # SNI-based stream: reality → 8443, domain → 7443 + cat > /etc/nginx/stream-enabled/stream.conf <> /etc/nginx/nginx.conf + grep -xqFR "load_module modules/ngx_stream_module.so;" /etc/nginx/* \ + || sed -i '1s/^/load_module \/usr\/lib\/nginx\/modules\/ngx_stream_module.so; /' /etc/nginx/nginx.conf + grep -xqFR "load_module modules/ngx_stream_geoip2_module.so;" /etc/nginx* \ + || sed -i '2s/^/load_module \/usr\/lib\/nginx\/modules\/ngx_stream_geoip2_module.so; /' /etc/nginx/nginx.conf + grep -xqFR "worker_rlimit_nofile 16384;" /etc/nginx/* \ + || echo "worker_rlimit_nofile 16384;" >> /etc/nginx/nginx.conf + sed -i "/worker_connections/c\worker_connections 4096;" /etc/nginx/nginx.conf + + # HTTP → HTTPS redirect + cat > /etc/nginx/sites-available/80.conf < /etc/nginx/snippets/includes.conf <\d+)/(?.*)\$ { + if (\$hack = 1) { return 404; } + client_max_body_size 0; + client_body_timeout 1d; + grpc_read_timeout 1d; + grpc_socket_keepalive on; + proxy_read_timeout 1d; + proxy_http_version 1.1; + proxy_buffering off; + proxy_request_buffering off; + proxy_socket_keepalive on; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host \$host; + proxy_set_header X-Real-IP \$remote_addr; + proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; + if (\$content_type ~* "GRPC") { + grpc_pass grpc://127.0.0.1:\$fwdport\$is_args\$args; + break; + } + if (\$http_upgrade ~* "(WEBSOCKET|WS)") { + proxy_pass http://127.0.0.1:\$fwdport\$is_args\$args; + break; + } + if (\$request_method ~* ^(PUT|POST|GET)\$) { + proxy_pass http://127.0.0.1:\$fwdport\$is_args\$args; + break; + } + } + + location / { try_files \$uri \$uri/ =404; } +EOF + + # Main domain vhost (TLS termination at 7443, proxy_protocol) + cat > "/etc/nginx/sites-available/${domain}" <|\.\.\.|\.\.\/|\/\/\/)") { set \$hack 1; } + error_page 400 401 402 403 500 501 502 503 504 =404 /404; + proxy_intercept_errors on; + + location /${panel_path}/ { + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + 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 https; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_pass https://127.0.0.1:${panel_port}; + } + location /${panel_path} { + proxy_http_version 1.1; + proxy_set_header Upgrade \$http_upgrade; + proxy_set_header Connection "upgrade"; + 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 https; + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + proxy_pass https://127.0.0.1:${panel_port}; + } + + include /etc/nginx/snippets/includes.conf; +} +EOF + + # Reality domain vhost (plain TLS at 9443, no proxy_protocol) + cat > "/etc/nginx/sites-available/${reality_domain}" <|\.\.\.|\.\.\/|\/\/\/)") { set \$hack 1; } + error_page 400 401 402 403 500 501 502 503 504 =404 /404; + proxy_intercept_errors on; + + location /${panel_path}/ { + proxy_redirect off; + 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_pass http://127.0.0.1:${panel_port}; + } + location /${panel_path} { + proxy_redirect off; + 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_pass http://127.0.0.1:${panel_port}; + } + + include /etc/nginx/snippets/includes.conf; +} +EOF + + # Activate configs + if [[ -f "/etc/nginx/sites-available/${domain}" ]]; then + rm -f /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default + ln -sf "/etc/nginx/sites-available/${domain}" /etc/nginx/sites-enabled/ + ln -sf "/etc/nginx/sites-available/${reality_domain}" /etc/nginx/sites-enabled/ + ln -sf "/etc/nginx/sites-available/80.conf" /etc/nginx/sites-enabled/ + else + msg_err "${domain} nginx config not found!" && exit 1 + fi + + if [[ $(nginx -t 2>&1 | grep -o 'successful') != "successful" ]]; then + msg_err "nginx config check failed!" && exit 1 + fi + + systemctl start nginx +} + +# ───────────────────────────────────────────────────────────────────────────── +# INSTALL PANEL (3x-ui) +# ───────────────────────────────────────────────────────────────────────────── +_arch() { + case "$(uname -m)" in + x86_64|x64|amd64) echo 'amd64' ;; + i*86|x86) echo '386' ;; + armv8*|armv8|arm64|aarch64) echo 'arm64' ;; + armv7*|armv7|arm) echo 'armv7' ;; + armv6*|armv6) echo 'armv6' ;; + armv5*|armv5) echo 'armv5' ;; + s390x) echo 's390x' ;; + *) echo "Unsupported CPU architecture!" && exit 1 ;; + esac +} + +_panel_initial_config() { + /usr/local/x-ui/x-ui setting -username "asdfasdf" -password "asdfasdf" -port "2096" -webBasePath "asdfasdf" + /usr/local/x-ui/x-ui migrate +} + +install_panel() { + local tag_version + apt-get update && apt-get install -y -q wget curl tar tzdata + + cd /usr/local/ + + tag_version=$(curl -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" \ + | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + if [[ -z "$tag_version" ]]; then + tag_version=$(curl -4 -Ls "https://api.github.com/repos/MHSanaei/3x-ui/releases/latest" \ + | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + fi + if [[ -z "$tag_version" ]]; then + echo "Failed to fetch 3x-ui version." && exit 1 + fi + + echo "Installing 3x-ui ${tag_version} ..." + wget -N -O /usr/local/x-ui-linux-$(_arch).tar.gz \ + "https://github.com/MHSanaei/3x-ui/releases/download/${tag_version}/x-ui-linux-$(_arch).tar.gz" + [[ $? -ne 0 ]] && echo "Download failed." && exit 1 + + wget -O /usr/bin/x-ui-temp https://raw.githubusercontent.com/MHSanaei/3x-ui/main/x-ui.sh + [[ $? -ne 0 ]] && echo "Failed to download x-ui.sh" && exit 1 + + [[ -d /usr/local/x-ui/ ]] && systemctl stop x-ui 2>/dev/null; rm -rf /usr/local/x-ui/ + + tar zxvf x-ui-linux-$(_arch).tar.gz + rm -f x-ui-linux-$(_arch).tar.gz + + cd x-ui + chmod +x x-ui x-ui.sh + + if [[ $(_arch) == "armv5" || $(_arch) == "armv6" || $(_arch) == "armv7" ]]; then + mv bin/xray-linux-$(_arch) bin/xray-linux-arm + chmod +x bin/xray-linux-arm + fi + chmod +x bin/xray-linux-$(_arch) + + mv -f /usr/bin/x-ui-temp /usr/bin/x-ui + chmod +x /usr/bin/x-ui + + _panel_initial_config + + cp -f x-ui.service.debian /etc/systemd/system/x-ui.service + systemctl daemon-reload + systemctl enable x-ui + systemctl start x-ui + + msg_ok "3x-ui ${tag_version} installed." +} + +# ───────────────────────────────────────────────────────────────────────────── +# CONFIGURE X-UI DATABASE +# ───────────────────────────────────────────────────────────────────────────── +configure_xui_db() { + if [[ ! -f $XUIDB ]]; then + msg_err "x-ui.db not found — panel may not be installed." && exit 1 + fi + + x-ui stop 2>/dev/null || true + + local output private_key public_key trojan_pass emoji_flag + output=$(/usr/local/x-ui/bin/xray-linux-amd64 x25519) + private_key=$(echo "$output" | grep "^PrivateKey:" | awk '{print $2}') + public_key=$(echo "$output" | grep "^Password" | awk '{print $3}') + trojan_pass=$(gen_random_string 10) + emoji_flag=$(LC_ALL=en_US.UTF-8 curl -s https://ipwho.is/ | jq -r '.flag.emoji') + + local sub_uri="https://${domain}/${sub_path}/" + local json_uri="https://${domain}/${json_path}?name=" + + # Prepare short IDs for REALITY + local shor + shor=($(openssl rand -hex 8) $(openssl rand -hex 8) $(openssl rand -hex 8) $(openssl rand -hex 8) \ + $(openssl rand -hex 8) $(openssl rand -hex 8) $(openssl rand -hex 8) $(openssl rand -hex 8)) + + sqlite3 $XUIDB </dev/null || true + chmod 644 /var/www/html/index.html + msg_ok "Fake cover site '${site_id}' installed." + else + msg_err "Failed to download fake site ${site_id} from GitHub." + fi +} + +# ───────────────────────────────────────────────────────────────────────────── +# SYSTEM TUNING (BBR + kernel params) +# ───────────────────────────────────────────────────────────────────────────── +tune_system() { + local params=( + "net.core.default_qdisc=fq" + "net.ipv4.tcp_congestion_control=bbr" + "fs.file-max=2097152" + "net.ipv4.tcp_timestamps=1" + "net.ipv4.tcp_sack=1" + "net.ipv4.tcp_window_scaling=1" + "net.core.rmem_max=16777216" + "net.core.wmem_max=16777216" + "net.ipv4.tcp_rmem=4096 87380 16777216" + "net.ipv4.tcp_wmem=4096 65536 16777216" + ) + for p in "${params[@]}"; do + grep -qxF "$p" /etc/sysctl.conf || echo "$p" >> /etc/sysctl.conf + done + sysctl -p +} + +# ───────────────────────────────────────────────────────────────────────────── +# CRON JOBS +# ───────────────────────────────────────────────────────────────────────────── +setup_cron() { + crontab -l 2>/dev/null | grep -v "certbot\|x-ui\|cloudflareips" | crontab - + (crontab -l 2>/dev/null; echo '@daily x-ui restart > /dev/null 2>&1 && nginx -s reload') | crontab - + (crontab -l 2>/dev/null; echo '@monthly certbot renew --nginx --non-interactive --post-hook "nginx -s reload" > /dev/null 2>&1') | crontab - +} + +# ───────────────────────────────────────────────────────────────────────────── +# FIREWALL +# ───────────────────────────────────────────────────────────────────────────── +setup_firewall() { + ufw disable + ufw allow 22/tcp + ufw allow 80/tcp + ufw allow 443/tcp + ufw allow 443/udp + ufw --force enable +} + +# ───────────────────────────────────────────────────────────────────────────── +# SHOW RESULTS +# ───────────────────────────────────────────────────────────────────────────── +show_results() { + clear + if systemctl is-active --quiet x-ui; then + printf '0\n' | x-ui | grep --color=never -i ':' + msg_inf "────────────────────────────────────────────────────────────────────────────────" + nginx -T | grep -i 'ssl_certificate\|ssl_certificate_key' + msg_inf "────────────────────────────────────────────────────────────────────────────────" + certbot certificates | grep -i 'Path:\|Domains:\|Expiry Date:' + msg_inf "────────────────────────────────────────────────────────────────────────────────" + msg_inf "X-UI Secure Panel: https://${domain}/${panel_path}/\n" + echo -e "Username: ${config_username}\n" + echo -e "Password: ${config_password}\n" + msg_inf "────────────────────────────────────────────────────────────────────────────────" + msg_inf "Please save this screen!" + else + nginx -t + printf '0\n' | x-ui | grep --color=never -i ':' + msg_err "x-ui or nginx check failed. Try on a clean Linux install." + fi +} + +# ───────────────────────────────────────────────────────────────────────────── +# MAIN +# ───────────────────────────────────────────────────────────────────────────── +main() { + validate_domains + install_packages + get_server_ip + get_ssl_certs + + if systemctl is-active --quiet x-ui; then + x-ui restart + else + install_panel + fi + + configure_nginx + configure_xui_db + install_fake_site + tune_system + setup_cron + setup_firewall + + if ! systemctl is-enabled --quiet x-ui; then + systemctl daemon-reload && systemctl enable x-ui.service + fi + x-ui restart + + show_results +} + +main