🔐

Master Sync SSH (master_sync_ssh.php)

Eksportér → FTP upload → SSH remote import · Tre-trins synkronisering af Weathercloud-data

📊 Flowdiagram

master_sync_ssh.php — Flowdiagram 🚀 Kron / manuel kørsel require config.php · setup log Trin 1 — EXPORT 🐘 exec: export_weathercloud.php ✓ OK → fortsæt  |  ✗ Fejl → log + exit(1) Trin 2 — FTP UPLOAD 🌐 exec: ftp_upload_weathercloud.php ✓ OK → fortsæt  |  ✗ Fejl → log + exit(1) Trin 3 — REMOTE IMPORT via SSH 🔐 ssh -i weathercloud_key purpurdata.dk@linux21.unoeuro.com 🐘 /usr/bin/php import_weathercloud.php (på målserver) ✓ OK → log "færdig"  |  ✗ Fejl → log exit code + exit(1) ❌ exit(1) stop ✅ Sync OK · echo Legende exec() kald Fejl → stop pipeline
🐘
1. Export
export_weathercloud.php
📤
2. FTP Upload
ftp_upload_weathercloud.php
🔐
3. SSH → Import
import_weathercloud.php
Færdig
echo + log

Fejl i et trin stopper hele pipeline — trin 2 og 3 køres aldrig hvis trin 1 fejler

📋 Trin-for-trin forklaring

1

Konfiguration og log-setup

Indlæser config.php og initialiserer logfunktionen logmsg(). Opretter logs/-mappen automatisk med mkdir() hvis den mangler.

2

Export: export_weathercloud.php

Kalder export-scriptet via exec() med fuld PHP-sti. Stdout + stderr fanges i $output-array og logges. Fejl → exit(1) stopper hele sync.

3

FTP Upload: ftp_upload_weathercloud.php

Upload-scriptet køres kun hvis export lykkedes. Samme mønster: exec(), output logges, fejl stopper pipeline med exit(1).

4

SSH Remote Import

Bygger en SSH-kommando med sprintf() og escapeshellarg() og eksekverer den via exec(). Kører import_weathercloud.php direkte på målserveren.

5

Færdig

Logger "Master sync SSH færdig!" og printer Master sync SSH OK til stdout — nyttigt hvis scriptet køres manuelt eller fra cron med mail-notifikation.

🖥️ Server-opsætning

📤 Kildeserver (lokal)

Mappe/var/www/html/vejr/
SSH-nøgle~/.ssh/weathercloud_key
PHP/usr/bin/php
Loglogs/master_sync_ssh.log

📥 Målserver (remote)

Hostlinux21.unoeuro.com
Brugerpurpurdata.dk
PHP/usr/bin/php
Import-scriptvejret/import_weathercloud.php

🔐 SSH-kommando

ssh -i /home/kao/.ssh/weathercloud_key
   -o StrictHostKeyChecking=no
   -o UserKnownHostsFile=/dev/null
   purpurdata.dk@linux21.unoeuro.com
   "/usr/bin/php /var/www/.../import_weathercloud.php 2>&1"

StrictHostKeyChecking=no + UserKnownHostsFile=/dev/null undgår interaktivt prompt i cron-miljø — men verificerer ikke serverens identitet.

⚙️ Konfiguration

ParameterBeskrivelse
config.phpEkstern konfigurationsfil (credentials)
$ssh_keySti til privat SSH-nøgle
$remote_userSSH-bruger på målserver
$remote_hostHostname på målserver
$remote_phpPHP CLI-sti på målserver
$remote_import_scriptFuld sti til import-script på målserver

🛡️ Sikkerhedsnoter

Godt escapeshellarg() på alle SSH-parametre
Godt Credentials i ekstern config.php
Godt Dedikeret SSH-nøgle kun til dette formål
OBS StrictHostKeyChecking=no — sårbar over for MITM
OBS SSH-nøglen tilgås af PHP/cron-brugeren — check filrettigheder
TIP Overvej known_hosts-fil fremfor no på produktionsserver

⏰ Cron-opsætning

# Kør synkronisering — f.eks. hvert 30. min.:
*/30 * * * * /usr/bin/php /var/www/html/vejr/master_sync_ssh.php

# Eller koordineret med scraper (5 min. efter):
5,20,35,50 * * * * /usr/bin/php /var/www/html/vejr/master_sync_ssh.php

📝 Log-output eksempel

2025-02-22T14:00:05+01:00 MASTER_SSH: Starter eksport...
2025-02-22T14:00:06+01:00 MASTER_SSH: Export output: 24 rækker eksporteret til weathercloud_export.json
2025-02-22T14:00:06+01:00 MASTER_SSH: Starter FTP upload...
2025-02-22T14:00:08+01:00 MASTER_SSH: FTP output: Fil uploadet: weathercloud_export.json (142 KB)
2025-02-22T14:00:08+01:00 MASTER_SSH: Starter remote import via SSH...
2025-02-22T14:00:08+01:00 MASTER_SSH: SSH command: ssh -i '/home/kao/.ssh/weathercloud_key' ...
2025-02-22T14:00:10+01:00 MASTER_SSH: SSH output:
  Importeret: 24 vejrobservationer til vejr_weathercloud
2025-02-22T14:00:10+01:00 MASTER_SSH: SSH exit code: 0
2025-02-22T14:00:10+01:00 MASTER_SSH: Master sync SSH færdig!

# Ved fejl i trin 1:
2025-02-22T14:15:05+01:00 MASTER_SSH: Starter eksport...
2025-02-22T14:15:05+01:00 MASTER_SSH: Export output: Kunne ikke åbne database
2025-02-22T14:15:05+01:00 MASTER_SSH: Export fejlede, stopper sync

🗂️ Filer der indgår i sync-flow

/var/www/html/vejr/
├── master_sync_ssh.php        ← dette script (orkestrator)
├── export_weathercloud.php     ← trin 1: eksport til JSON
├── ftp_upload_weathercloud.php ← trin 2: FTP til remote
├── config.php                  ← credentials (ikke i git!)
└── logs/
    └── master_sync_ssh.log

/var/www/purpurdata.dk/public_html/vejret/ (målserver)
└── import_weathercloud.php     ← trin 3: import fra FTP