使用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