====== Algernon ====== **Servidor web** auto-contenido escrito en [[..:programacion:go|Go]], diseñado para ser ligero, versátil y fácil de desplegar. * [[https://algernon.roboticoverlords.org/|Sitio web]] * [[https://github.com/xyproto/algernon|Repositorio de código]] {{ https://raw.githubusercontent.com/xyproto/algernon/main/img/algernon_gopher.png |}} ===== Características ===== Algernon es un servidor web que incluye soporte integrado para: * Lenguajes y tecnologías: Lua, Teal (Lua tipado), Markdown, JSX, Amber, Pongo2, Sass (SCSS), GCSS. * Bases de datos: BoltDB (embebido), Redis, PostgreSQL, MySQL, SQLite, MSSQL. * Protocolos: HTTP/2, QUIC, HTTP/S. * Otras características: * Plugins * Gestión de usuarios y permisos * Auto-refresh para desarrollo (Linux/macOS) * Integración con Ollama para modelos de lenguaje (LLMs) Todo esto está empaquetado en un **único ejecutable**, lo que facilita su uso sin necesidad de instalar múltiples dependencias. ===== Instalación ===== Realmente no necesita instalación porque se trata de un único fichero ejecutable. ==== Docker ==== Si creamos un directorio llamado ''localhost'' creamos un fichero ''index.md'' (con texto con sintaxis Markdown) y luego ejecutamos lo siguiente: docker run -it -p4000:4000 -v .:/srv/algernon xyproto/algernon Cuando accedamos a ''%%http://localhost:4000%%'' veremos el contenido de ''index.md'' interpretado como HTML. También podemos crear un Docker Compose: --- services: algernon: image: xyproto/algernon:latest container_name: algernon ports: - 3000:3000 volumes: - ./www:/srv/algernon entrypoint: ["/bin/algernon", "--dev", "--autorefresh", "--dir", "/srv/algernon", "--httponly", "--server"] restart: unless-stopped Tras ejecutarlo, podremos ir a ''%%http://localhost:3000%%'' y veremos el contenido del directorio ''www''. ===== Uso ===== Ejemplo más sencillo sirviendo el directorio en el que se encuentra el ejecutable de **Algernon**: algernon -x . Ejecutará el servidor web en el puerto 3000 (por defecto). Si queremos habilitar la recarga automática cuando hay cambios: algernon -a . ===== Opciones ===== A continuación se muestra la sintaxos del ejecutable de **Algernon** y las diferentes opciones que admite como argumentos: Algernon 1.17.4 Web Server Syntax: algernon [flags] [file or directory to serve] [host][:port] Available flags: -a, --autorefresh Enable event server and auto-refresh feature. Sets cache mode to "images". -b, --bolt Use "/tmp/algernon.db" for the Bolt database. -c, --statcache Speed up responses by caching os.Stat. Only use if served files will not be removed. -d, --debug Enable debug mode (show errors in the browser). -e, --dev Development mode: Enables Debug mode, uses regular HTTP, Bolt and sets cache mode "dev". -h, --help This help text -l, --lua Don't serve anything, just present the Lua REPL. -m View the given Markdown file in the browser. Quits after the file has been served once. ("-m" is equivalent to "-q -o -z"). -n, --nobanner Don't display a colorful banner at start. -o, --open=EXECUTABLE Open the served URL in a browser with a standard methodor or with the given (optional) executable. -p, --prod Serve HTTP/2+HTTPS on port 443. Serve regular HTTP on port 80. Uses /srv/algernon for files. Disables debug mode. Disables auto-refresh. Enables server mode. Sets cache to "prod". -q, --quiet Don't output anything to stdout or stderr. -r, --redirect Redirect HTTP traffic to HTTPS, if both are enabled. -s, --server Server mode (disable debug + interactive mode). -t, --httponly Serve regular HTTP. -u Serve over QUIC / HTTP3. -v, --version Application name and version -V, --verbose Slightly more verbose logging. -z, --quit Quit after the first request has been served. --accesslog=FILENAME Access log filename. Logged in Combined Log Format (CLF). --addr=[HOST][:PORT] Server host and port (":3000" is default) --boltdb=FILENAME Use a specific file for the Bolt database --cache=MODE Sets a cache mode. The default is "on". "on" - Cache everything. "dev" - Everything, except Amber, Lua, GCSS, Markdown and JSX. "prod" - Everything, except Amber and Lua. "small" - Like "prod", but only files <= 64KB. "images" - Only images (png, jpg, gif, svg). "off" - Disable caching. --cachesize=N Set the total cache size, in bytes. --cert=FILENAME TLS certificate, if using HTTPS. --conf=FILENAME Lua script with additional configuration. --clear Clear the default URI prefixes that are used when handling permissions. --cookiesecret=STRING Secret that will be used for login cookies. --ctrld Press ctrl-d twice to exit the REPL. --dbindex=INDEX Redis database index (0 is default). --dir=DIRECTORY Set the server directory --domain Serve files from the subdirectory with the same name as the requested domain. --eventrefresh=DURATION How often the event server should refresh (the default is "350ms"). --eventserver=[HOST][:PORT] SSE server address (for filesystem changes). --http2only Serve HTTP/2, without HTTPS. --internal=FILENAME Internal log file (can be a bit verbose). --key=FILENAME TLS key, if using HTTPS. --largesize=N Threshold for not reading static files into memory, in bytes. --letsencrypt Use certificates provided by Let's Encrypt for all served domains and serve over regular HTTPS by using CertMagic. --limit=N Limit clients to N requests per second (the default is 10). --log=FILENAME Log to a file instead of to the console. --maria=DSN Use the given MariaDB or MySQL host/database. --mariadb=NAME Use the given MariaDB or MySQL database name. --ncsa=FILENAME Alternative access log filename. Logged in Common Log Format (NCSA). --nocache Another way to disable the caching. --nodb No database backend. (same as --boltdb=/dev/null). --noheaders Don't use the security-related HTTP headers. --nolimit Disable rate limiting. --postgres=DSN Use the given PostgreSQL host/database. --postgresdb=NAME Use the given PostgreSQL database name. --sqlite=FILENAME Use the given SQLite file (ie. "sqlite.db&cache=shared&mode=memory"). --redis=[HOST][:PORT] Use ":6379" for the Redis database. --rawcache Disable cache compression. --servername=STRING Custom HTTP header value for the Server field. --stricter Stricter HTTP headers (same origin policy). --theme=NAME Builtin theme to use for Markdown, error pages, directory listings and HyperApp apps. Possible values are: light, dark, bw, redbox, wing, material, neon, werc or setconf. --timeout=N Timeout when serving files, in seconds. --watchdir=DIRECTORY Enables auto-refresh for only this directory. -x, --simple Serve as regular HTTP, enable server mode and disable all features that requires a database. Example usage: For auto-refreshing a webpage while developing: algernon --dev --httponly --debug --autorefresh --bolt --server . :4000 Serve /srv/mydomain.com and /srv/otherweb.com over HTTP and HTTPS + HTTP/2: algernon -c --domain --server --cachesize 67108864 --prod /srv Serve the current dir over QUIC, port 7000, no banner: algernon -s -u -n . :7000 Serve the current directory over HTTP, port 3000. No limits, cache, permissions or database connections: algernon -x