Com heu pogut llegit al títol d’aquesta entrada, pensava que la instal·lació d’un servidor web era un procés senzill però es va complicar una mica perquè no havia tingut en compte un detall important: com gestionen les connexions els nostres proveïdors d’internet.

Fàcilment, vaig aconseguir que el servidor funcionarà correctament en la meua xarxa local però hi havia un problema de comunicació amb l’exterior. De fet vaig repetir els passos descrits més avall unes quantes vegades, sense èxit, no podia veure les pàgines des de fora i no sabia per què.

Finalment llegint en diversos fòrums, em vaig adonar que el problema estava en que el meu proveïdor d’internet bloquejava el trànsit de dades des del l’exterior des d’alguns ports per una qüestió de seguretat (concretament el port 80: utilitzat per al trànsit http i el port 443: utilitzat per al trànsit https).

Vaig contactar amb el meu proveïdor d’internet i en poc de temps van solucionar la incidència. Em van desbloquejar els ports comentats anteriorment i vaig poder acabar la instal·lació.

Instal·lació del servidor apache2, base de dades mariadb i php7.2 en ubuntu 18.04

En aquest tutorial explicaré, pas a pas, com es realitza la instal·lació d’un servidor web per a moodle que després el podrem aprofitar per a montar un blog wordpress.

Abans d’entrar en detall de com vaig realitzar la instal·lació, vos avance que tinc un miniordinador amb ubuntu 18.04 sempre engegat imprescindible per poder accedir al web 24h al dia.

IMPORTANT: aquest tutorial és per a la instal·lació d’un servidor apache2, php i base de dades mariadb en ubuntu 18.04 (serveix per altres versions d’ubuntu properes).

AVÍS DE PRIVACITAT: aquest tutorial va dirigit a la creació d’un servidor moodle per a ús personal. Si voleu instal·lar-lo per a utilitzar amb alumnat hauríeu d’estudiar la legislació sobre la protecció de dades.

1r Pas: instal·leu apache2

En aquest primer pas hem d’instal·lar el servidor apache2, simplement hem de teclejar al terminal el següent comandament:

sudo apt install apache2

Després d’instal·lar Apache2, executeu les ordres següents per desactivar la llista de directoris.

sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/apache2/apache2.conf

A continuació, executeu les ordres següents per aturar, iniciar i habilitar el servei Apache2. No cal que reinicieu l’ordinador.

sudo systemctl stop apache2.service
sudo systemctl start apache2.service
sudo systemctl enable apache2.service

2n Pas: instal·leu MariaDB

En aquest segon pas toca instal·lar una base de dades i una bona opció és MariaDB.

sudo apt install mariadb-server mariadb-client

Desprès hauriem de fer el mateix que hem fet abans, aturar, iniciar i habilitar el servei.

sudo systemctl stop mariadb.service
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Després d’això, executeu les ordres següents per realitzar una instal·lació segura del servidor MariaDB.

sudo mysql_secure_installation

Heu de respondre unes preguntes, responeu les preguntes següents seguint la guia (en anglès):

  • Enter current password for root (enter for none): Premeu la tecla “enter”
  • Set root password? [Y/n]: Y
  • New password: Enter password
  • Re-enter new password: Repeat password
  • 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

Després d’això, obriu el fitxer de configuració predeterminada de MariaDB executant les ordres següents:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

A continuació, afegiu les línies a baix de la secció [mysqld]. 

default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = Barracuda
innodb_large_prefix = 1

Guardeu l’arxiu.

Reinicieu el servidor MariaDB amb la següent ordre: 

sudo systemctl restart mysql.service

3r Pas: instal·leu PHP7.2

Moodle requereix la instal·lació de PHP, en aquest cas instal·larem l’última versió estable, la 7.2, ja disponible en els repositoris oficials d’ubuntu 18.04. En el cas que ho feu en versions d’ubuntu 16.04 o més antigues podeu afegir el següent repositori:

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update

Després hem d’instal·lar tots aquests paquets:

sudo apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-mysql php7.2-gmp php7.2-curl php7.2-intl php7.2-mbstring php7.2-xmlrpc php7.2-gd php7.2-xml php7.2-cli php7.2-zip

