Files
felhom.eu/website/en/backups.html
T
admin 6059505216
gates / gates (push) Failing after 13m11s
website: M3 goes live - the whole site switches to the controller's shell at once
Part D. Every public page now wears the controller's frame around the website's
own content. One commit, as asked: never half old, half new.

  20 pages switched (12 Hungarian incl. the hidden prices page, 8 English)
  website/preview/ deleted entirely - A, M1, M2 and M3 studies all gone
  robots.txt: the Disallow: /preview/ line removed with them
  site.css?v=22 / shell.css?v=22 on every page

PROVED before pushing, not after:
  * HEAD TAGS: title, meta description, keywords, author, robots, canonical, every
    hreflang, all seven Open Graph tags, all four Twitter tags and the JSON-LD
    captured on all 19 pages before the switch and compared after. The ONLY
    difference anywhere is the dash substitution inside the two FAQ pages'
    FAQPage JSON-LD - verified by applying the same substitution to the "before"
    copy and getting an exact match. Nothing else moved.
  * VISIBLE TEXT: identical to the live pages word for word, legal texts identical
    with no substitution permitted at all.
  * No page is left noindex (the two download pages' noindex,follow is their own,
    pre-existing and unchanged), no page mentions /preview/, every page has a
    footer, no page overflows at 390px.

THE HEAD-TAG DIFF EARNED ITS PLACE. The home page was about to ship carrying
`noindex, nofollow` from the preview, and had lost meta keywords, meta author, all
seven Open Graph tags, all four Twitter tags and the LocalBusiness JSON-LD -
because its head was hand-built while every other page carried its live one over.
The diff caught it; nothing on the rendered page would have. The generator now
uses the live head for EVERY page including the home one.

szolgaltatasok-nonpublic.html was converted too. It is in no menu and was not in
the brief's list, but leaving one page on the old chrome would have left the site
half-switched - which is the one thing part D was not allowed to do.

scripts/site_gates.py: SHELL is now the real page set; MOCKUPS is empty; gate 3's
old nav/footer loop keeps working for any page added later WITHOUT the shell, and
skips the ones that have it.
2026-10-11 15:57:35 +02:00

