使用Nginx(LEMP Stack)在Ubuntu 20.04上安裝ProjectSend

本教程將向您展示如何在具有Nginx Web服務器的Ubuntu 20.04 LTS上安裝ProjectSend。

什麼是ProjectSend?

ProjectSend是一個免費的開源自託管文件共享解決方案。 ProjectSend功能:

  • 實時統計
  • 創建客戶組
  • 自我註冊和社交登錄
  • 自定義電子郵件模板

先決條件

ProjectSend用PHP編程語言編寫。 要遵循本教程,您首先需要在Ubuntu 20.04上安裝LEMP堆棧。。 如果您尚未這樣做,請查看以下教程。

  • 如何在Ubuntu 20.04上安裝LEMP Stack(Nginx,MariaDB,PHP7.4-FPM)

您可以在家庭服務器或VPS(虛擬專用服務器)上安裝ProjectSend。 您還需要一個域名,因此稍後您將能夠啟用HTTPS來加密HTTP通信。 我從NameCheap註冊了我的域名,因為它價格低廉,並且終身免費提供Whois隱私保護。 ProjectSend可以在沒有域名的情況下安裝,但是如果您不加密HTTP連接以防止監聽,那實際上是沒有意義的。 如果您真的想修改服務器軟件並最大程度地利用它們,我建議您購買一個域名。

現在讓我們安裝ProjectSend。

步驟1:在Ubuntu 20.04上下載ProjectSend

登錄到您的Ubuntu 20.04服務器。 然後將ProjectSend zip存檔下載到您的服務器上。 在撰寫本文時,最新的穩定版本是r1295。 您可能需要更改版本號。 轉到https://www.projectsend.org/#download查看最新版本。

您可以運行以下命令將其下載到服務器上。

wget -O projectsend.zip https://www.projectsend.org/download/387/

下載後,使用以下命令解壓縮存檔 unzip

sudo apt install unzip

sudo mkdir -p /usr/share/nginx/projectsend/

sudo unzip projectsend.zip -d /usr/share/nginx/projectsend/

-d 選項指定目標目錄。 ProjectSend Web文件將被提取到 /usr/share/nginx/projectsend/。 然後,我們需要將此目錄的所有者更改為 www-data 以便Web服務器(Nginx)可以寫入此目錄。

sudo chown www-data:www-data /usr/share/nginx/projectsend/ -R

步驟2:在MariaDB數據庫服務器中為ProjectSend創建數據庫和用戶

使用以下命令登錄MariaDB數據庫服務器。 由於MariaDB現在正在使用 unix_socket 身份驗證用戶登錄的插件,無需輸入MariaDB根密碼。 我們只需要在 mysql 用命令 sudo

sudo mysql

然後為ProjectSend創建一個數據庫。 本教程將數據庫項目命名為end。 您可以使用任何喜歡的名稱。

create database projectsend;

創建數據庫用戶。 同樣,您可以為該用戶使用您的首選名稱。 代替 your-password 使用您的首選密碼。

create user [email protected] identified by 'your-password';

授予該用戶所有的權限 projectsend 數據庫。

grant all privileges on projectsend.* to [email protected];

刷新特權並退出。

flush privileges;

exit;

步驟3:配置ProjectSend

轉到 includes 目錄。

cd /usr/share/nginx/projectsend/includes/

複製樣本配置文件並將其重命名為 sys.config.php

sudo cp sys.config.sample.php sys.config.php

現在,使用命令行文本編輯器(如Nano)編輯新的配置文件。

sudo nano sys.config.php

查找以下行,並將紅色文本替換為您在步驟2中創建的數據庫名稱,用戶名和密碼。

/** Database name */
define('DB_NAME', 'database');

/** Database host (in most cases it's localhost) */
define('DB_HOST', 'localhost');

/** Database username (must be assigned to the database) */
define('DB_USER', 'username');

/** Database password */
define('DB_PASSWORD', 'password');

保存並關閉文件。 要在Nano文本編輯器中保存文件,請按 Ctrl+O,然後按 Enter 確認。 接下來,按 Ctrl+X 退出。

步驟4:為ProjectSend創建一個Nginx配置文件

創建一個 projectsend.conf 歸檔在 /etc/nginx/conf.d/ 目錄,並使用命令行文本編輯器(如Nano)。

sudo nano /etc/nginx/conf.d/projectsend.conf

複製以下文本並將其粘貼到文件中。 代替 projectsend.example.com 與您自己的首選子域。 不要忘記在您的DNS區域編輯器中為該子域創建DNS A記錄。 如果您沒有真實域名,建議您到NameCheap購買。 價格低廉,終身免費提供Whois隱私保護。

server {
    listen 80;
    listen [::]:80;
    server_name projectsend.example.com;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;

    # Path to the root of your installation
    root /usr/share/nginx/projectsend/;
    index index.php index.html;

    access_log /var/log/nginx/projectsend.access;
    error_log /var/log/nginx/projectsend.error;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location ~ /.well-known/acme-challenge {
      allow all;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Disable gzip to avoid the removal of the ETag header
    gzip off;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    error_page 403 /core/templates/403.php;
    error_page 404 /core/templates/404.php;

    location / {
      try_files $uri $uri/ /index.php;
    }

    location ~ .php$ {
       include fastcgi_params;
       fastcgi_split_path_info ^(.+.php)(/.*)$;
       try_files $fastcgi_script_name =404;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       #Avoid sending the security headers twice
       fastcgi_param modHeadersAvailable true;
       fastcgi_param front_controller_active true;
       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
       fastcgi_intercept_errors on;
       fastcgi_request_buffering off;
    }

   location ~* .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
   }
}

