Cómo instalar Nextcloud con Nginx en Ubuntu 18.04 LTS

Instalar el servidor web Nginx

Nextcloud es un software gratuito (de código abierto) similar a Dropbox, una bifurcación del proyecto ownCloud. Nextcloud está escrito en PHP y JavaScript, es compatible con muchos sistemas de bases de datos como MySQL/MariaDB, PostgreSQL, Oracle Database y SQLite. Para mantener sus archivos sincronizados entre el escritorio y su propio servidor, Nextcloud proporciona aplicaciones para escritorios de Windows, Linux y Mac y una aplicación móvil para Android e iOS. Nextcloud no es solo un clon de Dropbox, proporciona funciones adicionales como Calendario, Contactos, Programar tareas y transmisión de medios con Ampache, etc.

En este tutorial, le mostraremos c√≥mo instalar y configurar la √ļltima versi√≥n de Nextcloud (al momento de escribir esto, la √ļltima versi√≥n es la 13.0.2) en un servidor Ubuntu 18.04. Ejecutaremos Nextcloud con un servidor web Nginx y PHP7.1-FPM y usaremos el servidor MySQL como sistema de base de datos.

requisitos previos

  • Ubuntu 18.04
  • Privilegios de ra√≠z

Lo que haremos

  1. Instalar el servidor web Nginx
  2. Instalar y configurar PHP7.1-FPM
  3. Instalar y configurar el servidor MySQL
  4. Generar SSL Letsencrypt
  5. Descargar Nextcloud 13
  6. Configurar el host virtual de Nginx para Nextcloud
  7. Configuración del cortafuegos UFW
  8. Posterior a la instalación de Nextcloud

Paso 1: instale el servidor web Nginx

El primer paso que haremos en esta guía de nextcloud es instalar el servidor web Nginx. Usaremos el servidor web Nginx en lugar del servidor web Apache.

Inicie sesión en el servidor y actualice el repositorio, luego instale el servidor web Nginx usando el comando apt como se muestra a continuación.

sudo apt update
sudo apt install nginx -y

Una vez completada la instalación, inicie el servicio Nginx y habilite el servicio para que se inicie cada vez que se inicie el sistema mediante systemctl.

systemctl start nginx
systemctl enable nginx

El servidor web Nginx se ha instalado en Ubuntu 18.04. Compruébelo usando el comando netstat o curl a continuación.

netstat -plntu
curl -I localhost

El servidor web Nginx ahora se ejecuta bajo Ubuntu en el puerto HTTP est√°ndar 80.

Instalar el servidor web Nginx

Paso 2: instalar y configurar PHP7.1-FPM

En este tutorial, usaremos PHP7.1-FPM para nextcloud. Usaremos PHP7.1-FPM del repositorio de PPA, por lo que debemos agregar un nuevo repositorio de PPA a nuestro sistema.

Instale el paquete ‘software-properties-common’ y agregue el repositorio PPA ‘ondrej PHP’ ejecutando los siguientes comandos.

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y

Nota:

En Ubuntu 18.04, el comando ‘add-apt-repository’ actualizar√° autom√°ticamente el repositorio.

Ahora instale PHP7.1 y PHP7.1-FPM con todas las extensiones necesarias usando el √ļnico comando apt a continuaci√≥n.

sudo apt install php7.1-fpm php7.1-mcrypt php7.1-curl php7.1-cli php7.1-mysql php7.1-gd php7.1-iconv php7.1-xsl php7.1-json php7.1-intl php-pear php-imagick php7.1-dev php7.1-common php7.1-mbstring php7.1-zip php7.1-soap -y

Una vez completada la instalación, configuraremos los archivos php.ini para php-fpm y php-cli.

Vaya al directorio ‘/etc/php/7.1’.

cd /etc/php/7.1/

Edite los archivos php.ini para php-fpm y php-cli usando vim.

vim fpm/php.ini
vim cli/php.ini

Descomente la l√≠nea ‘date.timezone’ y cambie el valor con su propia zona horaria.

date.timezone = Asia/Jakarta

Descomente la l√≠nea ‘cgi.fix_pathinfo’ y cambie el valor a ‘0’.

cgi.fix_pathinfo=0

Guardar y Salir.

A continuaci√≥n, edite la configuraci√≥n del grupo php-fpm ‘www.conf’.

vim fpm/pool.d/www.conf

Descomente esas líneas a continuación.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Guardar y Salir.

