- Se incorporó
- 1 Octubre 2007
- Mensajes
- 6.065
Hola Foreros todos, bienvenidos!.
Hace ya bastante tiempo que vengo utilizando Owncloud y posteriormente Nextcloud como nube privada, así que creo buena ocasión (ahora que tuve que reinstalar el sistema operativo de mi servidor casero) mostrarles cómo se deja andando este bicho

Partamos indicando que Nextcloud actualmente es uno de los líderes en almacenamiento en nubes privadas, contando con amplia documentación y soporte pagado si se contrata empresarialmente donde te pueden ayudar con todas tus dudas.
Como en capa9 amamos Linux y el software opensource es que el día de hoy procederemos a despejar ese manto de dudas con respecto a la instalación de Nextcloud de forma profesional (es decir, sin bajar el firewall y SELinux
 ) y -si dispondes de un dominio ya comprado- poder acceder a él mediante una URL desde internet, porque de qué nos sirve una nube privada si no vamos a poder acceder desde fuera de nuestra casa?.
) y -si dispondes de un dominio ya comprado- poder acceder a él mediante una URL desde internet, porque de qué nos sirve una nube privada si no vamos a poder acceder desde fuera de nuestra casa?.Partimos!
Los materiales que vamos a utilizar el día de hoy son:
- Un servidor con sistema operativo RHEL 8.x o compatible (CentOS 8, Oracle Linux 8, etc) y acceso vía SSH a él
- Conexión a Internet
- Tiempo  
		Código:
	
	dnf y install epel-release
		Código:
	
	dnf install -y  http://rpms.remirepo.net/enterprise/remi-release-8.rpmAhora habilitamos el modulo de remi para php 7.4
		Código:
	
	dnf module install -y php:remi-7.4Ahora procedemos a instalar el mejor servidor web
 y todo el ecosistema de LAMP
y todo el ecosistema de LAMP
		Código:
	
	dnf install -y php-mysqlnd php-fpm mariadb-server httpd
		Código:
	
	firewall-cmd --permanent --add-service={http,https}
firewall-cmd --reload
		Código:
	
	systemctl enable --now mariadb httpdAccediendo a la IP de nuestro servidor con cualquier navegador deberíamos ver la pantalla de bienvenida
 
	Ahora debemos realizar el "cierre" de la base de datos, estableciendo una contraseña para el usuario root de la DB, entre otras cosas.
