mirror of
https://github.com/databasus/databasus.git
synced 2026-04-06 00:32:03 +02:00
1132 lines
45 KiB
HTML
1132 lines
45 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
|
||
<!-- Minified TailwindCSS -->
|
||
<link rel="stylesheet" href="styles.min.css" />
|
||
|
||
<!-- Primary Meta Tags -->
|
||
<title>Postgresus | PostgreSQL backup</title>
|
||
<meta name="title" content="Postgresus | PostgreSQL backup" />
|
||
<meta
|
||
name="description"
|
||
content="Free and open source tool for PostgreSQL scheduled backups. Save them locally and to clouds. Notifications to Slack, Discord, etc."
|
||
/>
|
||
<meta
|
||
name="keywords"
|
||
content="PostgreSQL, backup, monitoring, database, scheduled backups, Docker, self-hosted, open source, S3, Google Drive, Slack notifications, Discord, DevOps, database monitoring, pg_dump, database restore"
|
||
/>
|
||
<meta name="robots" content="index, follow" />
|
||
<meta name="googlebot" content="index, follow" />
|
||
<meta name="bingbot" content="index, follow" />
|
||
<meta name="language" content="en" />
|
||
<meta name="revisit-after" content="7 days" />
|
||
<link rel="canonical" href="https://postgresus.com" />
|
||
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-GE01THYR9X"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag() {
|
||
dataLayer.push(arguments);
|
||
}
|
||
gtag('js', new Date());
|
||
|
||
gtag('config', 'G-GE01THYR9X');
|
||
</script>
|
||
|
||
<!-- Open Graph / Facebook -->
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:url" content="https://postgresus.com" />
|
||
<meta property="og:title" content="Postgresus | PostgreSQL backup" />
|
||
<meta
|
||
property="og:description"
|
||
content="Free and open source tool for PostgreSQL scheduled backups. Save them locally and to clouds. Notifications to Slack, Discord, etc."
|
||
/>
|
||
<meta property="og:image" content="https://postgresus.com/images/index/dashboard.svg" />
|
||
<meta
|
||
property="og:image:alt"
|
||
content="Postgresus dashboard interface showing backup management"
|
||
/>
|
||
<meta property="og:site_name" content="Postgresus" />
|
||
<meta property="og:locale" content="en_US" />
|
||
|
||
<!-- Twitter -->
|
||
<meta property="twitter:card" content="summary_large_image" />
|
||
<meta property="twitter:url" content="https://postgresus.com" />
|
||
<meta property="twitter:title" content="Postgresus | PostgreSQL backup" />
|
||
<meta
|
||
property="twitter:description"
|
||
content="Free and open source tool for PostgreSQL scheduled backups. Save them locally and to clouds. Notifications to Slack, Discord, etc."
|
||
/>
|
||
<meta property="twitter:image" content="https://postgresus.com/images/index/dashboard.svg" />
|
||
<meta
|
||
property="twitter:image:alt"
|
||
content="Postgresus dashboard interface showing backup management"
|
||
/>
|
||
|
||
<!-- Additional SEO Tags -->
|
||
<meta name="application-name" content="Postgresus" />
|
||
<meta name="apple-mobile-web-app-title" content="Postgresus" />
|
||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||
|
||
<!-- Favicons -->
|
||
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||
<link rel="icon" type="image/svg+xml" href="favicon.svg" />
|
||
<link rel="apple-touch-icon" href="favicon.svg" />
|
||
<link rel="shortcut icon" href="favicon.ico" />
|
||
|
||
<!-- Structured Data JSON-LD -->
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "SoftwareApplication",
|
||
"name": "Postgresus",
|
||
"description": "Free and open source tool for PostgreSQL scheduled backups. Save them locally and to clouds. Notifications to Slack, Discord, etc.",
|
||
"url": "https://postgresus.com",
|
||
"image": "https://postgresus.com/images/index/dashboard.svg",
|
||
"logo": "https://postgresus.com/logo.svg",
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "Postgresus",
|
||
"logo": {
|
||
"@type": "ImageObject",
|
||
"url": "https://postgresus.com/logo.svg"
|
||
}
|
||
},
|
||
"featureList": [
|
||
"Scheduled PostgreSQL backups",
|
||
"Multiple storage destinations (S3, Google Drive, Dropbox)",
|
||
"Real-time notifications (Slack, Telegram, Discord)",
|
||
"Database health monitoring",
|
||
"Self-hosted via Docker",
|
||
"Open source and free",
|
||
"Support for PostgreSQL 13-17",
|
||
"Backup compression and encryption"
|
||
],
|
||
"screenshot": "https://postgresus.com/images/index/dashboard.svg",
|
||
"softwareVersion": "latest"
|
||
}
|
||
</script>
|
||
|
||
<!-- Organization JSON-LD -->
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "Organization",
|
||
"name": "Postgresus",
|
||
"url": "https://postgresus.com/",
|
||
"alternateName": ["postgresus", "Postgresus"],
|
||
"logo": "https://postgresus.com/logo.svg",
|
||
"sameAs": ["https://github.com/RostislavDugin/postgresus"]
|
||
}
|
||
</script>
|
||
|
||
<!-- Website JSON-LD -->
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "WebSite",
|
||
"name": "Postgresus",
|
||
"alternateName": ["postgresus", "PostgresUS"],
|
||
"url": "https://postgresus.com/",
|
||
"description": "PostgreSQL backup tool",
|
||
"publisher": { "@type": "Organization", "name": "Postgresus" }
|
||
}
|
||
</script>
|
||
|
||
<!-- FAQ JSON-LD -->
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "FAQPage",
|
||
"mainEntity": [
|
||
{
|
||
"@type": "Question",
|
||
"name": "What is Postgresus and why should I use it instead of hand-rolled scripts?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "Postgresus is an Apache 2.0 licensed, self-hosted service backing up PostgreSQL, v13 to v17. It differs from shell scripts in that it has a frontend for scheduling tasks, compressing and storing archives on multiple targets (local disk, S3, Google Drive, Dropbox, etc.) and notifying your team when tasks finish or fail — all without hand-rolled code"
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "How do I install Postgresus in the quickest manner?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "The most direct route is to run the one-line cURL installer. It fetches the current Docker image, spins up a single PostgreSQL container. Then creates a docker-compose.yml and boots up the service so it will automatically start again when reboots occur. Overall time is usually less than two minutes on a typical VPS."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "What backup schedules can I schedule?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "You can choose from hourly, daily, weekly, or monthly cycles and even choose an exact run time (such as 04:00 when it's late night). Weekly schedules enable you to choose a particular weekday, while monthly schedules enable you to choose a particular calendar day, giving you very fine-grained control of maintenance windows."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "Where do my backups live and how much space will they occupy?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "Archives can be saved to local volumes, S3-compatible buckets, Google Drive, Dropbox, and other cloud targets. Postgresus implements balanced compression, which typically shrinks dump size by 4-8× with incremental only about 20% of runtime overhead, so you have storage and bandwidth savings."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "How will I know a backup succeeded — or worse, failed?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "Postgresus can notify with real-time emails, Slack, Telegram, webhooks, Mattermost, Discord and more. You have the choice of what channels to ping so that your DevOps team hears about successes and failures in real time, making recovery routines and compliance audits easier."
|
||
}
|
||
},
|
||
{
|
||
"@type": "Question",
|
||
"name": "Does Postgresus reduce database security?",
|
||
"acceptedAnswer": {
|
||
"@type": "Answer",
|
||
"text": "No. All the data executes within containers you control, on servers you own. Credentials and backup files are left on your server or in the cloud account of your choice. Because it's open source, you or your security team, can inspect every line to make sure it meets your organization's needs before it's run."
|
||
}
|
||
}
|
||
]
|
||
}
|
||
</script>
|
||
|
||
<link rel="preload" href="images/index/dashboard.svg" as="image" type="image/svg+xml" />
|
||
<link rel="preload" href="logo.svg" as="image" type="image/svg+xml" />
|
||
|
||
<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=Jost:ital,wght@0,100..900;1,100..900&display=swap"
|
||
rel="stylesheet"
|
||
/>
|
||
|
||
<script>
|
||
function copyToClipboard(text, button) {
|
||
// Fallback for older browsers
|
||
if (!navigator.clipboard) {
|
||
// Create a temporary textarea element
|
||
const textArea = document.createElement('textarea');
|
||
textArea.value = text;
|
||
document.body.appendChild(textArea);
|
||
textArea.select();
|
||
document.execCommand('copy');
|
||
document.body.removeChild(textArea);
|
||
showCopyFeedback(button);
|
||
return;
|
||
}
|
||
|
||
navigator.clipboard
|
||
.writeText(text)
|
||
.then(function () {
|
||
showCopyFeedback(button);
|
||
})
|
||
.catch(function (err) {
|
||
console.error('Failed to copy text: ', err);
|
||
// Fallback method
|
||
const textArea = document.createElement('textarea');
|
||
textArea.value = text;
|
||
document.body.appendChild(textArea);
|
||
textArea.select();
|
||
document.execCommand('copy');
|
||
document.body.removeChild(textArea);
|
||
showCopyFeedback(button);
|
||
});
|
||
}
|
||
|
||
function showCopyFeedback(button) {
|
||
const originalText = button.textContent;
|
||
button.textContent = 'Copied!';
|
||
button.classList.add('bg-green-500');
|
||
button.classList.remove('bg-blue-500');
|
||
setTimeout(() => {
|
||
button.textContent = originalText;
|
||
button.classList.remove('bg-green-500');
|
||
button.classList.add('bg-blue-500');
|
||
}, 2000);
|
||
}
|
||
|
||
function copyInstallScript(button) {
|
||
const installScript =
|
||
'sudo apt-get install -y curl && \\\nsudo curl -sSL https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/heads/main/install-postgresus.sh | sudo bash';
|
||
copyToClipboard(installScript, button);
|
||
}
|
||
|
||
function copyDockerRun(button) {
|
||
const dockerRun = `docker run -d \\
|
||
--name postgresus \\
|
||
-p 4005:4005 \\
|
||
-v ./postgresus-data:/postgresus-data \\
|
||
--restart unless-stopped \\
|
||
rostislavdugin/postgresus:latest`;
|
||
copyToClipboard(dockerRun, button);
|
||
}
|
||
|
||
function copyDockerCompose(button) {
|
||
const dockerCompose = `version: "3"
|
||
|
||
services:
|
||
postgresus:
|
||
container_name: postgresus
|
||
image: rostislavdugin/postgresus:latest
|
||
ports:
|
||
- "4005:4005"
|
||
volumes:
|
||
- ./postgresus-data:/postgresus-data
|
||
restart: unless-stopped`;
|
||
copyToClipboard(dockerCompose, button);
|
||
}
|
||
</script>
|
||
</head>
|
||
|
||
<body>
|
||
<!------------------ NAVBAR ------------------------->
|
||
<nav
|
||
class="fixed left-0 right-0 top-0 z-50 flex h-[60px] justify-center bg-white px-4 sm:h-[70px] md:h-[80px]"
|
||
>
|
||
<div
|
||
class="flex w-[320px] min-w-0 max-w-[320px] grow items-center border-b sm:w-[640px] sm:max-w-[640px] lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<img
|
||
src="logo.svg"
|
||
loading="eager"
|
||
alt="Postgresus logo"
|
||
width="35"
|
||
height="35"
|
||
class="flex-shrink-0 sm:h-[40px] sm:w-[40px] md:h-[50px] md:w-[50px]"
|
||
/>
|
||
|
||
<div class="ml-2 text-lg font-bold sm:ml-3 sm:text-xl md:ml-4 md:text-2xl">Postgresus</div>
|
||
|
||
<div
|
||
class="ml-auto mr-4 hidden gap-3 text-base sm:mr-6 md:mr-10 lg:flex lg:gap-5 lg:text-lg"
|
||
>
|
||
<a class="hover:opacity-70" href="#guide">Guide</a>
|
||
<a class="hover:opacity-70" href="#installation">Installation</a>
|
||
<a class="hover:opacity-70" href="#features">Features</a>
|
||
<a class="hover:opacity-70" href="https://t.me/postgresus_community" target="_blank"
|
||
>Community</a
|
||
>
|
||
</div>
|
||
|
||
<a
|
||
class="ml-auto lg:ml-0"
|
||
href="https://github.com/RostislavDugin/postgresus"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
>
|
||
<div
|
||
class="flex items-center rounded-lg border bg-[#f5f7f9] px-2 py-1 hover:bg-gray-100 md:px-4 md:py-2"
|
||
>
|
||
<img
|
||
src="images/index/github.svg"
|
||
class="mr-1 sm:mr-2 md:mr-3"
|
||
alt="GitHub icon"
|
||
width="16"
|
||
height="16"
|
||
style="width: 16px; height: 16px"
|
||
loading="eager"
|
||
/>
|
||
<span class="text-sm sm:text-base"
|
||
>Star on GitHub<span class="hidden lg:inline"
|
||
>, it's really important ❤️</span
|
||
></span
|
||
>
|
||
</div>
|
||
</a>
|
||
</div>
|
||
</nav>
|
||
<!------------------ END OF NAVBAR ------------------>
|
||
|
||
<!------------------ MAIN SECTION ------------------------->
|
||
<div class="flex justify-center py-[50px] pt-[110px] md:py-[100px] md:pt-[180px]">
|
||
<main
|
||
class="w-[320px] max-w-[320px] sm:w-[640px] sm:max-w-[640px] lg:flex lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<div class="lg:w-[500px] lg:min-w-[500px]">
|
||
<h1 class="max-w-[300px] text-2xl font-bold sm:max-w-[400px] sm:text-3xl">
|
||
PostgreSQL backup tool
|
||
</h1>
|
||
|
||
<p class="mt-5 max-w-[400px] sm:text-lg">
|
||
Postgresus is a free, open source and self-hosted tool to backup PostgreSQL. Make
|
||
backups with different storages and notifications about progress
|
||
</p>
|
||
|
||
<div class="mt-5 max-w-[280px] sm:text-lg md:max-w-full">
|
||
<div class="mb-2 flex items-start gap-3">
|
||
<img
|
||
src="images/index/check-blue.svg"
|
||
alt="Check mark icon"
|
||
class="mt-1"
|
||
width="20"
|
||
height="20"
|
||
loading="eager"
|
||
/>
|
||
<p>Configurable health checks with notifications</p>
|
||
</div>
|
||
|
||
<div class="mb-2 flex items-start gap-3">
|
||
<img
|
||
src="images/index/check-blue.svg"
|
||
alt="Check mark icon"
|
||
class="mt-1"
|
||
width="20"
|
||
height="20"
|
||
loading="eager"
|
||
/>
|
||
<p><b>Scheduled backups</b> (daily, weekly, at 4 AM, etc.)</p>
|
||
</div>
|
||
|
||
<div class="mb-2 flex items-start gap-3">
|
||
<img
|
||
src="images/index/check-blue.svg"
|
||
alt="Check mark icon"
|
||
class="mt-1"
|
||
width="20"
|
||
height="20"
|
||
loading="eager"
|
||
/>
|
||
<p>Save backups locally, in S3, Google Drive and more</p>
|
||
</div>
|
||
|
||
<div class="mb-2 flex items-start gap-3">
|
||
<img
|
||
src="images/index/check-blue.svg"
|
||
alt="Check mark icon"
|
||
class="mt-1"
|
||
width="20"
|
||
height="20"
|
||
loading="eager"
|
||
/>
|
||
<p>Notifications to Slack, Telegram, Discord, etc.</p>
|
||
</div>
|
||
|
||
<div class="mb-2 flex items-start gap-3">
|
||
<img
|
||
src="images/index/check-blue.svg"
|
||
alt="Check mark icon"
|
||
class="mt-1"
|
||
width="20"
|
||
height="20"
|
||
loading="eager"
|
||
/>
|
||
<p>Run via .sh script, Docker or Docker Compose</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mt-5 block text-sm sm:mt-10 sm:flex">
|
||
<a
|
||
href="#installation"
|
||
class="block grow rounded-lg border-2 border-blue-600 bg-blue-600 px-4 py-2 text-center font-semibold text-white hover:bg-blue-700 sm:grow-0 sm:px-6 sm:py-3"
|
||
>
|
||
Configure for 2 minutes
|
||
</a>
|
||
|
||
<a
|
||
href="https://github.com/RostislavDugin/postgresus"
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
class="mt-1 block grow rounded-lg border-2 border-blue-600 px-4 py-2 text-center font-semibold text-blue-600 hover:bg-blue-100 sm:ml-2 sm:mt-0 sm:grow-0 sm:px-6 sm:py-3"
|
||
>
|
||
GitHub
|
||
</a>
|
||
</div>
|
||
|
||
<div class="mt-5 text-center sm:text-left">
|
||
From developer of
|
||
<a class="underline decoration-blue-600" href="https://logbull.com" target="_blank"
|
||
>Log Bull</a
|
||
>
|
||
</div>
|
||
|
||
<div class="mt-5 flex text-sm">
|
||
<img
|
||
src="images/index/messengers.svg"
|
||
alt="Supported messengers and platforms"
|
||
class="max-h-[35px]"
|
||
loading="eager"
|
||
/>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mt-12 sm:mt-16 lg:mt-0 lg:grow">
|
||
<img
|
||
class="rounded"
|
||
src="images/index/dashboard.svg"
|
||
alt="Postgresus dashboard interface"
|
||
width="100%"
|
||
loading="eager"
|
||
fetchpriority="high"
|
||
/>
|
||
</div>
|
||
</main>
|
||
</div>
|
||
<!------------------ END OF MAIN SECTION ------------------>
|
||
|
||
<!------------------ HOW TO MAKE BACKUPS SECTION ------------------>
|
||
<div id="guide" class="flex justify-center py-[50px] md:py-[100px]">
|
||
<div
|
||
class="w-[320px] max-w-[320px] sm:w-[640px] sm:max-w-[640px] lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<div class="text-center">
|
||
<h2 class="text-2xl font-bold sm:text-4xl">How to make backups?</h2>
|
||
<p class="mx-auto mt-5 max-w-[500px] text-base sm:text-lg">
|
||
To make PostgreSQL backup with Postgresus you need to follow 4 steps. After that,
|
||
you will be able to restore in one click
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mt-20">
|
||
<div class="mb-16 block lg:flex">
|
||
<div class="flex">
|
||
<div class="mr-5 mt-1 flex">
|
||
<div
|
||
class="flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white sm:h-9 sm:w-9 sm:text-base"
|
||
>
|
||
1
|
||
</div>
|
||
</div>
|
||
|
||
<div class="w-[500px] md:pr-20">
|
||
<h3 class="mb-3 text-lg font-bold md:text-2xl">Select required schedule</h3>
|
||
|
||
<p class="md:text-lg">
|
||
You can choose any time you need: daily, weekly, monthly and particular time (like
|
||
4 AM)
|
||
<br />
|
||
<br />
|
||
For week interval you need to specify particular day, for month you need to
|
||
specify particular day
|
||
<br />
|
||
<br />
|
||
If your database is large, we recommend you choosing the time when there are
|
||
decrease in traffic
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<img
|
||
src="images/index/backup-step-1.webp"
|
||
alt="Backup schedule configuration interface"
|
||
class="mt-5 max-w-[350px] rounded-lg border border-gray-200 shadow-lg md:ml-14 md:mt-10 lg:ml-0 lg:mt-0"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="mb-16 block lg:flex">
|
||
<div class="flex">
|
||
<div class="mr-5 mt-1 flex">
|
||
<div
|
||
class="flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white sm:h-9 sm:w-9 sm:text-base"
|
||
>
|
||
2
|
||
</div>
|
||
</div>
|
||
|
||
<div class="w-[500px] md:pr-20">
|
||
<h3 class="mb-3 text-lg font-bold md:text-2xl">Enter your database info</h3>
|
||
|
||
<p class="md:text-lg">
|
||
Enter credentials of your PostgreSQL database, select version and target DB. Also
|
||
choose whether SSL is required
|
||
<br />
|
||
<br />
|
||
Postgresus, by default, compress backups at balance level to not slow down backup
|
||
process (~20% slower) and save x4-x8 of the space (that decreasing network
|
||
traffic)
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<img
|
||
src="images/index/backup-step-2.webp"
|
||
alt="Database configuration form"
|
||
class="mt-5 max-w-[350px] rounded-lg border border-gray-200 shadow-lg md:ml-14 md:mt-10 lg:ml-0 lg:mt-0"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="mb-16 block lg:flex">
|
||
<div class="flex">
|
||
<div class="mr-5 mt-1 flex">
|
||
<div
|
||
class="flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white sm:h-9 sm:w-9 sm:text-base"
|
||
>
|
||
3
|
||
</div>
|
||
</div>
|
||
|
||
<div class="w-[500px] md:pr-20">
|
||
<h3 class="mb-3 text-lg font-bold md:text-2xl">Choose storage for backups</h3>
|
||
|
||
<p class="md:text-lg">
|
||
You can keep files with backups locally, in S3, in Google Drive, NAS, Dropbox and
|
||
other services
|
||
<br />
|
||
<br />
|
||
Please keep in mind that you need to have enough space on the storage
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<img
|
||
src="images/index/backup-step-3.webp"
|
||
alt="Storage options selection interface"
|
||
class="mt-5 max-w-[350px] rounded-lg border border-gray-200 shadow-lg md:ml-14 md:mt-10 lg:ml-0 lg:mt-0"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mb-16 block lg:flex">
|
||
<div class="flex">
|
||
<div class="mr-5 mt-1 flex">
|
||
<div
|
||
class="flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white sm:h-9 sm:w-9 sm:text-base"
|
||
>
|
||
4
|
||
</div>
|
||
</div>
|
||
|
||
<div class="w-[500px] md:pr-20">
|
||
<h3 class="mb-3 text-lg font-bold md:text-2xl">
|
||
Choose where you want to receive notifications (optional)
|
||
</h3>
|
||
|
||
<p class="md:text-lg">
|
||
When backup succeed or failed, Postgresus is able to send you notification. It can
|
||
be chat with DevOps, your emails or even webhook of your team
|
||
<br />
|
||
<br />
|
||
We are going to support the most of popular messangers and platforms
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
<img
|
||
src="images/index/backup-step-4.webp"
|
||
alt="Notification settings configuration"
|
||
class="mt-5 max-w-[350px] rounded-lg border border-gray-200 shadow-lg md:ml-14 md:mt-10 lg:ml-0 lg:mt-0"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!------------------ END OF HOW TO MAKE BACKUPS SECTION ------------------>
|
||
|
||
<!------------------ FEATURES SECTION ------------------->
|
||
<div id="features" class="flex justify-center bg-blue-100 py-[50px] md:py-[100px]">
|
||
<div
|
||
class="space-b w-[320px] max-w-[320px] sm:w-[640px] sm:max-w-[640px] lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<div class="mb-10 text-center md:mb-20">
|
||
<h2 class="text-2xl font-bold sm:text-4xl">Features</h2>
|
||
|
||
<p class="mx-auto mt-5 max-w-[550px] text-base sm:text-lg">
|
||
Postgresus provides everything you need for reliable PostgreSQL backup management. From
|
||
automated scheduling to multiple storage options, we've got you covered.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="flex flex-wrap gap-3">
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Scheduled backups</h3>
|
||
|
||
<div class="h-[120px] max-h-[120px] sm:h-[220px] sm:max-h-[220px]">
|
||
<img
|
||
src="images/index/feature-scheduled-backups.webp"
|
||
class="max-h-[120px] sm:max-h-[220px]"
|
||
alt="Scheduled backups"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="mt-3 text-sm text-gray-600 md:mt-0 md:text-base">
|
||
Backup is a thing that should be done in specified time on regular basis. So we
|
||
provide many options: from hourly to monthly
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Notifications</h3>
|
||
|
||
<div
|
||
class="flex h-[120px] max-h-[120px] justify-center pt-7 sm:h-[200px] sm:max-h-[200px]"
|
||
>
|
||
<img
|
||
class="max-h-[120px] sm:max-h-[150px]"
|
||
src="images/index/feature-notifications.svg"
|
||
alt="Notifications"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="pt-5 text-sm text-gray-600 sm:pt-5 sm:text-base">
|
||
You can receive notifications about success or fail of the process. This is useful for
|
||
developers or DevOps teams
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Self hosted via Docker</h3>
|
||
|
||
<div
|
||
class="flex h-[140px] max-h-[140px] justify-center pt-5 sm:mt-0 sm:h-[220px] sm:max-h-[220px]"
|
||
>
|
||
<img
|
||
class="max-h-[120px] sm:max-h-[150px]"
|
||
src="images/index/feature-docker.webp"
|
||
alt="Self hosted via Docker"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="mt-3 text-sm text-gray-600 md:mt-0 md:text-base">
|
||
Postgresus runs on your PC or VPS. Therefore, all your data is owned by you and
|
||
secured. Deploy takes about 2 minutes
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Configurable health checks</h3>
|
||
|
||
<div class="h-[50px] max-h-[50px] sm:h-[120px] sm:max-h-[120px]">
|
||
<img
|
||
class="max-h-[50px] sm:max-h-[120px]"
|
||
src="images/index/feature-healthcheck.svg"
|
||
alt="Configurable health checks"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="mt-3 text-sm text-gray-600 md:mt-0 md:text-base">
|
||
Each minute (or any another amount of time) the system will ping your database and
|
||
show you the history of attempts
|
||
<br /><br />
|
||
The database can be considered as down after 3 failed attempts or so. Once DB is
|
||
healthy again - you receive notification too
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Open source and free</h3>
|
||
|
||
<div
|
||
class="flex h-[90px] max-h-[90px] justify-center pt-10 sm:my-0 sm:h-[160px] sm:max-h-[160px]"
|
||
>
|
||
<img
|
||
class="max-h-[90px] sm:max-h-[100px]"
|
||
src="images/index/feature-github.svg"
|
||
alt="Open source and free"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="pt-10 text-sm text-gray-600 md:mt-0 md:text-base">
|
||
The project is fully open source, free and have Apache 2.0 license. You can copy and fork the
|
||
code on your own
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Many PostgreSQL versions</h3>
|
||
|
||
<div
|
||
class="flex h-[90px] max-h-[90px] justify-center pt-10 sm:my-0 sm:h-[160px] sm:max-h-[160px]"
|
||
>
|
||
<img
|
||
class="max-h-[90px] sm:max-h-[100px]"
|
||
src="images/index/feature-postgresql.svg"
|
||
alt="Many PostgreSQL versions"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="pt-10 text-sm text-gray-600 md:mt-0 md:text-base">
|
||
PostgreSQL 13, 14, 15, 16, 17 and 18 are supported by the project. You can backup any
|
||
version from 2020
|
||
</div>
|
||
</div>
|
||
|
||
<div
|
||
class="h-[320px] max-h-[320px] w-[320px] rounded-2xl bg-white p-8 md:h-[390px] md:max-h-[390px] md:w-[390px]"
|
||
>
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Many destinations to store</h3>
|
||
|
||
<div
|
||
class="flex h-[120px] max-h-[120px] justify-center pb-5 pt-5 sm:my-0 sm:h-[200px] sm:max-h-[200px] sm:pb-0 sm:pt-10"
|
||
>
|
||
<img
|
||
class="max-h-[120px] sm:max-h-[120px]"
|
||
src="images/index/feature-google-drive.svg"
|
||
alt="Many destinations to store"
|
||
loading="lazy"
|
||
/>
|
||
</div>
|
||
|
||
<div class="mt-3 text-sm text-gray-600 md:mt-0 md:text-base">
|
||
Files are kept on VPS, cloud storages and other places. You can choose any storage
|
||
you. Files are always owned by you need
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!------------------ END OF FEATURES SECTION ---------------------->
|
||
|
||
<!------------------ INSTALLATION SECTION ------------------------->
|
||
<div id="installation" class="flex justify-center py-[50px] md:py-[100px]">
|
||
<div
|
||
class="w-[320px] max-w-[320px] sm:w-[640px] sm:max-w-[640px] lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<div class="mb-10 md:mb-20">
|
||
<h2 class="text-2xl font-bold sm:text-4xl">How to install?</h2>
|
||
|
||
<p class="mt-5 max-w-[550px] text-base sm:text-lg">
|
||
You have three ways to install Postgresus: automated script (recommended), simple Docker
|
||
run, or Docker Compose setup.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mt-20">
|
||
<!-- Option 1: Automated Installation Script -->
|
||
<div class="mb-16 block xl:flex">
|
||
<div class="w-full sm:pr-10 xl:w-1/2">
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">
|
||
Option 1: automated installation script (recommended)
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
The installation script will:
|
||
<br />
|
||
✅ Install Docker with Docker Compose (if not already installed)
|
||
<br />
|
||
✅ Set up Postgresus
|
||
<br />
|
||
✅ Configure automatic startup on system reboot
|
||
</p>
|
||
|
||
<div class="relative mt-5 max-w-[550px]">
|
||
<code
|
||
class="block w-full overflow-x-auto whitespace-nowrap rounded-lg bg-gray-100 p-4 pr-16 text-sm"
|
||
>
|
||
sudo apt-get install -y curl && \<br />
|
||
sudo curl -sSL
|
||
https://raw.githubusercontent.com/RostislavDugin/postgresus/refs/heads/main/install-postgresus.sh
|
||
\ | sudo bash
|
||
</code>
|
||
<button
|
||
onclick="copyInstallScript(this)"
|
||
class="absolute right-2 top-2 rounded bg-blue-600 px-2 py-1 text-xs text-white transition-colors hover:bg-blue-700"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Option 2: Simple Docker Run -->
|
||
<div class="mt-20 w-full sm:pr-10 xl:mt-0 xl:w-1/2">
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Option 2: simple Docker run</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
The easiest way to run Postgresus with embedded PostgreSQL. This single command
|
||
will:
|
||
<br />
|
||
✅ Start Postgresus
|
||
<br />
|
||
✅ Store all data in ./postgresus-data directory
|
||
<br />
|
||
✅ Automatically restart on system reboot
|
||
</p>
|
||
|
||
<div class="relative mt-5 max-w-[550px]">
|
||
<code
|
||
class="block w-full overflow-x-auto whitespace-nowrap rounded-lg bg-gray-100 p-4 pr-16 text-sm"
|
||
>
|
||
docker run -d \<br />
|
||
--name postgresus \<br />
|
||
-p 4005:4005 \<br />
|
||
-v ./postgresus-data:/postgresus-data \<br />
|
||
--restart unless-stopped \<br />
|
||
rostislavdugin/postgresus:latest
|
||
</code>
|
||
<button
|
||
onclick="copyDockerRun(this)"
|
||
class="absolute right-2 top-2 rounded bg-blue-600 px-2 py-1 text-xs text-white transition-colors hover:bg-blue-700"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Option 3: Docker Compose Setup -->
|
||
<div class="block xl:flex">
|
||
<div class="w-full sm:pr-10">
|
||
<h3 class="mb-3 text-xl font-bold md:text-2xl">Option 3: Docker Compose setup</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
Create a docker-compose.yml file with the following configuration, then run:
|
||
<strong>docker compose up -d</strong>
|
||
</p>
|
||
|
||
<div class="relative mt-5 max-w-[550px]">
|
||
<code
|
||
class="block w-full overflow-x-auto whitespace-nowrap rounded-lg bg-gray-100 p-4 pr-16 text-sm"
|
||
>
|
||
version: "3"<br />
|
||
<br />
|
||
services:<br />
|
||
postgresus:<br />
|
||
container_name: postgresus<br />
|
||
image: rostislavdugin/postgresus:latest<br />
|
||
ports:<br />
|
||
- "4005:4005"<br />
|
||
volumes:<br />
|
||
- ./postgresus-data:/postgresus-data<br />
|
||
restart: unless-stopped
|
||
</code>
|
||
|
||
<button
|
||
onclick="copyDockerCompose(this)"
|
||
class="absolute right-2 top-2 rounded bg-blue-600 px-2 py-1 text-xs text-white transition-colors hover:bg-blue-700"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!------------------ END OF INSTALLATION SECTION ------------------>
|
||
|
||
<!------------------ FAQ SECTION ---------------------------------->
|
||
<div id="faq" class="flex justify-center bg-blue-100 py-[50px] md:py-[100px]">
|
||
<div
|
||
class="w-[320px] max-w-[320px] sm:w-[640px] sm:max-w-[640px] lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<div class="mb-10 md:mb-20">
|
||
<h2 class="text-2xl font-bold sm:text-4xl">FAQ</h2>
|
||
<p class="mt-5 max-w-[600px] sm:text-lg">
|
||
The goal of Postgresus — make backing up as simple as possible for single developers (as
|
||
well as DevOps) and teams. UI makes it easy to create backups and visualizes the
|
||
progress and restores anything in couple of clicks
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mt-15">
|
||
<div class="flex flex-wrap">
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
1. What is Postgresus and why should I use it instead of hand-rolled scripts?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
Postgresus is an Apache 2.0 licensed, self-hosted service backing up PostgreSQL, v13 to
|
||
v18. It differs from shell scripts in that it has a frontend for scheduling tasks,
|
||
compressing and storing archives on multiple targets (local disk, S3, Google Drive,
|
||
NAS, Dropbox, etc.) and notifying your team when tasks finish or fail — all without
|
||
hand-rolled code
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
2. How do I install Postgresus in the quickest manner?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
The most direct route is to run the one-line cURL installer. It fetches the current
|
||
Docker image, spins up a single PostgreSQL container. Then creates a
|
||
docker-compose.yml and boots up the service so it will automatically start again
|
||
when reboots occur. Overall time is usually less than two minutes on a typical VPS.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
3. What backup schedules can I schedule?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
You can choose from hourly, daily, weekly, or monthly cycles and even choose an
|
||
exact run time (such as 04:00 when it's late night). Weekly schedules enable you to
|
||
choose a particular weekday, while monthly schedules enable you to choose a
|
||
particular calendar day, giving you very fine-grained control of maintenance
|
||
windows.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
4. Where do my backups live and how much space will they occupy?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
Archives can be saved to local volumes, S3-compatible buckets, Google Drive,
|
||
Dropbox, and other cloud targets. Postgresus implements balanced compression, which
|
||
typically shrinks dump size by 4-8x with incremental only about 20% of runtime
|
||
overhead, so you have storage and bandwidth savings.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
5. How will I know a backup succeeded — or worse, failed?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
Postgresus can notify with real-time emails, Slack, Telegram, webhooks, Mattermost,
|
||
Discord and more. You have the choice of what channels to ping so that your DevOps
|
||
team hears about successes and failures in real time, making recovery routines and
|
||
compliance audits easier.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
6. Does Postgresus reduce database security?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
No. All the data executes within containers you control, on servers you own.
|
||
Credentials and backup files are left on your server or in the cloud account of your
|
||
choice. Because it's open source, you or your security team, can inspect every line
|
||
to make sure it meets your organization's needs before it's run.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
7. How do I set up and run my first backup job in Postgresus?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
To start your very first Postgresus backup, simply log in to the dashboard, click on
|
||
New Backup, select an interval — hourly, daily, weekly or monthly. Then specify the
|
||
exact run time (e.g., 02:30 for off-peak hours). Then input your PostgreSQL host,
|
||
port number, database name, credentials, version and SSL preference. Choose where
|
||
the archive should be sent (local path, S3 bucket, Google Drive folder, Dropbox,
|
||
etc.). If you need, add notification channels such as email, Slack, Telegram or a
|
||
webhook, and click Save. Postgresus instantly validates the info, starts the
|
||
schedule, runs the initial job and sends live status. So you may restore with one
|
||
touch when the backup is complete.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="mb-8 w-full pr-10 lg:w-1/2">
|
||
<h3 class="mb-3 max-w-[350px] font-bold md:text-xl">
|
||
8. How does PostgreSQL monitoring work?
|
||
</h3>
|
||
|
||
<p class="max-w-[500px] md:text-lg">
|
||
Postgresus monitors your databases instantly. This optional feature helps avoid
|
||
extra costs for edge DBs. Health checks are performed once a specific period
|
||
(minute, 5 minutes, etc.). To enable the feature, choose your DB and select "enable"
|
||
monitoring. Then configure health checks period and number of failed attempts to
|
||
consider the DB as unavailable.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!------------------ END OF FAQ SECTION --------------------------->
|
||
|
||
<!------------------ FOOTER SECTION -------------------------------->
|
||
<div id="footer" class="flex justify-center bg-blue-600 py-[50px] md:py-[50px]">
|
||
<div
|
||
class="w-[320px] max-w-[320px] sm:w-[640px] sm:max-w-[640px] lg:w-[1200px] lg:max-w-[1200px]"
|
||
>
|
||
<div class="flex flex-col items-center space-y-4">
|
||
<div class="flex flex-wrap justify-center gap-6 text-white">
|
||
<a href="blog" class="transition-colors hover:text-blue-200">Blog</a>
|
||
|
||
<a
|
||
href="https://github.com/RostislavDugin/postgresus"
|
||
target="_blank"
|
||
class="transition-colors hover:text-blue-200"
|
||
>
|
||
GitHub
|
||
</a>
|
||
|
||
<a
|
||
href="https://t.me/postgresus_community"
|
||
target="_blank"
|
||
class="transition-colors hover:text-blue-200"
|
||
>
|
||
Community
|
||
</a>
|
||
|
||
<a
|
||
href="https://rostislav-dugin.com"
|
||
target="_blank"
|
||
class="transition-colors hover:text-blue-200"
|
||
>
|
||
Developer
|
||
</a>
|
||
</div>
|
||
<p class="text-center text-sm text-white">© 2025 Postgresus. All rights reserved.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<!------------------ END OF FOOTER SECTION ------------------------->
|
||
|
||
<!-- Yandex.Metrika counter -->
|
||
<script type="text/javascript">
|
||
(function (m, e, t, r, i, k, a) {
|
||
m[i] =
|
||
m[i] ||
|
||
function () {
|
||
(m[i].a = m[i].a || []).push(arguments);
|
||
};
|
||
m[i].l = 1 * new Date();
|
||
for (var j = 0; j < document.scripts.length; j++) {
|
||
if (document.scripts[j].src === r) {
|
||
return;
|
||
}
|
||
}
|
||
((k = e.createElement(t)),
|
||
(a = e.getElementsByTagName(t)[0]),
|
||
(k.async = 1),
|
||
(k.src = r),
|
||
a.parentNode.insertBefore(k, a));
|
||
})(window, document, 'script', 'https://mc.yandex.ru/metrika/tag.js?id=103482608', 'ym');
|
||
|
||
ym(103482608, 'init', {
|
||
ssr: true,
|
||
clickmap: true,
|
||
ecommerce: 'dataLayer',
|
||
accurateTrackBounce: true,
|
||
trackLinks: true,
|
||
});
|
||
</script>
|
||
<noscript
|
||
><div>
|
||
<img
|
||
src="https://mc.yandex.ru/watch/103482608"
|
||
style="position: absolute; left: -9999px"
|
||
alt=""
|
||
/></div
|
||
></noscript>
|
||
<!-- /Yandex.Metrika counter -->
|
||
</body>
|
||
</html>
|