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/HavanaConfigura "locales":
dpkg-reconfigure localesBusca en la lista: en_US.UTF-8 UTF-8Seleccionarlo con "Espacio", y en la siguiente pantalla bajar hasta "en_US.UTF-8" y "Enter".
Reiniciar y verificar que se haya aplicado:
localeIntalando 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 mcAgregar nuevos repositorios:
cd /etc/apt/sources.list.decho "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.listDescargamos 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 0xF1656F24C74CD1D8Actualizamos:
apt update && apt upgrade -yNginx:
apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-packagesEn 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.serviceConfigurar nginx:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && nano /etc/nginx/nginx.confAgregarle:
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 restartCrea 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/wwwPHP:
apt install -y php7.4-{fpm,gd,mysql,curl,xml,zip,intl,mbstring,json,bz2,ldap,bcmath,gmp} php-{apcu,imagick,smbclient} imagemagick ldap-utilsConfigurando 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.baksed -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.confsed -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.inised -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.inised -i '$aapc.enable_cli=1' /etc/php/7.4/mods-available/apcu.inised -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.xmlReinicia PHP y Nginx:
service php7.4-fpm restart && service nginx restartMariaDB
apt update && apt install -y mariadb-serverAsegura 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] yConfigurando MariaDB:
service mysql stop
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak && nano /etc/mysql/my.cnfAgregarle:
[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 = 16MReinicia el servicio:
service mysql restartCrea la base de datos, el usuario y la cotraseña:Base de datos = nextcloudUsuario para conectarse a la Base de datos = nextcloudPassword = passw0rd (o la que usted desee)
mysql -uroot -pCREATE 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-redisCambiar configuración y pertenencia a grupos:
cp /etc/redis/redis.conf /etc/redis/redis.conf.baksed -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.confusermod -a -G redis www-data
cp /etc/sysctl.conf /etc/sysctl.conf.bak && sed -i '$avm.overcommit_memory = 1' /etc/sysctl.confAhora recomendamos reiniciar:
rebootNextcloud:
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.confAgregale:
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 2048openssl req -new -key nextcloud.key -out nextcloud.csrAl 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 blancoGeneramos el certificado para 10 años:
openssl x509 -req -days 3652 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crtMejora la seguridad del servidor y del sistema usando una clave Diffie-Hellman (dhparam.pem):
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096Nota: 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:
poweroffNos 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/sdbCreamos 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-dataModificamos el archivo de configuración de nuestro contenedor (sustituir ID):
nano /etc/pve/lxc/ID.confDebajo de la línea memory agregamos lo siguiente:
mp0: /nextcloud-data,mp=/nextcloud-dataNota.- 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:
poweroffSi 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-cgnsY 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-cgnsAgregamos 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.confAgregamos 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-commonCreamos 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.localAgregarle:
#!/bin/bash
mount -t nfs 192.168.2.1:/nextcloud-data /nextcloud-data
exit 0Y le damos los permisos correspondientes:
chmod -R 755 /etc/rc.localIniciamos 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.5GAhí 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.bakAmplía tu config.php de Nextcloud:
sed -i 's/^[ ]*//' /var/www/nextcloud/config/config.php && sed -i '/);/d' /var/www/nextcloud/config/config.phpcat <<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',
);
EOFNotas:
- 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.phpEdita el .user.ini de Nextcloud:
sudo -u www-data sed -i "s/output_buffering=.*/output_buffering='Off'/" /var/www/nextcloud/.user.iniReinicia servicios:
service nginx stop && service php7.4-fpm stop && service mysql restart && service php7.4-fpm restart && service redis-server restart && service nginx restartAjustar 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 -eSi nos pide seleccionar el editor escogemos "nano" que es la opcion 1
Agrega:
*/5 * * * * php -f /var/www/nextcloud/cron.php > /dev/null 2>&1Configurar Nextcloud para que use cron.php:
sudo -u www-data php /var/www/nextcloud/occ background:cronOptimiza 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 0Salva y marca como ejecutable:
chmod +x /root/upgrade.shEjecutelo:
/root/upgrade.shNotas.- 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.
Aquí les muestro un ejemplo:

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!







No comments yet