375 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<script>document.documentElement.className=document.documentElement.className.replace('no-js','js');</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Backups — a 3-2-1 backup strategy for home servers | Felhom.eu</title>
<meta name="description" content="Professional 3-2-1 backups for a home server in Hungary. Automatic backups on three levels: on the box, on a second drive, and encrypted on remote storage.">
<meta name="keywords" content="backup, 3-2-1 backup rule, off-site backup, data backup, home server backup, encrypted backup, automatic backup">
<meta name="robots" content="index, follow">
<link rel="canonical" href="https://felhom.eu/en/backups">
<link rel="alternate" hreflang="hu" href="https://felhom.eu/biztonsagimentes">
<link rel="alternate" hreflang="en" href="https://felhom.eu/en/backups">
<link rel="alternate" hreflang="x-default" href="https://felhom.eu/biztonsagimentes">
<meta property="og:type" content="article">
<meta property="og:url" content="https://felhom.eu/en/backups">
<meta property="og:title" content="3-2-1 backups for a home server">
<meta property="og:description" content="Professional-grade data safety at home. Automatic backups, and an encrypted copy far away too.">
<meta property="og:image" content="https://felhom.eu/assets/og-image-en.png">
<meta property="og:locale" content="en_GB">
<meta property="og:site_name" content="Felhom.eu">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="3-2-1 backups for a home server">
<meta name="twitter:description" content="Professional data protection for your home server. Automatic backups, off-site copies.">
<meta name="twitter:image" content="https://felhom.eu/assets/og-image-en.png">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "A 3-2-1 backup strategy for home servers",
"description": "How to protect your data at home with a professional backup strategy.",
"author": {"@type": "Organization", "name": "Felhom.eu"},
"publisher": {"@type": "Organization", "name": "Felhom.eu", "logo": {"@type": "ImageObject", "url": "https://felhom.eu/assets/logo.png"}},
"mainEntityOfPage": "https://felhom.eu/en/backups"
}
</script>
<!-- shared assets: bump ?v= together on any site.css/icons.svg change -->
<link rel="stylesheet" href="/assets/site.css?v=22">
<link rel="stylesheet" href="/assets/shell.css?v=22">
<link rel="icon" type="image/png" href="/assets/logo_favicon_2.svg">
<script defer src="https://stats.felhom.eu/script.js" data-website-id="d419db57-5e1c-48df-bdb3-c29f25fb1661"></script>
</head>
<body class="shell page-biztonsagimentes">
<header class="mobile-topbar">
<a href="/en/" class="mobile-topbar-logo"><img src="/assets/logo_notext_white.svg" alt="Felhom.eu"></a>
<button type="button" class="nav-burger" id="navBurger" aria-expanded="false" aria-controls="sidebar" aria-label="Menu">
<span class="hamburger-box"><span class="hamburger-line"></span><span class="hamburger-line"></span><span class="hamburger-line"></span></span>
</button>
</header>
<div class="nav-backdrop" id="navBackdrop" hidden></div>
<nav class="sidebar" id="sidebar">
<div class="sidebar-header">
<a href="/en/" class="sidebar-logo-link">
<img src="/assets/logo_notext_white.svg" alt="" class="sidebar-logo" aria-hidden="true">
<img src="/assets/logo-wordmark.png" alt="felhom.eu" class="sidebar-word">
</a>
</div>
<ul class="nav-links">
<li><a href="/en/"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-home"/></svg>Home</a></li>
<li><a href="/en/#services"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-rocket"/></svg>Services</a></li>
<li class="nav-group">
<button type="button" class="nav-group-toggle" aria-expanded="false" aria-controls="nav-group-apps"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-package"/></svg>Applications<svg class="ico nav-chevron" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-chevron-down"/></svg></button>
<ul id="nav-group-apps" class="nav-links nav-links-sub nav-links-nested">
<li><a href="/en/apps">All applications</a></li>
<li><a href="/en/apps#files-office">Files &amp; Office</a></li>
<li><a href="/en/apps#media-entertainment">Media &amp; Entertainment</a></li>
<li><a href="/en/apps#home-lifestyle">Home &amp; Lifestyle</a></li>
<li><a href="/en/apps#productivity-knowledge">Productivity &amp; Knowledge</a></li>
<li><a href="/en/apps#system-development">System &amp; Development</a></li>
</ul>
</li>
<li><a href="/en/technology"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-layers"/></svg>Technology</a></li>
<li><a href="/en/backups" class="active"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-shield-check"/></svg>Backups</a></li>
</ul>
<div class="sidebar-bottom">
<a href="/en/testing" class="btn btn-outline sidebar-cta">Apply as a tester →</a>
<div class="nav-group-label">About Felhom</div>
<ul class="nav-links nav-links-sub">
<li><a href="/en/#how-it-works">How it works</a></li>
<li><a href="/en/faq">FAQ</a></li>
<li><a href="/en/contact">Contact</a></li>
</ul>
<div class="sidebar-footer">
<details class="lang-globe"><summary class="lang-globe-btn" aria-label="Language" title="Language"><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg></summary><ul class="lang-globe-menu"><li><a href="/biztonsagimentes" lang="hu" hreflang="hu" class="lang-globe-item">Magyar</a></li><li><a href="/en/backups" lang="en" hreflang="en" class="lang-globe-item current" aria-current="true">English</a></li></ul></details>
</div>
</div>
</nav>
<main class="content">
<div class="page-header">
<h1><span>Backups</span></h1>
</div>
<p class="page-lede">Your data's safety comes first. With a professional backup strategy, we make sure there is something to bring back from after a fault or an accident.</p>
<!-- Bevezető -->
<section class="content-section">
<div class="container">
<div class="info-card">
<h3><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-circle-help"/></svg> Why does it matter?</h3>
<p>When someone picks a cloud service – Google Drive, iCloud or any other – one of the most important things is <strong>data safety</strong>. The question is not whether someone can get at our data, but whether it <strong>survives</strong>.</p>
<p>The big providers solve this with billion-dollar infrastructure: several data centres, redundant storage, automatic backups. But can a home server be just as safe?</p>
<div class="highlight-box">
<p><strong>The answer: yes.</strong> With the right backup strategy, your home server can be as safe as any cloud provider – and you are in charge of everything.</p>
</div>
</div>
</div>
</section>
<!-- 3-2-1 szabály -->
<section class="content-section alt-bg">
<div class="container">
<div class="section-header">
<h2>The 3-2-1 <span>backup rule</span></h2>
<p>The industry standard that professional system administrators and companies use around the world</p>
</div>
<div class="backup-rule">
<div class="rule-number">3</div>
<div class="rule-content">
<h3>Three copies of your data</h3>
<p>Always keep at least three copies of everything important: the original and two backups. If one is damaged or lost, there are still two in reserve.</p>
<div class="example-box">
<div class="label">Example</div>
<p>Your family photos are on the server (1), on an external hard drive (2), and in a remote place (3).</p>
</div>
</div>
</div>
<div class="backup-rule">
<div class="rule-number">2</div>
<div class="rule-content">
<h3>Two different kinds of storage</h3>
<p>Keep your data on at least two kinds of storage device. Different devices fail in different ways – if one kind breaks, the other is probably fine.</p>
<div class="example-box">
<div class="label">Example</div>
<p>You keep your data on the server's internal SSD, and the backup goes to an external HDD or a NAS.</p>
</div>
</div>
</div>
<div class="backup-rule">
<div class="rule-number">1</div>
<div class="rule-content">
<h3>One off-site (remote) copy</h3>
<p>Keep at least one copy in a different physical place. That protects against local disasters: a fire, a flood, a burglary or even a lightning strike cannot put all your data at risk.</p>
<div class="example-box">
<div class="label">Example</div>
<p>The backup is copied on its own to a friend's or relative's server, or goes encrypted into the cloud.</p>
</div>
</div>
</div>
<div class="backup-diagram">
<h3>What it looks like in practice</h3>
<div class="diagram-visual">
<div class="diagram-node primary">
<div class="icon"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-monitor"/></svg></div>
<div class="label">Server</div>
<div class="sublabel">Original data</div>
</div>
<div class="diagram-arrow">→</div>
<div class="diagram-node">
<div class="icon"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-hard-drive"/></svg></div>
<div class="label">Local backup</div>
<div class="sublabel">External HDD/NAS</div>
</div>
<div class="diagram-arrow">→</div>
<div class="diagram-node">
<div class="icon"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-globe"/></svg></div>
<div class="label">Off-site backup</div>
<div class="sublabel">Remote place</div>
</div>
</div>
</div>
</div>
</section>
<!-- Offsite megoldások -->
<section class="content-section">
<div class="container">
<div class="section-header">
<h2>Off-site <span>backup options</span></h2>
<p>The "1" in the 3-2-1 rule – the most important, and often the most neglected</p>
</div>
<div class="methods-grid">
<div class="method-card">
<div class="method-icon"><svg class="ico-tile" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-users"/></svg></div>
<h3>The "buddy system"</h3>
<p>The simplest and cheapest option: swap backups with someone you trust. You back up to their server, they back up to yours.</p>
<ul class="method-pros">
<li>No monthly fee</li>
<li>Full control over the data</li>
<li>Safety for both of you</li>
<li>End-to-end encryption is possible</li>
</ul>
<div class="example-box">
<div class="label">How does it work?</div>
<p>Encrypted backups sync on their own over a VPN connection.</p>
</div>
</div>
<div class="method-card">
<div class="method-icon"><svg class="ico-tile" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-building-2"/></svg></div>
<h3>Home ↔ Office</h3>
<p>If you have a workplace or your own office, use it! Two sites give you natural distance.</p>
<ul class="method-pros">
<li>Uses what is already there</li>
<li>A safe, familiar place</li>
<li>Quick to recover from when needed</li>
</ul>
<div class="example-box">
<div class="label">Tip</div>
<p>A small, quiet mini PC in a corner of the office can be a perfect backup target.</p>
</div>
</div>
<div class="method-card">
<div class="method-icon"><svg class="ico-tile" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-cloud"/></svg></div>
<h3>Encrypted cloud backup</h3>
<p>If there is no trusted friend or second site, the cloud is the answer. Important: the data is encrypted before it is uploaded!</p>
<ul class="method-pros">
<li>Professional infrastructure</li>
<li>Storage spread across places</li>
<li>No hardware needed</li>
</ul>
<ul class="method-pros method-cons">
<li>A monthly or yearly fee (depending on how much is stored)</li>
</ul>
<div class="example-box">
<div class="label">Note</div>
<p>The storage fee depends on how much data is backed up. This is the option a Felhom box uses.</p>
</div>
</div>
</div>
</div>
</section>
<!-- Mi hogyan csináljuk -->
<section class="content-section alt-bg">
<div class="container">
<div class="section-header">
<h2>How <span>we do it</span></h2>
<p>Backups are set up by default on every server we install</p>
</div>
<div class="info-card">
<h3><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-wrench"/></svg> Automatic backups</h3>
<p>Every night the server makes backups by itself, on three levels: <strong>on the box</strong>, on a <strong>second drive</strong> (if there is one), and <strong>encrypted on remote storage</strong>. You do not have to remember anything – the system takes care of it.</p>
<p>The backups are incremental: only the changes are saved. That saves space and time, and a full restore is still there when you need it.</p>
<div class="highlight-box">
<p><svg class="ico" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-monitor"/></svg> <strong>Not only the data:</strong> thanks to the Proxmox base, not only your files and databases are backed up but your <strong>whole system</strong> too – the whole box goes into a backup, and it can be restored from it. If the box itself breaks, your apps' data can be brought back from the encrypted remote backup onto the reinstalled system – with the recovery code.</p>
</div>
<div class="highlight-box">
<p><strong>Where the remote backup goes:</strong> on a Felhom box the remote copy goes, encrypted, to storage we provide. The "buddy system" and the office are general options for the 3-2-1 rule – we do not set them up today.</p>
</div>
<h3 style="margin-top: 24px;"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-lock"/></svg> The recovery code – only you know it</h3>
<p>Your remote backup is encrypted, and the key to the encryption is a <strong>recovery code</strong>. The code appears exactly once: on your screen, when it is set up. We keep no copy of it.</p>
<p>This is a deliberate choice, and it has two sides. One: <strong>nobody</strong> but you can read your remote backup – not even us. The other: if the box is destroyed and the code is lost too, then <strong>we cannot restore</strong> the remote backup either. So the code goes on paper, and somewhere safe.</p>
<h3 style="margin-top: 24px;"><svg class="ico-lg" aria-hidden="true"><use href="/assets/icons.svg?v=1#i-chart-column"/></svg> Monitoring and notifications</h3>
<p>We watch the backups all the time. If there is a problem – a failed backup, storage filling up, a connection fault – it shows up in our monitoring, and an e-mail goes out about it. One aim of the closed test is to polish these notifications in real use.</p>
</div>
</div>
</section>
<!-- CTA -->
<section class="cta-section">
<div class="container">
<h2>A question about <span>backups?</span></h2>
<p>Let's talk about what is best in your situation. We help you find the balance between safety and cost.</p>
<a href="/en/contact" class="cta-button">Get in touch →</a>
</div>
</section>
</main>
<script>
(function() {
var hamburger = document.getElementById('hamburger');
var navLinks = document.querySelector('.nav-links');
var overlay = document.getElementById('mobileOverlay');
var body = document.body;
if (!hamburger || !navLinks || !overlay) {
console.warn('[mobile-menu] Missing elements:', {
hamburger: !!hamburger,
navLinks: !!navLinks,
overlay: !!overlay
});
return;
}
function openMenu() {
hamburger.classList.add('is-active');
navLinks.classList.add('is-open');
overlay.classList.add('is-visible');
body.classList.add('menu-open');
hamburger.setAttribute('aria-expanded', 'true');
hamburger.setAttribute('aria-label', 'Close menu');
}
function closeMenu() {
hamburger.classList.remove('is-active');
navLinks.classList.remove('is-open');
overlay.classList.remove('is-visible');
body.classList.remove('menu-open');
hamburger.setAttribute('aria-expanded', 'false');
hamburger.setAttribute('aria-label', 'Open menu');
}
hamburger.addEventListener('click', function() {
if (navLinks.classList.contains('is-open')) {
closeMenu();
} else {
openMenu();
}
});
overlay.addEventListener('click', closeMenu);
navLinks.querySelectorAll('a').forEach(function(link) {
link.addEventListener('click', closeMenu);
});
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape' && navLinks.classList.contains('is-open')) {
closeMenu();
}
});
window.addEventListener('resize', function() {
if (window.innerWidth > 900 && navLinks.classList.contains('is-open')) {
closeMenu();
}
});
})();
</script>
<footer>
<div class="container">
<p>© 2026 felhom.eu – Your own cloud, your own rules. Felhom serves households in Hungary.</p>
<p class="footer-legal">Operated by Nagyfenyvesi Viktor · <a href="mailto:info@felhom.eu">info@felhom.eu</a> · <a href="/adatkezeles">Privacy notice (Hungarian)</a> · <a href="/feltetelek">Terms (Hungarian)</a></p>
</div>
</footer>
<script>
(function(){
var b=document.getElementById('navBurger'),s=document.getElementById('sidebar'),k=document.getElementById('navBackdrop');
if(!b||!s||!k)return;
function open(){s.classList.add('is-open');k.hidden=false;document.body.classList.add('nav-open');b.setAttribute('aria-expanded','true');}
function close(){s.classList.remove('is-open');k.hidden=true;document.body.classList.remove('nav-open');b.setAttribute('aria-expanded','false');}
b.addEventListener('click',function(){s.classList.contains('is-open')?close():open();});
k.addEventListener('click',close);
document.addEventListener('keydown',function(e){if(e.key==='Escape'&&s.classList.contains('is-open')){close();b.focus();}});
s.querySelectorAll('a').forEach(function(l){l.addEventListener('click',close);});
window.addEventListener('resize',function(){if(window.innerWidth>768)close();});
})();
document.addEventListener('click',function(e){
var btn=e.target.closest?e.target.closest('.nav-group-toggle'):null;
if(!btn)return;
var g=btn.closest('.nav-group');if(!g)return;
var willOpen=!g.classList.contains('is-open');
document.querySelectorAll('.nav-group.is-open').forEach(function(x){
x.classList.remove('is-open');
var t=x.querySelector('.nav-group-toggle');if(t)t.setAttribute('aria-expanded','false');
});
if(willOpen){g.classList.add('is-open');btn.setAttribute('aria-expanded','true');}
});
</script>
</body>
</html>