保存並關閉文件。 (要在Nano文本編輯器中保存文件,請按 Ctrl+O,然後按 Enter 確認。 要退出,請按 Ctrl+X

然後測試Nginx配置。

sudo nginx -t

如果測試成功,請重新加載Nginx以使更改生效。

sudo systemctl reload nginx

步驟5:安裝並啟用PHP模塊

運行以下命令以安裝ProjectSend所需或推薦的PHP模塊。

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

步驟6:啟用HTTPS

現在,您可以通過輸入ProjectSend安裝的域名來在Web瀏覽器中訪問ProjectSend Web安裝嚮導。

projectsend.example.com/install/index.php

如果無法加載網頁,則可能需要在防火牆中打開端口80。

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

還有端口443。

sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT

在輸入任何敏感信息之前,我們應該在ProjectSend上啟用安全的HTTPS連接。 我們可以從Let’s Encrypt獲得免費的TLS證書。 從Ubuntu 20.04存儲庫安裝Let’s Encrypt客戶端(certbot)。

sudo apt install certbot python3-certbot-nginx

Python3-certbot-nginx 是Nginx插件。 接下來,運行以下命令以使用Nginx插件獲取免費的TLS證書。

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

在哪裡:

  • –nginx:使用Nginx身份驗證器和安裝程序
  • –同意:同意讓我們加密服務條款
  • –重定向:通過添加301重定向來實施HTTPS。
  • –hsts:啟用HTTP嚴格傳輸安全性。 這可以防禦SSL / TLS剝離攻擊。
  • –staple-ocsp:啟用OCSP裝訂。
  • -電子郵件:用於註冊和恢復聯繫的電子郵件。
  • -d 標誌後面是域名列表,以逗號分隔。 您最多可以添加100個域名。

系統將詢問您是否要接收來自EFF(電子前沿基金會)的電子郵件。 選擇Y或N後,將自動為您獲取並配置您的TLS證書,如下面的消息所示。

ubuntu-20.04-projectsend-certbot-letsencrypt-https

步驟7:在Web瀏覽器中完成安裝

現在,您可以使用HTTPS連接訪問ProjectSend Web安裝嚮導。

https://projectsend.example.com/install/index.php

要完成安裝,您需要為其指定一個站點名稱並創建一個管理員帳戶。

projectsend-ubuntu-20.04-install-guide-nginx

點擊 Install 按鈕,您將能夠登錄到ProjectSend Web界面。

設置項目發送Ubuntu-nginx

如何設置ProjectSend電子郵件通知

如果您的ProjectSend實例將由多個人使用,則ProjectSend服務器可以發送交易電子郵件,例如密碼重置電子郵件,這一點很重要。 去 選項 -> 電子郵件通知。 您將找到電子郵件服務器設置。 有四種發送模式:

  • PHP郵件(基本)
  • SMTP協議
  • 郵箱
  • 發郵件

您可以選擇 sendmail 如果您的ProjectSend主機正在運行SMTP服務器,則為“模式”。 將其他字段留空。

項目結束sendmail

如果要使用在另一台主機上運行的SMTP服務器,請選擇 SMTP 模式,然後輸入SMTP服務器地址和登錄憑據,如下所示。 選擇STARTTLS進行加密。

項目結束電子郵件發送選項

有關如何設置電子郵件服務器的信息,請查看以下教程。 筆記 我強烈建議在全新的乾淨操作系統上運行iRedMail郵件服務器。 在具有其他Web應用程序的OS上安裝iRedMail可能會失敗,並且可能會破壞現有應用程序。

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

步驟8:增加PHP內存限制

默認的PHP內存限制為128MB。 ProjectSend建議使用512MB,以獲得更好的性能。 要更改PHP內存限制,請編輯 php.ini 文件。

sudo nano /etc/php/7.4/fpm/php.ini

查找以下行。 (第409行)

memory_limit = 128M

更改值。

memory_limit = 512M

保存並關閉文件。 或者,您可以運行以下命令來更改值,而無需手動打開文件。

sudo sed -i 's/memory_limit = 128M/memory_limit = 512M/g' /etc/php/7.4/fpm/php.ini

然後重新加載 PHP-FPM 服務使更改生效。

sudo systemctl reload php7.4-fpm

第9步:增加上傳文件大小限制

Nginx設置的默認最大上傳文件大小限制為1MB。 要允許將大文件上傳到您的ProjectSend服務器,請編輯ProjectSend的Nginx配置文件。

sudo nano /etc/nginx/conf.d/projectsend.conf

我們已經在此文件中設置了最大文件大小,如下所示

client_max_body_size 512M;

您可以根據需要更改它,例如1G。

client_max_body_size 1024M;

保存並關閉文件。 然後重新加載Nginx以使更改生效。

sudo systemctl reload nginx

PHP還設置了上傳文件大小的限制。 上載的默認最大文件大小為2MB。 要增加上傳大小限制,請編輯PHP配置文件。

sudo nano /etc/php/7.4/fpm/php.ini

找到以下行(行846)。

upload_max_filesize = 2M

更改值,如下所示:

upload_max_filesize = 1024M

保存並關閉文件。 或者,您可以運行以下命令來更改值,而無需手動打開文件。

sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 1024M/g' /etc/php/7.4/fpm/php.ini

然後重新啟動PHP-FPM。

sudo systemctl restart php7.4-fpm

添加本地DNS條目

建議編輯 /etc/hosts 文件添加到ProjectSend服務器上,並添加以下條目,這樣ProjectSend本身就不必查詢公共DNS,從而可以提高整體穩定性。 如果您的ProjectSend服務器無法解決 projectsend.example.com 主機名,那麼您可能會遇到 504網關超時 錯誤。

127.0.0.1   localhost projectsend.example.com

中的IP地址 /etc/hosts 文件可以具有多個主機名,因此,如果在同一框中安裝了其他應用程序,則還可以在同一行上添加其他主機名或子域,如下所示:

127.0.0.1   localhost focal ubuntu projectsend.example.com nextcloud.example.com

故障排除技巧

如果遇到錯誤,則可以檢查以下日誌文​​件之一,以查找問題所在。

  • Nginx錯誤日誌: /var/log/nginx/error.log
  • ProjectSend虛擬主機的Nginx錯誤日誌: /var/log/nginx/projectsend.error

包起來

我希望本教程可以幫助您使用Nginx在Ubuntu 20.04服務器上安裝ProjectSend。 與往常一樣,如果您發現這篇文章很有用,請訂閱我們的免費新聞簡報以獲取更多提示和技巧。 保重🙂

Sidebar