Files
ODOO4projects.com/blog/posts/speed-run-backup.html
T
webmaster bd0881f882 cache-bust local assets; narrow the language facet to scores >= 3
Part 1 — asset versioning: every local <script src> and <link rel=stylesheet> on the
tracked pages now carries ?v=<sha256-of-the-file> (10 hex), computed at BUILD time from
the file's bytes by work/build-asset-versions.py — never hand-typed, and idempotent
(re-running with no file change rewrites nothing). This is what makes an edited
focus-rule.js / photo-upload.js a new URL instead of a stale cache hit.

Part 2 — language facet: a language now counts for the Language filter only when its
0-5 self-assessment is >= LANG_FACET_MIN (3 = 'works in it'). The constant sits beside
the 15-point rule in the page script and its mirror in build-directory.py. Nothing
stored changes; the card's languages chart still prints every language above 0, the
search box is unchanged, and the facet stays an exact membership test against the
card's value. A '1' language no longer offers the person under that language.
2026-11-03 21:26:58 +00:00

255 lines
10 KiB
HTML

<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>
Set Up Automated Backups in Under 2 Minutes | ODOO4projects
</title>
<meta
name="description"
content="Protect your Odoo data in moments. This speed-run walks you through enabling automated daily backups with one click."
/>
<link
rel="canonical"
href="https://odoo4projects.com/blog/posts/speed-run-backup.html"
/>
<meta
property="og:title"
content="Set Up Automated Backups in Under 2 Minutes"
/>
<meta
property="og:description"
content="Protect your Odoo data in moments. This speed-run walks you through enabling automated daily backups with one click."
/>
<meta property="og:type" content="article" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" href="../../images/favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Inter+Tight:wght@500;600;700;800&display=swap"
rel="stylesheet"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
/>
<link rel="stylesheet" href="../../style.css?v=3332fbba93" />
<style>
.container {
width: 80%;
max-width: 800px;
margin: 0 auto;
padding: 0 20px;
}
@media (max-width: 768px) {
.container {
width: 100%;
}
}
.blog-header {
padding: 2rem 0;
border-bottom: 1px solid var(--border);
}
.blog-header a {
color: var(--primary);
text-decoration: none;
font-size: 0.85rem;
}
.blog-header a:hover {
text-decoration: underline;
}
.post-title {
font-family: "Inter Tight", sans-serif;
font-size: clamp(1.5rem, 3vw, 2.2rem);
font-weight: 700;
margin: 1.5rem 0 0.5rem;
color: var(--dark);
}
.post-meta {
color: rgba(33, 37, 41, 0.5);
font-size: 0.85rem;
margin-bottom: 2rem;
}
.post-content h2 {
font-family: "Inter Tight", sans-serif;
font-size: 1.3rem;
margin-top: 2rem;
color: var(--dark);
}
.post-content p {
margin: 1rem 0;
color: rgba(33, 37, 41, 0.7);
line-height: 1.7;
}
.post-content ul,
.post-content ol {
padding-left: 1.5rem;
}
.post-content li {
margin: 0.5rem 0;
}
.post-content a {
color: var(--primary);
}
.post-content code {
background: var(--light);
color: var(--dark);
padding: 0.2rem 0.4rem;
border-radius: var(--radius);
font-size: 0.9em;
border: 1px solid var(--border);
}
.post-content pre {
background: var(--light);
color: var(--dark);
padding: 1rem;
border-radius: var(--radius);
overflow-x: auto;
border: 1px solid var(--border);
font-size: 0.9rem;
}
.pro-tip {
border-left: 3px solid var(--primary);
background: rgba(113, 75, 103, 0.04);
padding: 1rem 1.25rem;
margin: 1.5rem 0;
border-radius: 0 var(--radius) var(--radius) 0;
}
.pro-tip strong {
color: var(--primary);
}
.cta-box {
border: 1px solid var(--border);
background: #fff;
padding: 1.5rem;
margin: 2rem 0;
border-radius: var(--radius);
text-align: center;
}
.cta-box h3 {
margin: 0 0 0.5rem;
color: var(--dark);
}
.cta-box p {
margin: 0 0 1rem;
color: rgba(33, 37, 41, 0.7);
font-size: 0.9rem;
}
.post-footer {
padding: 2rem 0;
border-top: 1px solid var(--border);
margin-top: 2rem;
}
.post-footer a {
color: var(--primary);
text-decoration: none;
}
.post-footer a:hover {
text-decoration: underline;
}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Set Up Automated Backups in Under 2 Minutes",
"datePublished": "2026-06-10",
"url": "https://odoo4projects.com/blog/posts/speed-run-backup.html",
"author": {
"@type": "Organization",
"name": "ODOO4projects",
"url": "https://odoo4projects.com/"
},
"publisher": {
"@type": "Organization",
"name": "ODOO4projects",
"url": "https://odoo4projects.com/",
"logo": {
"@type": "ImageObject",
"url": "https://odoo4projects.com/images/logo.png"
}
}
}
</script>
<!-- Privacy-friendly analytics by Plausible -->
<script async src="https://plausible.office.odoo4projects.com/js/pa-NhA7Rf-79VopXFQXhSS4e.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init()
</script>
</head>
<body>
<main>
<div class="container">
<div class="blog-header">
<a href="../../index.html#blog">&larr; Back to Blog</a>
</div>
<article>
<h1 class="post-title">
Set Up Automated Backups in Under 2 Minutes
</h1>
<div class="post-meta">June 10, 2026 &middot; Speed Run</div>
<div class="post-content">
<p>
Data loss is every business owner's nightmare. With
ODOO4projects, backups are already running before you
look — here's how to check them in under two minutes.
</p>
<h2>Step 1: Open Your Odoo</h2>
<p>
Log in to your Odoo instance — the same login you always
use. There is no separate hosting dashboard to open.
Backups run as a scheduled action inside Odoo, and you
manage them there.
</p>
<h2>Step 2: Check the Backup Job</h2>
<p>
Backups are already running for you. To see or adjust
the schedule, turn on Development Mode in Odoo and open
the scheduled action that runs the backup job. You can
review it, adjust it, or trigger it by hand.
</p>
<pre><code>Odoo &gt; Settings &gt; Development Mode (on)
Odoo &gt; Settings &gt; Technical &gt; Scheduled Actions &gt; backup job</code></pre>
<h2>Step 3: You're Done</h2>
<p>
That's it. Your data is backed up on the schedule, and
you can trigger a backup by hand any time from the same
screen.
</p>
<div class="pro-tip">
<strong>Pro Tip:</strong> Your <a href="../../index.html#pricing">plan</a> decides how many
backups you keep. Side Hustle keeps one, On the Rise and
Powerhouse keep four. When the slots are full the oldest
backup is overwritten and permanently deleted, so before
a major change, download a copy of the database you want
to keep.
</div>
<div class="cta-box">
<h3>Protect Your Business Data</h3>
<p>
Every paid plan includes automated backups — one
slot on Side Hustle, four on On the Rise and
Powerhouse. The free trial has none.
</p>
<a href="../../index.html#pricing" class="btn btn-primary"
>Choose a Plan</a
>
</div>
<p>
A backup is the safety net for a single change. When the change is bigger than one
module, a version upgrade or a migration, a staging environment is worth it. Read
<a href="../../odoo-staging-environment/">what a staging environment is, and why you probably do not need one</a>.
</p>
</div>
</article>
<div class="post-footer">
<a href="../../index.html#blog">&larr; Back to all posts</a>
</div>
</div>
</main>
<script defer src="/static/agent-odoo4projects/agent.js?v=c3bb0cee2b"></script>
</body>
</html>