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

Установка Invoice Ninja на Ubuntu 16.04 с Nginx и MariaDB

• 6 min read • Инструкции • Обновлено 26 Nov 2025
Установка Invoice Ninja на Ubuntu 16.04
Установка Invoice Ninja на Ubuntu 16.04

Что вы получите

  • Рабочую инстанцию Invoice Ninja (v3.1.0) под Nginx и MariaDB на Ubuntu 16.04.
  • Инструкции по установке PHP7.0-FPM и необходимых расширений.
  • Примеры конфигурации Nginx с SSL и настройки виртуального хоста.

Предварительные условия

  • Сервер с Ubuntu 16.04.
  • Доступ root или пользователь с sudo.

Важно: версия в этой инструкции — v3.1.0 и PHP7.0. Новые версии Invoice Ninja могут требовать других версий PHP или зависимостей. В секции «Миграция и совместимость» ниже — рекомендации для обновления.

Быстрая проверка перед началом

  • Убедитесь, что сервер обновлён: apt-get update && apt-get upgrade
  • Проверьте свободное место и права на /var/www

Шаг 1 — Установка Nginx

Подключитесь к серверу и обновите репозитории:

ssh [email protected]
apt-get update

Установите Nginx:

apt-get install -y nginx

Запустите Nginx и включите автозапуск:

systemctl start nginx
systemctl enable nginx

Проверьте, что Nginx слушает порт 80:

netstat -plntu

Nginx установлен на Ubuntu 16.04

Шаг 2 — Установка и настройка MariaDB

Установите MariaDB из репозитория:

apt-get install -y mariadb-server

Запустите сервис и включите автозапуск:

systemctl restart mysql
systemctl enable mysql

Запустите безопасность и задайте root-пароль:

mysql_secure_installation

Пример диалога (введите ваши ответы):

Set root password? [Y/n] Y
New password:
Re-enter new password:

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Подключитесь к mysql как root:

mysql -u root -p
(введите root-пароль)

Создайте базу и пользователя для Invoice Ninja. В примере используются имена ninjadb и ninja с паролем aqwe123 — замените пароль на надёжный.

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

Совет: для production-сервера используйте уникальные имена и сложные пароли, а подключение к базе ограничивайте по IP.

Шаг 3 — Установка и настройка PHP7.0-FPM

Invoice Ninja основан на Laravel и требует PHP. В этой инструкции используется PHP7.0-FPM.

Установите PHP и расширения:

apt-get install -y php7.0-fpm php7.0-gd php7.0-xml php7.0-mysql php7.0-zip php7.0-mbstring php7.0-mcrypt php7.0-curl php7.0-gmp

Отредактируйте php.ini для FPM:

cd /etc/php/7.0/
vim fpm/php.ini

Найдите и измените:

cgi.fix_pathinfo=0

Сохраните и сделайте то же в CLI php.ini:

vim cli/php.ini

И снова установите:

cgi.fix_pathinfo=0

Перезапустите PHP-FPM и включите автозапуск:

systemctl restart php7.0-fpm
systemctl enable php7.0-fpm

Проверьте сокет PHP-FPM:

netstat -pl

Настройка PHP7.0-FPM на Ubuntu 16.04

Примечание: в более новых дистрибутивах Ubuntu сокет может находиться по другому пути, например /run/php/php7.4-fpm.sock или /run/php/php8.0-fpm.sock — проверьте конфигурацию перед настройкой Nginx.

Шаг 4 — Загрузка и настройка Invoice Ninja

Установите unzip и загрузите исходники:

apt-get install -y unzip
cd /var/www/
wget https://download.invoiceninja.com/ninja-v3.1.0.zip
unzip ninja-v3.1.0.zip
cd ninja/

Установите composer (менеджер пакетов PHP):

apt-get install -y composer

Установите зависимости проекта:

composer install --no-dev -o

Опции:

  • –no-dev: не устанавливать dev-зависимости
  • -o: оптимизировать автозагрузчик

