Blog de programación, errores, soluciones

Chose Language:
comments
Author: Admin/Publisher |finished | checked

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.

/var/
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

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.

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

caddyfile
tuserver.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 Caddyfile
make your bash file executable:
chmod +x start-frankenphp.sh
after 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 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.

https://www.ionos.com/es-us/digitalguide/servidores/configuracion/comando-de-linux-nohup/

veamos que nos recomendó la IA:

carpeta www
nohup sudo frankenphp run -c Caddyfile > output.log 2>&1 &

y para parar el proceso nos dice que usemos

carpeta www
pkill -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

Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category

Comments