Sei sulla pagina 1di 17

Content-Type: text/x-zim-wiki

Wiki-Format: zim 0.4


Creation-Date: 2019-09-26T08:14:29-04:00

====== Nextcloud 17 (Debian 9) ======


Creado jueves 26 septiembre 2019

**Nextcloud 17 con php 7.3, mariadb y nginx en un CT de Proxmox**


Nota: Todas las operaciones las haremos como "root", si usas un usuario diferente
escale con el comando "su -"
Nota 2: Si lo va a instalar en un Proxmox 6.x.x no olvide desmarcar "Unprivileged
CT" al crear el contenedor. Luego en CT_ID -> Options -> Features -> Nesting. Si no
activa la opción "Nesting" tendrá problemas al iniciar algunos procesos.

Articulo: https://www.c-rieger.de/nextcloud-installation-guide-debian/

**Preparando:**
Verifica la zona horaria:
timedatectl set-timezone America/Havana

apt install curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-


https tree locate software-properties-common dirmngr screen htop net-tools zip
unzip ffmpeg ghostscript libfile-fcntllock-perl sudo -y

Editar sorces.list y agrega:


nano /etc/apt/sources.list

deb [arch=amd64] http://nginx.org/packages/mainline/debian stretch nginx


deb [arch=amd64] https://packages.sury.org/php/ stretch main
deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/debian stretch
main

Descargamos las keys necesarias:


curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8

Actualizamos:
apt update && apt upgrade -y

**Nginx:**
apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-
packages

En caso de usar un CT nuevo no habra ningun servicio de apache corriendo, pero en


caso de instalar en uno usado asegurate de detenerlo, de lo contrario nginx no
iniciara porque el puerto requerido esta en uso (:80)

systemctl stop apache2.service && apt remove --purge apache2

apt install nginx -y && systemctl enable nginx.service

Configurar nginx:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && nano /etc/nginx/nginx.conf

Agrega lo siguiente:
user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
server_names_hash_bucket_size 64;
upstream php-handler {
server unix:/run/php/php7.3-fpm.sock;
}
set_real_ip_from 127.0.0.1;
set_real_ip_from 192.168.2.0/24;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
include /etc/nginx/mime.types;
#include /etc/nginx/proxy.conf;
#include /etc/nginx/ssl.conf;
#include /etc/nginx/header.conf;
#include /etc/nginx/optimization.conf;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
sendfile on;
send_timeout 3600;
tcp_nopush on;
tcp_nodelay on;
open_file_cache max=500 inactive=10m;
open_file_cache_errors on;
keepalive_timeout 65;
reset_timedout_connection on;
server_tokens off;
resolver 8.8.8.8 valid=30s;
resolver_timeout 5s;
include /etc/nginx/conf.d/*.conf;
}

Nota: Modifica "set_real_ip_from" por la subred en la que se instalara el CT.


Modifica "resolver" a otro DNS si lo desea

Reinicia el servicio:
service nginx restart

**Crea carpetas y aplica permisos:**


Nota.- Los siguientes directorios puedes cambiarlos a conveniencia:
/nextcloud-data = Donde estarán todos los archivos de los usuarios.
/var/www = Donde extraeremos el compactado para instalar Nextcloud.

mkdir -p /nextcloud-data /var/www


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

**PHP:**
apt install php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl php7.3-xml php7.3-zip
php7.3-intl php7.3-mbstring php7.3-json php7.3-bz2 php7.3-ldap php-apcu imagemagick
php-imagick -y

Configurando PHP:
cp /etc/php/7.3/fpm/pool.d/www.conf /etc/php/7.3/fpm/pool.d/www.conf.bak
cp /etc/php/7.3/cli/php.ini /etc/php/7.3/cli/php.ini.bak
cp /etc/php/7.3/fpm/php.ini /etc/php/7.3/fpm/php.ini.bak
cp /etc/php/7.3/fpm/php-fpm.conf /etc/php/7.3/fpm/php-fpm.conf.bak

sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/7.3/fpm/pool.d/www.conf ;


sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/7.3/fpm/pool.d/www.conf ; sed -i
"s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/7.3/fpm/pool.d/www.conf ; sed -i
"s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/7.3/fpm/pool.d/www.conf ; sed -i
"s/;env\[PATH\] = /env[PATH] = /" /etc/php/7.3/fpm/pool.d/www.conf ; sed -i
"s/pm.max_children = .*/pm.max_children = 240/" /etc/php/7.3/fpm/pool.d/www.conf ;
sed -i "s/pm.start_servers = .*/pm.start_servers = 20/"
/etc/php/7.3/fpm/pool.d/www.conf ; sed -i "s/pm.min_spare_servers =
.*/pm.min_spare_servers = 10/" /etc/php/7.3/fpm/pool.d/www.conf ; sed -i
"s/pm.max_spare_servers = .*/pm.max_spare_servers = 20/"
/etc/php/7.3/fpm/pool.d/www.conf ; sed -i "s/;pm.max_requests = 500/pm.max_requests
= 500/" /etc/php/7.3/fpm/pool.d/www.conf

sed -i "s/output_buffering =.*/output_buffering = 'Off'/"


/etc/php/7.3/cli/php.ini ; sed -i "s/max_execution_time =.*/max_execution_time =
1800/" /etc/php/7.3/cli/php.ini ; sed -i "s/max_input_time =.*/max_input_time =
3600/" /etc/php/7.3/cli/php.ini ; sed -i "s/post_max_size =.*/post_max_size =
10240M/" /etc/php/7.3/cli/php.ini ; sed -i "s/upload_max_filesize
=.*/upload_max_filesize = 10240M/" /etc/php/7.3/cli/php.ini ; sed -i
"s/max_file_uploads =.*/max_file_uploads = 100/" /etc/php/7.3/cli/php.ini ; sed -i
"s/;date.timezone.*/date.timezone = America\/\Havana/" /etc/php/7.3/cli/php.ini ;
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/"
/etc/php/7.3/cli/php.ini

sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.3/fpm/php.ini ; sed


-i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/7.3/fpm/php.ini ;
sed -i "s/max_execution_time =.*/max_execution_time = 1800/"
/etc/php/7.3/fpm/php.ini ; sed -i "s/max_input_time =.*/max_input_time = 3600/"
/etc/php/7.3/fpm/php.ini ; sed -i "s/post_max_size =.*/post_max_size = 10240M/"
/etc/php/7.3/fpm/php.ini ; sed -i "s/upload_max_filesize =.*/upload_max_filesize =
10240M/" /etc/php/7.3/fpm/php.ini ; sed -i "s/max_file_uploads =.*/max_file_uploads
= 100/" /etc/php/7.3/fpm/php.ini ; sed -i "s/;date.timezone.*/date.timezone =
America\/\Havana/" /etc/php/7.3/fpm/php.ini ; sed -i
"s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/7.3/fpm/php.ini
; sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/7.3/fpm/php.ini ; sed -i
"s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/7.3/fpm/php.ini ; sed -i
"s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/"
/etc/php/7.3/fpm/php.ini ; sed -i
"s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/"
/etc/php/7.3/fpm/php.ini ; sed -i
"s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/"
/etc/php/7.3/fpm/php.ini ; sed -i
"s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/7.3/fpm/php.ini
; sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/"
/etc/php/7.3/fpm/php.ini

sed -i "s/;emergency_restart_threshold =.*/emergency_restart_threshold = 10/"


/etc/php/7.3/fpm/php-fpm.conf ; sed -i "s/;emergency_restart_interval
=.*/emergency_restart_interval = 1m/" /etc/php/7.3/fpm/php-fpm.conf ; sed -i
"s/;process_control_timeout =.*/process_control_timeout = 10s/"
/etc/php/7.3/fpm/php-fpm.conf

sed -i "s/09,39.*/# &/" /etc/cron.d/php


(crontab -l ; echo "09,39 * * * * /usr/lib/php/sessionclean 2>&1") | crontab -u
root -

Configurando ImageMagick:
cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak

sed -i "s/rights\=\"none\" pattern\=\"PS\"/rights\=\"read\|write\"


pattern\=\"PS\"/" /etc/ImageMagick-6/policy.xml ; sed -i "s/rights\=\"none\"
pattern\=\"EPI\"/rights\=\"read\|write\" pattern\=\"EPI\"/" /etc/ImageMagick-
6/policy.xml ; sed -i "s/rights\=\"none\" pattern\=\"PDF\"/rights\=\"read\|write\"
pattern\=\"PDF\"/" /etc/ImageMagick-6/policy.xml ; sed -i "s/rights\=\"none\"
pattern\=\"XPS\"/rights\=\"read\|write\" pattern\=\"XPS\"/" /etc/ImageMagick-
6/policy.xml

Reinicia PHP y Nginx:


service php7.3-fpm restart && service nginx restart

**MariaDB**
apt update && apt install mariadb-server -y

Verifica la version:
mysql --version
mysql Ver 15.1 Distrib 10.3.x-MariaDB, for debian-linux-gnu (x86_64) using readline
5.2

Asegura MariaDB:
mysql_secure_installation

Enter current password for root (enter for none):


Nota.- Contraseña de MariaDB

Change root password? [Y/n] n


Nota: Si deseas cambiar la contraseña del usuario "root" de MariaDB este es el
momento.

Remove anonymous users? [Y/n] Y


Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Configurando MariaDB:
service mysql stop
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak && nano /etc/mysql/my.cnf

