Гид по технологиям

Установка Invoice Ninja на CentOS 7 с Nginx и MariaDB

• 7 min read • Инфраструктура • Обновлено 21 Nov 2025
Установка Invoice Ninja на CentOS 7
Установка Invoice Ninja на CentOS 7

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

О чём этот материал

Цель — показать проверенный способ установки и первоначальной настройки 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

Установка Nginx на CentOS 7

Примечание: если команда 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;

Настройка MariaDB для Invoice Ninja

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

Шаг 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'),

Конфигурация базы данных Invoice Ninja

Выполните миграции и заполнение начальными данными:

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/*

Генерация SSL сертификатов для Invoice Ninja

Для продакшена рекомендую 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.

Установка Invoice Ninja

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

Настройки базы и приложения

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

Вход в Invoice Ninja

Стартовая панель Invoice Ninja

Страница настроек Invoice Ninja


Отладка и типичные ошибки

  • Ошибка 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 настроен).

Мини‑методология установки (короткая инструкция)

  1. Установить Nginx, PHP‑FPM, MariaDB.
  2. Скачать Invoice Ninja, установить зависимости через composer.
  3. Настроить .env, выполнить php artisan migrate и db:seed.
  4. Настроить виртуальный хост и SSL.
  5. Настроить SELinux и firewall, настроить фоновые workers.

План отката (runbook)

  1. Если установка привела к недоступности сайта — откатите Nginx к предыдущей конфигурации: cp /etc/nginx/conf.d/ninja.conf.bak /etc/nginx/conf.d/ninja.conf && systemctl reload nginx.
  2. Если миграции испортили схему БД и у вас есть бэкап — остановите приложение, откатите дамп базы, перезапустите сервисы.
  3. Верните старую версию кода из репозитория / бэкапа.

Тестовые случаи и приёмочные проверки

  • Попытка регистрации нового пользователя и создание счета.
  • Генерация 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 и регулярные бэкапы.
  • Для продакшена настройте фоновые процессы (очереди), мониторинг и автоматические обновления сертификатов.

Ссылки и ресурсы

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро