bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення Mealie

calendar_month Sep 05, 2026 schedule 21 хв. читання visibility 22 переглядів
Установка Mealie на VPS: организация и управление вашей коллекцией рецептов
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення Mealie на VPS: організація та керування вашою колекцією рецептів

TL;DR

У цьому докладному посібнику ми крок за кроком налаштуємо Mealie — сучасну self-hosted платформу для керування рецептами — на вашому віртуальному приватному сервері (VPS). Ви дізнаєтеся, як підготувати сервер, встановити Docker, розгорнути Mealie за допомогою Docker Compose, налаштувати безпечний доступ через HTTPS з використанням Caddy та реалізувати стратегію резервного копіювання, щоб ваша колекція рецептів завжди була під контролем.

  • Ми налаштуємо Mealie 2.x (актуальна версія на 2026 рік) на Ubuntu 24.04 LTS.
  • Використаємо Docker та Docker Compose для легкого розгортання та керування застосунком.
  • Забезпечимо безпечний доступ через HTTPS з автоматичним отриманням сертифікатів Let's Encrypt за допомогою Caddy.
  • Розробимо просту, але ефективну стратегію резервного копіювання даних Mealie.
  • Детально розглянемо мінімальні вимоги до VPS та базову підготовку сервера.
  • Надамо практичні команди та приклади конфігураційних файлів, готові до використання.

Що ми налаштовуємо і навіщо

Схема: Что мы настраиваем и зачем
Схема: Що ми налаштовуємо і навіщо

Mealie — це сучасна self-hosted платформа для керування рецептами, розроблена для тих, хто хоче організувати свою кулінарну колекцію, планувати прийоми їжі та генерувати списки покупок. Вона надає інтуїтивно зрозумілий веб-інтерфейс, можливість імпорту рецептів з різних сайтів, а також функції для спільного використання та коментування. В умовах постійно зростаючої кількості кулінарних сайтів та джерел рецептів, Mealie стає незамінним інструментом для централізованого зберігання та зручного доступу до ваших улюблених страв.

У підсумку, пройшовши цей туторіал, ви отримаєте повністю функціональний, безпечний та легко обслуговуваний екземпляр Mealie, доступний за власним доменним ім'ям з будь-якого пристрою. Це дозволить вам назавжди забути про розкидані закладки, скріншоти та нотатки з рецептами, а також спростить планування щотижневого меню та походів до магазину.

Існують різні підходи до керування рецептами. Ви можете використовувати хмарні сервіси, такі як Paprika, AnyList або BigOven, які пропонують зручність використання без необхідності налаштування сервера. Однак, вони зазвичай вимагають підписки та зберігають ваші дані на сторонніх серверах, що може викликати питання конфіденційності. Альтернативою є десктопні застосунки або навіть прості текстові файли.

Вибір на користь self-hosted рішення на VPS, такого як Mealie, обґрунтований кількома ключовими перевагами. По-перше, це повний контроль над вашими даними та їх конфіденційністю. Ви самі вирішуєте, де і як зберігаються ваші рецепти. По-друге, self-hosted рішення часто пропонують більшу гнучкість у налаштуванні та інтеграції з іншими домашніми сервісами. По-третє, це економічно вигідно в довгостроковій перспективі, оскільки ви платите лише за VPS, а не за щомісячну підписку. Нарешті, для розробників та технічних ентузіастів це чудова можливість розширити свої навички в адмініструванні серверів та розгортанні застосунків.

Який VPS-конфіг потрібен для цього завдання

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Який VPS-конфіг потрібен для цього завдання

Для встановлення Mealie на VPS вимоги до ресурсів досить скромні, особливо якщо ви плануєте використовувати його для особистих цілей або невеликої команди. Mealie може працювати з базовою конфігурацією, але для комфортної роботи та можливості масштабування рекомендується мати невеликий запас.

Мінімальні вимоги (для 1-5 користувачів):

  • CPU: 1 ядро (x86-64 архітектура). Сучасні VPS-процесори достатньо потужні для обробки запитів Mealie.
  • RAM: 1 GB. Цього буде достатньо для операційної системи, Docker-контейнерів Mealie та Caddy. Якщо плануєте використовувати PostgreSQL замість SQLite, можливо, знадобиться трохи більше.
  • Диск: 20-30 GB SSD. Mealie зберігає базу даних (за замовчуванням SQLite) та завантажені зображення. SSD значно прискорить операції введення-виведення.
  • Мережа: 100 Mbps порт з необмеженим трафіком (або достатнім обсягом для вашого використання). Mealie не є високо навантаженим сервісом, тому вимоги до пропускної здатності мережі мінімальні.
  • Операційна система: Ubuntu 24.04 LTS (або будь-який інший сучасний дистрибутив Linux).

