Migration of client web hosting from Astutium and Fasthosts (multiple accounts) to
consolidated Fasthosts. Complete each section in order — do not skip steps.
# Export files via FTP
lftp -c "open -u user,pass ftp://source-host; mirror --reverse --verbose . /local/backup/"
# Export database
mysqldump -h source-db-host -u dbuser -p dbname > dbname_export.sql
# Upload files
lftp -c "open -u user,pass ftp://ftp.fasthosts-account; mirror /local/backup/ ."
# Import database
mysql -h fasthosts-db-host -u new_dbuser -p new_dbname < dbname_export.sql
wp-config.php (WordPress) or equivalent DB connection strings.htaccess if required.env files (do NOT commit to git)fasthosts-ip domain.com on test machineopenssl s_client -connect domain.com:443)If issues arise after DNS switch:
Add these checks to the Xzopia-Standard-Web policy (create new policy):
| Check | Threshold | Alert |
|---|---|---|
| HTTP response (port 80) | Non-200 for >3 checks | Critical |
| HTTPS response (port 443) | Non-200 for >3 checks | Critical |
| SSL cert expiry | <30 days | Warning |
| SSL cert expiry | <7 days | Critical |
| Disk usage | >80% | Warning |
| MySQL process running | Stopped | Critical |
| Apache/Nginx process running | Stopped | Critical |
| PHP-FPM process running (if used) | Stopped | Critical |
# For Linux web servers, run via TacticalRMM Linux agent
# Or use external check from TacticalRMM network scan
$domain = "{{client.domain}}"
$expiry = [datetime]::ParseExact(
(echo | openssl s_client -connect "${domain}:443" -servername $domain 2>/dev/null |
openssl x509 -noout -enddate 2>/dev/null).Replace("notAfter=",""),
"MMM d HH:mm:ss yyyy zzz", $null
)
$daysLeft = ($expiry - (Get-Date)).Days
Write-Output "SSL_DAYS_REMAINING=$daysLeft"
if ($daysLeft -lt 7) { exit 1 } # TRMM treats non-zero as failure
Add type and webDomains fields to web server entries:
{
"id": "webserver1",
"name": "Client Web Hosting",
"ip": "1.2.3.4",
"port": 2222,
"user": "xzopia",
"os": "ubuntu 22.04",
"type": "webserver",
"webStack": "apache2+php8.1+mariadb",
"webDomains": [
"client1.com",
"client2.co.uk"
]
}
The type: "webserver" field is read by audit-server and security-pentest skills
to apply web-server-specific checks (HTTP/HTTPS response, SSL expiry, MySQL running).