本教程将向您展示如何在 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 用户。