惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Cisco Talos Blog
Cisco Talos Blog
T
Threat Research - Cisco Blogs
P
Privacy International News Feed
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
Scott Helme
Scott Helme
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
O
OpenAI News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
PCI Perspectives
PCI Perspectives
GbyAI
GbyAI
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
T
Troy Hunt's Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
腾讯CDC
C
Check Point Blog
Spread Privacy
Spread Privacy
L
LINUX DO - 最新话题
Recent Announcements
Recent Announcements
大猫的无限游戏
大猫的无限游戏
P
Palo Alto Networks Blog
Hacker News: Ask HN
Hacker News: Ask HN
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Hacker News
The Hacker News
H
Hacker News: Front Page
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
T
Tor Project blog
Martin Fowler
Martin Fowler
博客园 - 叶小钗
罗磊的独立博客
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Heimdal Security Blog
V
Vulnerabilities – Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
Latest news
Latest news
WordPress大学
WordPress大学
G
Google Developers Blog
N
Netflix TechBlog - Medium
S
Security Affairs
S
Secure Thoughts
Know Your Adversary
Know Your Adversary

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как создать базу данных на своём сервере с помощью Coolify
nickneustroe · 2026-04-22 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение15 мин

Охват и читатели2.2K

Туториал

Coolify это бесплатный инструмент, который позволяет легко запускать приложения на ваших серверах и управлять ими через визуальный интерфейс.

В прошлых статьях мы уже разобрались, как подготовить сервер, затем установить на нём Coolify и запустить простые приложения из GitHub.

А сегодня посмотрим, как с помощью Coolify создать базу данных на своем сервере и какие преимущества это даёт.

❯ Создание базы

Сначала заходим в Проекты (Projects). Там создаем новый проект или заходим в существующий.

Затем в проекте нажимаем кнопку «Добавить ресурс». Открывается страница создания нового ресурса.

На этой странице есть на выбор 3 группы ресурсов: Приложения (Applications), Базы Данных (Databases) и Сервисы (Services).

На момент написания статьи в Coolify предлагается 8 вариантов баз для установки: PostgreSQL, MySQL, MariaDB, Redis, KeyDB, Dragonfly, MongoDB, ClickHouse.

Выбор типа базы данных на странице создания ресурса

Выбор типа базы данных на странице создания ресурса

Отметим, что в группе Services можно найти и сервисы вида Backend-as-a-service со встроенными базами данных. Например, Supabase, Pocketbase или Directus. Но это немного другая история, и сегодня мы не будем их рассматривать.

Отметим также, чтобы если нужной вам базы нет в списке, то вы всё равно сможете её поставить, но уже через Приложения (Applications). Только тогда вам самим нужно будет настраивать её запуск. Например, через файлы Dockerfile или Docker Compose. Мы разбирали работу с Приложениями в прошлой статье про Coolify.

Сегодня в качестве примера мы возьмем PostgreSQL — самый популярный вариант реляционной БД для серьезных проектов.

После того, как вы выбрали базу данных из списка, предлагается выбрать сервер. Это может быть ваш сервер с Coolify (по умолчанию он называется localhost) или же отдельный дополнительный сервер. Второй вариант лучше, потому что в целом лучше размещать все приложения, базы и сервисы отдельно от админки Coolify.

Выбор сервера

Выбор сервера

После этого вам будет предложено выбрать версию PostgreSQL.

Выбор версии базы данных

Выбор версии базы данных

По умолчанию предлагается последняя версия, на момент написания статьи это PostgreSQL 18. При необходимости можно выбрать и другой вариант. Например, Supabase PostgreSQL, если вы переносите свою базу из Supabase или вам просто нравятся дополнительные возможности, которые есть в этой версии.

❯ Основные параметры подключения

После этого мы попадаем на главную страницу настройки созданной базы. Сама база данных на данный момент пока что еще не запущена.

Страница настроек базы в целом напоминает страницу настройки приложения, но со своими особенностями.

Первым идёт блок General.

Основные настройки базы в блоке General

Основные настройки базы в блоке General

Здесь мы можем поменять имя (Name) ресурса. По умолчанию будет что-то вроде «postgresql-database-ak2qve0elfobwleejabxdtdw». Можно оставить имя или поменять на что-то более подходящее, например «myproject-pg-prod», где «myproject» — название вашего проекта, а «prod» — роль окружения (тестовая база или для продакшена). При этом учтите, что во всей вашей системе Coolify не должно быть одинаковых названий у ресурсов.

Тут же вы можете поменять имя вашей базы данных (Initial Database), логин (Username) и пароль (Password), или же можно оставить варианты по умолчанию. Для большей наглядности заменим Username на «user1», а Initial Database на «default».

Чтобы изменения применились, не забываем нажимать кнопку Save сверху возле заголовка.

Остальные поля этого блока пропустим, потому что это уже специфичные настройки.

❯ Настройки сети и SSL

Для подключения к базе данных нужно знать параметры подключения: адрес, порт, название базы, логин и пароль. Чаще всего их объединяют в одну строку, которая называется URL для подключения.

И в блоке Network (Сеть) есть поле Postgres URL internal — это URL для подключения к базе из внутренней сети, к которой подключен данный ресурс.

Настройки базы в блоке Network

Настройки базы в блоке Network

Внутренние сети в Coolify называются Destinations, и по умолчанию все ресурсы, кроме сервисов и приложений с Docker Compose, объединяются в одну внутреннюю сеть «coolify».

Значит, в эту сеть по умолчанию попадёт и наша созданная база данных. И другие ресурсы из этой сети (например, веб-приложения) смогут подключаться к ней по Internal URL.

Обратите внимание, что если вы поменяете какие-то параметры подключения к базе (логин, пароль и т. д.), то они автоматически поменяются и в URL для подключения. Однако это происходит только после сохранения изменений по кнопке «Save».

Если же доступ к базе нужен вне внутренней сети, то для этого нужно настраивать внешний доступ.

Один вариант, это напрямую использовать поле Ports Mappings, что позволяет пробрасывать порт контейнера наружу, т. е. связать его с каким-то портом сервера. Например, если прописать 3000:5432, то при обращении к серверу по порту 3000 мы будем общаться с базой, если она слушает порт 5432.

Но вообще для включения удобного внешнего доступа к базе в её настройках есть специальная опция Public URL, и позже мы вернёмся к этой теме.

Дальше идёт блок SSL Configuration с одной галочкой — Enable SSL. Если её включить, то для подключения будет использоваться SSL, что при правильной настройке обеспечит шифрование данных и безопасность подключения. Это полезная функция, однако мы не будем на ней останавливаться. Пока для подключения в тестовых целях можно оставить как есть.

❯ Запуск базы и проверка

Теперь запустим базу данных. Для этого нажмите кнопку «Start» в верхнем правом углу.

Откроется окно лога, по которому можно отследить процесс запуска контейнера с базой. Если установка пройдет нормально, то через несколько секунд база данных будет запущена.

Об успешном запуске будет говорить то, что индикатор состояния ресурса в верхней части страницы станет зеленым и будет сообщать «Running (Healthy)», а кнопки сверху справа сменятся на «Restart» (перезапустить) и «Stop» (остановить).

Отображение состояния ресурса для успешно запущенной базы

Отображение состояния ресурса для успешно запущенной базы

Но на всякий случай убедимся лично, что база запущена и работает. Для этого нам нужно сначала зайти в терминал контейнера.

Переходим на вкладку Terminal. Там открывается консоль, где мы запустим встроенную консольную программу для подключения к базе:

psql "postgresql://user:password@host:5432/dbname"

Только вместо "postgresql://user:password@host:5432/dbname" будет ваш Internal URL для подключения.

Если всё ок, то мы увидим сообщение psql (18.3) Type "help" for help. и далее default=# в начале строки, где «default» — название вашей базы.

Для проверки создадим таблицу:

CREATE TABLE pokemons (
  id SERIAL PRIMARY KEY,
  name TEXT,
  element TEXT
);