Després d’instal·lar PHP, executeu les ordres següents per obrir els fitxers predeterminats de PHP:

sudo nano /etc/php/7.2/apache2/php.ini

A continuació, canvieu les següents línies al fitxer i deseu-les. Podeu augmentar o disminuir els valors segons les necessitats del vostre entorn:

file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
upload_max_filesize = 100M
max_execution_time = 360
cgi.fix_pathinfo = 0
date.timezone = Europe/Madrid

4t Pas: creeu la base de dades moodle

Ara després d’instal·lar tots els paquets necessaris, toca crear les bases de dades per a moodle.

Executeu les ordres següents per iniciar sessió al servidor de la base de dades. Quan se vos demane una contrasenya, escriviu la contrasenya del root que heu creat anteriorment.

ATENCIÓ: El text en color roig s’ha de substituir per les vostres dades.

sudo mysql -u root -p

A continuació, creeu una base de dades anomenada moodle.

CREATE DATABASE moodle;

Creeu un usuari de base de dades anomenat moodleusuari amb una nova contrasenya

CREATE USER 'moodleusuari'@'localhost' IDENTIFIED BY 'nova_contrasenya';

A continuació, concediu a l’usuari accés complet a la base de dades.

GRANT ALL ON moodle.* TO 'moodleusuari'@'localhost' IDENTIFIED BY 'nova_contrasenya' WITH GRANT OPTION;

Finalment, deseu els canvis i eixiu.

FLUSH PRIVILEGES;

EXIT;

5è pas: Descarregueu l’última versió de moodle

Executeu la següent ordre al terminal per entrar al directori tmp i descarregar l’última versió wordpress.

cd /tmp && wget https://download.moodle.org/download.php/direct/stable36/moodle-latest-36.tgz

A continuació, executeu les ordres següents per extreure el fitxer descarregat a la ruta predeterminada del servidor Apache2.

tar -zxvf moodle-latest-36.tgz
sudo mv moodle /var/www/html/moodle

Canvieu el propietari i permisos del directori.

sudo chown -R www-data:www-data /var/www/html/moodle/
sudo chmod -R 755 /var/www/html/moodle/

6è pas: configureu l’Apache2

Finalment, configureu el fitxer de configuració del lloc Apahce2 per a Moodle. Aquest fitxer controlarà com els usuaris accedeixen al contingut de Moodle. Executeu les ordres següents per crear un nou fitxer de configuració anomenat moodle.

sudo nano /etc/apache2/sites-available/moodle.conf

A continuació, copieu i enganxeu el contingut al fitxer i deseu-lo. Substituïu la línia ressaltada amb el vostre propi nom de domini i la ubicació del directori del directori. Aquest fitxer és el virtualhost per a moodle

<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/html/moodle/
ServerName example.com
ServerAlias www.example.com

<Directory /var/www/html/moodle/>
Options +FollowSymlinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Deseu l’arxiu i eixiu.

Després de configurar el VirtualHost anterior, habiliteu-lo executant les ordres a continuació. Com podeu veure primer habilitem el mòdul rewrite. Aquest mòdul permet crear direccions URL alternatives a les dinàmiques generades per la programació del nostre web, de manera que siguin més llegibles i fàcils de recordar.

sudo a2enmod rewrite
sudo a2ensite moodle.conf

Per carregar totes les configuracions anteriors, reinicieu l’Apache2 executant les ordres a continuació.

sudo systemctl restart apache2.service

7è pas: Obtenció i configuració certificat SSL Let’s Encrypt (OPCIONAL però molt recomanable)

La configuració de moodle per la banda del servidor està acabada però amb unes quantes ordres més podem obtenir i configurar fàcilment un certificat SSL que permet xifrar les connexions entre servidor i usuaris. Let’s Encrypy proporciona un mòdul apache2 per automatizar aquest procés.

En aquest pas també em vaig trobar un altre problema, la versió de PHP 7.2 ja no té suport per al mòdul mcrypt necessari per a la generació de certificats funcione correctament. 

Heu d’executar les ordres següents per instal·lar les dependències requerides que permetran instal·lar el mòdul mcrypt per Ubuntu amb el suport PHP 7.2:

sudo apt install php-dev libmcrypt-dev php-pear
sudo pecl channel-update pecl.php.net
sudo pecl install mcrypt-1.0.1

Després d’executar les ordres anteriors vos hauria d’eixir un missatge com el següent:

Build process completed successfully
Installing '/usr/lib/php/20170718/mcrypt.so'
install ok: channel://pecl.php.net/mcrypt-1.0.1
configuration option "php_ini" is not set to php.ini location
You should add "extension=mcrypt.so" to php.ini

Ara toca afegir la següent línia a l’arxiu php.ini corresponent a la nostra instal·lació de PHP:

extension=mcrypt.so

Heu d’editar l’arxiu i afegir la línia comentada anteriorment.

sudo nano /etc/php/7.2/apache2/php.ini

Després executeu les ordres per a recarregar la nova configuració i reiniciar el servidor apache2:

sudo systemctl reload apache2.service
sudo systemctl restart apache2.service

Ara ja podem continuar amb la generació dels certficats SSL. Per a instal·lar el mòdul executeu les ordres següents: 

sudo apt-get install python-certbot-apache

Després, executeu les ordres següents per obtenir el certificat SSL de Let’s Encriypt gratis per al vostre lloc. Recordeu que heu de substituir les dades de l’exemple per les vostres.

sudo certbot --apache -m admin@example.com -d example.com -d www.example.com

Després d’executar les ordres anteriors, heu d’acceptar els termes de la llicència per poder continuar. Heu d’indicar un lletra A per a continuar. 

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

Trieu SI (Y) per compartir la vostra adreça de correu electrònic o NO (N) si decidiu no compartir-la.

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y

Vos eixirà una altre missatge preguntat si voleu redirigir tot el trànsit a través d’HTTPS. Elegiu l’opció 2.

El lloc quedarà configurat per redirigir tot el trànsit a a través de HTTPS (xifrat).

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com
-------------------------------------------------------------------------------
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-02-24. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. 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

Assegureu-vos que el vostre proveidor d’internet no bloquege l’accés des d’internet dels ports 80 (http) i 443 (https), a mi em va dornar molts mals de cap, em fallava la creació dels certificats perquè el servidor no es podia comunicar correctament amb internet.

8è Pas: configuració final de l’entorn moodle

Obriu el navegador i escriviu el nom del servidor o l’adreça IP. Apareixerà l’assistent de configuració del lloc de Moodle.

https://example.com

Elegiu idioma i continueu. 

Configureu les rutes correctes del directori de moodle i moodledata.

Elegiu el tipus de base de dades, MariaDB i premeu el boto de “Continuar”.

Afegiu les dades correctes de la bases de dades configurada anteriorment i premeu continuar.

Creu el compte administrador de moodle amb les vostres dades.

 

Enhorabona ja tens llest el teu entorn moodle amb certificat SSL. El certificat té una caducitat de tres mesos així que el més pràctic és afegir un ordre al CRON d’ubuntu per a que execute la renovació dels certificats de forma automàtica.

sudo crontab -e

Heu d’afegir la línia següent al vostre arxiu i desar-lo.

0 2 * * 0 usr/bin/certbot renew & > /dev/null

La nomenclatura que utilitza el CRON de linux és la següent:

  • El primer dígit representa els minuts.
  • El segon dígit representa l’hora.
  • El tercer dígit representa el dia del mes.
  • El quart dígit representa el mes de l’any.
  • El cinquè dígit representa el dia de la setmana. 

Així en el nostre cas li indiquem que el cron execute l’ordre de renovació dels certificats a les 2:00 de cada diumenge. Tingueu en compte que no es renovaran els certificats fins que no estiga obert el període de renovació que és 30 dies abans de la data de caducitat del certificat. 


 

Publicat per dtalens

Professor. Amant de la tecnologia en general i especialment del món web.

Uneix-te a la conversa

2 comentaris

Feu un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *