fastsite स्व-होस्टेड है। आप इंजन को अपने सर्वर पर चलाते हैं, यह स्टैटिक आउटपुट बनाता है, और उस आउटपुट को एक git रिपॉजिटरी में पुश करता है जिसे आपका CDN देखता रहता है। आपकी सामग्री या आपके क्रेडेंशियल्स में से कुछ भी आपके इंफ्रास्ट्रक्चर से बाहर नहीं जाता।
आपको क्या चाहिए
- Docker और Compose प्लगिन के साथ एक Linux होस्ट। दो कोर और 2 GB RAM कई साइटें चलाने के लिए पर्याप्त है।
- इंजन के लिए एक डोमेन, जो उस होस्ट पर पॉइंट हो, और उसके सामने TLS हो।
- बिल्ट आउटपुट के लिए प्रति साइट एक git रिपॉजिटरी, साथ ही एक टोकन या deploy key जो उसमें पुश कर सके।
- एक स्टैटिक होस्ट जो रिपो देखे — Cloudflare Pages, Netlify, या कोई भी अन्य जो पुश पर बिल्ड करे।
आपको क्या नहीं चाहिए
होस्ट पर कोई Node टूलचेन और कोई पैकेज मैनेजर नहीं, कोई बाहरी डेटाबेस सेवा नहीं, कोई अलग कैश सर्वर प्रोविजन करने की जरूरत नहीं, और हमारे साथ कोई खाता नहीं। इमेज में PHP, Node, और इमेज पाइपलाइन शामिल हैं; Compose स्टैक अपना Redis लेकर आता है। यह एक कंटेनर और एक डेटा वॉल्यूम है।
कोड प्राप्त करें
git clone https://github.com/sitepointsystems/getfastsite_gnu.git
cd getfastsite_gnu
cp .env.example .env कॉन्फ़िगर करें
.env खोलें और उन कुछ मानों को सेट करें जो इंजन को स्वयं के बारे में जानने की जरूरत है। बाकी सब के लिए एक कार्यशील डिफ़ॉल्ट है।
| वेरिएबल | यह क्या करता है |
|---|---|
APP_URL | इंजन का सार्वजनिक URL। यह OAuth issuer है और discovery के दौरान MCP क्लाइंट्स को बताया गया आधार URL है, इसलिए यह वास्तविक बाहरी URL होना चाहिए। इसे localhost डिफ़ॉल्ट पर छोड़ना सबसे सामान्य कारण है जिससे एक रिमोट एजेंट कनेक्ट नहीं कर पाता। |
APP_SECRET | 64-कैरेक्टर का यादृच्छिक hex स्ट्रिंग। हर संग्रहीत क्रेडेंशियल के लिए एन्क्रिप्शन कुंजी प्राप्त करता है — webhook सीक्रेट, GitHub टोकन, two-factor सीड। इसे एक बार जेनरेट करें और रखें: इसे बदलने से मौजूदा सीक्रेट अनडिक्रिप्टेबल हो जाते हैं। |
DATA_PATH | जहाँ साइट डेटाबेस, मीडिया, बिल्ड, और प्रति-साइट git क्लोन रहते हैं। इसका बैकअप लें। |
REDIS_URL | Queue, सेशन, और रेट लिमिटिंग। Compose स्टैक इसे आपके लिए सेट करता है। |
GIT_AUTHOR_NAME · GIT_AUTHOR_EMAIL | publish कमिट्स पर पहचान। दोनों के डिफ़ॉल्ट हैं। |
इस कमांड से एक सीक्रेट जेनरेट करें:
php -r 'echo bin2hex(random_bytes(32)), PHP_EOL;' वैकल्पिक, और केवल तभी यदि आप सुविधाएँ चाहते हैं: Cloudflare R2 पर ऑफ-बॉक्स बैकअप के लिए R2_*, वेरिएंट पाइपलाइन चलने से पहले अतिरिक्त इमेज कम्प्रेशन के लिए SHORTPIXEL_API_KEY, और ENDPOINTR_* यदि आप प्रति-साइट कुंजी के बजाय अपने AI गेटवे के माध्यम से अनुवाद रूट कर रहे हैं।
इंजन शुरू करें
docker compose up -d
docker compose logs -f माइग्रेशन हर बूट पर स्वचालित रूप से चलते हैं, इंजन डेटाबेस और प्रत्येक साइट डेटाबेस के लिए। Queue वर्कर और शेड्यूलर कंटेनर के अंदर supervisor के अंतर्गत वेब सर्वर के साथ शुरू होते हैं — चलाने या जीवित रखने के लिए कुछ अतिरिक्त नहीं है।
जाँचें कि यह शुरू हुआ:
curl https://your-host/healthz पहला admin उपयोगकर्ता बनाएँ
कंटेनर बूट करने से डेटाबेस माइग्रेट होता है लेकिन खाता नहीं बनता। यह एक बार, स्पष्ट रूप से करें:
docker compose exec app php bin/fastsite install \
--email=you@example.com \
--password='a-long-passphrase' पासवर्ड में कम से कम 12 कैरेक्टर होने चाहिए। कमांड को दोबारा चलाना सुरक्षित है — एक बार admin मौजूद होने पर यह कुछ नहीं करता, इसलिए इसका उपयोग चुपके से दूसरा खाता जोड़ने के लिए नहीं किया जा सकता। हर अगला खाता डैशबोर्ड से बनाया जाता है।
अब आपके होस्ट पर तीन चीजें सुन रही हैं:
Dashboard
https://your-host/
साइटें, सामग्री, मीडिया, शेल संपादक, बिल्ड लॉग, बैकअप।
MCP server
https://your-host/mcp
जहाँ आप Claude, ChatGPT, या Codex को पॉइंट करते हैं। MCP संदर्भ देखें।
अपनी पहली साइट बनाएँ
एक साइट एक अपरिवर्तनीय हैंडल से पहचानी जाती है। इसे अपना डेटाबेस, अपना मीडिया स्टोर, अपना शेल, और अपनी बिल्ड आउटपुट डायरेक्टरी मिलती है।
docker compose exec app php bin/fastsite site:create blog \
--name="My blog" \
--url=https://example.com \
--locale=en फिर इसे उस रिपॉजिटरी पर पॉइंट करें जिसे आपका CDN देखता है और एक GitHub क्रेडेंशियल जोड़ें जो वहाँ पुश कर सके। दोनों साइट की सेटिंग हैं — github_repo और एक संग्रहीत क्रेडेंशियल — डैशबोर्ड से, API के माध्यम से, या किसी एजेंट द्वारा संपादन योग्य।
या यह सब छोड़ दें
पहले एक एजेंट कनेक्ट करें और कहें example.com पर blog नाम की साइट बनाएँ। ऊपर दी गई सब कुछ एक टूल कॉल है जो यह आपकी ओर से कर सकता है। अपना एजेंट कनेक्ट करना देखें।
कोड से इससे बात करना
एक scoped API कुंजी बनाएँ, फिर इसे X-API-Key हेडर के रूप में उपयोग करें:
docker compose exec app php bin/fastsite key:create you@example.com \
--name="Deploy pipeline" \
--scopes=content:write,media:write,publish \
--sites=blog सीक्रेट एक बार प्रिंट होता है और rest पर hashed होता है, इसलिए दिखने पर इसे कॉपी करें। पूरी सुविधा REST API पृष्ठ पर है।
शेल डिज़ाइन करें
एक नई साइट एक डिफ़ॉल्ट शेल के साथ बनाई जाती है: Twig टेम्पलेट, एक CSS टोकन फ़ाइल, और UI स्ट्रिंग। वहीं सारा डिज़ाइन रहता है — सामग्री केवल body HTML के रूप में आती है, इसलिए chrome एक बार डिज़ाइन किया जाता है और कभी दोहराया नहीं जाता।
शेल संपादित करने से पहले यह कैसे काम करता है पढ़ें। बिल्ड ऑडिट इनलाइन CSS, शून्य शिप किए गए JavaScript, और पूर्ण head टैग लागू करता है, और यह एक ऐसे टेम्पलेट को अस्वीकार कर देगा जो चुपचाप शिप होने देने के बजाय एक PageSpeed पॉइंट की कीमत चुकाएगा।
अपडेट करना
git pull
docker compose build --pull
docker compose up -d माइग्रेशन बूट पर चलते हैं। साइट डेटाबेस स्वतंत्र रूप से वर्शन किए जाते हैं, इसलिए कोई अपडेट प्रकाशित आउटपुट को तब तक नहीं छूता जब तक आप फिर से publish नहीं करते।
बैकअप
जो कुछ मायने रखता है वह DATA_PATH के अंतर्गत रहता है। इंजन माँग पर एक साइट का स्नैपशॉट भी ले सकता है — पूर्ण, केवल डेटाबेस, केवल मीडिया, या सिर्फ शेल — और किसी भी स्नैपशॉट को चल रही साइट पर वापस restore कर सकता है।
docker compose exec app php bin/fastsite backup:site blog
docker compose exec app php bin/fastsite backup:list blog R2_* कॉन्फ़िगर होने पर वे स्नैपशॉट Cloudflare R2 पर जाते हैं और एक नाइटली सेट अपने आप चलता है; इसके बिना वे डेटा वॉल्यूम पर लिखे जाते हैं। किसी साइट डेटाबेस को restore करने से हमेशा एक rebuild और republish शुरू होता है, इसलिए डेटाबेस और प्रकाशित आउटपुट कभी अलग नहीं हो सकते।
बिल्ट आउटपुट पहले से git में है, इसलिए आपका publish इतिहास एक दूसरा बैकअप है जिसे आप revert के साथ वापस रोल कर सकते हैं।