Заполним ее данными:

INSERT INTO pokemons (name, element) VALUES
  ('Pikachu', 'Electric'),
  ('Charmander', 'Fire'),
  ('Bulbasaur', 'Grass');

И для проверки тут же запросим эти данные:

SELECT * FROM pokemons;

Если всё ок, то увидим такой ответ:

 id |    name    | element  
----+------------+----------
  1 | Pikachu    | Electric
  2 | Charmander | Fire
  3 | Bulbasaur  | Grass
Подключение к базе в терминале

Подключение к базе в терминале

❯ Внешнее подключение к базе

Иногда вы хотите сделать базу доступной не только из внутренней сети ресурса, например:

  • Для доступа к базе с вашего локального ПК. В целях разработки или чтобы работать с базой через локальную UI-программу, вроде pgAdmin.

  • Для приложений, которые не управляются через вашу админку Coolify.

  • Для ресурсов в Coolify, которые явно назначены в другую внутреннюю сеть (Destination).

  • Для ресурсов, которые по умолчанию работают в своих внутренних сетях — это Сервисы (Services) и приложения с Docker Compose.

Чтобы включить внешнее подключение, нужно сначала указать порт. На странице настроек базы для этого есть поле Public Port в блоке Proxy. По умолчанию в поле уже есть подсказка, какой порт обычно используется для такого типа базы. Например, для PostgreSQL это 5432.

Настройка внешнего подключения к базе

Настройка внешнего подключения к базе

При этом нужно учитывать, чтобы указанный порт на вашем сервере не был занят другой базой данных или другим приложением, иначе будет возникать ошибка. Если порт 5432 уже занят, то можно спокойно указать следующий свободный — 5433, 5434 и т. д.

Также важно, чтобы данный порт был открыт в настройках файрвола вашего сервера.

Например, если вы создали VPS в Timeweb Cloud, то всё проще, потому что управление портами тут работает по принципу чёрного списка — по умолчанию будут открыты все порты, кроме явно закрытых. Точный список закрытых портов можно увидеть на дашборде сервера в панели справа.

Список закрытых портов сервера в панели управления

Список закрытых портов сервера в панели управления

Как видно, порта 5432 нет в списке закрытых, поэтому он сразу будет работать, если указать его в Coolify.

Но у других облачных провайдеров может быть и обратная ситуация — когда все порты по умолчанию закрыты, пока их явно не откроют в настройках файрвола. Этот момент вам нужно будет проверить у вашего провайдера самостоятельно.

Итак, когда порт будет открыт и прописан, включите галочку «Make it publicly available», чтобы включить внешнее подключение к базе. Уточним, что это можно сделать только тогда, когда база запущена.

После этого выше в блоке Network появится поле Postgres URL (public) — с URL для внешнего подключения к базе.

Для проверки попробуйте подключиться к базе с вашего локального ПК. Можно использовать консольные программы или же бесплатные программы с UI, вроде pgAdmin, Beekeeper Studio или DBeaver.

Подключение к базе через программу Beekeeper Studio

Подключение к базе через программу Beekeeper Studio

Имейте в виду, что даже с надежным паролем внешнее подключение к базе — это лишняя потенциальная уязвимость. Поэтому не открывайте его без явной надобности.

❯ Логи базы

В случае каких-то проблем с базой вам в первую очередь захочется посмотреть в логи контейнера.

Для этого в ресурсах Coolify есть вкладка Logs (Логи).

Логи контейнера

Логи контейнера

❯ Подготовка S3-хранилища для бэкапов

Если данные, которые хранятся в базе, имеют для вас хоть какую-то ценность, то надо обязательно настроить для этой базы автоматическое резервное копирование — бэкапы.

Для этого сначала нужно подготовить внешнее S3-хранилище, где эти бэкапы будут храниться. Потому что хранить бэкапы на том же сервере, где у вас база — ненадежно, да и будет отниматься ценное место.

Во-первых, нужно включить S3-хранилище в панели вашего облачного провайдера.

Например, в Timeweb Cloud для этого переходим в раздел «Хранилище S3» и нажимаем «Добавить», чтобы перейти на страницу создания нового бакета — пространства для хранения файлов.

Заполняем открывшуюся форму:

Создание S3-хранилища в Timeweb Cloud

Создание S3-хранилища в Timeweb Cloud

  • Выбираем «Холодный» класс хранения — он создан специально для резервного копирования и других случаев, когда обращение к файлам происходит очень редко.

  • Выбираем тип «Приватный», потому что нам нет необходимости раздавать файлы по ссылке для всех желающих.

  • «Имя бакета» для наглядности лучше отредактировать. Можно в начале добавить что-то своё, например «coolify-backups». Но при этом часть названия лучше оставить рандомизированной. Потому что имя должно быть уникальным по всем клиентам провайдера. В итоге получится что-то вроде «coolify-backups-e85f5d1d6790».

  • Нажимаем «Заказать».

Когда бакет будет создан, то на его главной вкладке в блоке справа будут все нужные параметры для подключения к бакету. В первую очередь, это: S3 URL, Название бакета, S3 Access Key, S3 Secret Access Key и Регион.

Теперь нужно добавить этот бакет в вашей админке Coolify. Для этого заходим в раздел S3 Storages и нажимаем «Add». В открывшейся форме вносим все нужные данные для подключения и нажимаем «Validate Connection and Continue».

Добавление S3-хранилища в Coolify

Добавление S3-хранилища в Coolify

Если всё ок, подключение к S3 будет создано и сверху будет сообщение «Current Status: Usable».

❯ Включение и настройка бэкапов

Теперь, когда S3-хранилище готово, можно вернуться на страницу настройки базы данных и перейти на вкладку Backups (Бэкапы).

У одной базы может быть несколько разных задач бэкапов. По умолчанию их нет, т. е. резервное копирование не включено. Чтобы добавить новую задачу, нажимаем «Add».

Откроется окно с формой создания новой задачи резервного копирования.

Создание новой задачи резервного копирования

Создание новой задачи резервного копирования

Сначала нужно указать Frequency — частоту выгрузки бэкапов. Можно написать просто словом daily (ежедневно), weekly (еженедельно) и т. д., а можно использовать cron-выражение, например 0 0 * * * — это значит «каждый день в 00:00». Правильно составить выражение можно на специальных сайтах, вроде этого.

Частоту выгрузки определяйте по своей ситуации, в зависимости от того, как часто обновляются данные.

По умолчанию бэкапы сохраняются только локально, т. е. на сервере с базой. Чтобы сохранять их ещё и в S3, ставим галочку «Save to S3» и выбираем S3-хранилище, которое мы подготовили до этого. Нажимаем «Save».

Видим, что задача на резервное копирование появилась в списке.

Список задач резервного копирования

Список задач резервного копирования

Но нельзя оставлять задачу в таком виде! Дело в том, что по умолчанию бэкапы будут храниться бесконечно. Для холодного S3 это не так критично, потому что гигабайты там дешёвые, но место на сервере обычно очень ценно, и если не ограничить число бэкапов, то ваш сервер скоро будет забит.

Поэтому кликаем, чтобы перейти в детальные настройки задачи бэкапа.

Нас интересует блок «Backup Retention Settings», в котором 2 раздела:

  • Local Backup Retention — ограничения локального хранения.

  • S3 Storage Retention — ограничения хранения в S3-хранилище.

Детальная страница задачи резервного копирования

Детальная страница задачи резервного копирования

Ограничения можно включать по трём признакам:

  • Число бэкапов (Number of backups)

  • Число дней хранения (Days to keep)

  • Максимальный объем (Maximum storage (GB))

Можно использовать один из этих признаков или сразу несколько. Как только будет срабатывать любое из этих правил, Coolify сам будет удалять старые бэкапы.

Выбирайте настройки на ваше усмотрение, но поскольку ключевой момент это занимаемое бэкапами место, то можно для начала поставить только Maximum storage (GB): 1 для local и 10 для S3.