Reinicie el servicio PHP7.1-FPM y permita que se inicie cada vez que se inicie el sistema.

systemctl restart php7.1-fpm
systemctl enable php7.1-fpm

Ahora verifíquelo usando el comando netstat.

netstat -pl | grep php

Y obtendr√° que php-fpm ahora se est√° ejecutando en el archivo sock ‘/run/php/php7.1-fpm.sock’.

Instalar PHP

Paso 3: instalar y configurar el servidor MySQL

En este paso, instalaremos la √ļltima versi√≥n de MySQL y crearemos una nueva base de datos para la instalaci√≥n de nextcloud. Los paquetes MySQL de la √ļltima versi√≥n est√°n disponibles en el repositorio de forma predeterminada.

Instale la √ļltima versi√≥n del servidor MySQL usando el comando apt a continuaci√≥n.

sudo apt install mysql-server mysql-client -y

Una vez completada la instalación, inicie el servicio MySQL y habilítelo para que se inicie cada vez que se inicie el sistema.

systemctl start mysql
systemctl enable mysql

Ahora configuraremos la contrase√Īa de root de MySQL usando el comando ‘mysql_secure_installation’.

Ejecute el siguiente comando.

mysql_secure_installation

En esta versi√≥n de MySQL 5.8, hay una mejora de seguridad para la pol√≠tica de contrase√Īas de MySQL. Debe elegir la pol√≠tica de contrase√Īa: 0 para la pol√≠tica BAJA, 1 para la pol√≠tica MEDIA y 2 para una pol√≠tica de contrase√Īa FUERTE.

Para esta gu√≠a, usaremos la pol√≠tica de contrase√Īas ‘MEDIA’ y se recomienda usar la pol√≠tica de contrase√Īas ‘FUERTE’ en el servidor de producci√≥n.

Elija el n√ļmero ‘1’ y presione Entrar, luego escriba su nueva contrase√Īa ‘root’ de MySQL.

Instalar MySQLAnuncio publicitario

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

Y se ha configurado la contrase√Īa de root de MySQL.

A continuaci√≥n, crearemos una nueva base de datos para la instalaci√≥n de nextcloud. Crearemos una nueva base de datos llamada ‘nextcloud_db’ con el usuario ‘nextclouduser’ y contrase√Īa ‘[email¬†protected]’.

Inicie sesión en MySQL shell como usuario root con el comando mysql.

mysql -u root -p
TYPE THE MYSQL ROOT PASSWORD

Ahora cree la base de datos y el usuario con la contrase√Īa ejecutando las siguientes consultas de MySQL.

create database nextcloud_db;
create user [email protected] identified by '[email protected]';
grant all privileges on nextcloud_db.* to [email protected] identified by '[email protected]';
flush privileges;

Y se ha creado la nueva base de datos y usuario para la instalación de nextcloud.

Configurar base de datos MySQL

La instalación y configuración de MySQL para nextcloud se ha completado.

Paso 4 – Genera SSL Letsencrypt

En este tutorial, protegeremos nextcloud usando SSL gratuito de Letsencrypt y generaremos archivos de certificados usando la herramienta letsencrypt.

Si no tiene un nombre de dominio o no instala nextcloud en la computadora local, puede generar el certificado autofirmado usando OpenSSL.

Instale la herramienta ‘letsencrypt’ usando el comando apt a continuaci√≥n.

sudo apt install letsencrypt -y

Una vez completada la instalación, detenga el servicio nginx.

systemctl stop nginx

A continuaci√≥n, generaremos los certificados SSL para nuestro nombre de dominio ‘nextcloud.hakase-labs.io’ utilizando la l√≠nea de comandos de cerbot. Ejecute el siguiente comando.

certbot certonly --standalone -d nextcloud.hakase-labs.io

Se le pedir√° la direcci√≥n de correo electr√≥nico y se utilizar√° para la notificaci√≥n de renovaci√≥n. Para el acuerdo de TOS de Letsencrypt, escriba ‘A’ para aceptar y para la direcci√≥n de correo electr√≥nico compartida, puede escribir ‘N’ para No.

Generar Let's encrypt certificado SSL

Cuando esté completo, obtendrá el resultado como se muestra a continuación.

certificado SSL creado

Se han generado los certificados SSL Letsencrypt para el nombre de dominio netxcloud, todos ubicados en el directorio ‘/etc/letsencrypt/live/domain’.

Paso 5 – Descarga Nextcloud

