fastsite är självhostat. Du kör motorn på din egen server, den bygger statisk utdata och skickar den till ett git-repository som din CDN bevakar. Inget av ditt innehåll eller dina inloggningsuppgifter lämnar din infrastruktur.
Vad du behöver
- En Linux-server med Docker och Compose-pluginet. Två kärnor och 2 GB RAM räcker för att köra flera webbplatser.
- En domän för själva motorn, pekad mot den servern, med TLS framför den.
- Ett git-repository per webbplats för den byggda utdatan, samt en token eller deploy-nyckel som kan pusha dit.
- En statisk värd som bevakar repot — Cloudflare Pages, Netlify, eller vad annat som helst som bygger vid push.
Vad du inte behöver
Ingen Node-verktygskedja och ingen pakethanterare på servern, ingen extern databastjänst, ingen separat cacheserver att etablera, och inget konto hos oss. Avbildningen innehåller PHP, Node och bildpipelinen; Compose-stacken tar med sin egen Redis. Det är en container plus en datavolym.
Hämta koden
git clone https://github.com/sitepointsystems/getfastsite_gnu.git
cd getfastsite_gnu
cp .env.example .env Konfigurera
Öppna .env och ange de få värden som motorn behöver känna till om sig själv. Allt annat har ett fungerande standardvärde.
| Variabel | Vad den gör |
|---|---|
APP_URL | Motorns publika URL. Det är OAuth-utgivaren och basen som annonseras till MCP-klienter vid discovery, så det måste vara den verkliga externa URL:en. Att lämna den på localhost-standarden är den enskilt vanligaste anledningen till att en fjärragent inte kan ansluta. |
APP_SECRET | En slumpmässig hexsträng på 64 tecken. Härleder krypteringsnyckeln för alla lagrade inloggningsuppgifter — webhook-hemligheter, GitHub-tokens, tvåfaktorfrön. Generera den en gång och behåll den: att rotera den gör befintliga hemligheter okrypterbara. |
DATA_PATH | Var webbplatsens databaser, media, byggen och per-webbplats git-kloner lagras. Säkerhetskopiera detta. |
REDIS_URL | Kö, sessioner och hastighetsbegränsning. Compose-stacken ställer in detta åt dig. |
GIT_AUTHOR_NAME · GIT_AUTHOR_EMAIL | Identiteten på publiceringscommits. Båda har standardvärden. |
Generera en hemlighet med:
php -r 'echo bin2hex(random_bytes(32)), PHP_EOL;' Valfritt, och bara om du vill ha funktionerna: R2_* för säkerhetskopior utanför servern till Cloudflare R2, SHORTPIXEL_API_KEY för extra bildkomprimering innan variantpipelinen körs, och ENDPOINTR_* om du dirigerar översättning via din egen AI-gateway istället för en per-webbplats-nyckel.
Starta motorn
docker compose up -d
docker compose logs -f Migreringar körs automatiskt vid varje uppstart, för motordatabasen och varje webbplatsdatabas. Kö-workern och schemaläggaren startar tillsammans med webbservern under supervisor inne i containern — det finns inget extra att köra eller hålla igång.
Kontrollera att den startade:
curl https://your-host/healthz Skapa den första adminanvändaren
Att starta containern migrerar databasen men skapar inget konto. Gör det en gång, explicit:
docker compose exec app php bin/fastsite install \
--email=you@example.com \
--password='a-long-passphrase' Lösenordet behöver minst 12 tecken. Kommandot är säkert att köra igen — när en admin väl finns gör det ingenting, så det kan inte användas för att tyst lägga till ytterligare en. Varje vidare konto skapas från instrumentpanelen.
Tre saker lyssnar nu på din server:
Instrumentpanel
https://your-host/
Webbplatser, innehåll, media, skalredigeraren, byggloggar, säkerhetskopior.
Skapa din första webbplats
En webbplats identifieras av ett oföränderligt handtag. Den får sin egen databas, sitt eget medialager, sitt eget skal och sin egen byggutdatakatalog.
docker compose exec app php bin/fastsite site:create blog \
--name="My blog" \
--url=https://example.com \
--locale=en Peka sedan den mot det repository som din CDN bevakar och lägg till en GitHub-inloggning som kan pusha dit. Båda är inställningar på webbplatsen — github_repo och en lagrad inloggning — redigerbara från instrumentpanelen, via API:et eller av en agent.
Eller hoppa över allt det
Anslut en agent först och säg skapa en webbplats kallad blog på example.com. Allt ovan är ett verktygsanrop den kan göra för din räkning. Se att ansluta din agent.
Använda det från kod
Skapa en begränsad API-nyckel och använd den sedan som X-API-Key-header:
docker compose exec app php bin/fastsite key:create you@example.com \
--name="Deploy pipeline" \
--scopes=content:write,media:write,publish \
--sites=blog Hemligheten skrivs ut en gång och hashas i vila, så kopiera den när den visas. Hela ytan finns på REST API-sidan.
Designa skalet
En ny webbplats scaffoldas med ett standardskal: Twig-mallar, en CSS-tokenfil och UI-strängar. Det är där all design lever — innehåll anländer som enbart body-HTML, så krom designas en gång och upprepas aldrig.
Läs hur det fungerar innan du redigerar skalet. Bygggranskaren tillämpar inlinead CSS, noll skickad JavaScript och kompletta head-taggar, och den avvisar en mall som skulle kosta en PageSpeed-poäng snarare än att låta den skeppas tyst.
Uppdatering
git pull
docker compose build --pull
docker compose up -d Migreringar körs vid uppstart. Webbplatsdatabaser är versionerade oberoende, så en uppdatering rör aldrig publicerad utdata förrän du publicerar igen.
Säkerhetskopior
Allt som spelar roll finns under DATA_PATH. Motorn kan också ta en ögonblicksbild av en webbplats på begäran — fullständig, enbart databas, enbart media eller bara skalet — och återställa vilken ögonblicksbild som helst tillbaka till en aktiv webbplats.
docker compose exec app php bin/fastsite backup:site blog
docker compose exec app php bin/fastsite backup:list blog Med R2_* konfigurerat skickas dessa ögonblicksbilder till Cloudflare R2 och en nattlig uppsättning körs på egen hand; utan det skrivs de till datavolymen. Att återställa en webbplatsdatabas utlöser alltid en ombyggnad och ompublicering, så databasen och den publicerade utdatan kan aldrig glida isär.
Byggd utdata finns redan i git, så din publiceringshistorik är en andra säkerhetskopia du kan återgå till med en revert.