Установка Invoice Ninja на Ubuntu 16.04 с Nginx и MariaDB
Что вы получите
- Рабочую инстанцию 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
Шаг 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;
Совет: для 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
Примечание: в более новых дистрибутивах 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
Отредактируйте 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/
Шаг 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/*
Создайте конфигурацию виртуального хоста:
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.coCertbot автоматически обновит конфигурацию Nginx и настроит автоматическое обновление сертификатов.
Шаг 6 — Завершение установки и тестирование
Откройте в браузере https://ninja.co (замените на ваш домен). Вы увидите страницу установки Invoice Ninja, где заполните данные приложения, подключения к базе, SMTP и данные администратора.

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

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



Invoice Ninja установлен под Nginx и MariaDB на Ubuntu 16.04.
Проверки и критерии приёмки
- Страница входа доступна по HTTPS по вашему домену.
- Миграции и сиды прошли без ошибок.
- Можно создать и отправить тестовый счёт (проверьте отправку почты через настроенный SMTP).
- Логи Nginx и приложения не содержат критических ошибок.
Резервное копирование и откат
- Перед обновлениями создавайте дамп базы:
mysqldump -u root -p ninjadb > ninjadb-$(date +%F).sql- Архивируйте файлы приложения:
tar -czf ninja-www-$(date +%F).tar.gz /var/www/ninja- Если нужно откатить миграции — верните дамп и файлы, затем выполните 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
Альтернативные подходы
- Запуск в Docker: официальные/сообщества контейнеры облегчают изоляцию сервисов.
- Использование Apache вместо Nginx: Apache с mod_php или php-fpm — если вы привыкли к Apache.
- Управляемые базы данных (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), включите бэкапы и мониторинг.
Справочные материалы
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента