Cómo instalar ProjectSend en Ubuntu 20.04 con Nginx (LEMP Stack)

Este tutorial te mostrará cómo instalar ProjectSend en Ubuntu 20.04 LTS con el servidor web Nginx.

¿Qué es ProjectSend?

ProjectSend es una solución gratuita de código abierto para compartir archivos. Características de ProjectSend:

  • Estadísticas en tiempo real
  • Crear grupos de clientes
  • Autorregistro e inicio de sesión social
  • Plantillas de correo electrónico personalizadas

Requisitos previos

ProjectSend está escrito en lenguaje de programación PHP. Para seguir este tutorial, primero necesitas instalar la pila LEMP en Ubuntu 20.04. Si aún no lo has hecho, consulta el siguiente tutorial.

Puedes instalar ProjectSend en tu servidor doméstico o en un VPS (servidor virtual privado). También necesitas un nombre de dominio, así que más adelante podrás habilitar HTTPS para encriptar el tráfico HTTP. Yo registré mi nombre de dominio en NameCheap porque el precio es bajo y dan protección de privacidad whois gratis de por vida. ProjectSend se puede instalar sin un nombre de dominio, pero realmente no tiene sentido si no se cifra la conexión HTTP para evitar el espionaje. Recomiendo comprar un nombre de dominio, si realmente quieres jugar con el software del servidor y utilizarlo al máximo.

Cómo instalar ProjectSend

Paso 1: Descargar ProjectSend en Ubuntu 20.04

Inicia sesión en tu servidor Ubuntu 20.04. A continuación, descarga el archivo zip de ProjectSend en tu servidor. La última versión estable es la r1335 en el momento de escribir este artículo. Es posible que tenga que cambiar el número de versión. Vaya a https://www.projectsend.org/#download para ver la última versión.

Puedes ejecutar el siguiente comando para descargarlo en tu servidor.

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

Una vez descargado, extrae el archivo con unzip.

sudo apt install unzip

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

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

La opción -d especifica el directorio de destino. Los archivos web de ProjectSend se extraerán a /usr/share/nginx/projectsend/. Luego tenemos que cambiar el propietario de este directorio a www-data para que el servidor web (Nginx) pueda escribir en este directorio.

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

Paso 2: Crear una base de datos y un usuario para ProjectSend en el servidor de bases de datos MariaDB

Inicie sesión en el servidor de base de datos MariaDB con el siguiente comando. Dado que MariaDB utiliza ahora el plugin unix_socket para autenticar el inicio de sesión del usuario, no es necesario introducir la contraseña de root de MariaDB. Sólo tenemos que prefijar el comando mysql con sudo.

sudo mysql

A continuación, crea una base de datos para ProjectSend. Este tutorial nombra la base de datos projectsend. Puedes usar el nombre que quieras.

create database projectsend;

Crea el usuario de la base de datos. De nuevo, puedes utilizar el nombre que prefieras para este usuario. Reemplaza tu-contraseña con tu contraseña preferida.

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

Concede a este usuario todos los privilegios en la base de datos de projectsend.

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

Limpiar los privilegios y salir.

flush privileges;

exit;

Paso 3: Configurar ProjectSend

Ve al directorio de los includes.

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

Copia el archivo de configuración de ejemplo y renómbralo a sys.config.php.

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

Ahora edita el nuevo archivo de configuración con un editor de texto de línea de comandos como Nano.

sudo nano sys.config.php

Busca las siguientes líneas y sustituye los textos en rojo por el nombre de la base de datos, el nombre de usuario y la contraseña que creaste en el paso 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');

Guarda y cierra el archivo. Para guardar el archivo en el editor de texto Nano, presione Ctrl+O, y luego presione Enter para confirmar. A continuación, pulse Ctrl+X para salir.

Paso 4: Crear un archivo de configuración Nginx para ProjectSend

Crea un archivo projectsend.conf en el directorio /etc/nginx/conf.d/, con un editor de texto de línea de comandos como Nano.

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

Copia y pega el siguiente texto en el archivo. Sustituye projectend.tu-dominio.com por tu subdominio preferido. No te olvides de crear un registro DNS A para este subdominio en tu editor de zonas DNS. Si no tienes un nombre de dominio real, te recomiendo ir a NameCheap para comprar uno. El precio es bajo y dan protección de privacidad whois gratis de por vida.

server {
    listen 80;
    listen [::]:80;
    server_name projectend.tu-dominio.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;
   }
}

Guarda y cierra el archivo. (Para guardar un archivo en el editor de texto Nano, pulsa Ctrl+O, y luego pulsa Enter para confirmar. Para salir, pulse Ctrl+X).

A continuación, prueba la configuración de Nginx.

sudo nginx -t

Si la pruebas son exitosas, recarga Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

Paso 5: Instalar y habilitar los módulos PHP

Ejecuta los siguientes comandos para instalar los módulos PHP requeridos o recomendados por ProjectSend.

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

Paso 6: Habilitar HTTPS

Ahora puede acceder al asistente de instalación web de ProjectSend en su navegador web introduciendo el nombre de dominio de su instalación de ProjectSend.

projectsend.example.com/install/index.php

Si la página web no se puede cargar, probablemente necesite abrir el puerto 80 en el firewall.

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

Y el puerto 443 también.

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

Antes de introducir cualquier información sensible, debemos habilitar la conexión segura HTTPS en ProjectSend. Podemos obtener un certificado TLS gratuito de Let’s Encrypt. Instala el cliente de Let’s Encrypt (certbot) desde el repositorio de Ubuntu 20.04.

sudo apt install certbot python3-certbot-nginx

Python3-certbot-nginx es el plugin de Nginx. A continuación, ejecuta el siguiente comando para obtener un certificado TLS gratuito utilizando el plugin de Nginx.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d projectsend.example.com

Donde:

  • –nginx: Utilizar el autentificador y el instalador de Nginx
  • –agree-tos: Aceptar las condiciones de servicio de Let’s Encrypt
  • –redirect: Hacer valer el HTTPS añadiendo una redirección 301.
  • –hsts: Habilitar la seguridad estricta de transporte HTTP. Esto defiende contra el ataque de despojo de SSL/TLS.
  • –staple-ocsp: Activar el grapado OCSP.
  • –email: Correo electrónico utilizado para el registro y el contacto de recuperación.
  • -d flag va seguido de una lista de nombres de dominio, separados por comas. Puede añadir hasta 100 nombres de dominio.

Se le preguntará si desea recibir correos electrónicos de la EFF (Electronic Frontier Foundation). Después de elegir S o N, su certificado TLS se obtendrá y configurará automáticamente para usted, lo que se indica en el siguiente mensaje.

Paso 7: Finalice la instalación en su navegador web

Ahora puede acceder al asistente de instalación web de ProjectSend utilizando una conexión HTTPS.

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

Para completar la instalación, es necesario darle un nombre de sitio y crear una cuenta de administrador.

Haz clic en el botón Instalar y podrás acceder a la interfaz web de ProjectSend.

Cómo configurar la notificación por correo electrónico de ProjectSend

Si su instancia de ProjectSend será utilizada por más de una persona, es importante que su servidor de ProjectSend pueda enviar correos electrónicos transaccionales, como el correo electrónico de restablecimiento de contraseña. Ve a Opciones -> Notificaciones de correo electrónico. Encontrará la configuración del servidor de correo electrónico. Hay cuatro modos de envío:

  • PHP mail (basic)
  • SMTP
  • Gmail
  • Sendmail

Puedes elegir el modo sendmail si tu host de ProjectSend tiene un servidor SMTP en funcionamiento. Deja los demás campos en blanco.

Si quieres utilizar un servidor SMTP que se ejecuta en otro host, elige el modo SMTP e introduce la dirección del servidor SMTP y las credenciales de acceso como se indica a continuación. Elija STARTTLS para el cifrado.

Para saber cómo configurar un servidor de correo electrónico, consulta el siguiente tutorial. Observa que recomiendo encarecidamente ejecutar el servidor de correo iRedMail en un sistema operativo fresco y limpio. Instalar iRedMail en un sistema operativo que tiene otras aplicaciones web puede fallar, y probablemente romper las aplicaciones existentes.

Paso 8: Aumentar el límite de memoria de PHP

El límite de memoria de PHP por defecto es de 128MB. ProjectSend recomienda 512MB para un mejor rendimiento. Para cambiar el límite de memoria de PHP, edita el archivo php.ini.

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

Encuentra la siguiente línea. (línea 409)

memory_limit = 128M

Cambia el valor.

memory_limit = 512M

Guarda y cierra el archivo. Alternativamente, puedes ejecutar el siguiente comando para cambiar el valor sin abrir manualmente el archivo.

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

A continuación, recarga el servicio PHP-FPM para que los cambios surtan efecto.

sudo systemctl reload php7.4-fpm

Paso 9: Aumentar el límite de tamaño de los archivos cargados

El límite máximo de subida de archivos establecido por Nginx es de 1MB. Para permitir la subida de archivos grandes a su servidor de ProjectSend, edite el archivo de configuración de Nginx para ProjectSend.

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

Ya hemos establecido el tamaño máximo del archivo en este archivo, como se indica en

client_max_body_size 512M;

Puedes cambiarlo si lo prefieres, como 1G.

client_max_body_size 1024M;

Guarda y cierra el archivo. A continuación, vuelve a cargar Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

PHP también establece un límite de tamaño de archivo para subir. El tamaño máximo de archivo por defecto para subir es de 2MB. Para aumentar el límite de tamaño de subida, edite el archivo de configuración de PHP.

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

Encuentra la siguiente línea (línea 846).

upload_max_filesize = 2M

Cambia el valor como se indica a continuación:

upload_max_filesize = 1024M

Guarda y cierra el archivo. Alternativamente, puede ejecutar el siguiente comando para cambiar el valor sin abrir manualmente el archivo.

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

A continuación, reinicia PHP-FPM.

sudo systemctl restart php7.4-fpm

Añadir una entrada DNS local

Se recomienda editar el archivo /etc/hosts de su servidor de ProjectSend y añadir la siguiente entrada, para que el propio ProjectSend no tenga que consultar el DNS público, lo que puede mejorar la estabilidad general. Si el servidor de ProjectSend no puede resolver el nombre de host projectsend.tu-dominio.com, es posible que se produzca un error de tiempo de espera de la pasarela 504.

127.0.0.1   localhost projectsend.example.com

Una dirección IP en el archivo /etc/hosts puede tener múltiples nombres de host, así que si tienes otras aplicaciones instaladas en la misma caja, también puedes añadir otros nombres de host o subdominios en la misma línea de esta manera:

127.0.0.1   localhost focal ubuntu projectsend.tu-dominio.com nextcloud.tu-dominio.com

Si te encuentras con errores, puedes comprobar uno de los siguientes archivos de registro para averiguar qué está mal.

  • Nginx error log: /var/log/nginx/error.log
  • Nginx error log for the ProjectSend virtual host: /var/log/nginx/projectsend.error

¡Que tengas un ingenioso día!

¡que tengas un ingenioso día!

Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0

Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.

Deja un comentario

Share to...