Agregue lo siguiente:
[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock

[mysqld]
basedir = /usr
bind-address = 127.0.0.1
binlog_format = ROW
bulk_insert_buffer_size = 16M
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
concurrent_insert = 2
connect_timeout = 5
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 10
general_log_file = /var/log/mysql/mysql.log
general_log = 0
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 4000
innodb_flush_method = O_DIRECT
key_buffer_size = 128M
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
log_error=/var/log/mysql/mysql_error.log
log_slow_verbosity = query_plan
log_warnings = 2
long_query_time = 1
max_allowed_packet = 16M
max_binlog_size = 100M
max_connections = 200
max_heap_table_size = 64M
myisam_recover_options = BACKUP
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 2M
query_cache_size = 64M
query_cache_type = 1
query_cache_min_res_unit = 2k
read_buffer_size = 2M
read_rnd_buffer_size = 1M
skip-external-locking
skip-name-resolve
slow_query_log_file = /var/log/mysql/mariadb-slow.log
slow-query-log = 1
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 4M
table_open_cache = 400
thread_cache_size = 128
tmp_table_size = 64M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
user = mysql
wait_timeout = 600

[mysqldump]
max_allowed_packet = 16M
quick
quote-names

[isamchk]
key_buffer = 16M
Reinicia y conectate:
service mysql restart && mysql -uroot -p

**Crea la base de datos, el usuario y la cotraseña:**


Base de datos = nextcloud
Usuario para conectarse a la Base de datos = nextcloud
Password = passw0rd (o la que usted desee)

CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE


USER nextcloud@localhost identified by 'passw0rd'; GRANT ALL PRIVILEGES on
nextcloud.* to nextcloud@localhost; FLUSH privileges; quit;

Verifique que "transaction Isolation level" se haya establecido a READ_COMMITTED y


la colación se estableció en UTF8MB4 correctamente:
mysql -h localhost -uroot -p -e "SELECT @@TX_ISOLATION; SELECT SCHEMA_NAME
'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME
'collation' FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='nextcloud'"

Introduzca el password de MariaDB.

+---------------------+
| @@TX_ISOLATION |
+---------------------+
| READ-COMMITTED |
+---------------------+
+-----------+---------+--------------------+
| database | charset | collation |
+-----------+---------+--------------------+
| nextcloud | utf8mb4 | utf8mb4_general_ci |
+-----------+---------+--------------------+

Si el conjunto de resultados fue "READ-COMMITTED" y "utf8mb4_general_ci" como se


muestra, continúe con la instalación de redis.

**Redis:**
apt update && apt install redis-server php-redis -y

Cambiar configuración y pertenencia a grupos:


cp /etc/redis/redis.conf /etc/redis/redis.conf.bak

sed -i "s/port 6379/port 0/" /etc/redis/redis.conf ; sed -i s/\#\


unixsocket/\unixsocket/g /etc/redis/redis.conf ; sed -i "s/unixsocketperm
700/unixsocketperm 770/" /etc/redis/redis.conf ; sed -i "s/# maxclients
10000/maxclients 512/" /etc/redis/redis.conf

usermod -a -G redis www-data

cp /etc/sysctl.conf /etc/sysctl.conf.bak ; sed -i '$avm.overcommit_memory = 1'


/etc/sysctl.conf

Ahora recomendamos reiniciar:


reboot

**Nextcloud:**
**Creando nextcloud.conf:**
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/default.conf.bak
touch /etc/nginx/conf.d/default.conf
nano /etc/nginx/conf.d/nextcloud.conf

Agrega:
server {
server_name nextcloud.dominio.cu;
listen 80 default_server;
#Si lo quieres para IPv6 descomenta
#listen [::]:80 default_server;
location ^~ /.well-known/acme-challenge {
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
server_name nextcloud.dominio.cu;
listen 443 ssl http2 default_server;
#Si lo quieres para IPv6 descomenta
#listen [::]:443 ssl http2 default_server;
root /var/www/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
client_max_body_size 10240M;
location / {
rewrite ^ /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ^~ /apps/rainloop/app/data {
deny all;
}
location ~ \.(?:flv|mp4|mov|m4a)$ {
mp4;
mp4_buffer_size 100M;
mp4_max_buffer_size 1024M;
fastcgi_split_path_info ^(.+?.php)(\/.*|)$;
include fastcgi_params;
include php_optimization.conf;
fastcgi_pass php-handler;
fastcgi_param HTTPS on;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|
updater\/.+|oc[ms]-provider\/.+).php(?:$|\/) {
fastcgi_split_path_info ^(.+?.php)(\/.*|)$;
include fastcgi_params;
include php_optimization.conf;
fastcgi_pass php-handler;
fastcgi_param HTTPS on;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
location ~ .(?:css|js|woff2?|svg|gif|map|png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;
access_log off;
expires 360d;
}
}

Nota: Modifica los 2 parametros "server_name" por el nombre DNS que tendra tu
servidor nextcloud.

Si desea que su Nextcloud se ejecute en un subdirectorio como


"https://servidor.dominio.cu/nextcloud", use este nextcloud.conf en su lugar:
server {
server_name servidor.dominio.cu;
listen 80 default_server;
listen [::]:80 default_server;
location ^~ /.well-known/acme-challenge {
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
server_name servidor.dominio.cu;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /var/www/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/nextcloud/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/nextcloud/remote.php/dav;
}
#SOCIAL app enabled? Please uncomment the following row
#rewrite ^/.well-known/webfinger /nextcloud/public.php?service=webfinger last;
#WEBFINGER app enabled? Please uncomment the following two rows.
#rewrite ^/.well-known/host-meta /nextcloud/public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /nextcloud/public.php?service=host-meta-json
last;
client_max_body_size 10240M;
location /nextcloud {
rewrite ^ /nextcloud/index.php$request_uri;
}
location ~ ^/nextcloud/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/nextcloud/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ^~ /nextcloud/apps/rainloop/app/data {
deny all;
}
location ~ \.(?:flv|mp4|mov|m4a)$ {
mp4;
mp4_buffer_size 100M;
mp4_max_buffer_size 1024M;
fastcgi_split_path_info ^(.+?.php)(\/.*|)$;
include fastcgi_params;
include php_optimization.conf;
fastcgi_pass php-handler;
fastcgi_param HTTPS on;
}
location ~ ^\/nextcloud/(?:index|remote|public|cron|core\/ajax\/update|status|
ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+).php(?:$|\/) {
fastcgi_split_path_info ^(.+?.php)(\/.*|)$;
include fastcgi_params;
include php_optimization.conf;
fastcgi_pass php-handler;
fastcgi_param HTTPS on;
}
location ~ ^\/nextcloud/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
location ~ .(?:css|js|woff2?|svg|gif|map|png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /nextcloud/index.php$request_uri;
access_log off;
expires 360d;
}
}

**Ahora crearemos el certificado SSL:**


mkdir /etc/nginx/certificados ; cd /etc/nginx/certificados

apt install openssl

openssl genrsa -out nextcloud.key 2048

openssl req -new -key nextcloud.key -out nextcloud.csr

Al ejecutar este comando vendrán una serie de preguntas las cuales voy a explicar a
continuación:
En caso de equivocación presionar Ctrl + C para cancelar, introducir el comando
anterior y volver a empezar.

Country Name (2 letter code) = Código de país en formato ISO de dos letras.
State or Province Name (full name) = Estado o provincia.
Locality Name = Localidad o ciudad.
Organization Name = Nombre de la organización.
Organizational Unit Name = Sector de la organización.
Common Name = FQDN del servidor. Introducir el DNS para tu nextcloud
(nextcloud.dominio.cu).
Email Address = Dirección de correo de contacto. (o Enter para no poner nada)
A los campos "A challenge password" y "An optional company name" dale Enter para
dejarlos en blanco.

Generamos el certificado para 10 años:


openssl x509 -req -days 3652 -in nextcloud.csr -signkey nextcloud.key -out
nextcloud.crt

**Creando ssl.conf:**
cd ~
nano /etc/nginx/ssl.conf

Agregale las lineas siguientes:


ssl_certificate /etc/nginx/certificados/nextcloud.crt;
ssl_certificate_key /etc/nginx/certificados/nextcloud.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-
GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-
GCM-SHA384';
ssl_ecdh_curve X448:secp521r1:secp384r1:prime256v1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;

**Creando proxy.conf:**
nano /etc/nginx/proxy.conf

Agregarle:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
proxy_redirect off;

**Crando header.conf:**
nano /etc/nginx/header.conf

Agregale:
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains;
preload;";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer" always;
#add_header Feature-Policy "accelerometer 'none'; autoplay 'self'; geolocation
'none'; midi 'none'; sync-xhr 'self' ; microphone 'self'; camera 'self';
magnetometer 'none'; gyroscope 'none'; speaker 'self'; fullscreen 'self'; payment
'none'; usb 'none'";
add_header X-Frame-Options "SAMEORIGIN";

**Creando optimization.conf:**
nano /etc/nginx/optimization.conf

Agregale:
fastcgi_hide_header X-Powered-By;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
fastcgi_connect_timeout 3600;
fastcgi_buffers 64 64K;
fastcgi_buffer_size 256k;
fastcgi_busy_buffers_size 3840K;
fastcgi_cache_key $http_cookie$request_method$host$request_uri;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
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;
gzip_disable "MSIE [1-6]\.";

**Creando php_optimization.conf:**
nano /etc/nginx/php_optimization.conf

Agregale:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid any 1h;
fastcgi_cache_methods GET HEAD;

Mejora la seguridad:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Nota: Por favor, sea paciente, tomara tiempo dependiendo de su hardware.

Reinicia Nginx:
sed -i s/\#\include/\include/g /etc/nginx/nginx.conf && service nginx restart

**Descargar, extraer Nextcloud y dar permisos:**


cd /var/www
wget https://download.nextcloud.com/server/releases/latest.tar.bz2
tar -xjf latest.tar.bz2 -C /var/www ; chown -R www-data:www-data /var/www/

Si lo tienes en .zip:
cd /var/www
unzip latest.zip ; chown -R www-data:www-data /var/www[[/var/www/|/]]

**Justo antes de instalar haremos un paréntesis para quienes quieran usar un


almacenamiento externo ya quede instalado Nextcloud dentro de dicho
almacenamiento.**

- **Usando un 2do HDD dentro del mismo Proxmox haremos lo siguiente:**

Apagamos el contenedor:
shutdown -h now

Nos conectamos al host Proxmox y realizamos estos pasos.

Asumiremos que usted solo tiene conectado el HDD sin montar y el sistema lo nombró
sdb, en caso de tenerlo ya montado desmóntelo y use la ruta /nextcloud-data.

Listamos los HDD


lsblk -fm
NAME FSTYPE LABEL UUID
MOUNTPOINT NAME SIZE OWNER GROUP MODE
sda
sda 298,1G root disk brw-rw----
├─sda1 ext4 456601bc-efa4-450c-b380-2441e3a351f0 /
├─sda1 294,1G root disk brw-rw----
├─sda2
├─sda2 1K root disk brw-rw----
└─sda5 swap a964f87b-4f06-4a08-bafb-e5f29ca049f8 [SWAP]
└─sda5 4G root disk brw-rw----
sdb ext4 d515e96b-d282-4ae2-9776-385e447e67fd
sdb 931,5G root disk brw-rw----

Si como dijimos, no lo tiene montado, en la parte de “MountPoint” para “sdb” no


saldrá nada.

(Si el HDD es nuevo) Formateamos el HDD en Ext4:


mkfs.ext4 /dev/sdb

Creamos un directorio en el cual montaremos el nuevo HDD. Montamos y corregimos


permisos:
mkdir /nextcloud-data
mount /dev/sdb /nextcloud-data/
chown -R www-data:www-data /nextcloud-data

Modificamos el archivo de configuración de nuestro contenedor (sustituir ID):


nano /etc/pve/lxc/ID.conf

Debajo de la línea “memory” agregamos lo siguiente:


mp0: /nextcloud-data,mp=/nextcloud-data
Nota.- Directorio de Proxmox mapeado a la carpeta /nextcloud-data del contenedor.
La información la guardaras directamente en el 2do HDD del Proxmox.

Listo! Iniciamos el contenedor nuevamente y continuamos con la Instalación del


Nextcloud.

- **Usando un compartido NFS:**

Apagamos el contenedor:
poweroff

Si usted tiene un servidor NFS en su red también puede usarlo para guardar los
datos de su Nextcloud. Para ello realizamos estos pasos.

Asumiremos que usted sabe trabajar con su servidor NFS y que ya creó el directorio
que va a compartir y modificó el archivo “/etc/exports” del NFS donde agrego el IP
de su servidor Nextcloud.

Un ejemplo de o que se debería agregar al exports:


/nextcloud-data/ 192.168.2.1(rw,no_wdelay,async,no_root_squash,no_subtree_check)

Luego de esto le realizaremos unos cambios al APP ARMOR del host Proxmox donde se
encuentra nuestro Nextcloud para que los Contenedores puedan conectarse al NFS.

Si su Proxmox es version 4.4.x:


nano /etc/apparmor.d/lxc/lxc-default-cgns

Y agregamos antes del “}” final:


allow mount fstype=nfs,
allow mount fstype=nfs4,
allow mount fstype=rpc_pipefs,

Si su Proxmox es version 5.2.x:


nano /etc/apparmor.d/lxc/lxc-default-cgns

Agregamos antes del “}” final:


mount fstype=nfs,
mount fstype=nfs4,
mount fstype=rpc_pipefs,

Si su Proxmox es version 6.x.x:


Como dijimos al inicio el CT debe tener privilegios sino no conecta con el servidor
NFS
Realice los mismos pasos que la version 5.

Y además en el archivo de configuración del contenedor:


nano /etc/pve/lxc/ID.conf

Agregamos las siguientes lineas al final:


lxc.apparmor.profile: lxc-default-cgns
lxc.apparmor.profile: unconfined

Luego de acomodar el APP ARMOR instalamos el cliente NFS en el contenedor de


Nextcloud:
apt install nfs-common

Creamos el archivo “rc.local” si no está, y le damos permisos:


touch /etc/rc.local
chmod -R 755 /etc/rc.local

Agregarle al “rc.local” el comando para que monte el compartido del NFS cuando se
inicie:
nano /etc/rc.local

Agregarle:
#!/bin/bash
mount -t nfs 192.168.2.1:/nextcloud-data /nextcloud-data
exit 0
Iniciamos el contenedor y revisamos si se montó bien el compartido con el siguiente
comando:
lsblk -fm
NAME FSTYPE LABEL UUID MOUNTPOINT NAME SIZE OWNER GROUP MODE
sdb /nextcloud-data sdb 931.5G

Listo! Ahí tenemos nuestro compartido NFS listo para utilizar.

Continuamos con la instalación…

**Instala Nextcloud silenciosamente:**


Nota.- -database-user "nextcloud": Lo creamos anteriormente configurando base
de datos y usuario.
-database-pass "passw0rd": La que pusimos anteriormente configurando base de
datos y usuario.
-admin-user "UsuarioAdmin": Nombre de usuario para administrar Nextcloud, el
que guste.
-admin-pass "PassswordAdmin": Contraseña del usuario de administracion, la
que guste.

su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ maintenance:install


--database "mysql" --database-name "nextcloud" --database-user "nextcloud"
--database-pass "passw0rd" --admin-user "UsuarioAdmin" --admin-pass
"PassswordAdmin" --data-dir "/nextcloud-data"'

Modifica la linea para tu dominio:


su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ config:system:set
trusted_domains 0 --value=nextcloud.dominio.cu'

su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ config:system:set


overwrite.cli.url --value=https://nextcloud.dominio.cu'

Si vas a acceder al Nextcloud por el IP agregamos tambien:


su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ config:system:set
trusted_domains 1 --value=192.168.2.10'

Hacemos una copia de la configuracion:


cp /var/www/nextcloud/config/config.php /var/www/nextcloud/config/config.php.bak

Amplía tu config.php de Nextcloud:


sed -i 's/^[ ]*//' /var/www/nextcloud/config/config.php ; sed -i '/);/d'
/var/www/nextcloud/config/config.php

cat <<EOF >>/var/www/nextcloud/config/config.php


'activity_expire_days' => 14,
'auth.bruteforce.protection.enabled' => true,
'blacklisted_files' =>
array (
0 => '.htaccess',
1 => 'Thumbs.db',
2 => 'thumbs.db',
),
'cron_log' => true,
'enable_previews' => true,
'enabledPreviewProviders' =>
array (
0 => 'OC\\Preview\\PNG',
1 => 'OC\\Preview\\JPEG',
2 => 'OC\\Preview\\GIF',
3 => 'OC\\Preview\\BMP',
4 => 'OC\\Preview\\XBitmap',
5 => 'OC\\Preview\\Movie',
6 => 'OC\\Preview\\PDF',
7 => 'OC\\Preview\\MP3',
8 => 'OC\\Preview\\TXT',
9 => 'OC\\Preview\\MarkDown',
),
'filesystem_check_changes' => 0,
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'logfile' => '/var/nc_data/nextcloud.log',
'loglevel' => 2,
'logtimezone' => 'America/Havana',
'log_rotate_size' => 104857600,
'maintenance' => false,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'overwriteprotocol' => 'https',
'preview_max_x' => 1024,
'preview_max_y' => 768,
'preview_max_scale_factor' => 1,
'redis' =>
array (
'host' => '/var/run/redis/redis.sock',
'port' => 0,
'timeout' => 0.0,
),
'quota_include_external_storage' => false,
'share_folder' => '/Shares',
'skeletondirectory' => '',
'theme' => '',
'trashbin_retention_obligation' => 'auto, 7',
'updater.release.channel' => 'stable',
);
EOF

Nota: OJO con el "ATTENTION.

**Edita el .user.ini de Nextcloud:**


sudo -u www-data sed -i "s/output_buffering=.*/output_buffering='Off'/"
/var/www/nextcloud/.user.ini

Reinicia servicios:
service php7.3-fpm restart && service redis-server restart && service nginx restart

**Ajustar aplicaciones de Nextcloud:**


su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ app:disable
survey_client'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ app:disable
firstrunwizard'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ app:enable admin_audit'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ app:enable
files_pdfviewer'
**Optimiza Nextcloud usando 2 scripts:**

A.- Actualiza tu servidor periodicamente:


nano /root/upgrade.sh

#!/bin/bash
/usr/sbin/service nginx stop
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/updater/updater.phar'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ status'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ -V'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ db:add-missing-indices'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ db:convert-filecache-
bigint'
sed -i "s/output_buffering=.*/output_buffering='Off'/" /var/www/nextcloud/.user.ini
chown -R www-data:www-data /var/www/nextcloud
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ update:check'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ app:update --all'
/usr/sbin/service php7.3-fpm restart
/usr/sbin/service nginx restart
exit 0

B.- Optimiza tu servidor periodicamente:


nano /root/optimize.sh

#!/bin/bash
redis-cli -s /var/run/redis/redis.sock <<EOF
FLUSHALL
quit
EOF
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ files:scan --all'
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ files:scan-app-data'
exit 0

Salva ambos scripts y marcalos como ejecutables:


chmod +x /root/*.sh

Ejecutelos:
/root/upgrade.sh && /root/optimize.sh

**Añadir cronjobs para www-data y root:**


Para www-data:
crontab -u www-data -e

Agrega:
*/5 * * * * php -f /var/www/nextcloud/cron.php > /dev/null 2>&1

Para root:
crontab -e

Agrega debajo de la que aparece:


5 1 * * * /root/optimize.sh 2>&1

**Configurar Nextcloud para que use cron.php:**


su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ background:cron'

**Reiniciar el servidor:**
reboot

Logueate en tu nuevo servidor de Nextcloud:


https://nextcloud.dominio.cu/login o https://192.168.2.1/login

Usuario = nextcloud (El que especificamos instalando Nextcloud silenciosamente)


Password= passw0rd (El que especificamos instalando Nextcloud silenciosamente)

**Si falla la comprobación de integridad dentro de Nextcloud, intente cambiar el


config.php:**
sudo -u www-data sed -i "s/.*integrity.check.disabled.*/'integrity.check.disabled'
=> true,/g" /var/www/nextcloud/config/config.php

Vuelva a ejecutar la comprobación de integridad y vuelva a establecer el valor en


"falso":
sudo -u www-data sed -i "s/.*integrity.check.disabled.*/'integrity.check.disabled'
=> false,/g" /var/www/nextcloud/config/config.php

Una vez completada la instalacion vamos al apartado "**Configuracion**" pinchando


en el icono de engranaje en la parte superior derecha.
Luego pinchamos en "**Ajustes basicos**" y revisamos el apartado "**Avisos de
seguridad y configuración**".
Si dice "**Ha pasado todos los controles**" pues genial, no nos queda nada por
hacer.
Si dice "**Hace mas de 'X' años que no se ejecutan los cron jobs**" no te
preocupes, dale varios minutos para que se ejecuten los que agregamos durante la
instalacion y la alerta desaparecera.
Si dice "**El servidor no tiene conexión a internet**" pues es algo muy evidente.

En los pasos siguientes nos preguntara si queremos iniciar la actualizacion ("Y") y


una ves que termine el proceso nos dira si queremos mantener el "Modo
Mantenimiento" activado. Le damos "N", y nos logueamos para ver si todo esta OK.

Potrebbero piacerti anche