Drift
Installation, hälsokontroll, säkerhetskopiering, schemalagda jobb, sökning på servern, sökning över sajter och uppdatering av Grav och plugins.
Installation, hälsokontroll, säkerhetskopiering, schemalagda jobb, sökning på servern, sökning över sajter och uppdatering av Grav och plugins.
En ny server från grunden: Grav och dess plugin med pluginhanteraren, temat och Groovys plugin ur paket, konfigen och det första kontot.
En ny installation byggs av en ren Grav, Gravs egna plugin från Gravs
pluginhanterare (bin/gpm) och Groovys fyra delar ur paket: temat
groovy-docs och pluginen subsites, mail-auth och mcp. Ingen kod
behöver kopieras från repot.
Alla kommandon på servern körs från webbroten, som den användare som äger filerna där. Annars kan sajten inte skriva i sina egna mappar.
zip, dom, xmlwriter, mbstring och gd. pdo_sqlite
behövs för sökning på servern.Paketen byggs från en klon av repot och hamnar i mappen dist/, som inte
checkas in:
bin/setup
bin/package
Det ger:
| Fil | Vad |
|---|---|
groovy-docs-<version>.zip |
temat |
subsites-<version>.zip, mail-auth-<version>.zip, mcp-<version>.zip |
pluginen |
groovy-multisite.zip |
setup.php och nginx-regeln, för flera sajter |
skill-groovy-docs-super-admin.zip, skill-groovy-docs-editor.zip |
temats skills för en AI-klient (sidan AI-klient) |
VERSIONS.txt |
den Grav och de plugin delarna är provade med |
Paketen byggs från det som är incheckat. Bygg dem på nytt efter en ändring i temat eller pluginen. Kopiera dem till servern.
Grav. Hämta Grav i versionen i VERSIONS.txt från Gravs sida på
GitHub (Releases, filen grav-v<version>.zip). Packa upp den så att
mappen blir webbroten.
Gravs plugin, i versionerna i VERSIONS.txt. Ett plugin i taget,
med adressen till just den versionen:
php bin/gpm direct-install -y https://getgrav.org/download/plugins/form/<version>
Gör så för form, email, login, api, admin2, flex-objects och
tntsearch. Med bin/gpm install kan ett plugin bli nyare än det
provade, eftersom ett annat plugin kräver det.
error, problems, shortcode-core och github-markdown-alerts
följer med Grav. Jämför deras versioner med VERSIONS.txt
(php bin/gpm version <namn>).
Temat och Groovys plugin, ett paket i taget:
php bin/gpm direct-install -y /sökväg/till/groovy-docs-<version>.zip
php bin/gpm direct-install -y /sökväg/till/subsites-<version>.zip
php bin/gpm direct-install -y /sökväg/till/mail-auth-<version>.zip
php bin/gpm direct-install -y /sökväg/till/mcp-<version>.zip
Utan tillgång till serverns filer: ladda upp paketen i Admin2 (på
/admin, efter steg 6) under Tools → Direct Install. Temat är
ungefär 6 MB. PHP tillåter ofta bara 2 MB per uppladdning, och Admin2
svarar då Either a "url" field or an uploaded "file" is required.
Höj gränsen i PHP:s inställningar först:
upload_max_filesize = 64M
post_max_size = 64M
Starta sedan om PHP. I imagen linuxserver/grav hör raderna hemma i
/config/php/php-local.ini. Med Easypanel kan filen läggas dit utan
terminal: tjänsten → Storage → Add File Mount, med sökvägen
ovan och raderna som innehåll, och sedan Deploy.
Konfigen. Allt i det här steget går att göra i Admin2 (på
/admin, efter steg 6). Inställningarna för bilagor, skyddade grenar,
sessionen och CSS sätter temat och subsites själva.
pages.theme: groovy-docs i user/config/system.yaml.https://docs.example.com.
Utan den skickas inga inloggningsmejl.
Lämna Configuration → System → Advanced → Custom base URL tom.
Med flera sajter tar den bort subsajternas prefix ur länkarna. Bakom
en proxy som sköter https (Easypanel) räcker Reverse proxy setup
och Site host.php bin/plugin email test-email -t <adress>.sv. Se
Temainställningar → Gränssnittets språk.Utan Admin2 skrivs samma värden i user/config/system.yaml
(pages.theme, errors.display: 0), i
user/config/themes/groovy-docs.yaml (ui_language: sv) och i
user/config/plugins/: login.yaml (site_host), tntsearch.yaml
(enabled: false), email.yaml (from, mailer) och mail-auth.yaml
(mail_language: sv).
Flera sajter. Packa upp groovy-multisite.zip:
setup.php läggs i webbroten, bredvid index.php;nginx-multisite.conf tas med i nginx-konfigurationens
server-block med include. Den ska stå efter Gravs egna
spärrar (location-raderna i webserver-configs/nginx.conf) och
före location /. nginx använder den första regel som passar.
Ändra fastcgi_pass i filen till serverns PHP-FPM.Kör nginx -t och ladda om nginx.
Super-admin. Det första kontot är super-admin och det enda med lösenord:
php bin/plugin login new-user -u <namn> -e <adress> -l en -P b --admin-type=api -N "<Namn>" -t Admin
Kommandot frågar efter lösenordet. Utan konto skickar Grav i stället
den första besökaren till /admin för att skapa det.
Schemalagda jobb. Lägg in raden i crontab (sidan Schemalagda jobb).
Töm cachen: php bin/grav cache.
/login.setup.php eller
nginx-regeln står det i Sites vad som saknas.Ta bort provsajten i registret efteråt.
Det temat är beroende av men inte kan ställa in själv.
... med jämna intervaller
Themes → Groovy Docs → Health listar det temat är beroende av men inte
kan ställa in själv. Super-admin får samma lista som JSON på
/api/v1/docs-health. Alla sajters hälsokontroll på en gång finns i
registret i System-Admin (se
Skapa en sajt → Hälsokontrollen för alla sajter).
Varje rad är OK, Warning med vad som ska göras, eller Not checked.
Site-Admin i sidhuvudet → Hälsokontroll visar ett urval: det du som site-admin själv kan rätta i sajten. Servern, installationen och andra sajter ingår inte. Dem ser super-admin i listan nedan.
En rad visas bara när den gäller sajten. Finns inget att kontrollera står det Inget att kontrollera i den här sajten.
tntsearch, om det finns, är avstängt;mail-auth (se Inloggning):
att ingen e-postadress har två konton, att bara super-admin har
lösenord och att länkarna i inloggningsmejlen har en fast adress.mail-auth: att inloggningsmejlen har en avsändare;https bakom en proxy: slå på
Reverse proxy setup och fyll i Site host under Plugins → Login;Vad som ska med, och vad som aldrig ska till git.
Temat sparar inga säkerhetskopior av sajten; det görs i driften, till exempel till ett privat git-repo (pluginet Git Sync eller ett schemalagt jobb).
.history/-mapparna (sidhistoriken; tas den
inte med, tappar en återställd sajt all historik), sajtmapparna i
user/env/<namn>/, papperskorgarna (user/.trash/ och
user/env/<namn>/.trash/), user/config/ och presets i
user/data/groovy-docs/presets/.user/accounts/ (användarkonton),
user/config/security.yaml, *-private.php och andra hemligheter i
user/config/.Gravs schemaläggare, raden i crontab och jobbet som tömmer papperskorgarna.
Grav har en egen schemaläggare. Den startas av en enda rad i serverns crontab och kör sedan de jobb som står på tur.
Raden läggs in en gång per server, för den användare som äger filerna. Utan raden körs inga schemalagda jobb.
php bin/grav scheduler --install.crontab -l.Raden ser ut ungefär så här, med serverns sökvägar:
* * * * * cd /sökväg/till/webbroten;/sökväg/till/php bin/grav scheduler 1>> /dev/null 2>&1
--env. Med flera sajter föreslår kommandot att du lägger till
--env=<namn>. Gör inte det. Jobbet för alla sajter registreras av
bas-sajten, och det går igenom alla sajter själv.crontab -e, om servern ska sluta köra jobben.php bin/grav scheduler --jobs listar jobben, när de körs och när de
senast kördes. Förutom Gravs egna jobb, till exempel att rensa cachen,
finns:
subsites-trash-purge). Med flera sajter i
installationen tömmer jobbet alla sajters papperskorgar varje natt, också
sajter där ingen redigerar. Utan jobbet töms en papperskorg bara när
någon raderar något eller öppnar den.
0 betyder aldrig. En sajts egen Admin kan inte ändra
värdet.trash_purge_at,
standard kl. 03.00).logs/subsites-trash-purge.out.php bin/grav scheduler --run=subsites-trash-purge kör ett jobb direkt,
utan att vänta på dess tid.php bin/grav scheduler -d visar felen om ett jobb misslyckats.Ett val per sajt för stora sajter: servern söker i stället för läsarens webbläsare.
Som standard söker läsarens webbläsare. Första gången läsaren öppnar sökrutan hämtas en lista över alla sidor läsaren får se, och sökningen görs i den. I en stor sajt blir listan stor. Då kan sajten låta servern söka i stället.
För läsaren ser sökrutan likadan ut: samma genväg, senaste sökningar, taggar och versionsval. Läsaren ser bara sidor den får läsa, precis som förut. Servern prövar varje träff mot läsarens behörighet innan den visas.
Två skillnader i vad som hittas:
konfig hittar konfiguration, men inte grundkonfiguration.Listan i webbläsaren väger kring 3 kB per sida. Mätt i en provsajt med 2 400 sidor i tre versioner:
| I webbläsaren | På servern | |
|---|---|---|
| Att hämta före första sökningen | 2,3 MB (en version), 6,7 MB (alla) | inget |
| Per sökning | inget (sökningen görs lokalt) | 0,2–7 kB, svar på 0,03–0,07 s |
| Efter en ändring i sajten | nästa hämtning tar 0,1–0,3 s | indexet uppdateras på 0,02 s |
Indexet på servern tar plats på disken: kring 30 MB för 2 400 sidor.
tntsearch och stäng av det: enabled: false i user/config/plugins/tntsearch.yaml. Temat använder bara
sökbiblioteket som följer med pluginet. Pluginets egen sökning ska
aldrig vara på, eftersom den visar sidor som är skyddade.pdo_sqlite, och Gravs cache ska vara på.Indexet fylls av sig självt, efter nästa ändring eller första sökningen. Fram till dess söker webbläsaren som förut. I en sajt med några tusen sidor tar det ett par sökningar eller ändringar.
Saknas pluginet, pdo_sqlite eller cachen, söker webbläsaren som med
standardvalet. Inget går sönder, och hälsokontrollen visar en varning.
Ett val för hela installationen: den som förvaltar eller redigerar flera sajter kan söka i dem på en gång.
Sökrutan söker som standard i den sajt man står i. Den som arbetar med flera sajter kan få ett val till: att söka i alla sina sajter på en gång.
Träffarna kommer bara från sidor personen får läsa. En sajt man inte får läsa ger inga träffar. System-admin läser alla sajter.
Med valet påslaget har sökrutan två knappar: Den här sajten och Mina sajter. Valet gäller tills sidan laddas om; varje ny sida börjar med Den här sajten.
Med Mina sajter:
tag:namn fungerar som vanligt. Har en sajt själv taggen, räknas alla
dess sidor. I andra sajter hittas bara sidorna med taggen. Med tomt
sökfält visas sajternas taggar under Sajternas taggar.Varje sajt söker på sitt eget sätt, i webbläsaren eller på servern (se Sökning på servern). Webbläsaren frågar högst tre sajter åt gången.
Valet gäller hela installationen och slås på av den som driftar den:
En subsajt kan inte ändra valet. Av är standard; då ser sökrutan ut och fungerar precis som förut.
Rutinen steg för steg: före, i ordning, prov mellan stegen, driftsättning och att backa.
Grav och plugins uppdateras aldrig i drift. De uppdateras lokalt, på en egen gren, provas och driftsätts som vilken ändring som helst.
login, api och
form. Samma rutin, men bara för det som behöver uppdateras.Alla kommandon körs från webbroten, utom bin/setup och bin/smoke, som
körs från repots rot.
bin/smoke.
Ett test som redan är rött gör det omöjligt att se vad uppdateringen
bröt.uppdatering-2026-q4.git tag fore-uppdatering-2026-q4. Det är punkten att backa till.user/ som inte ligger i git: kontona
(user/accounts/), user/data/ och innehållet om det inte ligger i
git (sidan Säkerhetskopiering).Grav och Gravs plugin ligger inte i repot. Repots fil versions.lock säger
vilka versioner som gäller, och bin/setup hämtar dem.
php bin/gpm version grav api login form email admin2 och övriga
plugins. Raden säger upgradable eller updatable och vilken version.Uppdatera i den här ordningen, så att det syns vad som bröt. Pluginen kommer före Grav-kärnan. Ett plugin kommer efter dem det beror på.
form, sedan email. email beror på form.login. Det beror på form och email.api och admin2, som ett steg: först api, direkt efter admin2,
sedan röktesterna. Admin2 är byggt mot en viss version av api. Med
bara det ena uppdaterat kan proven i webbläsaren falla av sig själva
efter en stund.flex-objects, shortcode-core,
github-markdown-alerts, tntsearch, error, problems.Temat och pluginen subsites, mail-auth och mcp hör till
installationen och uppdateras inte med gpm update. De följer med repot,
eller med nya paket på en installation byggd med paket (sidan
Installation).
För varje steg:
Läs changelogen mot listorna över vad installationen använder:
DEPENDENCIES.md i temamappen;subsites, mail-auth och mcp: avsnittet
Dependencies on Grav and other plugins i deras README.md.En rad i changelogen som rör något i listorna provas särskilt.
versions.lock, och uppdatera DEPENDENCIES.md
i temamappen.bin/setup. Skriptet tömmer också cachen.bin/smoke.Faller ett test: läs vad som väntades, jämför med changelogen och rätta eller backa steget innan nästa.
Ett byte av den andra siffran i Grav-kärnans version kan ändra mer. Utöver stegen ovan:
webserver-configs/, jämförs ändringen med installationens egen
nginx-regel. Rör den skyddet av user/, provas att konfig, konton
och data i varje sajt svarar 403.tests/CHECKLIST.md) gås igenom efter
sista steget.versions.lock.php bin/grav cache på servern. Det
gäller också en vanlig ändring utan uppdatering.git revert <commit> för steget, sedan bin/setup.git revert --no-edit fore-uppdatering-2026-q4..HEAD, och kör
bin/setup. git diff fore-uppdatering-2026-q4 ska då inte visa något.user/data/, läggs
säkerhetskopian tillbaka.