Verdi Media Essentials

Kjernepakken vår som rulles ut på alle standard WordPress-installasjoner for optimal ytelse og styring.

Installasjon og lisensiering

Essentials installeres enklest via MainWP eller ved å laste opp zip-arkivet manuelt under plugins i WordPress. Siden dette er en proprietær plugin for Verdi Media, gjøres oppdateringer automatisk via vår interne distribusjonsserver.

wp plugin install https://dist.verdimedianorge.no/plugins/verdi-essentials.zip --activate
Info: Essentials krever at du har definert lisensnøkkelen i wp-config.php for at automatiske oppdateringer skal fungere.

Konfigurering i wp-config.php

Legg til følgende linje i din wp-config.php-fil for å autorisere nettstedet mot oppdateringsserveren vår:

define( 'VERDI_ESSENTIALS_LICENSE', 'din-unike-lisensnokkel-her' );

Koble til og bruke Essentials Security

Essentials Security er en must-use-plugin som VerdiVision (eller curl) kaller når en kundesite er nede på grunn av en kræsjet plugin eller tema.

Merk: Dette er ikke vanlig WordPress REST (/wp-json/...). Den lastes før vanlige plugins, så recovery-API-et svarer selv om WP Rocket (som plugin) har krasjet.

Hva du trenger på siten

  • Verdi Media Essentials aktivert.
  • VerdiVision-nøkkel lagret under Innstillinger → Verdi Media Essentials → VerdiVision. Samme nøkkel på alle sider.
  • Security-agenten installert under Kontroll.

Uten nøkkel returneres JSON 401. Uten agent returneres vanlig WordPress-HTML (404/tema), ikke recovery-JSON.

Installere agenten (én gang per site)

  1. Logg inn som Verdi Media-admin (@verdimedia.no / @verdimedianorge.no).
  2. Gå til Innstillinger → Verdi Media Essentials → VerdiVision — lim inn nøkkelen hvis den mangler.
  3. Gå til fanen Kontroll og klikk på Installer security-agent.

Dette kopierer essentials-security.php til:

wp-content/mu-plugins/essentials-security.php

Status i fanen skal deretter vise Installert og at nøkkelen er den samme som i VerdiVision (siste fire tegn).

Oppdatering & fjerning: Klikk Oppdater agent når Essentials har en nyere mu-plugin klar (f.eks. etter 2.0.49 med /themes-støtte). Klikker du Fjern agent, slettes filen fra mu-plugins (Essentials selv blir værende). Hvis mappen ikke er skrivbar, kan du laste den opp manuelt via SFTP.

Koble til (autentisering)

Base-URL for forespørsler:

https://kunde.no/verdimedia-security/v1

Undermappe-installasjon: https://kunde.no/wordpress/verdimedia-security/v1.

Alle forespørsler krever et ferskt unix-timestamp (maks 5 minutter gammelt) og VerdiVision-nøkkelen i headerne:

Header Beskrivelse / Verdi
X-Verdimedia-Timestamp time() (Unix timestamp) ved utsending
X-Verdimedia-Security-Key Samme unike nøkkel som i VerdiVision-fanen
Tips: I produksjon (via VerdiVision) bør HMAC-signatur brukes i stedet for å overføre selve nøkkelen i ren tekst.

Endepunkter i praksis

Endepunkt Metode Brukstilfelle / Beskrivelse
/status GET Lever agenten? Hva kræsjet sist? Returnerer JSON.
/log GET Henter den fullstendige php-feilloggen.
/plugins GET Se liste over plugins og finn spesifikk file-sti.
/themes GET Se hvilket tema som kjører / har kræsjet (feltet stylesheet).
/plugins/deactivate POST Få siten opp igjen ved å deaktivere en plugin. Send body: {"plugin":"mappe/fil.php"}.

Merk: Temaer kan ikke deaktiveres direkte via API siden WordPress alltid krever et aktivt tema. /themes fungerer kun som en oversikt.

Debugging med curl

SITE="https://kunde.no"
KEY="verdivision-nøkkel"

# Sjekk status på agenten
curl -sS "${SITE}/verdimedia-security/v1/status" \
  -H "X-Verdimedia-Timestamp: $(date +%s)" \
  -H "X-Verdimedia-Security-Key: ${KEY}"

# Deaktiver en krasjet plugin (f.eks. WP Rocket)
curl -sS -X POST "${SITE}/verdimedia-security/v1/plugins/deactivate" \
  -H "Content-Type: application/json" \
  -H "X-Verdimedia-Timestamp: $(date +%s)" \
  -H "X-Verdimedia-Security-Key: ${KEY}" \
  -d '{"plugin":"wp-rocket/wp-rocket.php"}'

Anbefalt rekkefølge når siten er nede

  1. Kjør GET /status. Får du JSON 200 lever agenten. Får du HTML, timeout eller 500, har sannsynligvis en PHP-drop-in (som advanced-cache.php) kræsjet helt i starten, og da må du feilsøke via SFTP i stedet.
  2. Kjør GET /log og les component (plugin/theme/drop-in) og feilkilden id.
  3. Dersom det skyldes en plugin: kjør GET /plugins, finn filstien som har status fatal_logged eller paused, og deaktiver den med POST /plugins/deactivate.
  4. Kjør GET /status på nytt for å bekrefte at alt kjører grønt.

Kjente feilkoder

Respons Betydning
JSON 401 Mangler eller ugyldig nøkkel, eller timestamp er eldre enn 5 minutter.
JSON 400 (invalid_plugin) Deaktivering feilet fordi plugin-stien ikke er en gyldig mappe/fil.php.
JSON 404 (not_found) Feil endepunkt-path ble kalt under /verdimedia-security/v1/.
HTML 404 Sikkerhets-agenten er ikke installert i mu-plugins/-mappen.
Viktig begrensning: Drop-in filer som advanced-cache.php, object-cache.php og db.php lastes før mu-plugins i WordPress. Hvis feilen ligger her, vil ikke API-et svare. Da må du løse det via SFTP eller kontrollpanelet til hosten.

VerdiVision Integrasjon

Hvordan koble nettstedene opp mot vårt sentrale rapporterings- og overvåkningspanel, VerdiVision.

Automatisert oppkobling

VerdiVision samler inn feilmeldinger, oppetidsstatistikk, og plugin-status på tvers av hele kundeporteføljen. For å opprette koblingen må API-nøkkelen hentes ut fra VerdiVision-panelet.

Parameter Type Beskrivelse
VERDIVISION_API_KEY Streng (UUID) Unik token for nettstedet generert i VerdiVision.
VERDIVISION_ENV Konstant Defineres som 'production' eller 'staging'.

Konfigurasjonseksempel

Settes inn i bunnen av wp-config.php før WordPress-oppstart-linjen:

define( 'VERDIVISION_API_KEY', 'vv_9a8b7c6d5e4f3g2h1' );
define( 'VERDIVISION_ENV', 'production' );

Bruke Essentials og SMTP Bridge

En guide for Verdi Media-ansatte som setter opp utgående e-post på en kundesite. SMTP Bridge erstatter tradisjonell SMTP-konfigurasjon og SendGrid.

Hvordan det fungerer: All utgående wp_mail() rutes over sikker HTTPS til verdi-smtp-bridge mikrotjenesten, som kjører Postmark i bakgrunnen. Innstillinger vises kun for administratorer med @verdimedia.no eller @verdimedianorge.no-adresser.

Hva skjer når SMTP Bridge er aktiv?

  1. Et plugin eller WordPress-kjernen kaller wp_mail().
  2. Essentials fanger opp dette kallet via pre_wp_mail-filteret før ordinære SMTP-plugins.
  3. En lokal spam-sjekk kjøres automatisk mot kjente skjemaplugins (Contact Form 7, Gravity Forms, WPForms, Elementor, honeypot). Ved treff avbrytes sendingen umiddelbart, men rapporten settes til OK slik at sluttbrukeren ikke ser en feilmelding i nettleseren.
  4. Avsender (From) settes alltid automatisk til ikkesvar@{source_domain}. Den opprinnelige From-adressen flyttes til Reply-To (om den ikke er satt fra før).
  5. E-posten POST-es til bridge-serveren. En HTTP-status 202 betyr at Postmark har akseptert sendingen.

Forutsetninger

  • Verdi Media Essentials er aktivert på siten.
  • Bridge-tjenesten kjører (produksjonsmiljø: https://smtp-bridge.verdimedia.no).
  • Kunden har et gyldig source domain (kundens eget domene, ikke verdimedia.no).
  • Bruk aldri produksjon@verdimedia.no som From-adresse (Avsendervakt vil blokkere og varsle).

Steg 1 — Konfigurering i wp-config.php

Legg inn følgende konstanter i wp-config.php på serveren. Disse bør ligge lokalt og skal ikke pushes til git. Tokenet må matche verdien til INTERNAL_API_SECRET på SMTP Bridge-serveren.

define( 'VERDI_SMTP_BRIDGE_URL', 'https://smtp-bridge.verdimedia.no' );
define( 'VERDI_SMTP_BRIDGE_TOKEN', 'hemmelig-token' );
define( 'VERDI_SMTP_BRIDGE_ENABLED', true );

// Valgfritt — overstyrer og låser kundedomenet manuelt (anbefalt):
// define( 'VERDI_SMTP_BRIDGE_SOURCE_DOMAIN', 'kundedomene.no' );

// Valgfritt — e-postadresser for systemfeil og recovery mode:
// define( 'VERDI_SMTP_BRIDGE_TECHNICAL_TO', 'produksjon@verdimedia.no' ); // Standard verdi
// define( 'VERDI_SMTP_BRIDGE_TECHNICAL_REDIRECT', false ); // Slå av omdirigering av systemmail
Obs: SMTP Bridge-fanen i Essentials vil overhode ikke vises i wp-admin med mindre VERDI_SMTP_BRIDGE_ENABLED er satt til true.

Steg 2 — Sette opp Source Domain i admin

  1. Logg inn i wp-admin med din Verdi Media-bruker.
  2. Gå til Innstillinger → Verdi Media Essentials → SMTP Bridge (under Integrations).
  3. Verifiser at statusen lyser grønt og viser Configured (URL og token er på plass).
  4. Under feltet Manual source domain:
    • La stå tomt om auto-deteksjon klarer å hente ut riktig domene fra nettadressen (f.eks. www.kunde.no blir kunde.no).
    • Skriv inn domenet manuelt (i små bokstaver, f.eks. kundedomene.no) dersom auto-deteksjonen velger feil domene.
  5. Feltet Active source domain viser domenet som faktisk blir brukt. All utgående post vil nå få avsender som ikkesvar@this-domain.no. Klikk Lagre.

Merk: Dersom VERDI_SMTP_BRIDGE_SOURCE_DOMAIN er definert i wp-config.php, vil dette feltet være låst og kan ikke endres i admin.

Steg 3 — Sende en test-epost

På samme fane kan du klikke på knappen Send test email:

  • Vellykket: Bridge svarte med HTTP 202 (meldingen er mottatt og godkjent av Postmark, og sendes ut straks).
  • Feil: Feil med URL/token, feil format på source domain, eller så er bridge-tjenesten nede.

Avsender- og SMTP-regler

Regel Detaljer og oppførsel
From Tvinges alltid til ikkesvar@{source_domain}.
Reply-To Opprinnelig From flyttes hit slik at man kan besvare e-postene direkte.
System-eposter WordPress-oppdateringer, feilmeldinger og recovery-eposter omdirigeres automatisk til produksjon@verdimedia.no (kan slås av med VERDI_SMTP_BRIDGE_TECHNICAL_REDIRECT satt til false).
Forbudt avsender Det er forbudt å sette produksjon@verdimedia.no som utgående avsenderadresse på kundenes e-poster. Det vil utløse varsel i dashbordet og blokkeres under lagring av e-postinnstillinger.

Feilsøking

Symptom Hva du må sjekke / løsning
SMTP-fanen vises ikke Sjekk at VERDI_SMTP_BRIDGE_ENABLED er satt til true i wp-config.php, og at du er logget inn med en godkjent @verdimedia.no-adresse.
Incomplete configuration Konstantene VERDI_SMTP_BRIDGE_URL eller VERDI_SMTP_BRIDGE_TOKEN mangler eller er feilskrevet i wp-config.php.
Testfeil Sjekk at tokenet matcher bridge-serveren, at HTTPS fungerer, og at kildedomene er et gyldig FQDN.
Skjema er "sendt", men ingen e-post mottas E-posten kan ha blitt stoppet lokalt i WordPress av spam-sjekken (honeypot / CF7 spam). Sjekk skjemaloggene i WordPress framfor kun Postmark-feilloggen.