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.