fastsite er self-hosted. Du kører motoren på din egen maskine, den bygger statisk output og skubber det output til et git-repository, som din CDN overvåger. Intet af dit indhold eller dine legitimationsoplysninger forlader din infrastruktur.
Hvad du har brug for
- En Linux-vært med Docker og Compose-pluginnet. To kerner og 2 GB RAM er nok til at køre flere sites.
- Et domæne til selve motoren, peget på den vært, med TLS foran.
- Et git-repository pr. site til det byggede output, plus et token eller deploy-nøgle, der kan skubbe til det.
- En statisk vært, der overvåger repoen — Cloudflare Pages, Netlify eller alt andet, der bygger ved push.
Hvad du ikke har brug for
Ingen Node-toolchain og ingen pakkehåndtering på værten, ingen ekstern databasetjeneste, ingen separat cacheserver at provisionere og ingen konto hos os. Imaget medfører PHP, Node og image-pipelinen; Compose-stakken bringer sin egen Redis med. Det er én container plus et datavolumen.
Hent koden
git clone https://github.com/sitepointsystems/getfastsite_gnu.git
cd getfastsite_gnu
cp .env.example .env Konfiguration
Åbn .env og angiv de få værdier, motoren skal kende til om sig selv. Alt andet har en fungerende standardværdi.
| Variabel | Hvad den gør |
|---|---|
APP_URL | Motorens offentlige URL. Det er OAuth-udstederen og den base, der annonceres til MCP-klienter under opdagelse, så det skal være den rigtige eksterne URL. At lade den stå på localhost-standarden er den enkelt mest almindelige årsag til, at en fjernagent ikke kan forbinde. |
APP_SECRET | En tilfældig hex-streng på 64 tegn. Afledt krypteringsnøgle til alle gemte legitimationsoplysninger — webhook-hemmeligheder, GitHub-tokens, to-faktor-seeds. Generér den én gang og behold den: rotation gør eksisterende hemmeligheder uigenoprettelige. |
DATA_PATH | Hvor site-databaser, medier, builds og site-specifikke git-kloner lever. Tag backup af dette. |
REDIS_URL | Kø, sessioner og ratebegrænsning. Compose-stakken sætter dette for dig. |
GIT_AUTHOR_NAME · GIT_AUTHOR_EMAIL | Identiteten på publiceringscommits. Begge har standardværdier. |
Generér en hemmelighed med:
php -r 'echo bin2hex(random_bytes(32)), PHP_EOL;' Valgfrit, og kun hvis du ønsker funktionerne: R2_* for off-box backups til Cloudflare R2, SHORTPIXEL_API_KEY for ekstra billedkomprimering inden variant-pipelinen kører, og ENDPOINTR_* hvis du router oversættelse igennem din egen AI-gateway frem for en per-site-nøgle.
Start motoren
docker compose up -d
docker compose logs -f Migreringer kører automatisk ved hvert opstart, for motordatabasen og hver site-database. Køarbejderen og scheduleren starter sideløbende med webserveren under supervisor inde i containeren — der er intet ekstra at køre eller holde i live.
Kontrollér, at den kom op:
curl https://your-host/healthz Opret den første adminbruger
Opstart af containeren migrerer databasen, men opretter ikke en konto. Gør det én gang, eksplicit:
docker compose exec app php bin/fastsite install \
--email=you@example.com \
--password='a-long-passphrase' Adgangskoden skal have mindst 12 tegn. Kommandoen er sikker at køre igen — når en admin eksisterer, gør den ingenting, så den kan ikke bruges til stille og roligt at tilføje en anden. Alle yderligere konti oprettes fra dashboardet.
Tre ting lytter nu på din vært:
Dashboard
https://your-host/
Sites, indhold, medier, shelleditoren, build-logs, backups.
Opret dit første site
Et site identificeres af et uforanderligt handle. Det får sin egen database, sit eget medielager, sin egen shell og sin egen build-outputmappe.
docker compose exec app php bin/fastsite site:create blog \
--name="My blog" \
--url=https://example.com \
--locale=en Peg det derefter på det repository, din CDN overvåger, og tilføj en GitHub-legitimation, der kan skubbe dertil. Begge er indstillinger på sitet — github_repo og en gemt legitimation — redigerbare fra dashboardet, via API'et eller af en agent.
Eller spring det hele over
Forbind en agent først og sig opret et site kaldet blog på example.com. Alt ovenstående er et værktøjskald, den kan foretage på dine vegne. Se tilslutning af din agent.
Brug det fra kode
Opret en afgrænset API-nøgle og brug den derefter som X-API-Key-headeren:
docker compose exec app php bin/fastsite key:create you@example.com \
--name="Deploy pipeline" \
--scopes=content:write,media:write,publish \
--sites=blog Hemmeligheden udskrives én gang og hashes i hvile, så kopiér den, når den vises. Den fulde flade er på REST API-siden.
Design shellet
Et nyt site stilladseres med et standardshell: Twig-skabeloner, en CSS-tokenfil og UI-strenge. Det er der, alt design lever — indhold ankommer kun som brødtekst-HTML, så chrome'et designes én gang og gentages aldrig.
Læs hvordan det fungerer, inden du redigerer shellet. Build-revisionen håndhæver indlejret CSS, nul leveret JavaScript og komplette head-tags, og den vil afvise en skabelon, der ville koste et PageSpeed-point, frem for at lade det gå stille igennem.
Opdatering
git pull
docker compose build --pull
docker compose up -d Migreringer kører ved opstart. Site-databaser er versioneret uafhængigt, så en opdatering rører aldrig publiceret output, før du publicerer igen.
Backups
Alt, der har betydning, lever under DATA_PATH. Motoren kan også tage et snapshot af et site on demand — fuldt, kun database, kun medier eller blot shellet — og gendanne et vilkårligt snapshot hen over et kørende site.
docker compose exec app php bin/fastsite backup:site blog
docker compose exec app php bin/fastsite backup:list blog Med R2_* konfigureret går disse snapshots til Cloudflare R2, og et natligt sæt kører af sig selv; uden det skrives de til datavolumenet. Gendannelse af en site-database udløser altid en genopbygning og gen-publicering, så databasen og det publicerede output aldrig kan drive fra hinanden.
Bygget output er allerede i git, så din publiceringshistorik er en anden backup, du kan rulle tilbage til med en revert.