本教程展示瞭如何在 Ubuntu 20.04 上安裝 InvoiceNinja Apache 或 Nginx Web 服務器。 InvoiceNinja 是一種低成本、開源、自託管的發票軟件,可替代 Freshbooks 等商業在線發票平台。 InvoiceNinja 提供託管發票服務,但如果您更喜歡自託管軟件,請按照以下步驟操作。

InvoiceNinja 的特點

  • InvoiceNinja 允許您使用自己的域名和品牌向客戶發送發票。
  • 在一個帳戶中管理多個企業的發票。
  • 通過自動為長期客戶開具定期發票來節省時間。
  • 輕鬆創建精美的提案並將其發送給您的客戶。
  • 將第三方文件附加到發票上。
  • 創建項目任務並跟踪時間。
  • 使用可視化項目管理工具組織和計劃客戶工作。
  • 讓您的客戶一目了然地看到他們與您的所有交易。
  • Zapier 自動化使您可以在您的計費帳戶和流行的應用程序(如 Gmail、Google 表格、QuickBooks Online、Slack、Pipeline、MailChimp 等)之間傳輸數據。
  • 一遍又一遍地在同一張發票上要求存款和部分付款。
  • 一組預先編寫的自動提醒電子郵件,用於提醒客戶需要支付賬單。
  • 當客戶查看並支付發票時收到通知。
  • 還有很多

先決條件

首先,您需要一台至少具有 512MB RAM 的 Linux 服務器。單擊此特殊鏈接可在 DigitalOcean 上獲得 100 美元的免費積分。 (僅限新用戶)。如果您已經是 DigitalOcean 用戶,請單擊此特殊鏈接以在 Vultr 上獲得 50 美元的免費積分(僅限新用戶)。 擁有 DigitalOcean 或 Vultr 帳戶後,在您的服務器上安裝 Ubuntu 20.04 並按照以下步驟操作。

InvoiceNinja 需要 PHP 和 MySQL/MariaDB。要遵循本教程,您應該已經設置了 LAMP 或 LEMP 堆棧。如果您還沒有這樣做,請使用以下指南之一。

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

我們還需要一個域名,以便我們的客戶可以通過域名查看他們的發票。由於價格低廉,我在 NameCheap 註冊了我的域名。他們提供終身免費的 whois 隱私保護。

現在讓我們安裝 InvoiceNinja。

第 1 步:將 InvoiceNinja 安裝 zip 文件下載到您的 Ubuntu 20.04 服務器

通過 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 web 文件被提取到 /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 根密碼即可對用戶登錄進行身份驗證的插件。只需添加前綴 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 步:設置您的網絡服務器

您可以使用 Apache 或 Nginx Web 服務器。

阿帕奇

如果您使用 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>

保存並關閉文件。然後啟用這個虛擬主機。

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。

在向設置嚮導輸入任何信息之前,您必須按照步驟 4 中的說明啟用 HTTPS。

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;
    }
}

保存並關閉文件。接下來,測試您的 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:強制 HTTPS 超過 301 重定向。
  • --hsts:將 Strict-Transport-Security 標頭添加到所有 HTTP 響應。強制瀏覽器始終對域使用 TLS。 防禦 SSL/TLS 剝離。
  • --staple-ocsp:啟用 OCSP 裝訂。有效的 OCSP 響應被裝訂到 TLS 期間服務器提供的證書。

將自動獲取並安裝證書。

步驟 6:使用安裝嚮導完成安裝

我現在就去 invoice.yourdomain.com 輸入數據庫信息、SMTP 設置並創建管理員用戶。

如果您想使用自己的郵件服務器向您的客戶發送郵件,請參考以下文章來設置您自己的郵件服務器。 筆記 我們強烈建議您在全新乾淨的操作系統上運行您的 iRedMail 郵件服務器。在包含其他 Web 應用程序的操作系統上安裝 iRedMail 可能會失敗並且可能會破壞現有應用程序。

  • 如何使用 iRedMail 在 Ubuntu 20.04 上輕鬆設置全功能郵件服務器

如果您使用自己的電子郵件服務器,則可以在兩個驅動程序之間進行選擇: SMTP 什麼時候 Sendmail.

  • 選擇 SMTP 如果您的郵件服務器和 Invoice Ninja 在兩個不同的主機上運行。
  • 選擇 Sendmail 如果您的郵件服務器和 Invoice Ninja 在同一台主機上運行。

如果你選擇 SMTP,具有以下設置:

  • 主持人: mail.yourdomain.com 港口: 587 加密: TLS. 輸入您的用戶名和密碼。

如果你選擇 Sendmail,具有以下設置:

  • 主持人: 127.0.0.1 港口:二十五 加密: 沒有什麼。無需輸入用戶名或密碼。

創建管理員用戶後,您可以登錄 InvoiceNinja。

發票忍者 ubuntu 服務器設置

設置 cron 作業

您將需要設置 Cron 作業以發送定期發票和電子郵件提醒。 編輯 root 用戶的 crontab 文件。

sudo crontab -e

將以下行添加到此文件的末尾:

#InvoiceNinja
0 8 * * * /usr/bin/php7.3 /var/www/invoice-ninja/artisan ninja:send-invoices > /dev/null
0 8 * * * /usr/bin/php7.3 /var/www/invoice-ninja/artisan ninja:send-reminders > /dev/null

保存並關閉文件。這兩個 cron 作業每天早上 8:00 運行。您也可以手動運行作業,如下所示:

sudo /usr/bin/php7.3 /var/www/invoice-ninja/artisan ninja:send-invoices

刪除了計費忍者品牌

默認情況下,您的發票將顯示 Invoice Ninja 品牌。您可以以每年 30 美元的價格購買白標許可證,以從您的發票和客戶門戶中刪除 Invoice Ninja 品牌。去 settings -> Invoice Design, 點擊 white-label 底部有購買鏈接。

結論是

我希望本教程能幫助您在 Ubuntu 20.04 服務器上安裝 Invoice Ninja。與往常一樣,如果您發現本文對您有幫助,請註冊我們的免費時事通訊以獲取提示和技巧。照顧好自己?