Рекомендований VPS-план для завдання (для 5-20 користувачів або із запасом):

Для більш комфортної роботи, з урахуванням майбутніх оновлень та можливості запуску додаткових сервісів на тому ж VPS, рекомендується наступна конфігурація:

  • CPU: 2 ядра.
  • RAM: 2 GB.
  • Диск: 50 GB SSD.
  • Мережа: 1 Gbps порт, бажано з необмеженим трафіком.

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

Коли потрібен dedicated сервер, а не VPS:

Для Mealie dedicated сервер зазвичай не потрібен. Його має сенс розглядати лише у виняткових випадках:

  • Якщо ви плануєте обслуговувати сотні або тисячі користувачів (що малоймовірно для Mealie).
  • Якщо ви вже використовуєте dedicated сервер для інших високонавантажених сервісів і хочете розмістити Mealie поруч.
  • Якщо у вас є дуже специфічні вимоги до апаратного забезпечення або безпеки, які не можуть бути задоволені на VPS.

Для переважної більшості користувачів Mealie, навіть з активним використанням та великою колекцією рецептів, VPS буде більш ніж достатнім та економічно вигідним.

Локація: на що впливає

Вибір локації VPS впливає на кілька факторів:

  • Затримка (Latency): Чим ближче сервер до ваших основних користувачів, тим нижча затримка та швидша відповідь веб-інтерфейсу Mealie. Для особистого використання обирайте локацію, близьку до вас.
  • Законодавство: У деяких юрисдикціях можуть бути суворіші закони щодо зберігання даних. Переконайтеся, що обрана локація відповідає вашим вимогам до конфіденційності.
  • Вартість: Ціни на VPS можуть незначно відрізнятися залежно від регіону.
  • Доступність сервісів: Деякі провайдери пропонують різні пакети послуг у різних дата-центрах.

Для Mealie критичних вимог до локації немає, якщо тільки ви не плануєте використовувати його в дуже географічно розподіленій команді. У більшості випадків достатньо вибрати локацію, яка забезпечує найкращий пінг для вас та ваших основних користувачів.

Підготовка сервера

Схема: Подготовка сервера
Схема: Підготовка сервера

Після того як ви орендували VPS та отримали доступ, необхідно виконати базове налаштування для підвищення безпеки та зручності подальшої роботи. Ми будемо припускати, що ви використовуєте Ubuntu 24.04 LTS (Lunar Lobster), яка буде актуальною та підтримуватиметься до 2029 року.

1. Підключення до сервера по SSH

Використовуйте SSH-клієнт для підключення до вашого сервера. Замініть your_username на ім'я користувача, надане провайдером (часто root або ubuntu), та your_vps_ip на IP-адресу вашого VPS.


ssh your_username@your_vps_ip
    

2. Оновлення системи

Насамперед завжди оновлюйте пакети до актуальних версій.


sudo apt update && sudo apt upgrade -y # Обновляем список пакетов и устанавливаем доступные обновления
    

3. Створення нового користувача з правами sudo (якщо ви працюєте під root)

Працювати під обліковим записом root небезпечно. Створіть нового користувача та надайте йому права sudo.


sudo adduser newuser # Создаем нового пользователя
sudo usermod -aG sudo newuser # Добавляем пользователя в группу sudo
    

Потім вийдіть з поточної сесії root та увійдіть під новим користувачем.


exit # Выходим из root-сессии
ssh newuser@your_vps_ip # Входим под новым пользователем
    

4. Налаштування SSH-ключів (рекомендується)

Для підвищення безпеки та зручності рекомендується використовувати SSH-ключі замість паролів. Якщо у вас ще немає пари ключів, згенеруйте їх на локальній машині:


ssh-keygen -t rsa -b 4096 # Генерируем новый SSH-ключ на локальной машине
    

Потім скопіюйте публічний ключ на ваш VPS:


ssh-copy-id newuser@your_vps_ip # Копируем публичный ключ на сервер
    

Після успішного налаштування SSH-ключів, ви можете відключити автентифікацію за паролем у файлі /etc/ssh/sshd_config для підвищення безпеки. Знайдіть рядки PasswordAuthentication yes та PermitRootLogin yes і змініть їх на no.