Antes de descargar el c√≥digo fuente de nextcloud, aseg√ļrese de que el paquete de descompresi√≥n est√© instalado en el sistema. Si no tiene el paquete, inst√°lelo usando el comando apt a continuaci√≥n.

sudo apt install wget unzip zip -y

Ahora vaya al directorio ‘/var/www’ y descargue el archivo nextcloud-13.0.2.zip.

cd /var/www/
wget https://download.nextcloud.com/server/releases/latest.zip

Extraiga el archivo zip y obtendr√° el directorio ‘nextcloud’, luego cree un nuevo directorio de ‘datos’.

unzip latest.zip
mkdir -p nextcloud/data/

Ahora cambie el propietario del directorio ‘nextcloud’ al usuario y grupo ‘www-data’.

chown -R www-data:www-data /var/www/nextcloud/

Nextcloud se ha descargado en el directorio ‘/var/www/nextcloud’ y ser√° el directorio ra√≠z web.

Paso 6: configurar el host virtual de Nginx para Nextcloud

En este paso, configuraremos el host virtual nginx para nextcloud. Configuraremos nextcloud para que se ejecute bajo la conexión HTTPS y forzaremos la conexión HTTP automáticamente a la conexión HTTPS segura.

Ahora vaya al directorio ‘/etc/nginx/sites-available’ y cree un nuevo archivo de host virtual ‘nextcloud’.

cd /etc/nginx/sites-available/
vim nextcloud

Allí, pegue la siguiente configuración de host virtual de nextcloud.

upstream php-handler {
    #server 127.0.0.1:9000;
    server unix:/run/php/php7.1-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name nextcloud.hakase-labs.pw;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.hakase-labs.pw;

    ssl_certificate /etc/letsencrypt/live/nextcloud.hakase-labs.pw/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.hakase-labs.pw/privkey.pem;

    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    # add_header Strict-Transport-Security "max-age=15552000;
    # includeSubDomains; preload;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    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;

    # Path to the root of your installation
    root /var/www/nextcloud/;

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

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

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

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

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

    location / {
        rewrite ^ /index.php$uri;
    }

    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
        deny all;
    }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }

    location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;
        #Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~ \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        # add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        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;
        # Optional: Don't log access to assets
        access_log off;
    }

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

Guardar y Salir.

Habilite el host virtual y pruebe la configuraci√≥n, y aseg√ļrese de que no haya ning√ļn error.

ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
nginx -t

Ahora reinicie el servicio PHP7.1-FPM y el servicio nginx usando el comando systemctl a continuación.

systemctl restart nginx
systemctl restart php7.1-fpm

Se ha creado la configuración de host virtual de Nginx para nextcloud.

Configurar Nginx para Nextcloud

Paso 7: configurar el cortafuegos UFW

En este tutorial, activaremos el firewall y usaremos el firewall UFW para Ubuntu.

Habilite el cortafuegos ufw.

ufw enable

Escriba ‘y’ y presione Entrar para iniciar y habilitar el firewall UFW.

Ahora agregue nuevos SSH, HTTP y HTTPS a la lista de firewalls de UFW.

ufw allow ssh

ufw allow http
ufw allow https


Verifique el puerto de la lista permitida en el firewall UFW usando el comando a continuación.

ufw status

Y obtendr√° el puerto HTTP 80 y el puerto HTTPS 443 est√° en la lista.

Configurar el cortafuegos UFW

Paso 8: instalación posterior de Nextcloud

Abra su navegador web y escriba la dirección URL de nextcloud.

http://nextcloud.hakase-labs.io/

Y será redirigido a la conexión segura HTTPS.

En la p√°gina superior, necesitamos crear el usuario administrador para nextcloud, escriba la contrase√Īa del usuario administrador. En la configuraci√≥n de ‘Carpeta de datos’, escriba la ruta completa del directorio ‘datos’ ‘/var/www/nextcloud/data’.

Iniciar sesión en nextCloud

Despl√°cese por la p√°gina hasta el final y obtendr√° la configuraci√≥n de la base de datos. Escriba la informaci√≥n de la base de datos que hemos creado en el paso 3 y luego haga clic en el bot√≥n ‘Finalizar configuraci√≥n’.

Configuración de base de datos

Y una vez completada la instalación, obtendrá el panel de Nextcloud como se muestra a continuación.

Tablero de Nextcloud

La instalación de Nextcloud 13 con el servidor web Nginx y la base de datos MySQL en Ubuntu 18.04 se completó con éxito.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *