Instalación standalone de FrankenPHP: Guía paso a paso
Este será un pequeño documento acerca de como instalar FrankenPHP server de forma Standalone, un servidor muy bueno para webs creadas en PHP, como pueden ser proyectos en Laravel, Symphony y WordPress.
Instilación del servidor
FrankenPHP tiene 2 formas de ser instalado, una es la instalación Docker y la otra es la Instalación standalone.
Para poder instalarlo de forma standalone necesitaremos de curl, instálalo como deses. Generalmente, para sitios en PHP se utiliza Linux como servidor, así que el comando para instalar curl es el siguiente
sudo apt-get install curl
Una vez instalado curl podrás utilizar el comando de curl que se encuentra en la página de frankenPHP
curl https://frankenphp.dev/install.sh | sh
Esto bajará frankenphp a la carpeta donde te encuentras, luego de ello mueve frankenPHP a la carpeta /user/local/bin/
mv frankenphp /usr/local/bin/
Esto te permitirá utilizar frankenphp como comando
Donde colocar nuestros sitios
Bien ahora deberíamos de hacer una carpeta para nuestros sitios webs por lo general en Linux se recomienda utilizar /var/www/
por lo tantos vayamos a ver y veamos si existe la carpeta www con el comando dir
.
cd /var/
Corre el comando dir luego de esto
/var/dir
Si no está tu carpeta puedes crearla con mkdir
, probablemente no te deje crearla directamente al ser de sistema, por lo tanto, utiliza sudo también para poder crearla.
sudo mkdir www
Bien, esta será tu carpeta para los proyectos web que tengas con FrankenPHP
Por ejemplo, si queremos hacer una web llamada no sé “mghogar.com” podríamos hacerle su carpeta aquí quedando la ruta completa /var/www/mghogar.com/
<- carpeta del proyecto
Si quisiéramos correr este proyecto deberíamos de posicionarnos sobre la carpeta mghogar.com y correr el siguiente comando en consola:
/var/www or (where you have wwww)sudo frankenphp php-server
¿Cómo configuro mi sitio?
¿Ok todo muy bonito hasta aquí, nuestro server corre y todo, pero está corriendo mientras no toque la consola como hago para correr el server sin inhabilitar la consola?
Estas son 2 preguntas que usted debería haberse preguntado. La cuestión que frankenphp php-server
es un comando para probar nuestro servidor, no para mantener el servidor corriendo
Para tener nuestro server corriendo deberemos utilizar frankenphp run
, si corremos frankenphp php-serve este no buscará ninguna caddyfile, no cargará ninguna configuración, solo servirá la página en donde estamos parados.
Frankenphp no posee o no encontré una documentación oficial, pero sí que tiene el flag -h help, veamos que podemos hacer con frankenphp run
frankenphp run -h
Flags: -a, --adapter string Name of config adapter to apply -c, --config string Configuration file --envfile strings Environment file(s) to load -e, --environ Print environment -h, --help help for run --pidfile string Path of file to which to write process ID --pingback string Echo confirmation bytes to this address on success -r, --resume Use saved config, if any (and prefer over --config file) -w, --watch Watch config file for changes and reload it automatically
Ok, podemos ver que -c
es la bandera que necesitamos porque queremos un archivo Caddy para nuestro servidor. Tal vez te estés preguntando: ¿Por qué? ¿Por qué demonios necesito un archivo de configuración si el servidor funciona con solo frankenphp php-serve
?
Bueno, lo necesitas en muchas circunstancias. Imagina que quieres tener más de una página en tu servidor.
¿Cómo manejarías eso?
También podríamos querer usarlo por otras razones, como gestionar las versiones de HTTP, las raíces del proyecto, proxies inversos, etc.
Caddyfile
Esta será él archive donde tendremos nuestra configuración, este puede tener 2 nombres caddyfile o Cadyfile sin extensiones.
En frankenphp las caddyfile empiezan siempre con
caddyfile{ # Enable FrankenPHP frankenphp }
Para tu server puedes agregar
caddyfiletuserver.com { root * /path/to/app/public php_server }
Esto es una parte que no te debes saltar, frankenphp usa Caddy en su parte posterior ¿pero que es Caddy?
Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go.
Obviamente que el caddyfile usa las directivas de Caddy por debajo y las podríamos usar en nuestro archivo de configuración.
SSL en el localhost
Para poder utilizar SSL en nuestro localhost le recomiendo utilizar la directiva tls internal
, pero para poder utilizarla necesitará de certutil una herramienta de línea de comandos utilizada principalmente para administrar certificados digitales
sudo apt-get install libnss3-tools
Una vez tengas certutil instalado debería ser fácil correr tu servidor aunque deberas de poner un dominio en hosts en mi caso puse myproject.local, a continuación dejo una muestra de mi Caddyfile recuerda que también le puedes poner caddyfile.
Caddyfile{ frankenphp } myproject.local { tls internal root * /home/ronin/www/public/ php_server }
Ya con esto sería suficiente para tu servidor, en mi caso puse mi página en home, esto en caso de estar configurando un server no lo hagas, lo recomendable es que esté en /var/www/tuweb.com/ y lo ideal es que tu caddyfile esté en www.
Ok para correr nuestro server utilizaríamos el siguiente comando:
/var/www/sudo frankenphp run -c Caddyfile
Ahora cuando vayas a tu web local en el navegador debería aparecerte un cartel de inseguro, esto se debe a que es un certificado hecho por nosotros en nuestra pc, este para el navegador no tiene ninguna validez.
Dale advanced y dile que confías en la página, después de todo tú estás creándola como no confiar en ella.
No puse imagen, pero http3 funciono correctamente
No uses certificados autofirmados (self-signed) en páginas de producción; esto solo lo hacemos en desarrollo para probar que HTTP/2 o HTTP/3 funcionan correctamente con este servidor.
Una cosa más: si ya tienes una página funcionando y generas ingresos, considera donar al menos 5 USD a Let’s Encrypt. Después de todo, ellos están certificando que tu página es segura
Ejecutando el server en segundo plano
para ejecutar el server en segundo plano puedes crear un daemon como el siguiente:
[Unit] Description=FrankenPHP Server After=network.target [Service] Type=simple ExecStart=/usr/local/bin/frankenphp php-serve /path/to/your/project WorkingDirectory=/path/to/your/project Restart=always #use the specific user that is use in frankenphp,sh file and caddyfile,i use root by convinience User=root Group=root Environment="FRANKENPHP_LOG_LEVEL=info" Environment="FRANKENPHP_HTTP_VERSION=3" StandardOutput=syslog StandardError=syslog [Install] WantedBy=multi-user.target
Using frankenphp run
To execute the command frankenphp run you need to make a bash, like start-frankenphp.sh for example:
start-frankenphp.sh#!/bin/bash cd /var/www/ exec sudo frankenphp run -c Caddyfilemake your bash file executable:
chmod +x start-frankenphp.shafter this you need to change the ExecStart line in the daemon config: you will not need /bin/bash cause we are using shebang #! and now what to run cause of it
ExecStart=/path/to/your/script/start-frankenphp.sh
Recuerda que los archivos daemon en Linux van en /etc/systemd/system/ ponle un buen nombre, por ejemplo FknPHP.service o el que desees, solo recuerda que cuando uses systemd deberás acordarte de este.
sudo systemctl enable FknPHP.service
sudo systemctl daemon-reload
Para correrlo necesitarás:
sudo systemctl start [nombre del servicio]
y para pararlo
sudo systemctl stop [nombre del servicio]
otra manera que no he testeado, es una que le pregunte a la IA, ya que quería saber si frankenPHP tenía algún comando que hiciera, eso sin hacer el daemon es utilizar nohup
, pero que carajos es noup veamos la definición que se nos da en
El comando de Linux
https://www.ionos.com/es-us/digitalguide/servidores/configuracion/comando-de-linux-nohup/nohup
hace que tu sistema ignore el comando de hangup HUP. De esta manera, un proceso puede seguir ejecutándose en segundo plano. El output obtenido se redirige al archivo nohup.out o a otro archivo de tu elección.
veamos que nos recomendó la IA:
carpeta wwwnohup sudo frankenphp run -c Caddyfile > output.log 2>&1 &
y para parar el proceso nos dice que usemos
carpeta wwwpkill -f "frankenphp run -c Caddyfile"
¿Usar Caddy o frankenPHP?
Frankenphp tiene mayores beneficios para aplicaciones web hechas, de hecho para Laravel o Symfony es más recomendable utilizar frankePHP.
Cuando usar Caddy en vez de FrankenPHP
Supongamos que tenemos varias webs hechas en varios lenguajes diferentes, en ese escenario deberíamos de utilizar caddy en vez de frankenPHP.
En mi caso, por ejemplo, que hago algunas cosas en Go sería mejor utilizar Caddy Server en vez de frankenPHP
The following is an answer of duglas to ochorocho
php-server is a helper command that starts FrankenPHP without requiring to write a Caddyfile.
It is ok for very standard PHP apps. It doesn’t read the Caddyfile at
all.
If you need(or want) a custom Caddyfile, you must use run instead.