{"id":31934,"date":"2026-06-18T08:14:00","date_gmt":"2026-06-18T06:14:00","guid":{"rendered":"https:\/\/contabo.com\/blog\/?p=31934"},"modified":"2026-07-01T14:17:18","modified_gmt":"2026-07-01T12:17:18","slug":"autoalojar-gitea-vps-docker","status":"publish","type":"post","link":"https:\/\/contabo.com\/blog\/es\/autoalojar-gitea-vps-docker\/","title":{"rendered":"C\u00f3mo autoalojar Gitea en un VPS con Docker (2026)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_ES.webp\" alt=\"C\u00f3mo autoalojar Gitea en un VPS con Docker (2026)\" class=\"wp-image-31459\" srcset=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_ES.webp 1200w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_ES-600x315.webp 600w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_ES-768x403.webp 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>Todos los equipos llegan a ese momento. Una plataforma cambia sus precios, restringe los repositorios privados o simplemente se vuelve m\u00e1s una carga que un activo. Montar tu propio servidor Git sol\u00eda significar semanas de configuraci\u00f3n y una persona de ops dedicada a mantenerlo. Con Docker y un VPS de buen precio, ahora significa una tarde.<\/p>\n\n\n\n<p>Autoalojar tu servidor Git en un VPS te da control total de tu c\u00f3digo, sin cobro por usuario y sin acceso de terceros a tus repositorios. Para un desarrollador solo o un equipo peque\u00f1o, esa combinaci\u00f3n es dif\u00edcil de superar. Gitea lo vuelve pr\u00e1ctico: es una plataforma de hosting de Git completa que corre sin problemas en hardware modesto, cubre todo el flujo de code review y pasa de cero a HTTPS en menos de una hora.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-que-es-gitea\">\u00bfQu\u00e9 es Gitea?<\/h2>\n\n\n\n<p><a href=\"https:\/\/about.gitea.com\" rel=\"nofollow\">Gitea <\/a>es un servicio Git autoalojado y de c\u00f3digo abierto, escrito en Go. El proyecto naci\u00f3 en 2016 como un fork de Gogs y creci\u00f3 hasta convertirse en una plataforma con todas las funciones: repositorios, pull requests, issues, wikis, webhooks y un package registry integrado. La interfaz web se parece tanto a GitHub que los desarrolladores que buscan una alternativa autoalojada a GitHub la encuentran familiar desde el primer d\u00eda.<\/p>\n\n\n\n<p>El runtime de Go mantiene el binario peque\u00f1o y el uso de memoria bajo. Los requisitos del sistema indican que 1 GB de RAM suele bastar para equipos y proyectos peque\u00f1os. Eso es lo que la hace apta para un VPS peque\u00f1o en lugar de una m\u00e1quina dedicada.<\/p>\n\n\n\n<p><a href=\"https:\/\/forgejo.org\" rel=\"nofollow\">Forgejo <\/a>es un fork comunitario de Gitea con mantenimiento activo, creado en 2022 cuando surgieron dudas sobre la gobernanza del proyecto. Ambos comparten la misma base de c\u00f3digo y la misma estructura de imagen Docker, as\u00ed que el setup que describe esta gu\u00eda aplica para los dos. Si todav\u00eda no te decides, las FAQ del final cubren las diferencias con m\u00e1s detalle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-por-que-autoalojar-gitea-en-un-vps\">\u00bfPor qu\u00e9 autoalojar Gitea en un VPS?<\/h2>\n\n\n\n<p>Las razones principales por las que los desarrolladores autoalojan Gitea no han cambiado, pero salen a la conversaci\u00f3n con m\u00e1s frecuencia ahora que la mayor\u00eda de las plataformas con hosting pasaron al cobro por usuario:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Propiedad del c\u00f3digo.<\/strong>\u00a0Los repositorios viven en tu servidor. Ning\u00fan proveedor puede borrar tu cuenta, restringir tus repositorios privados ni cambiarte el modelo de precios sin avisar.<\/li>\n\n\n\n<li><strong>Sin costo por usuario.<\/strong>\u00a0Tengas 3 usuarios o 30, la cuenta mensual es la misma: lo que cueste tu VPS. Por unos pocos euros al mes con un <a href=\"https:\/\/contabo.com\/es\/vps\/\">VPS de entrada de Contabo<\/a>, las cuentas favorecen r\u00e1pido al autoalojamiento en cuanto tienes m\u00e1s de dos o tres colaboradores activos.<\/li>\n\n\n\n<li><strong>Ligero por dise\u00f1o.<\/strong>\u00a0Gitea corre en hardware con el que plataformas m\u00e1s pesadas batallar\u00edan. Un VPS peque\u00f1o aguanta el trabajo diario de push y pull de un equipo real sin esfuerzo.<\/li>\n\n\n\n<li><strong>Residencia de datos.<\/strong>\u00a0Si tu equipo o tus clientes exigen que el c\u00f3digo se quede dentro de la UE, Contabo cumple ese requisito sin sobreprecio. No hay un \u00abnivel compatible con el RGPD\u00bb aparte por el que tengas que pagar.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-requisitos-previos\">Requisitos previos<\/h2>\n\n\n\n<p>Antes de empezar, confirma que tienes lo siguiente para un setup de Gitea con Docker:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un VPS con Ubuntu 22.04 o 24.04 \u2013 un VPS de entrada de Contabo basta para la mayor\u00eda de los equipos<\/li>\n\n\n\n<li>Docker y Docker Compose instalados \u2013 sigue nuestra <a href=\"https:\/\/contabo.com\/blog\/how-to-install-docker-on-ubuntu-step-by-step-guide\/\">gu\u00eda de instalaci\u00f3n de Docker para Ubuntu<\/a> o usa el complemento de Docker para tu VPS en Contabo<\/li>\n\n\n\n<li>Un dominio o subdominio con un registro A apuntando a la direcci\u00f3n IP de tu VPS (necesario para el HTTPS del Paso 4)<\/li>\n\n\n\n<li>Acceso SSH como root o con sudo al servidor<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-1-prepara-el-vps-e-instala-docker\">Paso 1: Prepara el VPS e instala Docker<\/h2>\n\n\n\n<p>1. Contrata un VPS desde la <a href=\"https:\/\/contabo.com\/es\/vps\/\">p\u00e1gina de VPS de Contabo<\/a>. Crea una contrase\u00f1a segura y gu\u00e1rdala en un lugar seguro. Encuentras tu direcci\u00f3n IP y m\u00e1s informaci\u00f3n en tu correo \u00abYour login data!\u00bb, que recibes despu\u00e9s de hacer el pedido.<\/p>\n\n\n\n<p>2. Con\u00e9ctate por SSH:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh root@YOUR_SERVER_IP<\/code><\/pre>\n\n\n\n<p>3. Actualiza todos los paquetes antes de hacer cualquier otra cosa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt update &amp;&amp; apt upgrade -y<\/code><\/pre>\n\n\n\n<p>4. Aseg\u00farate de tener Docker instalado para el setup de Gitea con Docker. En Contabo, basta con elegir el complemento de Docker al momento del checkout, que entrega el VPS con Docker ya instalado y configurado. Ambos caminos producen al final el mismo Docker Engine funcionando, solo que con distinto esfuerzo y tiempo. Verifica las versiones:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker --version\ndocker compose version\nsudo systemctl status docker<\/code><\/pre>\n\n\n\n<p>5. Crea un directorio dedicado para el stack de Gitea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/gitea &amp;&amp; cd \/opt\/gitea<\/code><\/pre>\n\n\n\n<p>Mant\u00e9n la instalaci\u00f3n en&nbsp;<code>\/opt\/gitea<\/code>&nbsp;para que los vol\u00famenes, los archivos compose y cualquier cambio de configuraci\u00f3n futuro queden en un mismo lugar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-2-docker-compose-yml-de-gitea-con-postgresql\">Paso 2: docker-compose.yml de Gitea con PostgreSQL<\/h2>\n\n\n\n<p>SQLite funciona para setups muy peque\u00f1os, pero PostgreSQL es la opci\u00f3n correcta para cualquier cosa que use un equipo. Maneja las escrituras concurrentes de forma limpia y hace que los backups sean directos.<\/p>\n\n\n\n<p>Antes de ejecutar el comando de abajo, reemplaza dos valores:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Las dos apariciones de\u00a0<code>changeme<\/code>\u00a0por una contrase\u00f1a real<\/li>\n\n\n\n<li>Las dos apariciones de\u00a0<code>git.yourdomain.com<\/code>\u00a0por tu dominio real<\/li>\n<\/ul>\n\n\n\n<p>Luego pega todo el bloque en la terminal de tu servidor de una sola vez para la instalaci\u00f3n de Gitea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat &gt; \/opt\/gitea\/docker-compose.yml &lt;&lt; 'EOF'\nservices:\n  db:\n    image: postgres:16\n    restart: always\n    environment:\n      POSTGRES_USER: gitea\n      POSTGRES_PASSWORD: changeme\n      POSTGRES_DB: gitea\n    volumes:\n      - postgres_data:\/var\/lib\/postgresql\/data\n    networks:\n      - gitea_net\n\n  gitea:\n    image: gitea\/gitea:latest\n    restart: always\n    depends_on:\n      - db\n    environment:\n      - USER_UID=1000\n      - USER_GID=1000\n      - GITEA__database__DB_TYPE=postgres\n      - GITEA__database__HOST=db:5432\n      - GITEA__database__NAME=gitea\n      - GITEA__database__USER=gitea\n      - GITEA__database__PASSWD=changeme\n      - GITEA__server__ROOT_URL=https:\/\/git.yourdomain.com\n      - GITEA__server__SSH_DOMAIN=git.yourdomain.com\n      - GITEA__server__SSH_PORT=222\n    ports:\n      - \"127.0.0.1:3000:3000\"\n      - \"222:22\"\n    volumes:\n      - gitea_data:\/data\n      - \/etc\/timezone:\/etc\/timezone:ro\n      - \/etc\/localtime:\/etc\/localtime:ro\n    networks:\n      - gitea_net\n\nnetworks:\n  gitea_net:\n\nvolumes:\n  postgres_data:\n  gitea_data:\nEOF<\/code><\/pre>\n\n\n\n<p>El comando crea el archivo en silencio y te devuelve al prompt sin ning\u00fan mensaje de confirmaci\u00f3n: eso es normal. Verifica que el archivo se escribi\u00f3 correctamente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/opt\/gitea\/docker-compose.yml<\/code><\/pre>\n\n\n\n<p>La salida debe mostrar el YAML completo con tu contrase\u00f1a y tu dominio en su lugar. Cuando lo haga, pasa al Paso 3 de tu setup de Gitea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-3-configuracion-inicial-y-cuenta-de-administrador\">Paso 3: Configuraci\u00f3n inicial y cuenta de administrador<\/h2>\n\n\n\n<p>1. Levanta el stack en modo detached:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d<\/code><\/pre>\n\n\n\n<p>2. Espera unos 10 segundos y confirma que ambos contenedores est\u00e1n corriendo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose ps<\/code><\/pre>\n\n\n\n<p>Tanto&nbsp;<code>db<\/code>&nbsp;como&nbsp;<code>gitea<\/code>&nbsp;deben mostrar el estado \u00abrunning\u00bb. Si&nbsp;<code>gitea<\/code>&nbsp;se est\u00e1 reiniciando, revisa los logs con&nbsp;<code>docker compose logs gitea<\/code>: un error de conexi\u00f3n a la base de datos en este punto casi siempre significa que las dos contrase\u00f1as&nbsp;<code>changeme<\/code>&nbsp;de tu archivo Compose no coinciden.<\/p>\n\n\n\n<p>3. Abre\u00a0<code>http:\/\/YOUR_SERVER_IP:3000<\/code>\u00a0en tu navegador. El asistente de configuraci\u00f3n de Gitea carga en la primera visita.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Antes de abrir el asistente, actualiza temporalmente\u00a0<code>ROOT_URL<\/code>\u00a0en tu\u00a0<code>docker-compose.yml<\/code>\u00a0a la IP de tu servidor:<br>&#8211; GITEA__server__ROOT_URL=http:\/\/YOUR_SERVER_IP:3000<\/li>\n\n\n\n<li>Reinicia el contenedor y abre el asistente. Esto lo cambiar\u00e1s a tu dominio real en el Paso 4, una vez que nginx est\u00e9 en su lugar.<\/li>\n<\/ul>\n\n\n\n<p>4. Los campos de la base de datos ya deber\u00edan reflejar tu archivo Compose. Baja hasta la secci\u00f3n \u00ab<strong>Administrator Account Settings<\/strong>\u00bb al final y define un nombre de usuario, una direcci\u00f3n de correo y una contrase\u00f1a para el primer usuario administrador.<\/p>\n\n\n\n<p>5. Haz clic en \u00ab<strong>Install Gitea<\/strong>\u00ab. Gitea escribe la configuraci\u00f3n, inicializa la base de datos y te redirige a la p\u00e1gina de inicio de sesi\u00f3n.<\/p>\n\n\n\n<p>6. Inicia sesi\u00f3n con el nombre de usuario tal como lo escribiste: Gitea distingue may\u00fasculas de min\u00fasculas, as\u00ed que\u00a0<code>Admin<\/code>\u00a0y\u00a0<code>admin<\/code>\u00a0son distintos. En el primer inicio de sesi\u00f3n, Gitea te pedir\u00e1 que actualices tu contrase\u00f1a. Hazlo y aterrizar\u00e1s en el dashboard.<\/p>\n\n\n\n<p>Una vez en el dashboard, regresa el binding de puerto en tu&nbsp;<code>docker-compose.yml<\/code>&nbsp;a&nbsp;<code>127.0.0.1:3000:3000<\/code>&nbsp;y reinicia el contenedor antes de pasar al Paso 4:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d gitea<\/code><\/pre>\n\n\n\n<p>Esto cierra el acceso directo al puerto 3000 y prepara a Gitea para correr detr\u00e1s de nginx.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-4-agrega-un-proxy-inverso-y-https\">Paso 4: Agrega un proxy inverso y HTTPS<\/h2>\n\n\n\n<p>Con Gitea corriendo, el siguiente paso es montar un proxy inverso para Gitea con nginx y un certificado TLS de Let&#8217;s Encrypt. Esto te da una direcci\u00f3n&nbsp;<code>https:\/\/<\/code>&nbsp;en forma y cierra el acceso directo al puerto 3000.<\/p>\n\n\n\n<p>Necesitas un dominio o subdominio apuntando a la IP de tu servidor antes de continuar. Si justo necesitas un dominio nuevo, aqu\u00ed tienes un <a href=\"https:\/\/help.contabo.com\/es\/support\/solutions\/articles\/103000271134--puedo-comprar-un-nuevo-dominio-con-contabo-draft-do-not-use-\">tutorial paso a paso para obtener un dominio en Contabo<\/a>.<\/p>\n\n\n\n<p><strong>Instala nginx y Certbot:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install nginx certbot python3-certbot-nginx -y<\/code><\/pre>\n\n\n\n<p><strong>Obt\u00e9n un certificado TLS:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>certbot --nginx -d your.domain.com<\/code><\/pre>\n\n\n\n<p>Certbot te pedir\u00e1 una direcci\u00f3n de correo y te pedir\u00e1 aceptar los T\u00e9rminos de Servicio. Si te pregunta por la redirecci\u00f3n de HTTP a HTTPS, elige la opci\u00f3n 2. Si todo sale bien, ver\u00e1s las rutas del certificado confirmadas en la salida.<\/p>\n\n\n\n<p><strong>Crea la configuraci\u00f3n de nginx para Gitea:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat &gt; \/etc\/nginx\/sites-available\/gitea &lt;&lt; 'EOF'\nserver {\n    listen 80;\n    server_name your.domain.com;\n    return 301 https:\/\/$host$request_uri;\n}\n\nserver {\n    listen 443 ssl;\n    server_name your.domain.com;\n\n    ssl_certificate \/etc\/letsencrypt\/live\/your.domain.com\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/your.domain.com\/privkey.pem;\n    ssl_protocols TLSv1.2 TLSv1.3;\n\n    client_max_body_size 512M;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n}\nEOF<\/code><\/pre>\n\n\n\n<p>Act\u00edvala, elimina el sitio default y recarga nginx:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ln -s \/etc\/nginx\/sites-available\/gitea \/etc\/nginx\/sites-enabled\/\nrm \/etc\/nginx\/sites-enabled\/default\nnginx -t &amp;&amp; systemctl reload nginx<\/code><\/pre>\n\n\n\n<p><strong>Actualiza Gitea para que use tu dominio:<\/strong><\/p>\n\n\n\n<p>Abre tu\u00a0<code>docker-compose.yml<\/code>\u00a0y cambia estas dos l\u00edneas a tu dominio real:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- GITEA__server__ROOT_URL=https:\/\/your.domain.com\n- GITEA__server__SSH_DOMAIN=your.domain.com<\/code><\/pre>\n\n\n\n<p>Al mismo tiempo, regresa el binding de puerto a solo localhost:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- \"127.0.0.1:3000:3000\"<\/code><\/pre>\n\n\n\n<p>Luego reinicia Gitea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker compose up -d gitea<\/code><\/pre>\n\n\n\n<p>Abre&nbsp;<code>https:\/\/your.domain.com<\/code>&nbsp;en tu navegador. Deber\u00edas ver la interfaz de Gitea servida sobre HTTPS con un candado v\u00e1lido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-paso-5-configura-ssh-para-las-operaciones-de-git\">Paso 5: Configura SSH para las operaciones de Git<\/h2>\n\n\n\n<p>Prueba la conexi\u00f3n SSH de Gitea desde tu m\u00e1quina local:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -p 222 -T git@your.domain.com<\/code><\/pre>\n\n\n\n<p>En la primera conexi\u00f3n ver\u00e1s una pregunta sobre la autenticidad del host: escribe&nbsp;<code>yes<\/code>&nbsp;para continuar. La respuesta esperada es&nbsp;<code>Permission denied (publickey)<\/code>. Eso confirma que SSH funciona; el error solo significa que todav\u00eda no has agregado una clave.<\/p>\n\n\n\n<p>Para agregar tu clave p\u00fablica SSH, inicia sesi\u00f3n en Gitea y ve a \u00ab<strong>User Settings > SSH \/ GPG Keys<\/strong>\u00ab. Pega tu clave p\u00fablica y guarda. Una vez agregada, clona un repositorio con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone ssh:\/\/git@your.domain.com:222\/username\/repo.git<\/code><\/pre>\n\n\n\n<p>Gitea genera la URL de clonado correcta de forma autom\u00e1tica en la interfaz del repositorio: c\u00f3piala de ah\u00ed en lugar de armarla a mano.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-siguientes-pasos-asegura-y-respalda-tu-servidor-gitea\">Siguientes pasos: asegura y respalda tu servidor Gitea<\/h2>\n\n\n\n<p>Una instancia de Gitea funcionando no es una lista para producci\u00f3n. Dos cosas importan antes de darla por terminada:<\/p>\n\n\n\n<p><strong>Endurece el servidor.<\/strong>&nbsp;Desactiva el inicio de sesi\u00f3n SSH como root, configura fail2ban para los fallos de autenticaci\u00f3n repetidos, desactiva el registro p\u00fablico en los ajustes de Gitea si no lo necesitas y restringe el tr\u00e1fico entrante solo a los puertos 22, 80, 443 y 222 usando el Firewall de Contabo en el Customer Control Panel. Endurecer el servidor se hace en un dos por tres.<\/p>\n\n\n\n<p><strong>Respalda los vol\u00famenes.<\/strong>&nbsp;Tus datos viven en los vol\u00famenes de Docker&nbsp;<code>gitea_data<\/code>&nbsp;y&nbsp;<code>postgres_data<\/code>. Det\u00e9n el stack, empaqueta cada volumen en un archivo local con tar y c\u00f3pialo fuera del servidor a Contabo Object Storage o a otro destino remoto de forma peri\u00f3dica para tu backup de Gitea.<\/p>\n\n\n\n<p>Ninguna de las dos es opcional si el c\u00f3digo o el trabajo de otras personas depende de la instancia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-solucion-de-problemas\">Soluci\u00f3n de problemas<\/h2>\n\n\n\n<p><strong>El contenedor de Gitea se reinicia una y otra vez.<\/strong>&nbsp;Ejecuta&nbsp;<code>docker compose logs gitea<\/code>&nbsp;y busca la primera l\u00ednea de error. Un error&nbsp;<code>password authentication failed<\/code>&nbsp;significa que el valor de&nbsp;<code>GITEA__database__PASSWD<\/code>&nbsp;no coincide con&nbsp;<code>POSTGRES_PASSWORD<\/code>. Corrige ambos y luego vuelve a ejecutar&nbsp;<code>docker compose up -d<\/code>.<\/p>\n\n\n\n<p><strong>El inicio de sesi\u00f3n limpia el formulario sin mensaje de error.<\/strong>&nbsp;Esto significa que el inicio de sesi\u00f3n s\u00ed funciona, pero Gitea te redirige de vuelta a la p\u00e1gina de login. La causa casi siempre es un desajuste en&nbsp;<code>ROOT_URL<\/code>: Gitea intenta redirigir al dominio configurado, falla y regresa al login. Aseg\u00farate de que&nbsp;<code>ROOT_URL<\/code>&nbsp;en tu&nbsp;<code>docker-compose.yml<\/code>&nbsp;coincida con la direcci\u00f3n que realmente usas para acceder a Gitea, y reinicia el contenedor.<\/p>\n\n\n\n<p><strong>Push grande rechazado con un 413.<\/strong>&nbsp;Agrega o aumenta&nbsp;<code>client_max_body_size<\/code>&nbsp;en el bloque server de nginx y recarga nginx.<\/p>\n\n\n\n<p><strong>El clonado por SSH falla con&nbsp;<code>Connection refused<\/code>.<\/strong>&nbsp;Confirma que el puerto 222 est\u00e1 abierto en tu firewall. Si usas el Firewall de Contabo del Customer Control Panel, agrega una regla de entrada para el puerto TCP 222.<\/p>\n\n\n\n<p><strong>El puerto 3000 no es alcanzable desde el navegador.<\/strong>&nbsp;Gitea est\u00e1 ligado a&nbsp;<code>127.0.0.1:3000<\/code>&nbsp;por defecto, lo que significa que solo acepta conexiones del propio servidor. Esto es intencional: nginx le pasa las solicitudes. Si necesitas acceder al puerto 3000 directamente para pruebas, cambia temporalmente el binding a&nbsp;<code>0.0.0.0:3000:3000<\/code>&nbsp;en tu&nbsp;<code>docker-compose.yml<\/code>&nbsp;y reinicia el contenedor. Regr\u00e9salo antes de pasar a producci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-por-que-correr-gitea-en-contabo\">\u00bfPor qu\u00e9 correr Gitea en Contabo?<\/h2>\n\n\n\n<p>Gitea es una carga de trabajo ligera. Un VPS de entrada tiene recursos de sobra para manejar la actividad diaria de Git de un equipo peque\u00f1o o mediano, con margen para la base de datos, nginx y tareas administrativas ocasionales. Si m\u00e1s adelante agregas runners de CI\/CD a la misma m\u00e1quina, subir un plan te da margen c\u00f3modo sin un salto de costo importante.<\/p>\n\n\n\n<p>Para equipos con requisitos de residencia de datos, Contabo tiene centros de datos por toda Europa y el mundo. Elige al momento de aprovisionar la regi\u00f3n que encaje con tus necesidades de cumplimiento: sin nivel premium y sin tr\u00e1mites.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-faq-autoalojar-gitea\">FAQ: autoalojar Gitea<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1782908079130\"><strong class=\"schema-faq-question\"><strong>\u00bfPara qu\u00e9 se usa Gitea?<\/strong><\/strong> <p class=\"schema-faq-answer\">Gitea es un servicio Git autoalojado que se usa para hosting de c\u00f3digo, pull requests, seguimiento de issues y gesti\u00f3n de repositorios. Los equipos lo usan como alternativa autoalojada a GitHub o GitLab cuando quieren mantener el c\u00f3digo en su propia infraestructura, evitar los costos de licencia por usuario o cumplir requisitos de residencia de datos. Soporta webhooks y se integra con la mayor\u00eda de los pipelines de CI\/CD sin necesitar un servicio con hosting aparte.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1782908086456\"><strong class=\"schema-faq-question\"><strong>\u00bfCu\u00e1nta RAM necesita Gitea?<\/strong><\/strong> <p class=\"schema-faq-answer\">Seg\u00fan la documentaci\u00f3n oficial de Gitea, 2 n\u00facleos de CPU y 1 GB de RAM suelen bastar para equipos peque\u00f1os. En la pr\u00e1ctica, todo el stack \u2013 Gitea, PostgreSQL y nginx \u2013 cabe sin apreturas en ese 1 GB. Un VPS de entrada de Contabo deja margen de sobra para la actividad de repositorios y los trabajos en segundo plano sin tener que escalar.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1782908093847\"><strong class=\"schema-faq-question\"><strong>\u00bfGitea es mejor que GitLab autoalojado?<\/strong><\/strong> <p class=\"schema-faq-answer\">Para la mayor\u00eda de los equipos peque\u00f1os, Gitea es la opci\u00f3n m\u00e1s pr\u00e1ctica. El m\u00ednimo de RAM recomendado para GitLab es de 8 GB, y un setup de producci\u00f3n c\u00f3modo necesita 16 GB o m\u00e1s. Gitea cubre el flujo central \u2013 code review, issues, webhooks, package registry \u2013 con una fracci\u00f3n de esos recursos. GitLab tiene m\u00e1s sentido cuando necesitas su plataforma de CI\/CD integrada y sus controles de acceso para empresas, y tienes la capacidad de servidor para correrlo.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1782908101154\"><strong class=\"schema-faq-question\"><strong>\u00bfGitea o Forgejo, cu\u00e1l deber\u00eda correr?<\/strong><\/strong> <p class=\"schema-faq-answer\">Forgejo es un fork comunitario de Gitea que se separ\u00f3 en 2022 por dudas sobre la gobernanza. Es compatible con el mismo setup de Docker Compose: cambia\u00a0<code>gitea\/gitea:latest<\/code>\u00a0por\u00a0<code>codeberg.org\/forgejo\/forgejo:latest<\/code>\u00a0y el resto de esta gu\u00eda aplica sin cambios. Si prefieres un proyecto impulsado por la comunidad sin participaci\u00f3n corporativa, Forgejo es una opci\u00f3n s\u00f3lida. Si quieres el proyecto original con una historia comercial m\u00e1s larga, Gitea est\u00e1 bien.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1782908108040\"><strong class=\"schema-faq-question\"><strong>\u00bfC\u00f3mo respaldo una instancia de Gitea?<\/strong><\/strong> <p class=\"schema-faq-answer\">Respalda dos cosas: el volumen de Docker\u00a0<code>gitea_data<\/code>\u00a0(repositorios, adjuntos, configuraci\u00f3n) y el volumen\u00a0<code>postgres_data<\/code>\u00a0(la base de datos). Det\u00e9n primero el stack, empaqueta cada volumen en un archivo local con tar usando un contenedor temporal y luego copia los archivos fuera del servidor. Nuestra gu\u00eda de backup con rclone cubre todo el flujo automatizado con Contabo Object Storage.<\/p> <\/div> <\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Monta tu propio servidor Git en un VPS de Contabo con Docker Compose. Esta gu\u00eda cubre todo el setup: Gitea con PostgreSQL, proxy inverso, HTTPS y SSH. Sin costo por usuario y sin acceso de terceros a tu c\u00f3digo.<\/p>\n","protected":false},"author":65,"featured_media":31456,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1988],"tags":[],"ppma_author":[1489],"class_list":["post-31934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales"],"uagb_featured_image_src":{"full":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN.webp",1200,630,false],"thumbnail":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN-150x150.webp",150,150,true],"medium":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN-600x315.webp",600,315,true],"medium_large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN-768x403.webp",768,403,true],"large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN.webp",1200,630,false],"1536x1536":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN.webp",1200,630,false],"2048x2048":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2026\/06\/blog-head_how2-self-host-gitea-on-a-vps_EN.webp",1200,630,false]},"uagb_author_info":{"display_name":"Julia Mink","author_link":"https:\/\/contabo.com\/blog\/es\/author\/julia-mink\/"},"uagb_comment_info":0,"uagb_excerpt":"Monta tu propio servidor Git en un VPS de Contabo con Docker Compose. Esta gu\u00eda cubre todo el setup: Gitea con PostgreSQL, proxy inverso, HTTPS y SSH. Sin costo por usuario y sin acceso de terceros a tu c\u00f3digo.","authors":[{"term_id":1489,"user_id":65,"is_guest":0,"slug":"julia-mink","display_name":"Julia Mink","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/26ce5d4ae17d160425d842da4ea00c56716ffb5d4c58ee0cfb73de57b1de5272?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Mink","first_name":"Julia","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/31934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=31934"}],"version-history":[{"count":1,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/31934\/revisions"}],"predecessor-version":[{"id":31935,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/posts\/31934\/revisions\/31935"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/media\/31456"}],"wp:attachment":[{"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=31934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=31934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=31934"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/contabo.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=31934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}