Posted in

Montar un servidor Apache + PHP en Debian

Instalamos Apache

sudo apt update
sudo apt install apache2

Comprobamos el estado de Apache

sudo systemctl status apache2

Instalamos PHP

versión por defecto (en estos momentos la 7.4)

sudo apt -y install php php-common

Instalamos extensiones

sudo apt install -y php-apcu php-bcmath php-curl php-gd php-imagick php-intl php-mbstring php-memcached php-xml php-zip

Seleccionamos otra versión (por ejemplo la 8)

Los paquetes de PHP 8 para Debian están disponibles en el repositorio DEB.SURY.ORG. Instalamos las dependencias requeridas.

sudo apt update
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2

Agregamos el repositorio APT de paquetes PHP a nuestro servidor Debian.

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

Importamos la llave del repositorio:

wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -

Realizamos la actualización del índice del paquete para confirmar que se ha agregado el repositorio:

$ sudo apt update
Hit:1 http://mirror.hetzner.de/debian/packages buster InRelease
Hit:2 http://security.debian.org buster/updates InRelease
Hit:3 http://mirror.hetzner.de/debian/packages buster-updates InRelease
Hit:4 http://mirror.hetzner.de/debian/packages buster-backports InRelease
Hit:5 http://mirror.hetzner.de/debian/security buster/updates InRelease
Hit:6 http://deb.debian.org/debian buster InRelease
Hit:7 http://deb.debian.org/debian buster-updates InRelease
Hit:8 http://deb.debian.org/debian buster-backports InRelease
Get:9 https://packages.sury.org/php buster InRelease [6,759 B]
Get:10 https://packages.sury.org/php buster/main amd64 Packages [148 kB]
Fetched 155 kB in 2s (83.2 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
7 packages can be upgraded. Run 'apt list --upgradable' to see them.

Con el repositorio agregado, podemos comenzar la instalación de PHP 8.0 en Debian el 10/11/9:

sudo apt update 
sudo apt install php8.0

Confirmamos la instalación:

$ php -v
PHP 8.0.9 (cli) (built: Jul 30 2021 13:09:45) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.9, Copyright (c), by Zend Technologies

Si nos aparece que la versión activa es la 8.1.8 (por ejemplo), y queremos tener la 8.0 por defecto que también está instalada, haremos lo siguiente:

sudo update-alternatives --set php /usr/bin/php8.0

Comprobamos que efectivamente se ha realizado el cambio

php -v

Instalamos las extensiones necesarias:

sudo apt install php8.0-<extension>

Estos son algunos de los disponibles

$ sudo apt install php8.0-
php8.0-bcmath            php8.0-curl-dbgsym       php8.0-gmp-dbgsym        php8.0-mysql             php8.0-pspell-dbgsym     php8.0-tidy
php8.0-bcmath-dbgsym     php8.0-dba               php8.0-imap              php8.0-mysql-dbgsym      php8.0-readline          php8.0-tidy-dbgsym
php8.0-bz2               php8.0-dba-dbgsym        php8.0-imap-dbgsym       php8.0-odbc              php8.0-readline-dbgsym   php8.0-xdebug
php8.0-bz2-dbgsym        php8.0-dev               php8.0-interbase         php8.0-odbc-dbgsym       php8.0-snmp              php8.0-xml
php8.0-cgi               php8.0-enchant           php8.0-interbase-dbgsym  php8.0-opcache           php8.0-snmp-dbgsym       php8.0-xml-dbgsym
php8.0-cgi-dbgsym        php8.0-enchant-dbgsym    php8.0-intl              php8.0-opcache-dbgsym    php8.0-soap              php8.0-xsl
php8.0-cli               php8.0-fpm               php8.0-intl-dbgsym       php8.0-pgsql             php8.0-soap-dbgsym       php8.0-zip
php8.0-cli-dbgsym        php8.0-fpm-dbgsym        php8.0-ldap              php8.0-pgsql-dbgsym      php8.0-sqlite3           php8.0-zip-dbgsym
php8.0-common            php8.0-gd                php8.0-ldap-dbgsym       php8.0-phpdbg            php8.0-sqlite3-dbgsym
php8.0-common-dbgsym     php8.0-gd-dbgsym         php8.0-mbstring          php8.0-phpdbg-dbgsym     php8.0-sybase
php8.0-curl              php8.0-gmp               php8.0-mbstring-dbgsym   php8.0-pspell            php8.0-sybase-dbgsym

Si queremos modificar los límites de subida de archivos, abriremos el php.ini correspondiente a nuestra versión de PHP:

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

Ajustes del Firewall

Instalamos UFW

sudo apt install ufw

Lo activamos.

sudo ufw enable

Damos acceso a las siguientes conexiones:

sudo ufw allow 'WWW'
sudo ufw allow 22/tcp

* En principi amb aquests és suficient

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Comprobamos que se han registrado correctamente:

sudo ufw status

Creamos el espacio web

sudo mkdir -p /var/www/html/your_domain.com
sudo chown -R $USER:$USER /var/www/html/your_domain.com
sudo chmod -R 755 /var/www/html/your_domain.com

Ya tenemos accesible el sitio mediante IP del servidor.

Configuramos el Virtual Host para que funcione a través de un dominio

sudo nano /etc/apache2/sites-available/your_domain.com.conf

Y añadimos las siguientes lineas:

<VirtualHost *:80>
    ServerAdmin admin@your_email_domain
    ServerName your_domain.com
    ServerAlias www.your_domain.com
    DocumentRoot /var/www/html/your_domain.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Activamos el archivo virtual host que acabamos de crear:

sudo a2ensite your_domain.com

Eliminamos la configuración por defecto

sudo a2dissite 000-default.conf

Reiniciamos Apache:

sudo systemctl restart apache2

Mod_rewrite

Para activar el mod_rewrite y hacer uso de las URL amigables, hay que editar el archivo apache2.conf

sudo nano /etc/apache2/apache2.conf

Y cambiar el AllowOverride a All, quedando de esta manera:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Reiniciar Apache

sudo systemctl restart apache2

Dar permisos al usuario debian y al grupo www-data

sudo chown -R debian:www-data /var/www/html

Sendmail

Para poder hacer uso de la función mail() de PHP es necesario instalar Sendmail:

sudo apt-get install sendmail

* Es importante crear un PTR record en las DNS del dominio, indicando la IP de la máquina. Algo tipo así (en un registro TXT/SPF): v=spf1 mx a ptr ip4: 51.68.47.69 include:srv.cat ~all

Fuentes

https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-debian-10
https://linuxize.com/post/how-to-set-up-apache-virtual-hosts-on-debian-10/

Otros

MySQL
MariaDB
Let’s Encrypt

Deixa un comentari

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


The reCAPTCHA verification period has expired. Please reload the page.