La configuración muy boluda de mi webserver

Publicado 2024-11-23

Además de algún que otro juego, la idea de el servidor casero para mi es poder hostear una página web y repositorios git. El setup lo fui cambiando, refinando y simplificando con los años. Cómo lo tengo ahora es muy muy simple y funcional. Fijate si te sirve.

Esto está1 hecho en una máquina con Fedora, pero si te andás con otra distro te va a andar, solo tenés que buscar los paquetes equivalentes y las ubicaciones de los archivos de configuración que posiblemente sean distintos.

Configuración de Apache

Al ser una compu de escritorio que uso regularmente, me gusta que al sitio web tenerlo en el home directory de mi usuario principal, y para eso uso mod_userdir. Apache lo tengo más o menos out-of-the box. Solamente agrego un redirect de / a /~ramiro/ y permito symlinks en los userdir.

En redirect.conf:

RewriteEngine on
RedirectMatch "^/$" "/~ramiro/"

En userdir.conf:

<IfModule mod_userdir.c>
    UserDir enabled
    UserDir public_html
</IfModule>
<Directory "/home/*/public_html">
    (...)
    Options (...) SymLinksIfOwnerMatch
</Directory>

También tiene mod_markdown de hamano (está en los repos de Fedora). Básicamente te deja servir markdown directamente. Para mi, HTML, como LaTeX, que no está hecho para que escribas a mano, es perder el tiempo.

https://github.com/hamano/apache-mod-markdown

mod_markdown lo configuro en el .htaccess de /~ramiro/.

En .htaccess:

(...)
AddHandler markdown .md
MarkdownCss /~ramiro/static/style.css
MarkdownFlags 0x42205000
MarkdownFooter '<p><a href="/~ramiro/">Home</a></p>'

Y también tiene un par de mods más mi apache, mod_php y mod_autoindex, que más abajo les explico para que los uso.

Tip: podés no exponer ciertos directorios creando en ellos un .htaccess con la directiva Deny from all.

Blog

El blog lo hago basante artesanal: unos archivos de markdown con fecha y copyright escritos a mano. Lo que si tengo es un scriptcito de PHP para generar el índice y el feed atom y ahorrarme el dolor de huevos que es.2

Algo así tengo en feed.php:

(...)
<?php foreach (glob("*.md") as $index=>$file): 
    $url = "http://" . $_SERVER["SERVER_NAME"] . dirname($_SERVER["REQUEST_URI"]) . "/" . $file;
    $lines = file($file);
    $content = file_get_contents($file);
    $title_regex = '/(?<=\#\ ).*(?=\n)/';
    $date_regex = '/\d{4}-([0][1-9]|1[0-2])-([0][1-9]|[1-2]\d|3[01])/';
    preg_match($title_regex, $lines[0], $title);
    preg_match($date_regex, $content, $date);
?>
    <entry>
        <id><?=$url?></id>
        <title><?=$title[0] ?? "Untitled entry"?></title>
        <updated><?=$date[0] ?? "1970-01-01"?>T00:00:00.00Z</updated>
        <link href="<?=$url?>" rel="alternate" />
    </entry>
<?php endforeach; ?>
(...)

y el index.php es muy parecido, te lo dejo de tarea.

Git

Mi solución para hostear repositorios git es básicamente solo usar SSH. Lo tengo explciado en otro post.

http://covacha.net.ar/~ramiro/blog/servidor_git.md

Esto me hace muy muy fácil hacer una interfaz minimalista. Básicamente tengo un symlink a public_git/, donde tengo mis repos, y ahí un script index.php muy parecido al feed.php para listar los repositorios.3

Para la vista de un repositorio en particular me apoyo en el mod_autoindex que viene con Apache. Dejo mis repositrios no bare para que se pueda generar un índice, y muy clave esto: tengo un hook que al pushear al repositorio genera en su raíz un README.html a partir del README del repositorio. mod_autoxindex muestra el README.html abajo del índice y queda muy prolijo.

Mi hook post-receive:

#!/bin/sh
if [ $(git rev-parse --is-bare-repository) = true ] ; then
    ROOT=$(git rev-parse --show-toplevel)
else
    git --git-dir=. --work-tree=$PWD/.. reset --hard
    ROOT="$PWD/../"
fi
git cat-file blob HEAD:README | markdown > "$ROOT/README.html"

En el .htaccess, para configurar un poco el índice:

IndexStyleSheet /~ramiro/static/autoindex.css
IndexOptions NameWidth=* +SuppressSize +SuppressDescription +ScanHTMLTitles +IconsAreLinks +FoldersFirst
(...)

© 2020-2025 Ramiro. Contenido disponible bajo CC BY-SA 4.0.


  1. En realidad desde el 2025 tengo el servidor en una netbook con Debian por varias razones que no importan.
  2. Las idea general de mi setup es siempre ahorrarme laburo manual, evitar markups engorrosos y no usar depender de herramientas no-estandar. Son cosas que fui aprendiendo a lo largo de las varias veces que tuve que replicar mi setup de cero, después de mandarme una en general.
  3. Podría usar autoindex para eso pero me gusta poder mostrar una descripción y cloneurl.

Home