
Con esta guía que es una traducción del sitio de Carsten Rieger ,instalarás la última versión de Nextcloud 17 para Debian 9.x o para Debian 10 en un contenedor de Proxmox. La instalación incluye Nginx, PHP 7.3, MariaDB, Redis y Certificados autofirmados para llevar el sitio a HTTPS.
Requisitos:
– Conexión a Internet.
– Contenedor de Proxmox con Debian 9.x o Debian 10.x (64Bit).
Opcional:
– Almacenamiento externo (FreeNAS, NFS, Cloudbox, etc) anclado al contenedor en el cual guardaremos los archivos de los usuarios.
Nota.- Todas las operaciones las haremos como “root”, si usas un usuario diferente escale con el comando “su -”
Nota.- Si lo va a instalar en un Proxmox 6.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.
Preparando:
Verifica la zona horaria:
1 | # dpkg-reconfigure tzdata |
Escogemos “America” y luego “Havana”
Configura “locales”:
1 | # dpkg-reconfigure locales |
Busca en la lista: en_US.UTF-8 UTF-8
Seleccionarlo con “Espacio”, y en la siguiente pantalla bajar hasta “en_US.UTF-8” y “Enter”.
Reiniciar y verificar:
1 | # locale |
Intalando herramientas necesarias:
1 2 | # apt update # 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 mc -y |
Agregar nuevos repositorios:
1 | # cd /etc/apt/sources.list.d |
1 2 3 | echo "deb [arch=amd64] http://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" | tee nginx.list echo "deb [arch=amd64] https://packages.sury.org/php/ $(lsb_release -cs) main" | tee php.list echo "deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.3/debian $(lsb_release -cs) main" | tee mariadb.list |
Descargamos las keys necesarias:
1 2 3 | # 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:
1 | # apt update ; apt upgrade -y |
Nginx:
1 | # apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-packages |
En caso de usar un CT nuevo no habrá ningún servicio de apache corriendo, pero en caso de instalar en uno usado asegúrate de detenerlo, de lo contrario Nginx no iniciará porque el puerto requerido está en uso (:80)
1 2 | # systemctl stop apache2.service ; apt remove --purge apache2 # apt install nginx -y ; systemctl enable nginx.service |
Configurar nginx:
1 | # mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak ; nano /etc/nginx/nginx.conf |
Agregarle:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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 instalará el CT. Modifica “resolver” a otro IP DNS si lo desea.
Reinicia el servicio:
1 | # service nginx restart |
Crea carpetas y aplica permisos:
Nota.- El siguiente directorio puedes cambiarlo a conveniencia, pero tenlo en cuenta porque a él debes anclar el almacenamiento externo en caso que lo uses:
/nextcloud-data = Donde estarán todos los archivos de los usuarios.
1 2 | # mkdir -p /nextcloud-data /var/www # chown -R www-data:www-data /nextcloud-data /var/www |
PHP:
1 | # 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:
1 2 3 4 | # 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 |
1 | # 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 |
1 | # 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 |
1 | # 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 |
1 | # 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 |
1 2 | # 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:
1 | # cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak |
1 | # 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:
1 | # service php7.3-fpm restart ; service nginx restart |
MariaDB
1 | # apt update ; apt install mariadb-server -y |
Nota.- Durante dicha instalación deberás poner la contraseña que tendrá el usuario “root” de MariaDB.
Verifica la versión:
1 2 | mysql --version mysql Ver 15.1 Distrib 10.3.x-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 |
Asegura MariaDB:
1 2 | # mysql_secure_installation Enter current password for root (enter for none): |
Nota.- Contraseña de MariaDB
1 | Change root password? [Y/n] n |
Nota: Si deseas cambiar la contraseña del usuario “root” de MariaDB este es el momento.
1 2 3 4 | 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:
1 2 | # service mysql stop # mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak ; nano /etc/mysql/my.cnf |
Agregarle:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | [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 el servicio:
1 | # service mysql restart |
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)
1 | # mysql -uroot -p |
1 | # CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER [email protected] identified by 'passw0rd'; GRANT ALL PRIVILEGES on nextcloud.* to [email protected]; FLUSH privileges; quit; |
Verifique que “transaction isolation level” se haya establecido a “READ_COMMITTED” y la colación en “UTF8MB4“:
1 2 | # 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'" Enter current password for root (enter for none): |
Debe quedar de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 | +---------------------+ | @@TX_ISOLATION | +---------------------+ | READ-COMMITTED | +---------------------+ +-----------+---------+--------------------+ | database | charset | collation | +-----------+---------+--------------------+ | nextcloud | utf8mb4 | utf8mb4_general_ci | +-----------+---------+--------------------+ |
Redis:
1 | # apt update ; apt install redis-server php-redis -y |
Cambiar configuración y pertenencia a grupos:
1 | # cp /etc/redis/redis.conf /etc/redis/redis.conf.bak |
1 | # 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 |
1 2 | # 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:
1 | # reboot |
Nextcloud:
Creando nextcloud.conf:
1 2 3 | # [ -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 |
Agregale:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | server { server_name nextcloud.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 nextcloud.dominio.cu; listen 443 ssl http2 default_server; 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; } #SOCIAL app enabled? Please uncomment the following row #rewrite ^/.well-known/webfinger /public.php?service=webfinger last; #WEBFINGER app enabled? Please uncomment the following two rows. #rewrite ^/.well-known/host-meta /public.php?service=host-meta last; #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; client_max_body_size 10240M; location / { rewrite ^ /index.php; } 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)(\/.*|)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; include php_optimization.conf; } location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) { fastcgi_split_path_info ^(.+?\.php)(\/.*|)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; include php_optimization.conf; } 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 parámetros “server_name” por el nombre DNS que tendrá 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | server { server_name nextcloud.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 nextcloud.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; } 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)(\/.*|)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; include php_optimization.conf; } location ~ ^\/nextcloud/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) { fastcgi_split_path_info ^(.+?\.php)(\/.*|)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; include php_optimization.conf; } 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; } } |
Nota.- Modifica los 2 parámetros “server_name” por el nombre DNS que tendrá tu servidor Nextcloud.
Ahora crearemos el certificado SSL:
1 2 3 4 | # 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 el último comando vendrán una serie de preguntas las cuales voy a explicar a continuación:
Nota.- 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 mayúsculas.
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:
1 | # openssl x509 -req -days 3652 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crt |
Creando ssl.conf:
1 2 | # cd ~ # nano /etc/nginx/ssl.conf |
Agregale las lineas siguientes:
1 2 3 4 5 6 7 8 9 10 11 12 | 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:
1 | # nano /etc/nginx/proxy.conf |
Agregarle:
1 2 3 4 5 6 7 8 9 10 11 | 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:
1 | # nano /etc/nginx/header.conf |
Agregale:
1 2 3 4 5 6 7 8 9 | 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:
1 | # nano /etc/nginx/optimization.conf |
Agregale:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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:
1 | # nano /etc/nginx/php_optimization.conf |
Agregale:
1 2 3 4 5 6 7 8 9 10 11 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; 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:
1 | # openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096 |
Nota: Por favor, sea paciente, tomará tiempo dependiendo de su hardware.
Reinicia Nginx:
1 | # sed -i s/\#\include/\include/g /etc/nginx/nginx.conf ; service nginx restart |
Descargar, extraer Nextcloud y dar permisos:
1 2 3 | # 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:
1 2 | # cd /var/www # unzip latest.zip ; chown -R www-data:www-data /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:
1 | # poweroff |
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 (o la que especificó en dicho paso).
Listamos los HDD
1 2 3 4 5 6 7 | # 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:
1 | # mkfs.ext4 /dev/sdb |
Creamos un directorio en el cual montaremos el nuevo HDD. Montamos y corregimos permisos:
1 2 3 | # 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):
1 | # nano /etc/pve/lxc/ID.conf |
Debajo de la línea “memory” agregamos lo siguiente:
1 | 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:
1 | # 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:
1 | /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:
1 | # nano /etc/apparmor.d/lxc/lxc-default-cgns |
Y agregamos antes del “}” final:
1 2 3 | allow mount fstype=nfs, allow mount fstype=nfs4, allow mount fstype=rpc_pipefs, |
Si su Proxmox es version 5.2.x:
1 | # nano /etc/apparmor.d/lxc/lxc-default-cgns |
Agregamos antes del “}” final:
1 2 3 | 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:
1 | # nano /etc/pve/lxc/ID.conf |
Agregamos las siguientes lineas al final:
1 2 | 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:
1 | # apt install nfs-common |
Creamos el archivo “rc.local” si no está, y le agregamos el comando para que monte el compartido del NFS cuando se inicie:
1 | # nano /etc/rc.local |
Agregarle:
1 2 3 | #!/bin/bash mount -t nfs 192.168.2.1:/nextcloud-data /nextcloud-data exit 0 |
Y le damos los permisos correspondientes:
1 | # chmod -R 755 /etc/rc.local |
Iniciamos el contenedor y revisamos si se montó bien el compartido con el siguiente comando:
1 2 3 | # 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:
Información:
-database-name “nextcloud”: La creamos anteriormente configurando base de datos y usuario.
-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 administración, la que guste.
-data-dir “/nextcloud-data”: Si modificaste al inicio del manual esta dirección, sustituyala.
1 | # 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 las líneas para tu dominio:
1 2 | # 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 su tambien:
1 | # 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 configuración:
1 | # cp /var/www/nextcloud/config/config.php /var/www/nextcloud/config/config.php.bak |
Amplía tu “config.php” de Nextcloud:
1 | # sed -i 's/^[ ]*//' /var/www/nextcloud/config/config.php ; sed -i '/);/d' /var/www/nextcloud/config/config.php |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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 ( # ATENCION si estas trabajando en Debian 9.x: # 'host' => '/var/run/redis/redis.sock', # ATENCION si estas trabajando en Debian 10.x: 'host' => '/var/run/redis/redis-server.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 |
Edita el .user.ini de Nextcloud:
1 | # sudo -u www-data sed -i "s/output_buffering=.*/output_buffering='Off'/" /var/www/nextcloud/.user.ini |
Reinicia:
1 | # reboot |
Ajustar aplicaciones de Nextcloud:
1 2 3 4 | # 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:
1 | # nano /root/upgrade.sh |
Agrega:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/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:
1 | # nano /root/optimize.sh |
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash # ATENCION si estas trabajando en Debian 9.x: # redis-cli -s /var/run/redis/redis.sock <<EOF # ATENCION si estas trabajando en Debian 10.x: redis-cli -s /var/run/redis/redis-server.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:
1 | # chmod +x /root/*.sh |
Ejecútelos:
1 | # /root/upgrade.sh ; /root/optimize.sh |
Añadir cronjobs para www-data y root:
Para www-data:
1 | # crontab -u www-data -e |
Agrega:
1 | */5 * * * * php -f /var/www/nextcloud/cron.php > /dev/null 2>&1 |
Para root:
1 | # crontab -e |
Agrega debajo de la que aparece:
1 | 5 1 * * * /root/optimize.sh 2>&1 |
Configurar Nextcloud para que use cron.php:
1 | # su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ background:cron' |
Reiniciar el servidor:
1 | # reboot |
Logueate en tu nuevo servidor de Nextcloud:
https://nextcloud.dominio.cu/login o https://192.168.2.10/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:
1 | # 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”:
1 | # 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 instalación vamos al apartado “Configuracion” pinchando en el icono de engranaje en la parte superior derecha.
Luego pinchamos en “Vista General” 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 instalación y la alerta desaparecerá.
Si dice “El servidor no tiene conexión a internet” pues es algo muy evidente.
Y nada mas, a crear usuarios. Que aproveche!
hola creo que deberia arreglar dos cosas!!!
1. ANTES DE: Instala Nextcloud silenciosamente:
creo que le falta:
# cd /opt/
# 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/ && rm -f latest.tar.bz2
NOTA:
En caso de nextcloud-17.0.1.zip
# unzip nextcloud-17.0.1.zip -C /var/www && chown -R www-data:www-data /var/www/
2: LUEGO DONDE DICE:
Amplía tu “config.php” de Nextcloud:
Debes arreglar esta linea:
cat <<EOF >>/var/www/nextcloud/config/config.php
Cierto, tiene usted razón, pero solo en parte.
Agregaremos los pasos de descargar el compactado de Nextcloud lo antes posible porque realmente sin eso no tenemos nada.
La segunda no. La línea es así tal cual. Se usa para agregarle algo a un archivo sin tener que abrirlo, copiarle lo que necesitamos y luego guardarlo.
Gracias y saludos.
Esto no me sirvio, fue por gusto, este es el error que me da:
Internal Server Error
The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the webserver log.