Скопируйте окружение и отредактируйте .env:

cp .env.example .env
vim .env

Измените параметры базы данных:

DB_DATABASE=ninjadb
DB_USERNAME=ninja
DB_PASSWORD=aqwe123

Настройка окружения для Invoice Ninja

Отредактируйте config/database.php и убедитесь, что указаны правильные значения:

'database' => env('DB_DATABASE', 'ninjadb'),
'username' => env('DB_USERNAME', 'ninja'),
'password' => env('DB_PASSWORD', 'aqwe123'),

Сохраните и выполните миграции базы данных:

php artisan migrate

На запрос подтвердите вводом “yes”.

Засейте начальные данные:

php artisan db:seed

Генерируйте ключ приложения:

php artisan key:generate

Скопируйте сгенерированный ключ в config/app.php (APP_KEY) или убедитесь, что .env содержит APP_KEY.

Измените владельца папки на www-data:

cd /var/www/
chown -R www-data:www-data ninja/

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

Шаг 5 — Настройка SSL и виртуального хоста Nginx

Создайте папку для сертификатов и сгенерируйте самоподписанный сертификат (либо используйте Let’s Encrypt):

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

Создайте конфигурацию виртуального хоста:

cd /etc/nginx/
vim sites-available/ninja

Вставьте следующую конфигурацию (отредактируйте server_name):

server {
    # Your Domain Name - hakase-labs.co
    listen      80;
    server_name ninja.co www.ninja.co;

    # Rewrite redirect to https
    add_header Strict-Transport-Security max-age=2592000;
    rewrite ^ https://$server_name$request_uri? permanent;
}

server {
    # Your Domain Name - hakase-labs.co
    listen      443 default;
    server_name ninja.co www.ninja.co;

    # Enable SSL for Invoice Ninja
    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;

    # Invoice Ninja web root files
    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 and Error Log for Invoice Ninja
    access_log  /var/log/nginx/ininja.access.log;
    error_log   /var/log/nginx/ininja.error.log;

    sendfile off;

    # Handle PHP Applications
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.0-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;
    }
}

Активируйте сайт и проверьте конфигурацию:

ln -s /etc/nginx/sites-available/ninja /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

Примечание: если вы используете PHP более новой версии, замените путь fastcgi_pass на unix:/run/php/php7.4-fpm.sock и т. п.

Альтернатива: получение бесплатного SSL от Let’s Encrypt

Установка certbot и получение сертификата (пример для Nginx):

apt-get install -y certbot python-certbot-nginx
certbot --nginx -d ninja.co -d www.ninja.co

Certbot автоматически обновит конфигурацию Nginx и настроит автоматическое обновление сертификатов.

Шаг 6 — Завершение установки и тестирование

Откройте в браузере https://ninja.co (замените на ваш домен). Вы увидите страницу установки Invoice Ninja, где заполните данные приложения, подключения к базе, SMTP и данные администратора.

Установка Invoice Ninja

Ввод данных в форме установки:

Настройка Invoice Ninja

После установки выполните вход — вы увидите дашборд:

Панель администратора Invoice Ninja

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

Invoice Ninja установлен под Nginx и MariaDB на Ubuntu 16.04.

Проверки и критерии приёмки

  • Страница входа доступна по HTTPS по вашему домену.
  • Миграции и сиды прошли без ошибок.
  • Можно создать и отправить тестовый счёт (проверьте отправку почты через настроенный SMTP).
  • Логи Nginx и приложения не содержат критических ошибок.

Резервное копирование и откат

  1. Перед обновлениями создавайте дамп базы:
mysqldump -u root -p ninjadb > ninjadb-$(date +%F).sql
  1. Архивируйте файлы приложения:
tar -czf ninja-www-$(date +%F).tar.gz /var/www/ninja
  1. Если нужно откатить миграции — верните дамп и файлы, затем выполните php artisan migrate:rollback по необходимости.

Роль‑ориентированные чеклисты

Администратор сервера:

  • Обновил систему и пакеты.
  • Создал пользователя и настроил sudo.
  • Настроил брандмауэр (ufw) для портов 80, 443 и SSH.

DevOps/разработчик:

  • Установил composer и зависимости.
  • Проверил миграции и сиды.
  • Настроил systemd unit или supervisor при необходимости для очередей.

Администратор приложения:

  • Настроил SMTP и проверил отправку почты.
  • Создал админ‑аккаунт и проверил права.

Безопасность и жёсткая конфигурация

  • Замените самоподписанный сертификат на Let’s Encrypt в продакшене.
  • Ограничьте доступ к MySQL по привилегированным IP и используйте сложные пароли.
  • Отключите ненужные PHP‑расширения.
  • Настройте регулярное обновление системы и пакетов безопасности.
  • Разрешения: директория /var/www/ninja должна принадлежать www-data и иметь минимально необходимые права.
  • Включите бэкапы и мониторинг логов (fail2ban для SSH — рекомендовано).

Важно: AppArmor может блокировать доступ nginx/php к файловой системе. При появлении ошибок проверьте /var/log/syslog и профили AppArmor.

Отладка и распространённые ошибки

Проблема: 502 Bad Gateway — Nginx не может передать запрос PHP-FPM

  • Проверьте, запущен ли php7.0-fpm: systemctl status php7.0-fpm
  • Проверьте путь сокета в конфигурации Nginx (fastcgi_pass).

Проблема: Ошибка миграций или соединения с БД

  • Проверьте .env и config/database.php на корректные креды.
  • Попробуйте подключиться к базе из командной строки mysql -u ninja -p

Проблема: SSL‑ошибки в браузере

  • Если сертификат самоподписанный, браузер покажет предупреждение — используйте Let’s Encrypt в бою.

Проблема: Неправильные права на файлы

  • Проверьте владельца: ls -la /var/www/ninja
  • Выполните: chown -R www-data:www-data /var/www/ninja

Альтернативные подходы

  1. Запуск в Docker: официальные/сообщества контейнеры облегчают изоляцию сервисов.
  2. Использование Apache вместо Nginx: Apache с mod_php или php-fpm — если вы привыкли к Apache.
  3. Управляемые базы данных (RDS, Managed MariaDB): снимают нагрузку по резервным копиям и HA.

Миграция и совместимость

  • Эта инструкция для Ubuntu 16.04 и PHP7.0. При переходе на Ubuntu 18.04/20.04 убедитесь, что используемые пакеты и пути (php-fpm сокеты) обновлены.
  • Invoice Ninja более новых версий может требовать PHP7.2+ или PHP7.4+. Перед апгрейдом проверьте требования проекта.

Тесты приёмки

  • Открыть главную страницу приложения и страницу входа.
  • Зарегистрировать новую организацию/клиента и создать счёт.
  • Отправить тестовый счёт на реальный/тестовый SMTP адрес.
  • Проверить логи на предмет ошибок после 100 параллельных запросов (нагрузочный тест — опционально).

Краткий глоссарий

  • PHP-FPM: менеджер процессов PHP для обработки FastCGI-запросов.
  • Nginx: веб-сервер и обратный прокси.
  • MariaDB: форк MySQL, СУБД.
  • Composer: менеджер зависимостей PHP.

Частые вопросы (FAQ)

Q: Можно ли использовать другую версию Invoice Ninja? A: Да, но проверьте требования по версиям PHP и зависимостям перед установкой.

Q: Как обновить SSL автоматически? A: Используйте certbot и systemd timer/cron для автоматического обновления.

Итог

Вы установили Invoice Ninja на Ubuntu 16.04 с Nginx и MariaDB, настроили PHP7.0-FPM, выполнили миграции базы и настроили виртуальный хост с SSL. Для продакшена замените самоподписанный сертификат на сертификат от доверенного центра (Let’s Encrypt), включите бэкапы и мониторинг.

Справочные материалы

Поделиться: 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 быстро