本教程展示瞭如何在 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。
設置 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。與往常一樣,如果您發現本文對您有幫助,請註冊我們的免費時事通訊以獲取提示和技巧。照顧好自己?