sudo nano /etc/ssh/sshd_config # Открываем конфигурационный файл SSH-сервера
    

Змініть:


#PasswordAuthentication yes
PasswordAuthentication no
#PermitRootLogin yes
PermitRootLogin no
    

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X). Потім перезапустіть SSH-сервіс:


sudo systemctl restart sshd # Перезапускаем SSH-сервис для применения изменений
    

Важливо: Переконайтеся, що ви можете увійти за SSH-ключем, перш ніж відключати автентифікацію за паролем!

5. Налаштування брандмауера (UFW)

UFW (Uncomplicated Firewall) — це зручний інструмент для налаштування правил брандмауера. Дозвольте SSH та HTTP/HTTPS трафік.


sudo ufw allow ssh # Разрешаем SSH-трафик (порт 22)
sudo ufw allow http # Разрешаем HTTP-трафик (порт 80)
sudo ufw allow https # Разрешаем HTTPS-трафик (порт 443)
sudo ufw enable # Включаем брандмауэр
sudo ufw status # Проверяем статус брандмауэра
    

6. Встановлення Fail2Ban

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


sudo apt install fail2ban -y # Устанавливаем Fail2Ban
sudo systemctl enable fail2ban # Включаем автозапуск Fail2Ban при старте системы
sudo systemctl start fail2ban # Запускаем сервис Fail2Ban
    

Fail2Ban за замовчуванням захищає SSH. Додаткові налаштування можна виконати у файлах /etc/fail2ban/jail.conf або, краще, у /etc/fail2ban/jail.local.

Тепер ваш сервер готовий до встановлення Mealie.

Встановлення ПЗ — покроково

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

Mealie найкраще розгортати з використанням Docker та Docker Compose, що забезпечує ізоляцію застосунку, спрощує керування залежностями та полегшує оновлення. Ми будемо використовувати актуальні версії Docker Engine та Docker Compose, орієнтуючись на 2026 рік.

1. Встановлення Docker Engine

Видалимо старі версії Docker, якщо вони є:


for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do sudo apt remove $pkg; done # Видаляємо всі старі пакети Docker
    

Встановимо необхідні пакети для встановлення Docker через HTTPS:


sudo apt update # Оновлюємо список пакетів
sudo apt install ca-certificates curl gnupg -y # Встановлюємо необхідні утиліти
    

Додамо офіційний GPG-ключ Docker:


sudo install -m 0755 -d /etc/apt/keyrings # Створюємо директорію для GPG-ключів
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Завантажуємо та зберігаємо GPG-ключ Docker
sudo chmod a+r /etc/apt/keyrings/docker.gpg # Встановлюємо права доступу до ключа
    

Додамо репозиторій Docker до APT-джерел:


echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Додаємо репозиторій Docker
    

Встановимо Docker Engine (версія 25.x або новіша, актуальна на 2026 рік):


sudo apt update # Оновлюємо список пакетів з урахуванням нового репозиторію
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y # Встановлюємо Docker Engine та плагіни
    

Додамо вашого користувача до групи docker, щоб не використовувати sudo для кожної команди Docker:


sudo usermod -aG docker $USER # Додаємо поточного користувача до групи docker
newgrp docker # Застосовуємо зміни для поточної сесії (або перепідключіться по SSH)
    

Перевіримо встановлення Docker:


docker run hello-world # Запускаємо тестовий контейнер для перевірки встановлення Docker
    

Якщо ви бачите повідомлення "Hello from Docker!", значить Docker успішно встановлено.

2. Підготовка директорії для Mealie

Створимо директорію, де зберігатимуться конфігураційні файли Mealie та Docker Compose:


mkdir -p ~/mealie # Створюємо директорію для Mealie в домашній папці користувача
cd ~/mealie # Переходимо до створеної директорії
    

3. Завантаження конфігурації Docker Compose для Mealie

Mealie надає офіційні файли Docker Compose. Ми завантажимо їх безпосередньо.

На 2026 рік Mealie активно розвивається, і ми будемо використовувати актуальну версію 2.x, яка пропонує покращену архітектуру та функції. Якщо ви бажаєте використовувати старішу версію, зверніться до документації Mealie.


curl -o docker-compose.yml https://raw.githubusercontent.com/mealie-recipes/mealie/v2.0/docker-compose.yml # Завантажуємо актуальний docker-compose.yml для Mealie 2.x
curl -o .env-example https://raw.githubusercontent.com/mealie-recipes/mealie/v2.0/.env-example # Завантажуємо приклад файлу .env
cp .env-example .env # Копіюємо приклад в актуальний файл .env
    

4. Налаштування файлу .env

Файл .env містить змінні оточення для Mealie та Docker Compose. Відкрийте його для редагування:


nano .env # Відкриваємо файл .env для редагування
    

Вам необхідно налаштувати наступні параметри:

  • TZ: Встановіть ваш часовий пояс, наприклад, Europe/Moscow.
  • PUID та PGID: ID користувача та групи, від яких працюватимуть контейнери. Це забезпечує правильні права доступу до файлів. Ви можете отримати їх за допомогою команди id $USER.
  • APP_HOST: Встановіть IP-адресу вашого сервера або доменне ім'я, якщо ви вже налаштували DNS.
  • DB_TYPE: За замовчуванням використовується sqlite, що підходить для більшості невеликих установок. Якщо вам потрібна потужніша база даних (наприклад, PostgreSQL), змініть цей параметр і налаштуйте відповідний сервіс у docker-compose.yml. Для простоти ми залишимо sqlite.
  • SECRET_KEY: Згенеруйте довгий, випадковий ключ. Наприклад, можна використовувати openssl rand -hex 32.
  • MEDIA_LOCATION: Директорія для зберігання медіафайлів. За замовчуванням /app/data/media, але можна змінити на щось на зразок /var/lib/mealie/media, якщо ви хочете винести дані за межі контейнера. У цьому випадку ми будемо використовувати монтування томів Docker, тому шлях всередині контейнера залишиться за замовчуванням.

Приклад частини файлу .env після редагування:


TZ=Europe/Moscow
PUID=1000 # Замініть на ваш PUID
PGID=1000 # Замініть на ваш PGID
APP_HOST=your.domain.com # Замініть на ваш домен або IP
PORT=9000
DB_TYPE=sqlite
SECRET_KEY=ВАШ_ВИПАДКОВИЙ_СЕКРЕТНИЙ_КЛЮЧ_ДОВЖИНОЮ_64_СИМВОЛИ
MEDIA_LOCATION=/app/data/media
    

Згенерувати SECRET_KEY можна прямо на сервері:


openssl rand -hex 32 # Генерує 64-символьний шістнадцятковий ключ
    

Скопіюйте отриманий ключ і вставте його у файл .env.

5. Запуск Mealie з Docker Compose

Після налаштування файлу .env, ви можете запустити Mealie:


docker compose up -d # Запускаємо контейнери Mealie у фоновому режимі
    

Це завантажить необхідні Docker-образи та запустить Mealie. Процес може зайняти кілька хвилин під час першого запуску.

6. Перевірка статусу контейнерів

Переконайтеся, що всі контейнери запущені та працюють:


docker compose ps # Перевіряємо статус запущених контейнерів
    

Ви повинні побачити контейнери Mealie у статусі "running".

