fastsite er selvdriftet. Du kjører motoren på din egen maskin, den bygger statisk utdata og skyver dette til et git-repositorium som CDN-en din overvåker. Ingenting av innholdet ditt eller legitimasjonen din forlater infrastrukturen din.

Hva du trenger

  • En Linux-vert med Docker og Compose-pluginen. To kjerner og 2 GB RAM er nok til å kjøre flere nettsteder.
  • Et domene for selve motoren, pekt mot denne verten, med TLS foran.
  • Et git-repositorium per nettsted for det bygde utdataet, pluss et token eller deploy-nøkkel som kan skyve dit.
  • En statisk vert som overvåker repositoriet — Cloudflare Pages, Netlify, eller hva som helst annet som bygger ved push.

Hva du ikke trenger

Ingen Node-verktøykjede og ingen pakkebehandler på verten, ingen ekstern databasetjeneste, ingen separat cache-server å klargjøre, og ingen konto hos oss. Imaget inneholder PHP, Node og bildepipelinen; Compose-stakken har sin egen Redis. Det er én container pluss et datavolum.

Hent koden

git clone https://github.com/sitepointsystems/getfastsite_gnu.git
cd getfastsite_gnu
cp .env.example .env

Konfigurer

Åpne .env og sett de få verdiene motoren trenger å vite om seg selv. Alt annet har en fungerende standardverdi.

VariabelHva den gjør
APP_URLMotorens offentlige URL. Den er OAuth-utstederen og basen som annonseres til MCP-klienter under oppdagelse, så den må være den reelle eksterne URL-en. Å la den stå på localhost-standarden er den aller vanligste årsaken til at en ekstern agent ikke kan koble til.
APP_SECRETEn tilfeldig hex-streng på 64 tegn. Utleder krypteringsnøkkelen for alle lagrede legitimasjoner — webhook-hemmeligheter, GitHub-tokens, to-faktor-frø. Generer den én gang og bevar den: å rotere den gjør eksisterende hemmeligheter uleselige.
DATA_PATHHvor nettstedsdatabaser, media, bygg og per-nettsted git-kloner bor. Ta sikkerhetskopi av dette.
REDIS_URLKø, sesjoner og hastighetsbegrensning. Compose-stakken setter dette for deg.
GIT_AUTHOR_NAME · GIT_AUTHOR_EMAILIdentiteten på publiseringskommitter. Begge har standardverdier.

Generer en hemmelighet med:

php -r 'echo bin2hex(random_bytes(32)), PHP_EOL;'

Valgfritt, og bare hvis du vil ha funksjonene: R2_* for off-box sikkerhetskopier til Cloudflare R2, SHORTPIXEL_API_KEY for ekstra bildekomprimering før variant-pipelinen kjører, og ENDPOINTR_* hvis du ruter oversettelse gjennom din egen AI-gateway i stedet for en per-nettsted-nøkkel.

Start motoren

docker compose up -d
docker compose logs -f

Migreringer kjøres automatisk ved hver oppstart, for motordatabasen og hver nettstedsdatabase. Køarbeideren og planleggeren starter ved siden av webserveren under supervisor inne i containeren — det er ingenting ekstra å kjøre eller holde i live.

Sjekk at den kom opp:

curl https://your-host/healthz

Opprett den første adminbrukeren

Oppstart av containeren migrerer databasen, men oppretter ikke en konto. Gjør det én gang, eksplisitt:

docker compose exec app php bin/fastsite install \
  --email=you@example.com \
  --password='a-long-passphrase'

Passordet må ha minst 12 tegn. Kommandoen er trygg å kjøre på nytt — når en admin finnes, gjør den ingenting, og kan derfor ikke brukes til å stille legge til en andre. Alle øvrige kontoer opprettes fra dashbordet.

Tre ting lytter nå på verten din:

Dashbord

https://your-host/

Nettsteder, innhold, media, shell-editoren, byggelogger, sikkerhetskopier.

MCP-server

https://your-host/mcp

Det du peker Claude, ChatGPT eller Codex mot. Se MCP-referansen.

REST API

https://your-host/api/v1

For pipelines og skript som ikke er agenter. Se API-referansen.

Opprett ditt første nettsted

Et nettsted identifiseres av et uforanderlig håndtak. Det får sin egen database, sin egen mediebutikk, sitt eget shell og sin egen katalog for bygget utdata.

docker compose exec app php bin/fastsite site:create blog \
  --name="My blog" \
  --url=https://example.com \
  --locale=en

Pek det deretter mot repositoriet CDN-en din overvåker og legg til en GitHub-legitimasjon som kan skyve dit. Begge er innstillinger på nettstedet — github_repo og en lagret legitimasjon — redigerbare fra dashbordet, via API-et eller av en agent.

Eller hopp over alt det

Koble til en agent først og si opprett et nettsted kalt blog på example.com. Alt ovenfor er et verktøykall den kan gjøre på dine vegne. Se tilkobling av agenten din.

Snakke til det fra kode

Opprett en avgrenset API-nøkkel og bruk den 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

Hemmeligheten skrives ut én gang og hashes i hvile, så kopier den når den vises. Hele overflaten finner du på REST API-siden.

Design shellet

Et nytt nettsted stillas opp med et standard shell: Twig-maler, en CSS-tokenfil og UI-strenger. Det er der all design bor — innhold ankommer som body-HTML kun, så rammen designes én gang og gjentas aldri.

Les hvordan det fungerer før du redigerer shellet. Byggerevisjonen håndhever innebygd CSS, null levert JavaScript og komplette head-tagger, og den vil avvise en mal som ville kostet et PageSpeed-poeng i stedet for å la den leveres stille.

Oppdatering

git pull
docker compose build --pull
docker compose up -d

Migreringer kjøres ved oppstart. Nettstedsdatabaser er versjonert uavhengig, så en oppdatering berører aldri publisert utdata før du publiserer på nytt.

Sikkerhetskopier

Alt som betyr noe bor under DATA_PATH. Motoren kan også ta et øyeblikksbilde av et nettsted på forespørsel — fullstendig, kun database, kun media eller bare shellet — og gjenopprette et hvilket som helst øyeblikksbilde tilbake over et kjørende nettsted.

docker compose exec app php bin/fastsite backup:site blog
docker compose exec app php bin/fastsite backup:list blog

Med R2_* konfigurert sendes disse øyeblikksbildene til Cloudflare R2 og et nattlig sett kjøres på egen hånd; uten det skrives de til datavolummet. Gjenoppretting av en nettstedsdatabase utløser alltid et nybygg og republisering, slik at databasen og det publiserte utdataet aldri kan avvike fra hverandre.

Bygget utdata er allerede i git, så publiseringshistorikken din er en andre sikkerhetskopi du kan rulle tilbake til med en revert.