Установка Invoice Ninja на CentOS 7 с Nginx и MariaDB
Важно: в примерах используются имена баз данных, пользователей и пароли как образцы. Замените их на безопасные значения в вашей среде.
О чём этот материал
Цель — показать проверенный способ установки и первоначальной настройки Invoice Ninja (версия v3.x в исходном материале) на сервере CentOS 7 с Nginx и MariaDB. Пояснения и дополнительные секции помогут адаптировать установку под продакшен: SSL, SELinux, firewall, фоновые задачи и безопасность.
Краткое определение: Invoice Ninja — гэта веб‑приложение на PHP (Laravel) для выставления счетов и учёта платежей.
Сопутствующие варианты использования (поисковая интент‑матрица)
Primary intent: установка Invoice Ninja на CentOS 7 Related variants: установка Invoice Ninja Nginx MariaDB, Invoice Ninja на Linux, self‑host Invoice Ninja, настройка Laravel Invoice Ninja, SSL для Invoice Ninja, настройка SELinux для веб‑приложений
Предварительные требования
- Сервер с CentOS 7 (root или пользователь с sudo).
- Доступ к интернету для загрузки пакетов и зависимостей.
- Домен (рекомендуется) для SSL и корректных заголовков хоста.
Примечание: в примерах используется пользователь nginx для процессов веб‑сервера и PHP‑FPM.
Шаг 1 - Установка Nginx
Войдите на сервер по SSH:
ssh [email protected]Установите EPEL и затем Nginx:
yum -y install epel-release
yum -y install nginxЗапустите и включите автозапуск:
systemctl start nginx
systemctl enable nginxУбедитесь, что Nginx слушает порт 80:
netstat -plntu
Примечание: если команда netstat отсутствует, установите утилиту net-tools:
yum -y install net-toolsВажно: при развертывании в облаке также откройте порты в панели управления провайдера (обычно 80/443).
Шаг 2 - Установка и настройка MariaDB
Установите MariaDB из стандартного репозитория CentOS:
yum install -y mariadb-serverЗапустите службу и включите автозапуск:
systemctl start mariadb
systemctl enable mariadbВыполните защитную настройку:
mysql_secure_installationСледуйте подсказкам (задайте root‑пароль, удалите анонимных пользователей, запретите удалённый вход для root, удалите тестовую БД и перезагрузите привилегии).
Подключитесь к MySQL и создайте базу данных и пользователя для Invoice Ninja (примерные имена):
mysql -u root -p
create database ninjadb;
create user ninja@localhost identified by 'aqwe123';
grant all privileges on ninjadb.* to ninja@localhost identified by 'aqwe123';
flush privileges;
Совет: используйте длинные случайные пароли и храните их в менеджере секретов.
Шаг 3 - Установка и настройка PHP‑FPM
Invoice Ninja — Laravel‑приложение, поэтому нужен PHP с набором расширений. В исходном руководстве использовался PHP 7.0 из webtatic; в продакшене рассмотрите современные версии PHP (например, 7.4 или 8.0) в зависимости от совместимости Invoice Ninja.
Добавление репозитория webtatic и установка PHP 7.0 (как в оригинале):
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php70w-fpm php70w-cli php70w-pear php70w-gd php70w-xml php70w-mysql php70w-zip php70w-mbstring php70w-mcrypt php70w-curl php70w-gmp php70w-pdoОтредактируйте /etc/php.ini, установите:
cgi.fix_pathinfo=0Измените настройки пула php‑fpm (/etc/php-fpm.d/www.conf): пользователь и группа — nginx, используйте unix‑socket:
user = nginx
group = nginx
listen = /var/run/php/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660Разрешите переменные окружения php‑fpm (пример):
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmpСоздайте каталоги с нужными правами:
mkdir -p /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session/
mkdir -p /var/run/php/
chown -R nginx:nginx /var/run/php/Запустите и включите php‑fpm:
systemctl start php-fpm
systemctl enable php-fpmПроверьте наличие сокета:
netstat -pl | grep php-fpmСоветы при возникновении проблем:
- Если composer завершается с ошибкой памяти, добавьте swap или используйте параметр COMPOSER_MEMORY_LIMIT=”-1”.
- Совместимость PHP: проверьте требования версии Invoice Ninja в релиз‑нотах.
Шаг 4 - Установка и настройка Invoice Ninja
Установите unzip и подготовьте веб‑корень:
yum -y install unzip
mkdir -p /var/www/
cd /var/www/Скачайте и распакуйте архив (пример v3.1.0 в оригинале):
wget https://download.invoiceninja.com/ninja-v3.1.0.zip
unzip ninja-v3.1.0.zip
cd ninja/Установите composer (менеджер зависимостей PHP):
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composerУстановите зависимости проекта:
composer install --no-dev -oСкопируйте и отредактируйте файл окружения:
cp .env.example .env
vim .envУкажите подключение к базе данных:
DB_DATABASE=ninjadb
DB_USERNAME=ninja
DB_PASSWORD=aqwe123Параметры в config/database.php должны соответствовать .env (проверьте секции mysql):
'database' => env('DB_DATABASE', 'ninjadb'),
'username' => env('DB_USERNAME', 'ninja'),
'password' => env('DB_PASSWORD', 'aqwe123'),
Выполните миграции и заполнение начальными данными:
php artisan migrate
# подтвердите 'yes'
php artisan db:seed
# подтвердите 'yes'Создайте ключ приложения и добавьте его в .env или config/app.php:
php artisan key:generateВставьте APP_KEY в .env или убедитесь, что в config/app.php значение ‘key’ соответствует ENV.
Установите права владельца каталога приложения:
cd /var/www/
chown -R nginx:nginx ninja/Invoice Ninja подготовлен к установке.
Шаг 5 - Настройка SSL и виртуального хоста Nginx
Создайте каталог для сертификатов:
mkdir -p /etc/nginx/cert/Для тестовой установки можно сгенерировать самоподписанный сертификат:
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/ninja.crt -keyout /etc/nginx/cert/ninja.key
chmod 600 /etc/nginx/cert/*
Для продакшена рекомендую Let’s Encrypt (certbot). На CentOS 7 пример установки certbot:
yum -y install epel-release
yum -y install certbot python2-certbot-nginx
certbot --nginx -d example.com -d www.example.comКонфигурация Nginx (файл /etc/nginx/conf.d/ninja.conf). Пример, адаптированный из источника — замените server_name на ваш домен:
server {
listen 80;
server_name ninja.co www.ninja.co;
add_header Strict-Transport-Security max-age=2592000;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 default;
server_name ninja.co www.ninja.co;
ssl on;
ssl_certificate /etc/nginx/cert/ninja.crt;
ssl_certificate_key /etc/nginx/cert/ninja.key;
ssl_session_timeout 5m;
ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
root /var/www/ninja/public;
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log /var/log/nginx/ininja.access.log;
error_log /var/log/nginx/ininja.error.log;
sendfile off;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
location ~ /\.ht {
deny all;
}
}Проверьте конфигурацию и перезапустите Nginx:
nginx -t
systemctl restart nginxСовет: используйте HSTS и современные cipher suite, а для максимальной совместимости задайте только TLSv1.2+.
Шаг 6 - SELinux и Firewalld
Если SELinux включён (getenforce возвращает Enforcing/Permissive), выполните привязку контекстов для директорий приложения, чтобы nginx/php‑fpm могли записывать файлы:
yum -y install policycoreutils-python
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/public(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/storage(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/app(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/bootstrap(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/database(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/resources(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/vendor(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/tests(/.*)?'
restorecon -Rv '/var/www/ninja/'Установите и настройте firewalld, откройте HTTP/HTTPS порты:
yum -y install firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reloadАльтернатива: если вы используете iptables напрямую — откройте порты 80/443 в правилах.
Шаг 7 - Тестирование установки
Откройте браузер и перейдите по вашему домену (в оригинале ninja.co). Вы должны быть перенаправлены на HTTPS и увидеть страницу установки Invoice Ninja.

Заполните параметры приложения, настройки базы данных (те же, что в .env), SMTP для отправки писем и создайте первого административного пользователя.

После успешной установки войдите в систему и проверьте панель управления.



Отладка и типичные ошибки
- Ошибка 500: проверьте логи Nginx и Laravel (storage/logs/laravel.log), права доступа и APP_KEY.
- Проблемы с миграциями: убедитесь, что соединение с БД корректно, пользователь имеет права, и что миграции совместимы с вашей версией MySQL/MariaDB.
- Ошибки composer: увеличьте память или добавьте swap.
Важно: никогда не выставляйте права 777 на каталоги в продакшене — используйте владельца nginx и минимально необходимые права.
Рекомендации по безопасности
- Сертификаты: используйте Let’s Encrypt в продакшене, автоматизируйте обновление (certbot renew).
- Бэкапы: регулярно делайте дампы базы данных и резерв копий каталога storage и .env.
- Патчи: держите систему и PHP‑зависимости обновлёнными.
- Fail2ban: используйте для защиты SSH и веб‑форм.
- Минимизация attack surface: отключите ненужные сервисы и открывайте только нужные порты.
Управление фоновыми задачами и очередями
Laravel использует очереди для фоновых задач. Для продакшена настройте supervisor или systemd‑таймеры:
Пример конфигурации supervisor (в /etc/supervisord.d/invoice-ninja.conf):
[program:invoice-ninja-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/ninja/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=nginx
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/invoice-ninja-queue.logИли создайте systemd‑unit для worker’a, если вы предпочитаете systemd.
Альтернативные подходы
- Web server: можно использовать Apache вместо Nginx; конфигурация PHP‑FPM похожа, но виртуальные хосты и обслуживание статики отличаются.
- База данных: поддерживаются MySQL/MariaDB; для масштаба рассмотрите репликацию и регулярный бэкап.
- Контейнеризация: можно собрать Docker образ с PHP, Nginx и БД отдельно; подходит для CI/CD и лёгкой миграции.
Когда этот метод не подходит
- Если вы не контролируете сервер (например, общая хостинг‑панель), установка через SSH/рут невозможна.
- На старых версиях Invoice Ninja возможны другие требования к PHP — проверьте документацию к версии.
Контрольный список по ролям
Sysadmin:
- Настроить резервное копирование БД и файлов.
- Обновления системы и мониторинг диска/памяти.
- Настроить брандмауэр и SELinux.
DBA:
- План резервного восстановления (RPO/RTO).
- Тюнинг innodb_buffer_pool_size и параметров MariaDB при высоких нагрузках.
Dev/Ops:
- Настроить CI для деплоя и миграций.
- Настроить supervisor/systemd для очередей.
Безопасность:
- Включить HTTPS, HSTS, сильные шифры.
- Проверить доступ к .env и storage.
Критерии приёмки
- Веб‑страница доступна по HTTPS без ошибок сертификата.
- Успешная авторизация в интерфейсе с административным пользователем.
- Выполнены миграции и seed’ы, таблицы созданы в базе данных.
- Отправка тестового письма работает (SMTP настроен).
Мини‑методология установки (короткая инструкция)
- Установить Nginx, PHP‑FPM, MariaDB.
- Скачать Invoice Ninja, установить зависимости через composer.
- Настроить .env, выполнить php artisan migrate и db:seed.
- Настроить виртуальный хост и SSL.
- Настроить SELinux и firewall, настроить фоновые workers.
План отката (runbook)
- Если установка привела к недоступности сайта — откатите Nginx к предыдущей конфигурации: cp /etc/nginx/conf.d/ninja.conf.bak /etc/nginx/conf.d/ninja.conf && systemctl reload nginx.
- Если миграции испортили схему БД и у вас есть бэкап — остановите приложение, откатите дамп базы, перезапустите сервисы.
- Верните старую версию кода из репозитория / бэкапа.
Тестовые случаи и приёмочные проверки
- Попытка регистрации нового пользователя и создание счета.
- Генерация PDF счёта и скачивание.
- Отправка счёта по электронной почте (SMTP).
- Импорт/экспорт данных (если требуется).
- Нагрузка: базовая проверка отклика UI при одновременных запросах.
Короткий глоссарий (1‑строчные определения)
- PHP‑FPM — FastCGI Process Manager для PHP.
- Nginx — веб‑сервер и обратный прокси.
- MariaDB — форк MySQL, реляционная СУБД.
- Composer — менеджер зависимостей PHP.
- artisan — CLI инструмент Laravel.
Советы по миграции и обновлению
- Перед обновлением версии Invoice Ninja всегда делайте бэкап БД и каталога storage.
- Проверьте release notes приложения на предмет изменений в зависимостях PHP.
- Тестируйте обновления в staging среде перед продакшеном.
Локальные альтернативы и особенности для России
- Почта: многие используют Yandex.Mail или SMTP провайдеров; настройте SMTP с корректной аутентификацией и TLS.
- DNS и домены: регистрируйте домен у проверенных регистраторов; убедитесь, что PTR и SPF/DMARC настроены для корректной доставки почты.
Краткое резюме
- Следуйте шагам установки: Nginx → MariaDB → PHP‑FPM → Invoice Ninja.
- Обеспечьте безопасность: HTTPS, SELinux, firewall и регулярные бэкапы.
- Для продакшена настройте фоновые процессы (очереди), мониторинг и автоматические обновления сертификатов.
Ссылки и ресурсы
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента