1. Instalación e configuración do servidor NGINX

O Nginx é un servidor web moi lixeiro e cun alto rendemento. Ademais, aínda que nesta nova non o veremos, permite a creación dun proxy inverso ou un balanceador de carga. Vexamos como se instala

pacman -S nginx-mainline

E creamos o servizo para que se inicie nginx cando se reinicie o servidor

systemctl enable --now nginx

Se accedemos co navegador podemos observar que xa funciona o noso servidor, dándonos unha mensaxe de benvida

Co obxectivo de evitar un erro, que se imprime na pantalla coa seguinte lenda: "could not build optimal types_hash, you should increase either types_hash_max_size: 1024...", editamos o ficheiro nginx.conf

nano /etc/nginx/nginx.conf

E no apartado http, engadimos as seguintes liñas ao principio:

http {
    client_max_body_size 100M;
    types_hash_max_size 4096;
    server_names_hash_bucket_size 128;

 

2. Configuración dos VHOST

Accedemos ó cartafol de configuración do nginx

cd /etc/nginx

E creamos dous subcartafoles:

mkdir sites-available

mkdir sites-enabled

E dentro destes cartafoles crearemos os ficheiros de configuración que redirixan o servidor a outro cartafol do servidor, pero empregando uns servizos definidos como pode ser unha versión específica de php. Para isto descargamos no cartafol sites-available o seguinte ficheiro que nos servirá de axuda:

cd sites-available

wget https://atio.es/pub/default

Creamos  o ficheiro co nome blog. Os nomes dos ficheiros de configuración poden ter calquera denominación.

cp default blog

cp default oaoa

Configuramos o primeiro, o ficheiro blog. Pasamos a editalo:

nano blog

E procedemos a facer os seguintes cambios:

1º cambio, eliminamos default_server das dúas liñas seguintes:

server {
 listen 80 default_server;
 listen [::]:80 default_server;

por:

server {
 listen 80;
 listen [::]:80;

2º cambio. Definimos a ruta na cal imos gardar a páxina web. Polo tanto mudamos:

root /srv/http;

por:

root /srv/http/blog;

3º cambio. Definimos o nome do dominio mediante o cal queremos acceder á páxina web. Polo tanto cambiamos de:

server_name _;

por:

server_name d.blog.atio.es;

Gardamos o ficheiro e creamos un enlace simbólico no cartafol sites-enabled do ficheiro blog

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

Abrimos o ficheiro nginx.conf

nano /etc/nginx/nginx.conf

e engadimos ao final do mesmo, e antes da chave de peche }, é dicir, a penúltima liña, a seguinte instrución:

include /etc/nginx/sites-enabled/*;

}

gardamos os cambios e comprobamos a sintaxis:

nginx -t

E se todo foi ben imprimirase en pantalla a seguinte mensaxe:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Cargamos a configuración, para que sexa tida en conta polo servidor e reiniciamos o servizo

nginx -s reload

systemctl reload nginx

E seguidamente dirixímonos á ruta pública por defecto do servidor e creamos o cartafol no que colocaremos a páxina web:

cd /srv/http

mkdir blog

Entramos dentro do cartafol blog e creamos un ficheiro index.html

cd blog

nano index.html

E engadimos por exemplo este contido:

Ola desde Blog!

Ademais, no noso proveedor do dominio temos que configurar o dominio. Neste exemplo, o dominio d.blog.atio.es en que apuntar á ip 164.92.209.43. Teremos en conta que o cambio non é instantáneo, e pode demorar uns minutos.

E xa por último, se accedemos co noso navegador ao dominio d.blog.atio.es, ábrese a páxina que aloxamos dentro do cartafol /srv/http/blog

3. Solicitar os certificados Let's Encrypt coa utilidade Certbot

Como podemos observar na imaxe anterior, aparece un candado tachado. Isto significa que a comunicación co servidor non é segura, é dicir non é cifrada e ademais o navegador non nos dá garantía de que a páxina sexa que di que é. Hai un servizo chamado Let's Encrypt mediante o cal podemos obter certificados gratuítos. Para a comunicación e xestión deste servizo empregamos o programa Certbot. Procedemos a instalalo e creamos os certificados

sudo pacman -S certbot-nginx
sudo certbot --nginx

E neste exemplo crea o certificado para o dominio d.blog.atio.es. Se abrimos o dominio no navegador, aínda que non engadíranos o protocolo seguro https, seremos redixidos ao protocolo seguro e aparece o candado

Sen embargo debemos crear un servizo para revisar e renovar o certificado.

nano /etc/systemd/system/certbot.service


[Unit]
Description=Let's Encrypt renewal
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/certbot renew --quiet --agree-tos
TimeoutStopSec=180
KillMode=process
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target

e seguidamente:

nano /etc/systemd/system/certbot.timer

[Unit]
Description=Twice daily renewal of Let's Encrypt's certificates

[Timer]
OnCalendar=0/12:00:00
RandomizedDelaySec=1h
Persistent=true

[Install]
WantedBy=timers.target

E habilitamos e cargamos o servizo certbot.timer

sudo systemctl enable certbot.timer
sudo systemctl enable certbot.service

sudo systemctl start certbot.timer
sudo systemctl start certbot.service

4. SERVIDOR PHP

Coa axuda do paquete php-fpm, podemos instalar varias versións de php no propio equipo. E os ficheiros de configuración vhost de nginx (/etc/nginx/sites-available), decidimos con que versión executar cada unha das páxinas web. Por exemplo, podemos executar o Drupal cunha versión de php 8 e un Moodle cunha versión php 7.4

sudo pacman -S php-fpm
sudo systemctl enable php-fpm
sudo systemctl start php-fpm

E configuramos /etc/nginx/nginx.conf para cando accedamos a través da ip no navegador e despois da zona de PHP Script pegamos o seguinte código:

location ~ \.php$ {
 fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
 fastcgi_index index.php;
 root /srv/http;
 include fastcgi.conf;
}

Comprobamos a sintaxe do da configuración e recargamos o nginx

nginx -t
nginx -s reload

Creamos un ficheiro info.php en /srv/http

nano /srv/http/info.php

e engadimos o seguinte contido:

<?php
 phpinfo();
 ?>

Abrimos o navegador e comprobamos que funciona o servidor php ao inserir a ruta http://164.92.209.43/info.php

Configuramos agora o ficheiro blog situado en /etc/nginx/sites-available

nano /etc/nginx/sites-available/blog

Dirixímonos á sección  php e descomentamos unhas cantas liñas e configuramos correctamente a ruta na que se atopa o php-fp.sock

# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
#       include fastcgi.conf;
#       # With php-fpm (or other unix sockets):
#       fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
#}

e deixámolo o código así:

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include fastcgi.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
}

Comprobamos a sintaxe do da configuración e recargamos o nginx

nginx -t
nginx -s reload

Copiamos o ficheiro info.php que creamos fai un momento na ruta /srv/http/blog

cp /srv/http/info.php /srv/http/blog/

E comprobamos que funciona o servidor php na url https://d.blog.atio.es

Instalación da versión PHP 7.4

Sen embargo hai aplicacións que non soporta a versión 8 de php e teñen que funcionar nunha versión máis antiga como pode ser a versión 7.4. Vexamos como se instala e como se configura o ficheiro vhost blog:

sudo pacman -S php7-fpm php7-gd php7-pgsql php7-intl php7-xsl php7-imagick php7-apcu php-pspell php7-sodium php7-sqlite
sudo systemctl enable php-fpm7
sudo systemctl start php-fpm7

Podemos comprobar no que no cartafol /run creouse un cartafol php-fpm7 e dentro do mesmo un socket co nome php-fpm.sock

Agora debemos configurar o ficheiro vhost blog, para que poida interpretar os ficheiros php. No caso de non facelo, o servidor Nginx procede a descargalos como se fose un ficheiro pdf. Para isto:

nano /etc/nginx/sites-available/blog

Dirixímonos á sección  php e descomentamos unhas cantas liñas e configuramos correctamente a ruta na que se atopa o php-fp.sock

# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
#       include fastcgi.conf;
#       # With php-fpm (or other unix sockets):
#       fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
#}

e deixámolo o código así:

# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include fastcgi.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php-fpm7/php-fpm.sock;
#       # With php-cgi (or other tcp sockets):
#       fastcgi_pass 127.0.0.1:9000;
}

E xa unha vez aberto este ficheiro tamén podemos descomentar a parte relativa aos ficheiros .htaccess. O servidor nginx non interpreta este tipo de ficheiros, polo que é unha boa práctica que os ocultemos pois poderían ser descargados como un ficheiro máis. Para isto, cambiamos o seguinte:

#location ~ /\.ht {
#       deny all;
#}

por:

location ~ /\.ht {
deny all;
}

Comprobamos que a sintaxis os ficheiros de configuración de nginx é a correcta e recargamos a configuración

nginx -t
nginx -s reload

E comprobamos que funciona o servidor php coa versión php 7.4 na url https://d.blog.atio.es

E finalmente debemos configurar o php.ini. No caso de empregar a versión php 7.4, editamos o ficheiro:

nano /etc/php7/php.ini

E se queremos configurar as características do php 8.1 editamos:

nano /etc/php/php.ini

Instalamos dúas aplicacións que probablemente precisaremos nalgunha aplicación como Drupal

pacman -Sy  php-gd
pacman -Sy  php-pdo

E activamos a extensión no php.ini correspondente en función da versión de php que vaiamos empregar. Descomentamos as seguintes liñas

;extension=gd
;extension=pdo_mysql
;extension=mysqli

Recargamos o servizo:

systemctl reload php-fpm
systemctl reload php-fpm7

Para a instalación do Drupal é recomendable contar con PHP OPcode caching para acelerar a navegación. Para contar con esta utilidade seguiremos estes pasos:

a. Editamos o ficheiros php.ini, por exemplo se imos traballar coa versión php 7.4 editaremos o seguinte:

nano /etc/php7/php.ini

e faríase de modo idéntico se editamos o php.ini para a versión 8.1 nano /etc/php/php.ini

b. E descomentamos e asignámoslle valores ás seguinte liñas:

zend_extension=opcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

Pero ademais para a instalación de Drupal, e para a importación de bases de datos de gran tamaño co phpMyAdmin é conveniente configurar estas liñas:

short_open_tag = On
memory_limit = 512M
cgi.fix_pathinfo = 0
upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 360
date.timezone = Europe/Madrid

E recargamos o servizo php-fpm7, neste caso

systemctl reload php-fpm7

5. INSTALACIÓN MYSQL

sudo pacman -Syu mariadb mariadb-clients libmariadbclient
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service

Para comprobar que funciona podemos acceder e crear unha base de datos de proba

mysql
show databases;
EXIT

Configuramos o contrasinal do usuario root:

mysqladmin --user=root password "contrasinal"
sudo mysql -u root -p
CREATE DATABASE drupaldb;
CREATE USER 'drupaldbuser'@'localhost' IDENTIFIED BY 'novo_contrasinal';
GRANT ALL ON drupaldb.* TO 'drupaldbuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

E para comprobar que funciona a interacción entre php e mysql podemos instalar phpmyadmin

cd /srv/http/blog

wget https://files.phpmyadmin.net/phpMyAdmin/5.1.3/phpMyAdmin-5.1.3-all-languages.zip

unzip phpMyAdmin-5.1.3-all-languages.zip

mv phpMyAdmin-5.1.3-all-languages.zip phpmyadmin

Accedemos desde o navegador, introducindo a seguinte url: http://d.blog.atio.es/phpmyadmin/index.php, e procedemos a crear as base de datos que desexemos.