如何在 Ubuntu 20.04 服务器上安装 InvoiceNinja Apache/Nginx

本教程将向您展示如何在 Ubuntu 20.04 上安装 InvoiceNinja Apache 或 Nginx 网络服务器。 InvoiceNinja 是一种开源、自托管的发票软件,是 Freshbooks 等商业在线发票平台的低成本替代方案。 InvoiceNinja 提供托管发票服务,但如果您喜欢自托管软件,则可以按照以下说明操作。

InvoiceNinja 功能

  • 使用 InvoiceNinja,您可以使用自己的域名和品牌向客户发送发票。
  • 在一个帐户下管理多个企业的发票。
  • Save 通过使用定期发票自动向长期客户收费,从而节省时间。
  • 轻松创建精美的建议并将其发送给您的客户。
  • 将第 3 方文件附加到发票。
  • 创建项目任务和跟踪时间。
  • 使用可视化项目管理工具组织和规划您的客户工作。
  • 让您的客户一眼就能看到他们与您的所有交易。
  • Zapier 自动化允许您在发票帐户和流行应用程序之间传输数据,包括 Gmail、Google Sheets、QuickBooks Online、Slack、Pipeline、MailChimp 等。
  • 一次又一次地使用同一张发票请求存款和部分付款。
  • 使用预先编写的自动提醒电子邮件序列提醒客户您的发票需要支付。
  • 当客户查看并支付您的发票时接收通知。
  • 还有很多

先决条件

首先,你需要一个至少有 512MB RAM 的 Linux 服务器。 您可以单击此特殊链接在 DigitalOcean 上获得 100 美元的免费赠金。 (仅限新用户)。 如果您已经是 DigitalOcean 用户,那么您可以单击此特殊链接在 Vultr 上获得 50 美元的免费赠金(仅限新用户)。 在 DigitalOcean 或 Vultr 上拥有帐户后,在您的服务器上安装 Ubuntu 20.04 并按照以下说明进行操作。

InvoiceNinja 需要 PHP 和 MySQL/MariaDB。 要学习本教程,您应该已经设置了 LAMP 堆栈或 LEMP 堆栈。 如果您还没有这样做,请使用以下指南之一。

  • 如何安装 LAMP (Apache、MariaDB、PHP) 堆栈在 Ubuntu 20.04 上
  • 如何在 Ubuntu 20.04 上安装 LEMP(Nginx、MariaDB、PHP)堆栈

而且您还需要一个域名,以便您的客户可以通过您的域名查看发票。 我在 NameCheap 注册了我的域名,因为价格低廉,而且他们提供终身免费的 whois 隐私保护。

现在让我们安装 InvoiceNinja。

步骤 1:在 Ubuntu 20.04 服务器上下载 InvoiceNinja 安装 Zip 文件

通过 SSH 登录到您的 Ubuntu 20.04 服务器。 然后运行以下命令将最新版本的 InvoiceNinja zip 文件下载到您的服务器上。

wget -O invoice-ninja.zip https://download.invoiceninja.com/

下载后,将存档解压缩到 /var/www/ 目录与 unzip.

sudo apt install unzip  sudo mkdir -p /var/www/  sudo unzip invoice-ninja.zip -d /var/www/

-d 选项指定目标目录。 InvoiceNinja 网络文件将被提取到 /var/www/ninja. 为了更好地识别每个目录,您可以将其重命名为 invoice-ninja.

sudo mv /var/www/ninja /var/www/invoice-ninja

然后我们需要将该目录的所有者更改为 www-data 以便 Web 服务器可以写入此目录。

sudo chown www-data:www-data /var/www/invoice-ninja/ -R

我们还需要更改权限 storage 目录。

sudo chmod 755 /var/www/invoice-ninja/storage/ -R

第 2 步:在 MariaDB 中创建数据库和用户

使用以下命令登录到 MariaDB 数据库服务器。 由于 MariaDB 现在正在使用 unix_socket 验证用户登录的插件,无需输入 MariaDB root 密码。 我们只需要添加前缀 mysql 命令与 sudo.

sudo mysql

然后为 Invoice Ninja 创建一个数据库。 本教程命名数据库 invoiceninja. 您可以使用任何您喜欢的名称。

create database invoiceninja;

创建数据库用户。 同样,您可以为此用户使用您的首选名称。 代替 your-password 使用您的首选密码。

create user ninja@localhost identified by 'your-password';

授予此用户所有权限 invoiceninja 数据库。

grant all privileges on invoiceninja.* to ninja@localhost;

刷新权限并退出。

flush privileges;  exit;

第 3 步:安装 PHP 模块

请注意,InvoiceNinja 目前不支持 PHP7.4。 为获得最佳兼容性,建议添加 PHP7.3 PPA 并安装 PHP7.3。

sudo add-apt-repository ppa:ondrej/php

然后运行以下命令安装 InvoiceNinja 需要或推荐的 PHP 模块。

sudo apt install php-imagick php7.3-fpm php7.3-mysql php7.3-common php7.3-gd php7.3-json php7.3-curl php7.3-zip php7.3-xml php7.3-mbstring php7.3-bz2 php7.3-intl php7.3-gmp

如果你使用 Apache web服务器,那么你需要禁用PHP模块 Apache.

sudo a2dismod php7.4

您还需要禁用 prefork MPM 模块。

sudo a2dismod mpm_prefork

现在您需要运行以下命令启用三个模块才能使用 PHP-FPM,无论是否 mod_php 安装在您的服务器上。

sudo a2enmod mpm_event proxy_fcgi setenvif

然后重启 Apache.

sudo systemctl restart apache2

第 4 步:设置 Web 服务器

我们可以用 Apache 或 Nginx 网络服务器。

Apache

若你宁可 Apache, 为 Invoice Ninja 创建一个虚拟主机文件。

sudo nano /etc/apache2/sites-available/invoice-ninja.conf

将以下文本放入文件中。 代替 invoice.yourdomain.com 使用您自己的 Invoice Ninja 子域。 不要忘记在您的 DNS 管理器中为域名设置 A 记录。 (注意 webroot 设置为 /var/www/invoice-ninja/public/, 不是 /var/www/invoice-ninja/)

<VirtualHost *:80>     ServerName invoice.yourdomain.com     DocumentRoot /var/www/invoice-ninja/public      <Directory /var/www/invoice-ninja/public>        DirectoryIndex index.php        Options +FollowSymLinks        AllowOverride All        Require all granted     </Directory>      ErrorLog ${APACHE_LOG_DIR}/invoice-ninja.error.log     CustomLog ${APACHE_LOG_DIR}/invoice-ninja.access.log combined      Include /etc/apache2/conf-available/php7.3-fpm.conf </VirtualHost>

Save 和 close 文件。 然后启用这个虚拟主机。

sudo a2ensite invoice-ninja.conf

我们需要启用重写模块。

sudo a2enmod rewrite

重新开始 Apache 以使更改生效。

sudo systemctl restart apache2

现在访问 invoice.yourdomain.com 您将被重定向到 Invoice Ninja 设置向导页面 (invoice.yourdomain.com/setup)。 如果你看到默认 Apache 页面而不是设置向导,那么您需要禁用默认的虚拟主机。

sudo a2dissite 000-default.conf

并重新启动 Apache.

在设置向导中输入任何信息之前,我们需要启用 HTTPS,这在步骤 4 中进行了解释。

nginx

如果您更喜欢 Nginx,请创建一个 invoice-ninja.conf 归档 /etc/nginx/conf.d/ 目录。

sudo nano /etc/nginx/conf.d/invoice-ninja.conf

将以下文本放入文件中。 代替 invoice.yourdomain.com 使用您自己的 Invoice Ninja 子域。 不要忘记在您的 DNS 管理器中为域名设置 A 记录。 (注意 webroot 设置为 /var/www/invoice-ninja/public/, 不是 /var/www/invoice-ninja/)

server {     listen 80;     listen [::]:80;     server_name invoice.yourdomain.com;      root /var/www/invoice-ninja/public/;     index index.php index.html index.htm;     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/invoiceninja.access.log;     error_log   /var/log/nginx/invoiceninja.error.log;      location ~ .php$ {         fastcgi_split_path_info ^(.+.php)(/.+)$;         fastcgi_pass unix:/run/php/php7.3-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;     } } 

Save 和 close 文件。 然后测试 Nginx 配置。

sudo nginx -t

如果测试成功,请重新加载 Nginx 以使更改生效。

sudo systemctl reload nginx

现在访问 invoice.yourdomain.com 您将被重定向到 Invoice Ninja 设置向导页面 (invoice.yourdomain.com/setup)。 在设置向导中输入任何信息之前,我们需要启用 HTTPS。

步骤 5:启用 HTTPS

为了加密 HTTP 流量,我们可以通过安装 Let’s Encrypt 颁发的免费 TLS 证书来启用 HTTPS。 运行以下命令在 Ubuntu 20.04 服务器上安装 Let’s Encrypt 客户端(certbot)。

sudo apt install certbot

如果您使用 Nginx,那么您还需要安装 Certbot Nginx 插件。

sudo apt install python3-certbot-nginx

接下来,运行以下命令获取并安装 TLS 证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d invoice.yourdomain.com

如果你使用 Apache, 安装 Certbot Apache 插入。

sudo apt install python3-certbot-apache

并运行此命令以获取并安装 TLS 证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d invoice.yourdomain.com

在哪里

  • --nginx: 使用nginx插件。
  • --apache: 使用 Apache 插入。
  • --agree-tos: 同意服务条款。
  • --redirect: 通过 301 重定向强制使用 HTTPS。
  • --hsts:将 Strict-Transport-Security 标头添加到每个 HTTP 响应。 强制浏览器始终对域使用 TLS。 防御 SSL/TLS 剥离。
  • --staple-ocsp:启用 OCSP 装订。 有效的 OCSP 响应被装订到服务器在 TLS 期间提供的证书。

现在应该获得并自动安装证书。

步骤 6:使用安装向导完成安装

现在去 invoice.yourdomain.com 并输入数据库信息、SMTP 设置并创建一个 admin 用户。