Instalación de wordpress y nextcloud sobre Nginx con MariaDB y PHP7 en Debian 8

myvirtualserver.com ofrecen VPS con 2 tipos de virtualización. Si adquirimos uno (se pagan mensualmente) de tipo KVM vamos a poder calzarle cualquier ISO a la maquina virtual.
Para ello es bueno que tengamos claro antes de nada que vamos a tener que configurar la red y por eso mismo es bueno anotarse estas cositas (son datos de ejemplo):
  
IP: 185.201.92.27
MASCARA DE RED: 255.255.255.0
GATEWAY: 185.201.92.1
DNS: 8.8.8.8 (u otro mejor que no el de google)
DOMINIO: ingoberlab.net
URL DEBIAN 8 NETINSTALL: https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-8.8.0-amd64-netinst.iso
URL WORDPRESS: https://es.wordpress.org/wordpress-4.7.5-es_ES.tar.gz
URL NEXTCLOUD: https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip
  

PASO 0: INSTALAR DEBIAN EN EL VPS

  
Esto se hace desde el panel de gestión web. Se puede indicar la url de una iso (debian 8 por ejemplo o debian 9 si gustas de probar la nueva). Luego el proceso es como instalar en cualquier ordenador la distro. Necesitaremos los datos de red que estarán en alguna pestaña del panel de gestión del VPS.
  
La instalación tardará unos 15 minutos.
  
Tras la instalación añadimos algún repositorio extra:
  
# apt-get update
  
En el /etc/apt/sources.list añadimos repo de backports:
  

deb http://ftp.debian.org/debian jessie-backports main
deb http://packages.dotdeb.org jessie all

  

# wget https://www.dotdeb.org/dotdeb.gpg
# apt-key add dotdeb.gpg
# apt-get update

  
Obtenemos un certificado https de letsencrypt usando certbot:
  

apt-get install certbot -t jessie-backports
certbot certonly --standalone -d ingoberlab.net

  

PASO 1: INSTALAR NGINX, PHP7, MARIADB Y CERTIFICADO

  
Instalamos nginx:
  

# apt-get install nginx

Instalamos los paquetes necesarios PHP7 (para wp y para nextcloud):
  

# apt install php7.0-gd php7.0-json php7.0-mysql php7.0-curl php7.0-mbstring php7.0-intl php7.0-mcrypt php7.0-imagick php7.0-xml php7.0-zip zip php7.0-fpm

  
Instalamos Mariadb tanto cliente como servidor:
  

# apt-get install mariadb-client mariadb-server

  

PASO 2: INSTALAR WORDPRESS

Creamos base de datos y usuario en mariadb para luego pasarle los datos a wordpres (al instalador):
  

CREATE DATABASE wordpress_db;
GRANT USAGE ON wordpress_db.* TO wordpress_usuario@localhost IDENTIFIED BY '12345';
GRANT ALL PRIVILEGES ON wordpress_db.* TO wordpress_usuario@localhost;
FLUSH PRIVILEGES;

  
Supongamos tenemos ingoberlab.net apuntando a nuestro server (o caulquier otro dominio, ese es uno de ejemplo).

# mysql_secure_installation 
$ cd /var/www
# rm -rf html
# wget https://es.wordpress.org/wordpress-4.7.5-es_ES.tar.gz
# tar xfvz wordpress-4.7.5-es_ES.tar.gz 
# mv wordpress ingoberlab.net
# chown -R www-data:www-data ingoberlab.net/
# rm wordpress-4.7.5-es_ES.tar.gz 
# cd /etc/nginx/sites-available/
# mv default ingoberlab.net

  
Editamos el archivo ingoberlab.net, borramos todo y ponemos esto (adaptalo a tu configuración):
  

server {
        listen 80;
        listen [::]:80;
        server_name ingoberlab.net;
        return  301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name ingoberlab.net;
        charset utf-8;

        add_header Strict-Transport-Security "max-age=31536000;";
        add_header Pragma "no-cache";
        add_header Cache-Control "private, max-age=0, no-cache, no-store";

        ssl on;
        ssl_certificate /etc/letsencrypt/live/ingoberlab.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ingoberlab.net/privkey.pem;

        access_log /var/log/nginx/ingoberlab.net-access.log;
        error_log  /var/log/nginx/ingoberlab.net-error.log;

        root /var/www/ingoberlab.net;
        index index.php index.html;

        location / {
                try_files $uri $uri/ /index.php?q=$request_uri;
                error_page    404 = /404.php;
                fastcgi_intercept_errors on;
        }

        # Denegar el acceso a archivos como .htaccess, .htpasswd, .DS_Store (Mac).
        location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
        }

        location = /xmlrpc.php {
                deny all;
                access_log off;
                log_not_found off;
        }


        location ~* /wp-json/wp/v2/users/ {
                deny all;
                access_log off;
                log_not_found off;
        }


        location ~ \.php {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                error_page    404 = /404.php;
        }

        location ~* /(?:uploads|files)/.*\.php$ {
            deny all;
        }


        location ~ /wp-content/uploads/
        {
                add_header Cache-control "public";
                access_log   off;
                expires      90d;
        }

        location ~* .(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$
        {
                add_header        Cache-control "public";
                expires                90d;
                access_log        off;
        }
}

  

# ln -s /etc/nginx/sites-available/ingoberlab.net /etc/nginx/sites-enabled/ingoberlab.net

  
/etc/init.d/nginx restart
/etc/init.d/php7.0-fpm restart
  
Instalamos desde el navegador el resto : https://ingoberlab.net (tu dominio, ese es de ejemplo)
  

PASO 3: INSTALAR NEXTCLOUD

Proceso similar al de wordpress. Podemos montarlo en un subdominio como por ejemplo: cloud.ingoberlab.net .
  
Apuntamos el subdominio cloud.ingoberlab.net al VPS.
  
Se descarga el zip de nexcloud. Se descomprime. Y un archivo de configuración buena cosa para nginx con el aplicativo nextcloud podría ser este:
  

upstream php-handler {
        server unix:/run/php/php7.0-fpm.sock;
}

server {
        listen 80;
        server_name cloud.ingoberlab.net;
        return  301 https://$server_name$request_uri;
}

server {
        listen 443 ssl;
        server_name cloud.ingoberlab.net;
        charset utf-8;
        client_max_body_size 1G;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/cloud.ingoberlab.net/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/cloud.ingoberlab.net/privkey.pem;

        root /var/www/cloud.ingoberlab.net/;

        index index.php;

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

        access_log /var/log/nginx/cloud.ingoberlab.net-access.log;
        error_log  /var/log/nginx/cloud.ingoberlab.net-error.log;

        add_header Cache-Control "public, max-age=7200";
        add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-Frame-Options "SAMEORIGIN";
        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;

        # Denegar el acceso a archivos como .htaccess, .htpasswd, .DS_Store (Mac).
        location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
        }

        location / {
                #rewrite ^/remote/(.*) /remote.php last;
                #rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
                try_files $uri $uri/ =404;
        }

        location ~ \.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;
                fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
                fastcgi_pass php-handler;
                fastcgi_intercept_errors on;
        }

        location ~* \.(?:css|js)$ {
                add_header Cache-Control "public, max-age=7200";
                add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
                add_header X-Content-Type-Options nosniff;
                add_header X-Frame-Options "SAMEORIGIN";
                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;
    }

        location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
                access_log off;
        }
}

  
Y poco más. Eso serían más o menos los pasos a groso modo. Luego afinarlo es cosa de cada cual y añadirle configuración más segura.

 

¿Le ha gustado el contenido?

Si le ha gustado y le ha sido de utilidad puede donar aquí https://paypal.me/mierdatv .  
También puede escribir un comentario si lo considera oportuno.  
 

Comentarios 1

Deja un comentario

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