Тепер Mealie запущено та доступний на порту 9000 вашого VPS (http://your_vps_ip:9000). Однак, поки що він доступний лише за HTTP і не має гарного доменного імені. У наступному розділі ми налаштуємо HTTPS та домен.

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Після успішного запуску Mealie за допомогою Docker Compose, наступним кроком буде налаштування безпечного доступу через HTTPS з використанням вашого доменного імені. Ми будемо використовувати Caddy — сучасний веб-сервер, який автоматично отримує та оновлює SSL/TLS-сертифікати від Let's Encrypt.

1. Налаштування DNS

Перш ніж налаштовувати Caddy, переконайтеся, що ваш домен або піддомен (наприклад, recipes.yourdomain.com) вказує на IP-адресу вашого VPS. Для цього створіть або змініть A-запис у налаштуваннях DNS вашого доменного реєстратора:

Тип записуІм'яЗначенняTTL
Arecipes (або @ якщо Mealie буде на основному домені)YOUR_VPS_IP_ADDRESSAutomatic / 3600

Зачекайте деякий час, доки зміни DNS набудуть чинності (це може зайняти від кількох хвилин до кількох годин).

2. Встановлення Caddy

Ми запустимо Caddy як окремий Docker-контейнер, щоб він міг служити зворотним проксі для Mealie.

Створіть директорію для конфігурації Caddy:


mkdir -p ~/caddy/data ~/caddy/config # Створюємо директорії для даних та конфігурації Caddy
    

Створіть файл Caddyfile у директорії ~/caddy:


nano ~/caddy/Caddyfile # Відкриваємо файл Caddyfile для редагування
    

Вставте наступну конфігурацію, замінивши recipes.yourdomain.com на ваш домен:


recipes.yourdomain.com {
    # Вмикаємо стиснення gzip для прискорення завантаження
    encode gzip

    # Встановлюємо заголовки безпеки
    header {
        Strict-Transport-Security max-age=31536000;
        X-Frame-Options DENY
        X-Content-Type-Options nosniff
        X-XSS-Protection "1; mode=block"
        Referrer-Policy strict-origin-when-cross-origin
    }

    # Проксіюємо всі запити до Mealie Docker-контейнера
    reverse_proxy mealie:9000 {
        # Додаємо заголовки для правильної роботи WebSocket та HTTP/2
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Вмикаємо логування (опціонально)
    log {
        output file /var/log/caddy/access.log
    }
}
    

Збережіть файл (Ctrl+O, Enter) та вийдіть (Ctrl+X).

3. Додавання Caddy до Docker Compose

Тепер відредагуємо файл docker-compose.yml, щоб додати сервіс Caddy. Відкрийте його:


nano ~/mealie/docker-compose.yml # Відкриваємо docker-compose.yml
    

Додайте наступний блок caddy в кінець файлу, на тому ж рівні відступу, що й mealie:


  caddy:
    image: caddy:2.7.6-alpine # Актуальна версія Caddy на 2026 рік
    restart: unless-stopped
    ports:
      - "80:80" # HTTP для Let's Encrypt
      - "443:443" # HTTPS
    volumes:
      - ~/caddy/Caddyfile:/etc/caddy/Caddyfile # Монтуємо наш Caddyfile
      - ~/caddy/data:/data # Для сертифікатів Let's Encrypt
      - ~/caddy/config:/config # Для конфігурації Caddy
      - ~/caddy/logs:/var/log/caddy # Для логів Caddy
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
    networks:
      - default # Підключаємо до тієї ж мережі, що й Mealie
    depends_on:
      - mealie # Caddy повинен запускатися після Mealie
    

Переконайтеся, що mealie та caddy знаходяться в одній Docker-мережі (за замовчуванням це мережа, створена Docker Compose, названа за іменем директорії, наприклад, mealie_default). У цьому випадку, networks: - default достатньо.

Збережіть зміни у docker-compose.yml.

4. Запуск Caddy та оновлення Mealie

Перезапустіть Docker Compose, щоб Caddy запустився і Mealie перепідключився до нової конфігурації:


cd ~/mealie # Переконайтеся, що ви знаходитесь в директорії з docker-compose.yml
docker compose down # Зупиняємо всі поточні контейнери
docker compose up -d # Запускаємо всі контейнери (Mealie та Caddy)
    

Caddy автоматично запитає та встановить SSL/TLS-сертифікат для вашого домену. Це може зайняти кілька секунд.

5. Перевірка працездатності

Відкрийте ваш домен (наприклад, https://recipes.yourdomain.com) у веб-браузері. Ви повинні побачити сторінку входу Mealie з активним HTTPS-з'єднанням.

Ви також можете перевірити доступність за допомогою curl:


curl -v https://recipes.yourdomain.com # Перевіряємо доступність та сертифікат
    

У виводі ви повинні побачити інформацію про сертифікат Let's Encrypt та код відповіді HTTP 200 OK.

Перший вхід до Mealie: Під час першого входу Mealie запропонує створити обліковий запис адміністратора. Заповніть форму, і ви отримаєте доступ до панелі керування.

Резервні копії та обслуговування

Схема: Резервні копії та обслуговування
Схема: Резервні копії та обслуговування

Регулярне резервне копіювання та своєчасне обслуговування є критично важливими для будь-якої self-hosted служби. Це гарантує збереження ваших даних та стабільну роботу Mealie.

1. Що резервувати

Для Mealie основними компонентами, які необхідно резервувати, є:

  • База даних: Якщо ви використовуєте SQLite (за замовчуванням), це файл mealie.db. Якщо PostgreSQL, то це дамп бази даних. Цей файл або дамп містить усі ваші рецепти, категорії, користувачів та іншу структуровану інформацію.
  • Медіафайли: Завантажені зображення, такі як фотографії страв, зберігаються в окремій директорії. Переконайтеся, що ви резервуєте цю директорію цілком.
  • Конфігураційні файли: Файл .env та docker-compose.yml. Вони містять важливі налаштування та секрети, необхідні для відновлення сервісу.
  • Конфігурація Caddy: Файл Caddyfile та директорії data/config (для сертифікатів Let's Encrypt).

2. Простий скрипт авторезервування

Ми створимо простий скрипт, який виконуватиме резервне копіювання бази даних SQLite та медіафайлів, а також конфігураційних файлів. Потім ми налаштуємо його запуск через cron.

Створіть директорію для резервних копій на VPS:


mkdir -p ~/backups/mealie # Створюємо директорію для резервних копій Mealie
    

Створіть файл скрипта backup_mealie.sh:


nano ~/backup_mealie.sh # Створюємо скрипт резервного копіювання
    

Вставте наступний вміст:


#!/bin/bash

# Пути к директориям
MEALIE_DIR="/home/$USER/mealie"
CADDY_DIR="/home/$USER/caddy"
BACKUP_DIR="/home/$USER/backups/mealie"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/mealie_backup_$TIMESTAMP.tar.gz"

echo "Запуск резервного копіювання Mealie о $TIMESTAMP..."

# 1. Зупиняємо Mealie для забезпечення цілісності БД (якщо використовується SQLite)
# Для Mealie 2.x зі SQLite, зазвичай можна обійтися без зупинки, але для гарантії можна зупинити.
# Якщо ви використовуєте PostgreSQL, краще зробити дамп через pg_dump, не зупиняючи Mealie.
# docker compose -f $MEALIE_DIR/docker-compose.yml stop mealie # Опціонально: зупиняємо сервіс mealie

# 2. Копіюємо файл бази даних SQLite
# Шлях до файлу mealie.db всередині контейнера, якщо він не винесений в окремий том
# Якщо mealie.db знаходиться в томі, який монтується, то він буде доступний на хості.
# У нашому docker-compose.yml Mealie 2.x використовує Named Volume 'mealie_data'.
# Щоб отримати шлях до файлу на хості, потрібно знайти шлях до цього тому.
# Найпростіше зробити дамп з контейнера або скопіювати файл, якщо том доступний.

# Получаем путь к тому mealie_data на хосте
MEALIE_VOLUME_PATH=$(docker volume inspect mealie_mealie_data --format '{{ .Mountpoint }}')

if [ -z "$MEALIE_VOLUME_PATH" ]; then
    echo "Error: Could not find mealie_data volume mountpoint. Exiting."
    exit 1
fi

echo "Резервне копіювання даних Mealie з $MEALIE_VOLUME_PATH..."

# Створюємо тимчасову директорію для збору файлів
TEMP_BACKUP_DIR=$(mktemp -d)

# Копіюємо базу даних (якщо SQLite)
cp "$MEALIE_VOLUME_PATH/mealie.db" "$TEMP_BACKUP_DIR/mealie.db"
echo "Скопійовано mealie.db"

# Копіюємо медіафайли
cp -R "$MEALIE_VOLUME_PATH/media" "$TEMP_BACKUP_DIR/media"
echo "Скопійовано медіафайли"

# Копіюємо конфігураційні файли Mealie
cp "$MEALIE_DIR/.env" "$TEMP_BACKUP_DIR/mealie_env"
cp "$MEALIE_DIR/docker-compose.yml" "$TEMP_BACKUP_DIR/mealie_docker-compose.yml"
echo "Скопійовано конфігураційні файли Mealie"

# Копіюємо конфігураційні файли Caddy
cp "$CADDY_DIR/Caddyfile" "$TEMP_BACKUP_DIR/caddy_Caddyfile"
# Дані та конфігурації Caddy (сертифікати)
cp -R "$CADDY_DIR/data" "$TEMP_BACKUP_DIR/caddy_data"
cp -R "$CADDY_DIR/config" "$TEMP_BACKUP_DIR/caddy_config"
echo "Скопійовано конфігурацію та дані Caddy"

# 3. Архівуємо все в один файл
tar -czf "$BACKUP_FILE" -C "$TEMP_BACKUP_DIR" . # Архівуємо вміст тимчасової директорії
echo "Створено архів резервної копії: $BACKUP_FILE"

# 4. Видаляємо тимчасову директорію
rm -rf "$TEMP_BACKUP_DIR"
echo "Тимчасову директорію очищено."

# 5. Запускаємо Mealie знову (якщо зупиняли)
# docker compose -f $MEALIE_DIR/docker-compose.yml start mealie # Опціонально: запускаємо сервіс mealie

# 6. Видаляємо старі резервні копії (наприклад, старші 7 днів)
find "$BACKUP_DIR" -type f -name 'mealie_backup_.tar.gz' -mtime +7 -delete # Видаляємо резервні копії старші 7 днів
echo "Старі резервні копії видалено."

echo "Резервне копіювання Mealie завершено."
    

Зробіть скрипт виконуваним:


chmod +x ~/backup_mealie.sh # Робимо скрипт виконуваним
    

3. Куди зберігати резервні копії

Зберігати резервні копії на тому ж сервері, що й основний сервіс, небезпечно. У разі виходу з ладу VPS, ви втратите і дані, і резервні копії. Рекомендується використовувати одне з наступних рішень:

  • Зовнішнє S3-сумісне сховище: Наприклад, Amazon S3, DigitalOcean Spaces, Backblaze B2. Для цього можна використовувати утиліти на кшталт rclone або s3cmd у вашому скрипті.
  • Окремий VPS: Ви можете налаштувати другий, дешевший VPS і синхронізувати резервні копії туди за допомогою rsync по SSH.
  • Локальне сховище: Якщо у вас є NAS або інший сервер вдома, можна налаштувати rsync для копіювання резервних копій туди.

Наприклад, якщо ви хочете копіювати резервні копії на інший сервер по SSH, додайте до скрипта після створення архіву:


# Копіювання резервної копії на віддалений сервер
REMOTE_USER="backupuser"
REMOTE_HOST="your_backup_vps_ip"
REMOTE_PATH="/path/to/remote/mealie_backups"

rsync -avz "$BACKUP_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" # Копіюємо архів на віддалений сервер
echo "Резервну копію скопійовано на віддалений сервер."
    

Не забудьте налаштувати SSH-ключі для безпарольного доступу до віддаленого сервера.

4. Налаштування Cron для автоматичного запуску резервного копіювання

Відкрийте таблицю Cron для поточного користувача:


crontab -e # Відкриваємо crontab для поточного користувача
    

Додайте наступний рядок, щоб скрипт запускався щодня о 03:00 ночі:


0 3    /home/$USER/backup_mealie.sh > /dev/null 2>&1 # Запускати скрипт резервного копіювання щодня о 03:00
    

Збережіть та вийдіть. Тепер резервні копії створюватимуться автоматично.

5. Оновлення: rolling vs maintenance window

  • Оновлення Mealie: Оскільки Mealie розгорнуто через Docker Compose, оновлення дуже прості. Вам потрібно лише отримати нові образи та перезапустити контейнери.
    
    cd ~/mealie
    docker compose pull # Завантажуємо нові версії образів
    docker compose up -d # Перестворюємо контейнери з новими образами
                
    Рекомендується виконувати ці оновлення у "maintenance window" (вікно обслуговування), коли активність користувачів мінімальна, оскільки сервіс буде короткочасно недоступний. Перевіряйте офіційний репозиторій Mealie на предмет критичних змін або процедур міграції перед оновленням.
  • Оновлення системи: Регулярно оновлюйте операційну систему та встановлені пакети:
    
    sudo apt update && sudo apt upgrade -y # Оновлюємо системні пакети
                
    Це можна робити раз на тиждень або раз на місяць. Після великих оновлень ядра або системних бібліотек може знадобитися перезавантаження сервера (sudo reboot). Плануйте ці перезавантаження також у вікно обслуговування.
  • Оновлення Docker: Оновлення Docker Engine також здійснюється через apt upgrade. Після оновлення Docker Engine рекомендується перезапустити всі контейнери.

Підтримуйте журнал змін та версій для всіх компонентів, це допоможе при пошуку та усуненні неполадок.

Вирішення проблем + FAQ

Mealie не запускається, контейнери постійно перезавантажуються. Що робити?

Це часта проблема. Спочатку перевірте логи контейнера Mealie. Перейдіть до директорії, де знаходиться docker-compose.yml (~/mealie), і виконайте: docker compose logs mealie. Шукайте помилки, такі як проблеми з базою даних, відсутні змінні оточення, помилки файлової системи або невірні права доступу. Переконайтеся, що файл .env коректно налаштований, особливо SECRET_KEY та PUID/PGID.

Не можу отримати доступ до Mealie по HTTPS через домен.

Перевірте кілька речей: 1) Чи правильно налаштований A-запис у DNS для вашого домену і чи вказує він на IP вашого VPS? Використовуйте dig your.domain.com або онлайн-інструменти. 2) Чи працює Caddy? Перевірте логи Caddy: docker compose logs caddy. Шукайте помилки при отриманні сертифіката Let's Encrypt (наприклад, "certificate acquisition failed"). Переконайтеся, що порти 80 і 443 відкриті в UFW (sudo ufw status). Можливо, Caddy не може зв'язатися з Mealie, перевірте ім'я сервісу в Caddyfile (має бути mealie:9000).

Який VPS-конфіг мінімально підійде для Mealie?

Для Mealie, що використовується однією людиною або невеликою родиною, мінімально достатньо VPS з 1 ядром CPU, 1 GB RAM та 20-30 GB SSD. Цього вистачить для операційної системи, Docker та самого Mealie зі SQLite. Однак, для більш комфортної роботи та запасу на майбутнє, рекомендується 2 ядра CPU, 2 GB RAM та 50 GB SSD.

Що вибрати — VPS чи dedicated сервер для цього завдання?

Для Mealie практично завжди достатньо VPS. Dedicated сервери надлишкові за потужністю та вартістю для такого застосунку, якщо тільки ви не плануєте обслуговувати дуже велику кількість користувачів (сотні або тисячі, що нетипово для Mealie) або якщо у вас вже є dedicated сервер для інших високонавантажених завдань і ви хочете розмістити Mealie на ньому. VPS пропонує кращу гнучкість та економічність для більшості випадків.

Як оновити Mealie до нової версії?

Для оновлення Mealie, запущеного через Docker Compose, перейдіть до директорії ~/mealie. Потім виконайте docker compose pull, щоб завантажити нові образи. Після цього запустіть docker compose up -d, щоб перестворити контейнери з новими образами. Перед оновленням завжди рекомендується переглянути офіційну документацію Mealie на GitHub, оскільки можуть бути критичні зміни або кроки міграції між мажорними версіями.

Я забув пароль адміністратора Mealie. Як його скинути?

У Mealie 2.x ви можете скинути пароль адміністратора, використовуючи утиліту командного рядка всередині контейнера. Спочатку знайдіть ім'я або ID запущеного контейнера Mealie: docker ps | grep mealie. Потім виконайте команду скидання пароля, замінивши mealie-container-name на ім'я вашого контейнера та new_password на бажаний новий пароль:


docker exec -it mealie-container-name python src/app/main.py users reset-password admin --new-password new_password
    

Переконайтеся, що ви використовуєте правильне ім'я контейнера та ім'я користувача (admin за замовчуванням).

Як змінити порт, на якому працює Mealie всередині Docker?

За замовчуванням Mealie слухає порт 9000. Якщо вам потрібно змінити цей порт, ви можете відредагувати файл docker-compose.yml. Знайдіть сервіс mealie та змініть порт, який він слухає, у секції ports або у змінній оточення PORT у файлі .env. Якщо ви зміните внутрішній порт Mealie, вам також потрібно буде оновити конфігурацію Caddy (reverse_proxy mealie:НОВИЙ_ПОРТ), щоб він вказував на новий порт.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

Вітаємо! Ви успішно встановили та налаштували Mealie на вашому VPS, забезпечивши безпечний доступ через HTTPS та реалізувавши стратегію резервного копіювання. Тепер у вас є потужний та гнучкий інструмент для керування вашою колекцією рецептів, повністю під вашим контролем. Це не тільки впорядкує ваші кулінарні нотатки, а й дасть цінний досвід в адмініструванні серверів та розгортанні застосунків з використанням Docker.

В якості наступних кроків ви можете розглянути:

  • Налаштування моніторингу: Інтегруйте ваш VPS із системами моніторингу, такими як Prometheus + Grafana, для відстеження використання ресурсів та продуктивності Mealie.
  • Оптимізація продуктивності: Якщо ваша колекція рецептів значно зросте, розгляньте можливість міграції на PostgreSQL для бази даних, що може покращити продуктивність порівняно зі SQLite.
  • Інтеграція з іншими сервісами: Вивчіть можливості інтеграції Mealie з іншими домашніми сервісами, такими як планувальники завдань або розумні асистенти, для автоматизації кулінарних процесів.
  • Посилення безпеки: Додайте двофакторну автентифікацію для доступу до Mealie, якщо це доступно в майбутніх версіях, або розгляньте налаштування VPN для доступу до VPS.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

Telegram VKVK WhatsApp Facebook LinkedIn XX

Встановлення Mealie на VPS: організація та керування вашою колекцією рецептів
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.