Utilizamos el comando
mysql_secure_installationLo primero que hará será pedirnos la contraseña del root de la DB, pero como es primera vez que usamos la Base de datos esta no existe, por lo que presionamos enter -es decir, le indicamos al sistema que la password está en blanco-.
		Código:
	
	[root@kimun ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Enter current password for root (enter for none):
		Código:
	
	OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
		Código:
	
	By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!Vamos a probar que la instalación de PHP se integró sin problemas con nuestro webserver.
Para ello vamos a crear un archivo info.php para que PHP nos muestre datos
		Código:
	
	vim /var/www/html/info.php<?php phpinfo();?>Luego presionamos la tecla "Esc" y posteriormente ":wq" para write and quit (guardar y cerrar) en vim.
Cambiamos propietario al usuario apache y restauramos el contexto de seguridad SELinux.
		Código:
	
	chown -Rv apache:apache /var/www/html/*
chcon -t httpd_sys_rw_content_t /var/www/html/ -Rv 
	Sin problemas. Entonces procedemos a instalar las librerías de php necesarias que utiliza Nextcloud
		Código:
	
	dnf install -y php-gd php-mbstring php-intl php-pecl-apcu php-mysqlnd php-opcache php-json php-zip php-process php-bcmath php-gmp php-imagickProcedemos a entrar a MariaDB para crear el usuario y la contraseña que utilizará el ambiente.
Los datos serán:
Base de datos: dbnextcloud
Usuario: ncadmin
password:
macoy123
		Entramos con
mysql -u root -pLuego las siguientes sentencias SQL
		Código:
	
	CREATE USER 'ncadmin'@'localhost' IDENTIFIED BY 'macoy123';
CREATE DATABASE dbnextcloud;
GRANT ALL PRIVILEGES ON dbnextcloud.* TO 'ncadmin'@'localhost';
FLUSH PRIVILEGES;
quitCon los pasos anteriores tenemos lo necesario para comenzar con el proceso de deploy de Nextcloud.
Lo primero será instalar wget y unzip
		Código:
	
	dnf -y install wget unzip
		Código:
	
	wget https://download.nextcloud.com/server/releases/latest-20.zip
		Código:
	
	mv latest-20.zip /var/www/ -vf
		Código:
	
	cd /var/www/
unzip latest-20.zip
		Código:
	
	mkdir /var/www/nextcloud/data
		Código:
	
	chown -R apache.apache /var/www/nextcloudConfiguramos permisos de SELinux en sistema
		Código:
	
	semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'Ahora aplicamos esos permisos a las carpetas
		Código:
	
	restorecon -Rv /var/www/nextcloud/Permisos de Selinux para que Apache pueda conectarse a la DB y a la red
		Código:
	
	setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_connect_db onAhora pasamos a la parte de configurar php para que funcione correctamente con Nextcloud.
Primero, editamos /etc/php.ini y buscamos los siguientes parámetros
		Código:
	
	upload_max_filesize = 1G
memory_limit = 1024MConfigurar opcache en /etc/php.d/10-opcache.ini
		Código:
	
	opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1Configurar php-fpm en /etc/pgp-fpm.d/www.conf
		Código:
	
	pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18Reiniciamos php-fpm para que integre los cambios que aplicamos
		Código:
	
	systemctl restart php-pmPara ello creamos un archivo en /etc/httpd/conf.d/00_nextcloud.conf y lo llenamos con lo siguiente
		Código:
	
	<VirtualHost *:80>
        ServerName      nube.condorbinario.com
        ServerAlias     nube.condorbinario.com
        DocumentRoot    /var/www/nextcloud
</VirtualHost>
<Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        <IfModule mod_dav.c>
        Dav off
        </IfModule>
</Directory>
		Código:
	
	systemctl reload httpdAhora procedemos con la instalación
Accedemos al sitio de nextcloud con cualquier navegador. La ip de mi servidor es 192.168.1.100
 
	Una vez llenamos los datos de la cuenta de administración, clickeamos donde dice "Storage & Database" y se va a desplegar un formulario para llenar los datos de la conexión a la BD
 
	Y presionamos "Finish Setup". Aparecerá esta pantalla y luego el menú donde muestra el avance de la instalación
 
	 
	Una vez finalizada la configuración, aparecemos en el panel de bienvenida y "home" de Nextcloud
 
	 
	Con eso finalizamos la instalación de nuestro servidor local de Nextcloud.
Pero tío VittokoX, y si quiero acceder desde internet?
Bueno, primero debemos contar con un dominio de nuestra propiedad e idealmente un servidor DNS (cualquier plan de hosting de esos de 5990 al año sirve para esos fines
 ).
).Primero creamos reglas en nuestro router para que redireccione tanto el tráfico del puerto 80 como el 443 hacia la IP local de nuestro servidor.
No ahondaré en detalles porque cada router es distinto pero pueden encontrarlo bajo el tema "virtual servers".
Luego escogemos el nombre FQDN que tendrá nuestro servidor. En mi caso lo llamaré nube.condorbinario.com

Una vez tenemos un DNS apuntando a nuestra IP pública, procedemos a apoyarnos en certbot para esos fines.
Primero lo instalamos
		Código:
	
	dnf install certbot -y
		Código:
	
	certbot certonly \
--manual --preferred-challenges=dns \
--email [email protected] \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos \
-d nube.condorbinario.comEste procedimiento nos mostrará un tipo de registro TXT que deberemos registrar en el DNS de nuestro dominio condorbinario.com como un puntero llamado _acme-challenge
quedando así
Una vez ingresado ese código, esperamos 1 minuto y procedemos a presionar "enter" para que el motor de let's encrypt valide el dominio mediante la llave TXT que configuramos en nuestro hosting.
Debería aparecer algo similar a esto
		Código:
	
	Press Enter to Continue
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/condorbinario.comfullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/condorbinario.com/privkey.pem
   Your certificate will expire on 2021-06-10. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-leEste certificado tiene una validez de 3 meses, para que no se nos olvide, podemos crear un cronjob que se ejecute cada lunes a las 5am.
Para esto editamos /etc/crontab y escribimos
00 5 1 * * root /usr/bin/certbot renewInstalamos mod_ssl para apache
		Código:
	
	dnf install mod_ssl -y
		Código:
	
	vim/etc/httpd/conf.d/00_nextcloud.conf
VirtualHost *:80>
        ServerName      nube.condorbinario.com
    ServerAlias    nube.condorbinario.com
        DocumentRoot    /var/www/nextcloud
        RewriteEngine on
    RewriteCond %{SERVER_NAME} =nube.condorbinario.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        <IfModule mod_dav.c>
        Dav off
        </IfModule>
</Directory>
<VirtualHost *:443>
        ServerName              nube.condorbinario.com
    ServerAlias        nube.condorbinario.com
        DocumentRoot            /var/www/nextcloud
        SSLEngine               on
        SSLCipherSuite          EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol             All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    SSLHonorCipherOrder     On
        Header always set       Strict-Transport-Security "max-age=63072000;"
    SSLCertificateFile      /etc/letsencrypt/live/condorbinario.com/cert.pem
        SSLCertificateKeyFile   /etc/letsencrypt/live/condorbinario.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/condorbinario.com/chain.pem
        CustomLog           /var/log/httpd/access_nc.log common env=nc
    ErrorLog        /var/log/httpd/error_nc.log
</VirtualHost>
[code]
Editamos el archivo que le dice a Nextcloud qué URLs de conexión aceptará como seguras
Este archivo es /var/www/nextcloud/config/config.php y editamos la parte del array que se llama trusted_domains dejando solamente las URLs desde donde aceptaremos conexiones. En nuestro caso solo dejaremos nube.condorbinario.com, obviamente :zippy
[code]
  'trusted_domains' =>
  array (
    0 => 'nube.condorbinario.com',
  ),
[code]
Finalmente, recargamos apache para que tome los cambios
[code]systemctl reload httpdy listo!
			
				Última modificación: 
			
		
	
								
								
									
	
								
							
							 
 
		 
 
		 
 
		
 
 
		 
 
		 
 
		
