Установка TastyIgniter на Raspberry Pi

Индустрия ресторанного бизнеса жестока, особенно для небольших заведений. Помимо приготовления и подачи пищи, управления персоналом и проверки санитарных требований, нужно ещё конкурировать с площадками, у которых есть удобный онлайн-заказ и резервирование столиков.
TastyIgniter — это простое в использовании, «всё в одном», само-хостящееся серверное приложение для ресторанов. Оно позволяет показать меню, принимать платежи, бронировать столики и управлять заказами и персоналом. В этом материале подробно описано, как развернуть TastyIgniter на Raspberry Pi и подготовить сайт к боевой эксплуатации.
Перед началом
Короткий список необходимого перед началом:
- Raspberry Pi с поддерживаемой ОС (Raspbian / Raspberry Pi OS) и доступом в сеть.
- Доменное имя (по желанию) и публичный IP для публикации сайта.
- Минимум 4 ГБ свободного места на SD/SSD и корректные права доступа.
- Резервная копия важных данных на случай ошибки.
Важная заметка: это руководство ориентировано на небольшие заведения и самоуправляемые инсталляции. Для высоконагруженных сайтов рассматривайте арендованный VPS или облачный хостинг.
Основные понятия
- TastyIgniter — приложение для управления меню, заказами и бронированиями.
- Apache — веб-сервер, который обслуживает PHP-приложения.
- PHP 8+ — среда выполнения скриптов, требуется для TastyIgniter.
- MariaDB — реляционная база данных, совместимая с MySQL.
Установка PHP, Apache и зависимостей
TastyIgniter требует PHP версии 8 или выше. На Raspberry Pi мы установим PHP 8.2 из репозитория. Сначала добавим открытый ключ и репозиторий PHP:
sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.listОбновите индекс пакетов и установите PHP 8.2 как модуль Apache:
sudo apt update
sudo apt install php8.2 libapache2-mod-php8.2Интегрируйте PHP с MariaDB и добавьте расширения, которые потребуются для TastyIgniter:
sudo apt install php8.2-mysql php8.2-curl php8.2-openssl php8.2-dom php8.2-gd php8.2-zipВключите модуль перезаписи URL в Apache:
sudo a2enmod rewriteПо умолчанию Apache игнорирует файлы .htaccess. Отредактируйте глобальную конфигурацию Apache, чтобы разрешить переопределение настроек:
sudo nano /etc/apache2/apache2.confНайдите секцию, начинающуюся с:
И измените AllowOverride None на AllowOverride All.
Сохраните изменения (Ctrl + O), выйдите (Ctrl + X), затем перезапустите Apache:
sudo service apache2 restartПримечание: альтернативный и часто более производительный путь — Nginx + PHP-FPM. Если вы предпочитаете Nginx, используйте PHP-FPM и настройте сокет или порт для связи между Nginx и PHP.
Установка Composer и загрузка TastyIgniter
Composer понадобится для установки зависимостей:
wget -O composer-setup.php https://getcomposer.org/installer && sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composerСкачайте мастер установки TastyIgniter:
wget https://github.com/tastyigniter/setup/archive/master.zipРаспакуйте архив:
unzip master.zipПереместите содержимое архива в директорию Apache:
sudo mv setup-master/* /var/www/html/Передайте права на файлы пользователю Apache (www-data):
sudo chown -R www-data:www-data /var/www/html/Настройка базы данных (MariaDB)
TastyIgniter требует базу данных. Установите и запустите MariaDB (если не установлен):
sudo apt install mariadb-serverЗапустите безопасную настройку MariaDB:
sudo mysql_secure_installationЗатем войдите в MariaDB:
sudo mariadbСоздайте новую базу и пользователя. После каждой строки нажимайте Enter:
CREATE DATABASE tastyigniter;
CREATE USER tastyigniter IDENTIFIED BY 'topsecretpassword';
GRANT USAGE ON *.* TO tastyigniter@localhost IDENTIFIED BY 'topsecretpassword';
GRANT ALL privileges ON tastyigniter.* TO tastyigniter@localhost;
FLUSH PRIVILEGES;
quit;Совет по безопасности: замените ‘topsecretpassword’ на долгую случайную фразу и храните её в менеджере паролей.
Запуск мастера установки через веб-интерфейс
Откройте браузер и перейдите по адресу your-pi-local-ip-address/setup.php. Нажмите кнопку Установить TastyIgniter и примите лицензию MIT.
Мастер проверит системные требования. Перейдите к настройкам базы данных. Хост, порт и префикс таблиц обычно предзаполнены. Введите имя базы данных и имя пользователя tastyigniter и пароль, который вы задали в MariaDB.
Далее задайте базовые параметры ресторана и учётную запись администратора: имя, логин администратора, название ресторана и email. Система предложит ввести ключ Site Carte Key для доступа к маркетплейсу плагинов TastyIgniter. Режим “single location” подходит для одного заведения. Параметр “install demo data” заполнит сайт тестовыми записями — полезно для обучения.
Когда установка завершится, войдите в админку по адресу your-pi-ip-address/admin/login.
Базовая конфигурация в админ-панели
Панель управления в TastyIgniter интуитивна. Категории находятся в левой части интерфейса.
Рекомендуемые бесплатные расширения: cart, coupons, frontend, local, pages, payregister, reservation, user. Установите их через System > Extensions.
Добавьте локации ваших заведений в раздел Locations, задайте часы работы и зону доставки. Для отображения карты и радиуса доставки вам понадобится ключ Google Maps API. На бесплатном тарифе Google даёт примерно 28 500 загрузок карт в месяц — для небольшого заведения этого обычно хватает. Добавьте ключ в System > Settings > General.
В разделе Restaurant задайте меню, цены, столы и вместимость, категории и временные настройки приёмов пищи.
В System > Settings > Sales настройте логику приёма заказов и бронирований. Можно разрешить заказы без учётной записи, ограничить зону доставки и выбрать автоматическое либо ручное подтверждение заказов.
Заказы и бронирования отображаются в соответствующем разделе Sales. Рекомендуется держать эти страницы открытыми в отдельных вкладках. Отсюда вы сможете назначать задачи персоналу и менять статусы заказов.
В разделе Payments включите способы приёма платежей: cash, PayPal, Stripe, Mollie, Square и другие. Получите API-ключи у провайдеров и добавьте их в соответствующие поля — новые способы оплаты появятся в меню доставки.
Создайте учётные записи для персонала в System > Staff, распределите по группам и ролям и настройте доступ. После этого вы сможете отправлять заказы конкретным группам или сотрудникам — это упрощает работу и разгружает администрацию.
TastyIgniter формирует счета, отчёты по продажам и базовые аналитические данные. Для полного перечня возможностей смотрите официальную документацию и маркетплейс расширений.
Публикация сайта и настройка домена
Когда вы уверены, что сайт готов, зарегистрируйте домен и в панели регистратора создайте A-запись с хостом @ и значением вашего публичного IP. Установите минимальный TTL.
На Raspberry Pi удалите файл setup.php, чтобы заблокировать повторный запуск мастера установки:
sudo rm /var/www/html/setup.phpСоздайте новый конфигурационный файл Apache для вашего домена:
cd /etc/apache2/sites-available/
sudo nano domain.confВставьте в файл:
ServerName your-domain-name.tld
DocumentRoot /var/www/html/
Сохраните и включите сайт:
sudo a2ensite domain.conf
sudo service apache2 restart
sudo certbotCertbot предложит выбрать сайт и установить перенаправление на HTTPS. Выберите redirect. После этого все соединения будут автоматически обновляться на SSL.
Тестовые заказы и приёмка
Проведите тестирование как со стороны клиента, так и со стороны администратора. Попросите знакомых сделать несколько заказов и проверьте их появление в админке. Тестируйте разные сценарии: оплата онлайн, оплата наличными, бронирование столиков, отмена заказов.
Мы использовали систему в рамках одной семейной вечеринки и подтверждаем, что базовые функции работают стабильно при небольших нагрузках.
Рекомендации по безопасности и жёсткие настройки
Важно защитить сайт и данные клиентов. Основные шаги:
- Отключите прямой доступ к конфигурационным файлам. Установите права 750 для каталогов и 640 для файлов конфигурации.
- Запретите исполнение PHP в директориях загрузок (uploads), если это применимо.
- Настройте брандмауэр ufw:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable- Установите fail2ban и включите фильтры для SSH и веб-форм.
- Регулярно обновляйте систему и пакеты: sudo apt update && sudo apt upgrade.
- Держите резервные копии базы данных и файлов сайта за пределами Raspberry Pi.
- Ограничьте доступ к админке по IP, если возможно, или включите двухфакторную аутентификацию через плагин.
Важно: минимизируйте привилегии системных пользователей и используйте сильные пароли.
Резервное копирование и восстановление
Регулярное резервное копирование — ключ к быстрому восстановлению. Минимальная стратегия:
- Ежедневный дамп базы данных:
mysqldump -u tastyigniter -p'topsecretpassword' tastyigniter > /var/backups/tastyigniter-$(date +%F).sql- Ежедневная синхронизация файлов сайта на удалённый сервер или в облако (rsync, rclone).
- Тестируйте процесс восстановления не реже одного раза в квартал.
Пример cron для ежедневного дампа в 03:00:
0 3 * * * /usr/bin/mysqldump -u tastyigniter -p'topsecretpassword' tastyigniter > /var/backups/tastyigniter-$(date +\%F).sqlЗамените пароль на безопасное хранение, например, конфигурационный файл с ограниченными правами или переменную окружения.
Советы по производительности
- Для небольшого трафика mod_php и Apache подойдут. Для лучшей масштабируемости переходите на Nginx + PHP-FPM.
- Включите кеширование на стороне сервера и плагинов, где это возможно.
- Следите за использованием памяти и диска: Raspberry Pi с SD-картой может деградировать при большом числе операций записи. Рассмотрите использование внешнего SSD.
Конфиденциальность и соответствие (GDPR и локальные правила)
Если вы храните данные клиентов (имена, телефон, email, адреса доставки), учтите следующее:
- Информируйте клиентов о том, какие данные вы собираете, как долго их храните и с какой целью — добавьте страницу Privacy Policy.
- Получайте явное согласие на маркетинговые рассылки.
- Обеспечьте запрос на удаление данных по требованию клиента.
- Передавайте платежные данные только через сертифицированных платёжных провайдеров — не храните номер карты на сервере без соответствующего PCI DSS соответствия.
Это не юридическая консультация — при сомнениях проконсультируйтесь с юристом.
Как решать распространённые ошибки
- 403 Forbidden после переноса файлов: проверьте права и владельца (www-data). Убедитесь, что Apache имеет доступ.
- Ошибка подключения к базе: проверьте host (localhost), пароль, наличие пользователя и GRANT’ы.
- Отсутствие модулей PHP: проверьте расширения (php -m) и установите недостающие через apt.
- Ошибки композитора (memory limit): запустите composer с увеличенным лимитом памяти: php -d memory_limit=-1 /usr/local/bin/composer install.
- .htaccess игнорируется: проверьте AllowOverride All и перезапустите Apache.
Альтернативные подходы
- Хостинг на VPS или облаке вместо Raspberry Pi для лучшей доступности и SLA.
- Использование Docker-контейнеров для изоляции сервиса и упрощения миграции.
- Nginx + PHP-FPM для лучшей производительности под нагрузкой.
Мини-методология развёртывания
- Подготовка среды (Аппарат, ОС, сеть).
- Установка зависимости (Apache/Nginx, PHP, MariaDB).
- Установка приложения и заполнение базы.
- Тестирование функционала (платежи, заказы, брони).
- Жёсткая настройка безопасности и SSL.
- Резервное копирование и мониторинг.
Критерии приёмки
- Админка доступна по HTTPS и защищена.
- Заказ может быть оформлен клиентом и отображается в админке.
- Платежи проходят в тестовом режиме у выбранного провайдера.
- Резервное копирование базы и файлов настроено и протестировано.
- Права доступа персонала разграничены и проверены.
Чеклист ролей
Владелец:
- Проверил домен и SSL.
- Настроил политики резервного копирования.
- Убедился в наличии политики конфиденциальности.
Менеджер:
- Настроил меню и цены.
- Проверил часы работы и зоны доставки.
- Утвердил процессы обработки заказов.
Администратор IT:
- Настроил брандмауэр и fail2ban.
- Обновляет систему и следит за логами.
- Резервирует данные и тестирует восстановление.
Повар/Front-of-house:
- Тренируется в интерфейсе приёма заказов.
- Проверяет статусы заказов и уведомления.
Когда это не подходит (контрпример)
- Если у вас сеть из нескольких высоконагруженных заведений с большим количеством параллельных заказов — Raspberry Pi может не выдержать пиков без наружной балансировки или перехода в облако.
- Если требуется соответствие PCI DSS для хранения карт — используйте сертифицированные решения платёжных провайдеров.
Перенос с другого хостинга на Pi
- Экспортируйте дамп базы и файлы сайта.
- Проверьте версии PHP и расширений на совпадение.
- Восстановите дамп через mysql и перенесите файлы в /var/www/html.
- Проверьте права и выполнение .htaccess.
Маленькая галерея крайних случаев
- Проблемы со скоростью при использовании SD-карт — используйте SSD.
- Прерывистые подключения к интернету — настройте резервный канал или уведомления о простоях.
Короткая проверка после развёртывания
- Войти в админку.
- Создать тестовый товар и оформить заказ.
- Проверить назначение заказа сотруднику.
- Просмотреть лог HTTPS и убедиться в отсутствии критических ошибок.
Заключение
TastyIgniter на Raspberry Pi — практичное решение для небольших кафе и ресторанов, которые хотят контролировать данные и избегать подписок SaaS. При правильной настройке, резервном копировании и мерах безопасности такой сайт будет надёжно работать в малых масштабах. Для роста и высокой нагрузки рассмотрите переход на облачные решения или более мощный хостинг.
FAQ
Вопрос: Подойдёт ли Raspberry Pi для боевой эксплуатации ресторана?
Ответ: Для небольших заведений и тестовой эксплуатации — да. Для крупной сети или высокой нагрузки лучше использовать VPS/облако.
Вопрос: Как часто нужно делать резервные копии?
Ответ: Ежедневно для базы данных и минимум раз в сутки для файлов сайта; чаще, если бизнес существенно зависит от онлайн-заказов.
Вопрос: Как обеспечить безопасность платежей?
Ответ: Не храните данные карт на своём сервере. Интегрируйтесь с проверенными платёжными шлюзами и используйте HTTPS.