Con esta guía que es una traducción del sitio de Carsten Rieger, instalarás la última versión de Nextcloud para Debian 9.x o para Debian 10.x en un contenedor de Proxmox.
La instalación incluye Nginx, PHP 7.4, MariaDB, Redis, y certificados 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 (HDD, FreeNAS, NFS, Cloudbox, etc) anclado al contenedor en el cual guardaremos los archivos de los usuarios.
Notas:
– Todas las operaciones las haremos como «root», si usas un usuario diferente escale con el comando «su -»
– 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:
timedatectl set-timezone America/Havana
Configura «locales»:
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 que se haya aplicado:
locale
Intalando herramientas necesarias:
apt update apt install -y curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-https tree locate software-properties-common dirmngr screen htop net-tools zip unzip bzip2 ffmpeg ghostscript libfile-fcntllock-perl sudo mc
Agregar nuevos repositorios:
cd /etc/apt/sources.list.d
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:
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 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)
systemctl stop apache2.service && apt remove --purge apache2 apt install -y nginx && systemctl enable nginx.service
Configurar nginx:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && nano /etc/nginx/nginx.conf
Agregarle:
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; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; 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; default_type application/octet-stream; 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:
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.
mkdir -p /nextcloud-data /var/www chown -R www-data:www-data /nextcloud-data /var/www
PHP:
apt install -y php7.4-{fpm,gd,mysql,curl,xml,zip,intl,mbstring,json,bz2,ldap,bcmath,gmp} php-{apcu,imagick,smbclient} imagemagick ldap-utils
Configurando PHP:
cp /etc/php/7.4/fpm/pool.d/www.conf /etc/php/7.4/fpm/pool.d/www.conf.bak ; cp /etc/php/7.4/cli/php.ini /etc/php/7.4/cli/php.ini.bak ; cp /etc/php/7.4/fpm/php.ini /etc/php/7.4/fpm/php.ini.bak ; cp /etc/php/7.4/fpm/php-fpm.conf /etc/php/7.4/fpm/php-fpm.conf.bak ; cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak
sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/pm.max_children =.*/pm.max_children = 120/" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/pm.start_servers =.*/pm.start_servers = 12/" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/pm.min_spare_servers =.*/pm.min_spare_servers = 6/" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/pm.max_spare_servers =.*/pm.max_spare_servers = 18/" /etc/php/7.4/fpm/pool.d/www.conf ; sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/7.4/fpm/pool.d/www.conf
sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/7.4/cli/php.ini ; sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/7.4/cli/php.ini ; sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/7.4/cli/php.ini ; sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/7.4/cli/php.ini ; sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/7.4/cli/php.ini ; sed -i "s/;date.timezone.*/date.timezone = America\/\Havana/" /etc/php/7.4/cli/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 1024M/" /etc/php/7.4/fpm/php.ini ; sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/7.4/fpm/php.ini ; sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/7.4/fpm/php.ini ; sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/7.4/fpm/php.ini ; sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/7.4/fpm/php.ini ; sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;date.timezone.*/date.timezone = America\/\Havana/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/7.4/fpm/php.ini ; sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/7.4/fpm/php.ini
sed -i '$aapc.enable_cli=1' /etc/php/7.4/mods-available/apcu.ini
sed -i "s/rights=\"none\" pattern=\"PS\"/rights=\"read|write\" pattern=\"PS\"/" /etc/ImageMagick-6/policy.xml ; sed -i "s/rights=\"none\" pattern=\"EPS\"/rights=\"read|write\" pattern=\"EPS\"/" /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.4-fpm restart && service nginx restart
MariaDB
apt update && apt install -y mariadb-server
Asegura MariaDB:
mysql_secure_installation Enter current password for root (enter for none):
Nota.- Puedes poner lo que desees pues se conecta por sock.
Switch to unix_socket authentication [Y/n] n Change root password? [Y/n] n 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
Agregarle:
[client] default-character-set = utf8 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 = utf8 collation-server = utf8_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:
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)
mysql -uroot -p
CREATE DATABASE nextcloud CHARACTER SET utf8 COLLATE utf8_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 en UTF8MB4
:
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:
+---------------------+ | @@TX_ISOLATION | +---------------------+ | READ-COMMITTED | +---------------------+ +-----------+---------+--------------------+ | database | charset | collation | +-----------+---------+--------------------+ | nextcloud | utf8 | utf8_general_ci | +-----------+---------+--------------------+
Redis:
apt update && apt install -y redis-server php-redis
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
Agregale:
upstream php-handler { server unix:/run/php/php7.4-fpm.sock; } server { listen 80 default_server; server_name nextcloud.dominio.cu; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2 default_server; server_name nextcloud.dominio.cu; # Certificados autofirmados ssl_certificate /etc/nginx/certificados/nextcloud.crt; ssl_certificate_key /etc/nginx/certificados/nextcloud.key; # Certificados Let's Encrypt #ssl_certificate /etc/nginx/certificados/fullchain.pem; #ssl_certificate_key /etc/nginx/certificados/privkey.pem; #ssl_trusted_certificate /etc/nginx/certificados/chain.pem; 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; # Descomentar si usas certificados Let's Encrypt #ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; add_header Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Download-Options "noopen" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "none" always; add_header X-XSS-Protection "1; mode=block" always; fastcgi_hide_header X-Powered-By; fastcgi_read_timeout 3600; fastcgi_send_timeout 3600; fastcgi_connect_timeout 3600; root /var/www/nextcloud; location = /robots.txt { allow all; log_not_found off; access_log off; } location = /.well-known/carddav { return 301 $scheme://$host:$server_port/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host:$server_port/remote.php/dav; } client_max_body_size 10240M; fastcgi_buffers 64 4K; 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; 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 ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy)\.php(?:$|\/) { fastcgi_split_path_info ^(.+?\.php)(\/.*|)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; 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; } location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) { try_files $uri/ =404; index index.php; } location ~ \.(?:css|js|woff2?|svg|gif|map)$ { try_files $uri /index.php$request_uri; add_header Cache-Control "public, max-age=15778463"; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; add_header Referrer-Policy "no-referrer" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Download-Options "noopen" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Permitted-Cross-Domain-Policies "none" always; add_header X-Robots-Tag "none" always; add_header X-XSS-Protection "1; mode=block" always; access_log off; } location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ { try_files $uri /index.php$request_uri; access_log off; } }
Notas:
– Modifica los parámetros server_name
por el nombre DNS que tendrá tu servidor Nextcloud.
– Hay dos apartados: «Certificados Autofirmados» y «Certificados Let’s Encrypt». A continuación generaremos los autofirmados, pero si en algun momento decides ponerle certificados LE comenta las líneas de arriba, descomenta las de abajo y modifica la ruta en caso necesario.
– El párametro ssl_stapling on;
cuando usamos Certificados Autofirmados nos arroja este Warning:
[warn] 2013#2013: "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/nginx/certificados/nextcloud.crt"
– Descomentar ssl_stapling on;
solo cuando usemos Certificados Let’s Encrypt.
Ahora crearemos el certificado SSL autofirmado:
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 éste último comando vendrán una serie de preguntas las cuales voy a explicar a continuación:
Nota.- En caso de equivocarte 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:
openssl x509 -req -days 3652 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crt
Mejora la seguridad del servidor y del sistema usando una clave Diffie-Hellman (dhparam.pem):
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Nota: Por favor, sea paciente, tomará tiempo dependiendo de su hardware.
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/
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:
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
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 guardarás 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 (nfs-kernel-server), 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 lo que se debería agregar al exports:
/nextcloud-data/ 192.168.2.2(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.
Para ello tenemos dos opciones: a mano, o por la web de Proxmox.
– A mano:
Si su Proxmox es versión 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 versión 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 versión 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 versión 5. Y además en el archivo de configuración del contenedor:
nano /etc/pve/lxc/ID.conf
Agregamos las siguientes líneas al final:
lxc.apparmor.profile: lxc-default-cgns lxc.apparmor.profile: unconfined
– Por la web de Proxmox
Pinchar en el ID de nuestro CT > Options > Features > Marcar NFS.
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 agregamos 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
Y le damos los permisos correspondientes:
chmod -R 755 /etc/rc.local
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
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 conexion es por sock, no importa lo que pongamos.
-admin-user “UsuarioAdmin”: Nombre de usuario para administrar Nextcloud, el que guste.
-admin-pass “PasswordAdmin”: Contraseña del usuario de administración, la que guste.
-data-dir “/nextcloud-data”: Si modificaste al inicio del manual esta dirección, sustituyala.
sudo -u www-data php /var/www/nextcloud/occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextcloud" --database-pass "passw0rd" --admin-user "UsuarioAdmin" --admin-pass "PasswordAdmin" --data-dir "/nextcloud-data"
Mejorando la configuración de Nexcloud:
Agregamos dominio e IP de confianza:
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 trusted_domains 1 --value=192.168.2.2'
Sobrescriba la URL con su dominio:
su - www-data -s /bin/bash -c 'php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://nextcloud.dominio.cu'
Hacemos una copia de la configuración:
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 ( # 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', 'force_language' => 'es', ); EOF
Notas:
– El sock de Redis está descomentado para usarse en Debian 10. Si instalaste en un CT Debian 9 comenta el otro y descomenta para esta versión.
– Usé el párametro 'force_language' => 'es',
para forzar el lenguaje a Español, puedes comentar la línea y que cada usuario elija el idioma; por defecto inicia en Ingles.
sudo -u www-data sed -i "s/.*dbhost.*/\'dbhost\' \=\>\ \'localhost\:\/var\/run\/mysqld\/mysqld\.sock\'\,/g" /var/www/nextcloud/config/config.php
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 nginx stop && service php7.4-fpm stop && service mysql restart && service php7.4-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'
Añadir cronjobs para www-data:
crontab -u www-data -e
Si nos pide seleccionar el editor escogemos «nano» que es la opcion 1
Agrega:
*/5 * * * * php -f /var/www/nextcloud/cron.php > /dev/null 2>&1
Configurar Nextcloud para que use cron.php:
sudo -u www-data php /var/www/nextcloud/occ background:cron
Optimiza y Actualiza Nextcloud:
cd /root nano /root/upgrade.sh
#!/bin/bash /usr/sbin/service nginx stop sudo -u www-data php /var/www/nextcloud/updater/updater.phar sudo -u www-data php /var/www/nextcloud/occ status sudo -u www-data php /var/www/nextcloud/occ -V sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices sudo -u www-data php /var/www/nextcloud/occ db:add-missing-columns sudo -u www-data php7.4 /var/www/nextcloud/occ db:add-missing-primary-keys sudo -u www-data 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 redis-cli -s /var/run/redis/redis-server.sock <<EOF FLUSHALL quit EOF sudo -u www-data php /var/www/nextcloud/occ files:scan --all sudo -u www-data php /var/www/nextcloud/occ files:scan-app-data sudo -u www-data php /var/www/nextcloud/occ app:update --all /usr/sbin/service php7.4-fpm restart /usr/sbin/service nginx restart exit 0
Salva y marca como ejecutable:
chmod +x /root/upgrade.sh
Ejecutelo:
/root/upgrade.sh
Notas.- Si nos pide «Convertir columnas» le damos «Y».
Si el actualizador encuentra una versión nueva le saldrán los siguientes pasos:
– Nos preguntará si queremos iniciar la actualización «Y»
– Una ves que termine el proceso nos dirá si queremos mantener el «Modo Mantenimiento» activado, le damos «N»
– Nos logueamos y verificamos que todo este OK.
Inicia sesión en tu nuevo servidor de Nextcloud:
https://nextcloud.dominio.cu/login o https://192.168.2.2/login
Usuario = nextcloud (El que especificamos instalando Nextcloud silenciosamente)
Password= passw0rd (El que especificamos instalando Nextcloud silenciosamente)
Vamos al apartado «Configuración» 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.
Ahora pasaremos a conectar dicho servidor con nuestro Dominio, y arreglaremos las carpetas de los usuarios para que nos muestre el nombre y no el UUID.
Una vez iniciada sesión como administrador vamos al apartado «Aplicaciones» y activamos «LDAP user and group backend».
Luego vamos a «Configuración > Integración LDAP / AD» y comenzamos con la configuración.
En el apartado «Servidor«:
Servidor = IP o DNS de nuestro AD, y luego le damos al botón «Detectar puerto» (debe ponernos el 389).
DN Usuario = DN del usuario que usaremos para conectar con el AD (no tiene que ser administrador).
Contraseña = Contraseña de dicho Usuario, y le damos al botón de «Guardar credenciales».
DN Base = Podemos poner cuantos DN de usuarios queramos, uno por línea. Al terminar le damos a «Probar Base DN» y debe darnos «Configuración correcta» en verde debajo.
Nota:- Apóyese del «Editor ADSI» o «samba-tools» para sacar los DN correctamente.
En el apartado «Usuarios«:
Este apartado lo dejé por defecto, aquí no realicé ningún cambio.
En el apartado «Atributos de inicio de sesión«:
Este apartado lo dejé por defecto. Viene marcada la opción de «Usuario LDAP / AD» así que no necesité cambiar nada.
En el apartado «Grupos«:
En este apartado si deseas usar grupos para tu Nextcloud pues aquí seleccionas cuales.
En el apartado «Avanzado» (ala derecha):
Este apartado lo dejé por defecto, aquí no realicé ningún cambio.
En el apartado «Experto» (a la derecha):
Aquí es donde modificaremos para que en vez del UUID del usuario (en las carpetas de Nextcloud) nos muestre solo el nombre.
Realiza los siguientes cambios en los tres campos y borre las asignaciones:
Luego pincha en «Configuración de prueba» y debe mostrarte «Configuración válida ¡Conexión establecida!»
Una vez terminados estos pasos conéctate al servidor, verás que salen las carpetas con los nombres de todos los usuarios de tu dominio, las cuales se irán llenando de documentos a medida que estos copien cosas dentro.
Nota:- Si aparecen las carpetas con el UUID y las de usuario puedes borrar tranquilamente las del UUID. Por supuesto, con mucho cuidado.
Y nada más, a crear usuarios. Que aproveche!
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Mis Saludos.
Tengo necesidad de publicar este Server NextCloud en Nginx pero esta vez sin la necesidad de un certificado SSL. Lo he intentado luego de este tutorial pero no se autentican los usuarios. Algún vhost que me pudieran compartir. Gracias.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Hola como se puede agregarle aplicaciones al nextcloud sin tener que tener el pc conectado a internet?
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Como hacer que en nextcloud no cree la estructura de carpeta por defecto cuando creo un nuevo usuario, alguien puede ayudarme?
Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0
Hoal saludos tengo problemas desde un win8 con el cliente a la hora de configurarse con el nextcloud el error q da es tiempode espera exedido mas menos asi y no se conecta.
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Colega todo perfecto hasta el final pero en la ultima linea que comentas cuando sale el UUID y el nombre de user, como hago para pasar la informacion de un lado al otro porque las carpetas se crean con su respectivo perfil…a la hora de saber ni puta idea de quienes son la informacion que esta dentro y tengo mas de 200 usuarios…Ayudame en eso..que solucion le ves a eso
Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
En esta linea falta alguna comilla pues no realiza los cambios al fichero redis.conf, los tuve que hacer de manera directa en el fichero
# 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
saludos
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36 OPR/72.0.3815.400
En un inicio comencé usando # para cada comando, dicho caracter se usa para comentar, por tanto un comando con eso delante no se ejecuta. Entonces, temiendo que cualquiera de ustedes sin darse cuenta la copiaran tal cual pues decidimos eliminar los caracteres # de todas las líneas de comando. 🙂
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
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
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 OPR/64.0.3417.92
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.
Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0
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.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36
Eduardo, para culminar exitosamente esta instalación verifica si estas usando Debian 9 o Debian 10, de ser el primero, edita el archivo config.php ubicado en nextcloud/config/config.php. Dentro de él debes comentar la línea 67 y quitarle el comentario a la línea 65, quedándote de la forma siguiente:
# 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’,