Обязательно не забудьте нажать кнопку «Save» возле заголовка.

Также в настройках можно при необходимости поставить галочку «Disable Local Backup», чтобы вообще отключить сохранение бэкапов на сервере и оставить только S3. Тем не менее лучше оставить локальное хранение тоже, в качестве резерва. Но конечно с обязательным ограничением.

❯ Проверка бэкапов

Теперь для проверки нажмите «Backup Now» и через несколько секунд первый бэкап появится в списке ниже.

Для дополнительной проверки временно заменим частоту (Frequency) на */1 * * * *, что значит «каждую минуту». Это позволит убедиться, что автоматические бэкапы тоже работают. Поменяем значение и подождем, пока новый бэкап не появится в списке.

Список выполненных операций резервного копирования

Список выполненных операций резервного копирования

Не забудьте вернуть прошлое значение обратно.

После этого зайдите в S3 хранилище в панели облачного провайдера и убедитесь, что файлы бэкапов (т. н. «дампы базы») сохраняются в бакете.

Список дампов базы, сохраненных в S3-хранилище

Список дампов базы, сохраненных в S3-хранилище

И финально стоит убедиться, что сохраненные бэкапы валидны, и из них действительно получается успешно восстановить нужную базу.

Для этого снова подключимся к базе через терминал и удалим таблицу командой DROP TABLE pokemons; и затем командой SELECT * FROM pokemons; убедимся, что ничего не осталось.

Удаление таблицы из базы

Удаление таблицы из базы

Для импорта бэкапа на странице настроек базы есть боковая вкладка Import backup.

Восстановление базы из дампа

Восстановление базы из дампа

Можно загрузить файл дампа базы вручную или указать путь в S3-хранилище.

Для примера используем S3. В панели облачного провайдера в S3-хранилище находим нужный файл и копируем путь до него.

Вставляем этот путь, но при этом удалим из пути домен и название бакета, а также все query-параметры, чтобы остался только путь до файла внутри бакета, например «/data/coolify/backups/databases/root-team-0/myproject-pg-prod-ak2qve0elfobwleejabxdtdw/pg-dump-default-1774483206.dmp».

Нажимаем «Restore Database from S3», подтверждаем, видим лог операции и затем можем снова запустить SELECT * FROM pokemons; в терминале, чтобы убедиться, чтобы таблица и данные вернулись.

❯ Метрики

В настройках базы в боковой вкладке Metrics (Метрики) можно посмотреть, какую нагрузку на процессор (CPU) дает контейнер с базой и сколько оперативной памяти (Memory, RAM) он занимает.

Просмотр метрик базы

Просмотр метрик базы

Метрики в ресурсах доступны, только если они включены в настройках сервера.

❯ Приостановка базы

Можно приостановить работу базы, и этот процесс аналогичен тому, как происходит приостановка любого ресурса в Coolify.

Сначала нужно нажать на кнопку «Stop» в верхнем правом углу.

Перед остановкой Coolify запросит два подтверждения.

В первом окне просто запрашивается подтверждение, что вы действительно хотите остановить базу.

Приостановка базы — первое подтверждение

Приостановка базы — первое подтверждение

При этом есть чекбокс «Run Docker Cleanup (remove unused images and builder cache)», который сразу выбран. Это означает, что при отключении будет запущена очистка докера, в т. ч. будут удалены неиспользуемые образы и кэш сборки. Это полезный чебокс, потому что если за докером не подчищать, то диск вашего сервера быстро замусорится.

Но после этого появляется второе окно подтверждения, уже более грозное.

Приостановка базы — второе подтверждение

Приостановка базы — второе подтверждение

Coolify тут лишний раз поясняет, что именно произойдет при остановке ресурса:

  • База будет остановлена и перестанет быть доступна.

  • Если в данный момент с базой идет работа, то какие-то данные могут быть потеряны. Т.е. например, если какие-то данные прямо сейчас записываются в базу, то они могут не сохраниться до конца.

  • Все несохраненные в постоянных хранилищах (например, томах докера) данные будут удалены.

  • Будет запущена чистка от ненужных образов и кэша.

Здесь нужно подробней остановиться на третьем пункте.

Когда вы запускаете ресурс в Coolify, то создаются и запускаются нужные докер-контейнеры, а когда вы останавливаете ресурс в Coolify, то эти контейнеры останавливаются и удаляются. При этом все данные в этих контейнерах тоже удаляются.

Однако, если нужно сохранять данные постоянно, независимо от состояния контейнеров, то для этого в технологии Docker предусмотрены Постоянные хранилища (Persistent Storage) (не стоит путать с S3-хранилищами — это разное).

Например, в Coolify при первой настройке базы создаётся постоянное хранилище, которое называется Том (Volume). И данные для базы будут храниться там отдельно от контейнера. Поэтому, когда база останавливается и контейнер удаляется, то данные остаются.

Посмотреть список постоянных хранилищ ресурса можно в боковой вкладке Persistent Storage.

Постоянные хранилища ресурса

Постоянные хранилища ресурса

Таким образом, при остановке базы не стоит переживать о данных в целом — они сохраняются. Более того, сам Coolify в своём предупреждении явно говорит: «don’t worry, no data is lost and you can start the database again» — «не беспокойтесь, данные из базы не будут потеряны и вы сможете запустить базу данных снова».

Тогда возникает вопрос, а зачем тогда такое пугающее предупреждение? Дело в том, как мы уже заметили выше, подобный процесс приостановки ресурса — универсальный для всего Coolify. И такое же предупреждение показывается при остановке любого ресурса, например приложений. И во многих других случаях, если ваш проект не настроен правильно, то при остановке вы действительно рискуете вместе с удалённым контейнером навсегда потерять важную информацию: данные, файлы и т. д. Отсюда и потребность в предупреждениях.

Но в случае, когда ресурс это готовая база данных, можно относиться к этим предупреждениям спокойно.

После подтверждения база будет приостановлена через некоторое время. Её можно будет запустить повторно по кнопке «Start».

❯ Перенос базы

В боковой вкладке «Resource Operations» доступны некоторые действия с нашей базой:

  • Clone Resource — клонировать ресурс.

  • Move Resource — переместить ресурс.

Доступные действия с базой

Доступные действия с базой

Рассмотрим, как они работают.

Clone Resource почти полностью копирует данный ресурс на другой сервер. В дальнейшем можно удалить исходный вариант, и тем самым в результате мы сделали частичный перенос ресурса.

Но тут есть важный нюанс — при клонировании ресурса не происходит копирование «Постоянных хранилищ» (Persistent Storage) ресурса. А, как мы разобрались до этого, именно в Persistent Storage хранятся данные базы.

Т. е. когда вы копируете ресурс с базой, то данные не переносятся — их нужно переносить вручную. Например, через функцию бэкапирования, как мы показали выше.

А Move Resource позволяет перенести базу в другой проект или в другое окружение внутри Coolify, но в пределах текущего сервера. В таком случае данные сохраняются и их не нужно переносить вручную.

❯ Удаление базы

Полное удаление базы доступно в боковой вкладке Danger Zone (Опасная зона). Если нажать «Delete», то будет удален ресурс целиком, в том числе данные в постоянных хранилищах (Persistent Storage). Т.е. если потом потребуется восстановить данные, то это будет возможно только из бэкапов.

❯ Заключение

Как видно, работать с базами данных в Coolify вполне просто. Создание новой базы происходит в несколько кликов: достаточно выбрать нужный тип, указать сервер и можно запускать.

Управление базой максимально приближено к управлению другими ресурсами в Coolify. В том числе можно читать логи, работать с контейнером через терминал, отслеживать метрики и переносить ресурс между серверами и проектами.

При необходимости можно разрешить внешний доступ к базе и включать SSL для полностью безопасного соединения.

Также предусмотрены удобные инструменты для автоматического создания бэкапов.

В общем — есть всё необходимое, и всё это через удобный интерфейс.

Чтобы не пропустить мои следующие статьи: https://t.me/nickneustroev_blog


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале