Infraestructuras libres o cómo generar autonomías en el territorio digital
¿Cómo preparamos nuestro territorio digital para que esté apto para que florezcan nuestro proyectos digitales?
No hay recetas mágicas, necesitamos trabajar nuestras autonomías, aliarnos con otros proyectos independientes que nos ayuden a cultivar nuestro territorio digital. Para esto no hay un único camino, hay caminos diversos.
Es importante que podamos diferenciar diferentes instancias que serán fundamentales a la hora de generar nuestras propias autonomías digitales: hardware, conectividad y software.
Para hardware y conectividad, se pueden crear servidores caseros, con RaspberryPi y otro tipo de hardware, siempre que se cuente con una conexión lo suficientemente buena para poder generar conectividad de entrada y salida para comunicarse con el servidor de forma remota, pero en este artículo no vamos a profundizar en esta área, ya que supone la parte quizás más compleja de todas, un reto de magnitudes enormes para proyectos que recién están comenzando, e incluso para proyectos avanzados, debido a los altos costos que tiene poder crear un centro de datos.
Sin embargo, hay diferentes proveedores que resuelven toda esta operatoria, y aunque la aspiración es la autonomía e independencia total, al mismo tiempo puede ser una ilusión. Ya que siempre vamos a depender de otras empresas y proyectos que nos brinden tanto el hardware, como la conectividad, o la mano de obra especializada para la configuración.
Si les interesa este tema pueden ponerlo en los comentarios para que hagamos un post al respecto. Hoy nos queremos enfocar más en cómo crear u configurar un servidor web que nos sirva para poner diferentes proyectos online, sea en HTML o PHP. El caso más comun podría ser la instalación de una instancia de WordPress. Aunque es mucho más seguro y requiere menos mantenimiento la creación de sitios web en HTML mediados por un repositorio GIT.
Instalar un servidor LEMP en Debian
Hoy veremos como instalar y configurar un servidor LEMP, que significa Linux, Nginx (que se pronuncia Engine X, por eso la E), Mysql (MariaDB en este caso) y PHP.
Para comenzar debes contar con un servidor propio, sea un VPS o un Servidor Dedicado. Ls siguientes instrucciones están probadas con un sistema operativo Debian 12. Y debes poder conectarte vía SSH al servidor.
También este tutorial asume que cuentas con un dominio propio (tunombre.org) apuntando correctamente a tu servidor.
Requerimientos:
- VPS o Servidor Dedicado
- Debian 12 instalado
- Acceso SSH al servidor
Ingresar al servidor por SSH
Instalar NGNIX
sudo apt update && sudo apt upgrade -y && sudo apt install nginx -y
Agregar el dominio a configurar en NGINX
sudo nano /etc/nginx/sites-available/dominio.org
Copiar y pegar el siguiente contenido:
server {
listen 80;
listen [::]:80;
root /var/www/dominio.org/web/;
index index.html index.php;
server_name dominio.org www.dominio.org;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/dominio.org.access.log;
error_log /var/log/nginx/dominio.org.error.log;
}
Crear y configurar la carpeta del dominio
sudo mkdir /var/www/dominio.org && sudo mkdir /var/www/dominio.org/web && sudo nano /var/www/dominio.org/web/index.html
En este archivo index.html escribir “hola mundo” y guardar.
Cambiar los permisos de usuario y grupo de la carpeta web/
sudo chown www-data:www-data /var/www/dominio.org/web -R
Habilitar el sitio en NGINX
sudo ln -s /etc/nginx/sites-available/dominio.org /etc/nginx/sites-enabled/dominio.org
Reiniciar NGINX
sudo systemctl restart nginx
Ahora, comprobar el navegador que la web responder en el dominio configurado y se lee *Hola Mundo*.
Instalar MariaDB
sudo apt install mariadb-server -y
Configurar la seguridad de la base de datos
sudo mysql_secure_installation
Y contestar las siguientes preguntas así:
Switch to unix_socket authentication? n
Change the root password? Y
Remove anonymous users? Y
Disallow root login remotely? Y
Remove test database and access to it? Y
Instalar Certbot
Si todo funciona bien, entonces instalar Certbot
sudo apt update && sudo apt install snapd -y
sudo snap install snapd
sudo snap install core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Configurar el dominio con SSL
sudo certbot --nginx
Si todo es correcto detectará el dominio configurado con anterioridad y te preguntará si quieres instalar el certificado, para ello elige las opciones correspondientes (con y sin www).
Adicionalmente preguntará lo siguiente:
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): tucorreo@dominio.org
Aceptar los términos Y
Recibir noticias N
Por último reinicia NGINX
sudo systemctl restart nginx
Si todo está bien, debería reiniciar sin problemas y ya funcionar el SSL/HTTPS.
Ahora, agrega la renovación de los certificados mediante un crontab:
sudo crontab -e
Y agrega la siguiente línea:
0 4 * * 7 certbot renew --quiet --nginx --post-hook 'systemctl reload nginx'
Esto hará que los domingos a las 4 AM revise si hay certificados por renovar y reiniciará NGINX.
Instala PHP en su última versión (8.4 al hacer este tutorial)
Descarga la llave GPG
sudo wget https://packages.sury.org/php/apt.gpg -O /etc/apt/keyrings/deb.sury.org.gpg
Agregar el repositorio Debian DPA
sudo nano /etc/apt/sources.list.d/deb.sury.org.list
En este archivo agregar la línea
deb [signed-by=/etc/apt/keyrings/deb.sury.org.gpg] https://packages.sury.org/php bookworm main
Actualiza APT
sudo apt update
Instala PHP
sudo apt install php8.4 php8.4-fpm php8.4-mysql php8.4-gd php8.4-cli php8.4-curl php8.4-mbstring php8.4-zip php8.4-opcache php8.4-xml php8.4-imagick php8.4-intl -y
Al finalizar, agrega las directivas PHP en la configuración de NGINX
sudo nano /etc/nginx/sites-available/dominio.org
location ~* \.php$ {
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_read_timeout 3600s;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
include fastcgi_params;
}
Reinicia NGINX
sudo systemctl restart nginx
Si todo está correcto debería estar LEMP funcionando.
Enjoy and happy hacking 🙂
Fuentes:
https://linuxiac.com/how-to-install-lemp-stack-on-debian-12/
https://certbot.eff.org/instructions?ws=nginx&os=snap
https://snapcraft.io/install/core/debian
https://fostips.com/install-php-debian-12/