- 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?.
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.rpm
Ahora habilitamos el modulo de remi para php 7.4
Código:
dnf module install -y php:remi-7.4
Ahora procedemos a instalar el mejor servidor web 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 httpd
Accediendo 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_installation
Lo 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-imagick
Procedemos 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 -p
Luego 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;
quit
Con 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/nextcloud
Configuramos 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 on
Ahora 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 = 1024M
Configurar 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=1
Configurar 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 = 18
Reiniciamos php-fpm para que integre los cambios que aplicamos
Código:
systemctl restart php-pm
Para 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 httpd
Ahora 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.com
Este 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-le
Este 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 renew
Instalamos 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 httpd
y listo!
Última modificación: