使用 Nginx(LEMP 堆栈)在 Ubuntu 20.04 上安装 ProjectSend

本教程将向您展示如何使用 Nginx Web 服务器在 Ubuntu 20.04 LTS 上安装 ProjectSend。

什么是 ProjectSend?

ProjectSend 是一个免费的开源自托管文件共享解决方案。 项目发送功能:

  • 实时统计
  • 创建客户群
  • 自行注册和社交登录
  • 自定义电子邮件模板

先决条件

ProjectSend 是用 PHP 编程语言编写的。 要遵循本教程,您首先需要在 Ubuntu 20.04 上安装 LEMP 堆栈. 如果您还没有这样做,请查看以下教程。

  • 如何在 Ubuntu 20.04 上安装 LEMP 堆栈(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 root 密码。 我们只需要添加前缀 mysql 命令与 sudo.

sudo mysql

然后为 ProjectSend 创建一个数据库。 本教程将数据库命名为projectsend。 您可以使用任何您喜欢的名称。

create database projectsend;

创建数据库用户。 同样,您可以为此用户使用您的首选名称。 代替 your-password 使用您的首选密码。

create user projectsenduser@localhost identified by 'your-password';

授予此用户所有权限 projectsend 数据库。

grant all privileges on projectsend.* to projectsenduser@localhost;

刷新权限并退出。

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'); 

Save 和 close 文件。 要将文件保存在 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;    } }

Save 和 close 文件。 (要在 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

现在,您可以在 Web 浏览器中通过输入 ProjectSend 安装的域名来访问 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 身份验证器和安装程序
  • ——同意: 同意 Let’s Encrypt 服务条款
  • – 重定向:通过添加 301 重定向来强制执行 HTTPS。
  • –hsts:启用 HTTP 严格传输安全。 这可以防御 SSL/TLS 剥离攻击。
  • –staple-ocsp:启用 OCSP 装订。
  • -电子邮件:用于注册和恢复联系人的电子邮件。
  • -d flag 后面是域名列表,以逗号分隔。 您最多可以添加 100 个域名。

系统会询问您是否希望接收来自 EFF(电子前沿基金会)的电子邮件。 选择 Y 或 N 后,将自动为您获取和配置您的 TLS 证书,如下消息所示。