{"id":34358,"date":"2025-10-29T11:09:18","date_gmt":"2025-10-29T10:09:18","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=34358"},"modified":"2025-11-26T14:57:47","modified_gmt":"2025-11-26T13:57:47","slug":"ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/","title":{"rendered":"C\u00edclopes, sirenas y conexiones remotas &#8211; Gitea como redundancia de control de versiones"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p>A d\u00eda de hoy, las empresas y los desarrolladores no solo utilizan, sino que necesitan de alg\u00fan tipo de control de versiones para su c\u00f3digo, los usos son tan diversos como las diferentes herramientas en funcionamiento productivo y\/o en desarrollo. Ejemplo de esto puede ser tener proyectos dedicados a micro-servicios de pasarelas de pago, este puede ser el caso de tiendas online, o banca en general; o,en un caso diametralmente diferente, podr\u00edan estar teniendo tambi\u00e9n en cuenta los diferentes playbook utilizados para re-establecer un servidor en caso de ca\u00edda o una actualizaci\u00f3n mal ejecutada, como puede darse en casos de fallos en proveedores de servicio.<\/p>\n\n\n\n<p>En el caso de un perfil de una persona como developer, utilizamos los sistemas de control de versiones para trabajar en equipo en diferentes funcionalidades y proyectos, tambi\u00e9n son utilizados entregar c\u00f3digo para su compilaci\u00f3n en herramientas de CI\/CD, etc.<\/p>\n\n\n\n<p class=\"has-larger-font-size\"><strong>Servidores de control de versiones redundantes<\/strong><\/p>\n\n\n\n<p>Es aqu\u00ed donde entra la duda de la redundancia, normalmente en ambos contextos, personal y profesional, contamos con un solo entorno de control de versiones (v\u00e9ase Github, Gitlab, Bitbucket\u2026), muchas de estas opciones se pueden instalar en local\/servidores on-premise a nivel corporativo o que permita el acceso a todos los miembros del equipo, para as\u00ed tener m\u00e1s control de la infraestructura y el c\u00f3digo en desarrollo. Normalmente esto es una situaci\u00f3n segura, pero, \u00bfQu\u00e9 pasa si ese servidor, o grupo de servidores, queda indisponible, m\u00e1s all\u00e1 del impacto inicial que pueda tener una ca\u00edda?<\/p>\n\n\n\n<p>Lo normal es que salten todas las alarmas para equipos de Devops, infraestructura o similares, las acciones comunes en estos casos suelen ser, una vez asimilado que el servicio se encuentre ca\u00eddo, ejecutar las instrucciones necesarias para re-establecerlo. F\u00e1cil,sencillo e incluso obvio \u00bfno?. Pero, \u00bfY si la m\u00e1quina se encuentra apagada, o requiere de un reinicio manual, por p\u00e9rdida de conexi\u00f3n con el CPD?\u00bfY si se trata de otro problema totalmente diferente, como un DNS que est\u00e1 impidendo el acceso, por ejemplo? Es una situaci\u00f3n extra\u00f1a y poco plausible, por supuesto, pero no imposible, c\u00f3mo hemos visto recientemente en la ca\u00edda de AWS.<\/p>\n\n\n\n<p>Es aqu\u00ed donde la redundancia de sistemas siempre ser\u00e1 \u00fatil, en el caso del c\u00f3digo es especialmente cr\u00edtica, ya que debe estar disponible al m\u00e1ximo de tiempo disponible tanto para equipos productivos como desarrolladores.<\/p>\n\n\n\n<p class=\"has-larger-font-size\">Gitea, bueno bonito barato &#8211; Una soluci\u00f3n para versionarlos a todos<\/p>\n\n\n\n<p><a href=\"https:\/\/about.gitea.com\/\">Gitea<\/a> es una soluci\u00f3n <a href=\"https:\/\/github.com\/go-gitea\/gitea\">open source<\/a> disponible para una cantidad asombrosa de plataformas, que ofrece una respuesta a la necesidad de tener esta redundancia de control de versiones. Cabe destacar que para este art\u00edculo se ha escogido como entorno secundario, pero es perfectamente capaz de funcionar como herramienta principal para versionado en git.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"607\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/GiteaPlatforms-1024x607.png\" alt=\"List of multiple versions for gitea's downloadable files, one per each infrastructure available.\" class=\"wp-image-34359\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/GiteaPlatforms-1024x607.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/GiteaPlatforms-300x178.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/GiteaPlatforms-768x456.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/GiteaPlatforms.png 1180w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Escrito en Go, se trata de un fork de <a href=\"https:\/\/gogs.io\/\">Gogs<\/a>, pero desde sus inicios en 2016, han cambiado muchas cosas.<\/p>\n\n\n\n<p>A nivel productivo, cabe destacar que tiene integraciones con LDAP y otros servicios, como Azure Active Directory, lo cual simplifica el <a href=\"https:\/\/docs.gitea.com\/next\/usage\/authentication\">acceso de cuentas de usuario<\/a> ya existentes en la organizaci\u00f3n.<\/p>\n\n\n\n<p class=\"has-larger-font-size\">Instalando Gitea en local, muchas opciones, un mismo destino.<\/p>\n\n\n\n<p>Para este caso de estudio, se ha instalado Gitea en un contenedor que utiliza Alpine Linux como sistema operativo, se ha escogido debido a su tama\u00f1o ligero y habitual uso para entornos productivos (Docker, Kubernetes etc). <a href=\"https:\/\/wiki.alpinelinux.org\/wiki\/Gitea\">Gu\u00eda<\/a><\/p>\n\n\n\n<p>Primero de todo, debemos tener en cuenta las capacidades del equipo y los requisitos a la hora de definir cu\u00e1ntos usuarios acceder\u00e1n, las <a href=\"https:\/\/docs.gitea.com\/#system-requirements\">especificaciones m\u00ednimas<\/a> son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>2 CPU cores y 1GB RAM es normalmente suficiente para peque\u00f1os equipos\/proyectos, en nuestro caso se trata de un contenedor con estas mismas especificaciones, m\u00e1s 512MB de Swap.<\/li>\n\n\n\n<li>Gitea deber\u00eda ser ejecutado por cuentas de sistema no-root en sistemas tipo UNIX.<\/li>\n\n\n\n<li>Git version 2.0.0 o posterior.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-larger-font-size\">Un gran poder, conlleva una gran responsabilidad<\/p>\n\n\n\n<p>Una vez instalado y verificado que podemos acceder al servidor, es momento de establecer la estrategia de remotes, lo cual en l\u00edneas generales se har\u00e1 en base a cada repositorio que queramos tener como redundante.<\/p>\n\n\n\n<p>Como peque\u00f1o ejemplo, si tuvieramos nuestro servidor Gitea en la IP 178.16.1.123 y quisi\u00e9ramos a\u00f1adir un repositorio de prueba con c\u00f3digo en JS, ejecutar\u00edamos el siguiente comando.<\/p>\n\n\n<pre class=\"wp-block-code has-small-font-size\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">git remote add gitea http:<span class=\"hljs-comment\">\/\/178.16.1.123:3000\/prueba\/ApplicacionPagos.git<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Y una vez quisieramos establecer una igualdad de push entre ambas instancias de git, podr\u00edamos, entre otras posibles soluciones, establecer un mirror, para evitar la cantidad necesaria de comandos a ejecutar.<\/p>\n\n\n\n<p class=\"has-small-font-size\"><code>git push --mirror gitea<\/code><\/p>\n\n\n\n<p>Ahora bien, si por ejemplo, queremos tener varios Gitea distribuidos entre equipos, o bajo cualquier otra circunstancia, que nos requiera reinstalar este servicio, entra en juego la automatizaci\u00f3n y uso de tecnolog\u00edas c\u00f3mo Ansible, para hacer de estas instalaciones un protocolo m\u00e1s sencillo.<\/p>\n\n\n\n<p>Para este art\u00edculo, hemos llevado a cabo un peque\u00f1o test, seguramente muy mejorable, pero nos ofrece un peque\u00f1o vistazo a los pasos que requerir\u00eda instalar este servicio utilizando tecnolog\u00edas de automatizaci\u00f3n.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-code-table shcb-line-numbers\"><span class='shcb-loc'><span>---\n<\/span><\/span><span class='shcb-loc'><span>- hosts: gitea\n<\/span><\/span><span class='shcb-loc'><span>  vars_files:\n<\/span><\/span><span class='shcb-loc'><span>    - common_vars.yml\n<\/span><\/span><span class='shcb-loc'><span>  become: yes\n<\/span><\/span><span class='shcb-loc'><span>  tasks:\n<\/span><\/span><span class='shcb-loc'><span>    <span class=\"hljs-comment\"># https:\/\/wiki.alpinelinux.org\/wiki\/Gitea  <\/span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Update repositories\n<\/span><\/span><span class='shcb-loc'><span>       community.general.apk:\n<\/span><\/span><span class='shcb-loc'><span>         state: latest\n<\/span><\/span><span class='shcb-loc'><span>         update_cache: <span class=\"hljs-keyword\">true<\/span>  \n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Install Gitea, Mariadb &amp; Python requirements     \n<\/span><\/span><span class='shcb-loc'><span>       community.general.apk:\n<\/span><\/span><span class='shcb-loc'><span>         name: \n<\/span><\/span><span class='shcb-loc'><span>           - gitea\n<\/span><\/span><span class='shcb-loc'><span>           - mariadb\n<\/span><\/span><span class='shcb-loc'><span>           - mariadb-client\n<\/span><\/span><span class='shcb-loc'><span>           - python3\n<\/span><\/span><span class='shcb-loc'><span>         state: present\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Initialize MariaDB Data dir\n<\/span><\/span><span class='shcb-loc'><span>       ansible.builtin.command:\n<\/span><\/span><span class='shcb-loc'><span>         cmd: mysql_install_db --user=mysql --datadir=\/<span class=\"hljs-keyword\">var<\/span>\/lib\/mysql\n<\/span><\/span><span class='shcb-loc'><span>         creates: \/<span class=\"hljs-keyword\">var<\/span>\/lib\/mysql\/mysql\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Start &amp; Enable mariadb service\n<\/span><\/span><span class='shcb-loc'><span>       ansible.builtin.service:\n<\/span><\/span><span class='shcb-loc'><span>         name: mariadb\n<\/span><\/span><span class='shcb-loc'><span>         state: started\n<\/span><\/span><span class='shcb-loc'><span>         enabled: yes\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># mysql_secure_installation<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span><span class=\"hljs-comment\"># Requirement<\/span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Packaging dependencies\n<\/span><\/span><span class='shcb-loc'><span>       community.general.apk:\n<\/span><\/span><span class='shcb-loc'><span>         name:\n<\/span><\/span><span class='shcb-loc'><span>           - py3-pymysql\n<\/span><\/span><span class='shcb-loc'><span>           - py3-packaging\n<\/span><\/span><span class='shcb-loc'><span>         state: present\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Create .my.cnf <span class=\"hljs-keyword\">for<\/span> future authentication\n<\/span><\/span><span class='shcb-loc'><span>       ansible.builtin.template:\n<\/span><\/span><span class='shcb-loc'><span>         src: my.cnf.j2\n<\/span><\/span><span class='shcb-loc'><span>         dest: \/root\/.my.cnf\n<\/span><\/span><span class='shcb-loc'><span>         mode: <span class=\"hljs-number\">0600<\/span>\n<\/span><\/span><span class='shcb-loc'><span>       no_log: <span class=\"hljs-keyword\">true<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Set MariaDB root password\n<\/span><\/span><span class='shcb-loc'><span>       community.mysql.mysql_user:\n<\/span><\/span><span class='shcb-loc'><span>         name: root\n<\/span><\/span><span class='shcb-loc'><span>         password: <span class=\"hljs-string\">\"{{ mysql_root_password }}\"<\/span>\n<\/span><\/span><span class='shcb-loc'><span>         check_implicit_admin: <span class=\"hljs-keyword\">true<\/span>\n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Remove anonymous user account <span class=\"hljs-keyword\">for<\/span> localhost\n<\/span><\/span><span class='shcb-loc'><span>       community.mysql.mysql_user:\n<\/span><\/span><span class='shcb-loc'><span>         name: <span class=\"hljs-string\">''<\/span>\n<\/span><\/span><span class='shcb-loc'><span>         host: localhost\n<\/span><\/span><span class='shcb-loc'><span>         state: absent \n<\/span><\/span><span class='shcb-loc'><span>\n<\/span><\/span><span class='shcb-loc'><span>     - name: Remove remote access to mysql root account\n<\/span><\/span><span class='shcb-loc'><span>       community.mysql.mysql_query:\n<\/span><\/span><span class='shcb-loc'><span>         query:\n<\/span><\/span><span class='shcb-loc'><span>         - DELETE FROM mysql.user WHERE User=<span class=\"hljs-string\">'root'<\/span> <span class=\"hljs-keyword\">AND<\/span> Host NOT IN (<span class=\"hljs-string\">'localhost'<\/span>, <span class=\"hljs-string\">'127.0.0.1'<\/span>, <span class=\"hljs-string\">'::1'<\/span>);   \n<\/span><\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Si quisieramos llevarlo un paso m\u00e1s all\u00e1, cabe destacar que existe m\u00e1s informaci\u00f3n sobre c\u00f3mo Ansible puede automatizar despliegues, <a href=\"https:\/\/www.redhat.com\/en\/blog\/integrating-ansible-jenkins-cicd-process\">aqu\u00ed<\/a><\/p>\n\n\n\n<p class=\"has-larger-font-size\">Aqu\u00e9l que controle git, controlar\u00e1 el universo<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"350\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/giteauser-1024x350.png\" alt=\"Screenshot from a Gitea dashboard for a new user. It shows a generic profile picture with geometric forms and several menus to display project-level information\" class=\"wp-image-34360\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/giteauser-1024x350.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/giteauser-300x103.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/giteauser-768x263.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/giteauser-1536x525.png 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/giteauser.png 1889w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Gitea es una herramienta completa y ligera, que puede servir y ser implementada a muchos niveles y entornos tech, \u00bfQuieres alejarte de las big tech que ofrecen servicios online, vulnerables a ca\u00eddas, errores humanos, o el siempre temido <a href=\"https:\/\/www.youtube.com\/watch?v=kGc2u9MGXPo&amp;t=10s\">DNS<\/a>? \u00bfO bien quieres tener mayor control sobre el c\u00f3digo que manejan los desarrolladores de tu equipo?. No solo es de instalaci\u00f3n r\u00e1pida, sino que es f\u00e1cilmente integrable con proveedores de identidad.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A d\u00eda de hoy, las empresas y los desarrolladores no solo utilizan, sino que necesitan de alg\u00fan tipo de control de versiones para su c\u00f3digo, los usos son tan diversos como las diferentes herramientas en funcionamiento productivo y\/o en desarrollo. Ejemplo de esto puede ser tener proyectos dedicados a micro-servicios de pasarelas de pago, este&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\">Read more<\/a><\/p>\n","protected":false},"author":314,"featured_media":34656,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10654],"tags":[10756],"collections":[13012],"class_list":{"0":"post-34358","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-open-source-es","8":"tag-codigo-abierto","9":"collections-top-of-the-week-es","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Gitea: La alternativa ligera a GitHub<\/title>\n<meta name=\"description\" content=\"Descubre c\u00f3mo implementar redundancia en tus sistemas de control de versiones utilizando Gitea. Una soluci\u00f3n ligera, open source y f\u00e1cil de instalar.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C\u00edclopes, sirenas y conexiones remotas - Gitea como redundancia de control de versiones\" \/>\n<meta property=\"og:description\" content=\"Descubre c\u00f3mo implementar redundancia en tus sistemas de control de versiones utilizando Gitea. Una soluci\u00f3n ligera, open source y f\u00e1cil de instalar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-29T10:09:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-26T13:57:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"669\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Miriam Domingo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Miriam Domingo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\"},\"author\":{\"name\":\"Miriam Domingo\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6509605d062d43d62c5094040e966697\"},\"headline\":\"C\u00edclopes, sirenas y conexiones remotas &#8211; Gitea como redundancia de control de versiones\",\"datePublished\":\"2025-10-29T10:09:18+00:00\",\"dateModified\":\"2025-11-26T13:57:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\"},\"wordCount\":970,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp\",\"keywords\":[\"C\u00f3digo abierto\"],\"articleSection\":[\"Open source\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\",\"name\":\"Gitea: La alternativa ligera a GitHub\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp\",\"datePublished\":\"2025-10-29T10:09:18+00:00\",\"dateModified\":\"2025-11-26T13:57:47+00:00\",\"description\":\"Descubre c\u00f3mo implementar redundancia en tus sistemas de control de versiones utilizando Gitea. Una soluci\u00f3n ligera, open source y f\u00e1cil de instalar.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp\",\"width\":1024,\"height\":669},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open source\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"C\u00edclopes, sirenas y conexiones remotas &#8211; Gitea como redundancia de control de versiones\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6509605d062d43d62c5094040e966697\",\"name\":\"Miriam Domingo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1cf3c329aa26fe932e4268c0500fc92765ae539d1e6404b1c2f6893f326fe782?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1cf3c329aa26fe932e4268c0500fc92765ae539d1e6404b1c2f6893f326fe782?s=96&d=mm&r=g\",\"caption\":\"Miriam Domingo\"},\"description\":\"I'm a Junior Cloud Devops, but I also love playing TCG games, traveling and reading SciFi novels. My main goal for the upcoming years is to let people know more about how junior possitions are for the newcommers to the IT world, to share my experience and hopefully inspire people to join this journey of exploring a world full of tinkerings and great people that seek creation at their best.\",\"sameAs\":[\"https:\/\/gitlab.com\/Miridev\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/miri98\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gitea: La alternativa ligera a GitHub","description":"Descubre c\u00f3mo implementar redundancia en tus sistemas de control de versiones utilizando Gitea. Una soluci\u00f3n ligera, open source y f\u00e1cil de instalar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/","og_locale":"en_US","og_type":"article","og_title":"C\u00edclopes, sirenas y conexiones remotas - Gitea como redundancia de control de versiones","og_description":"Descubre c\u00f3mo implementar redundancia en tus sistemas de control de versiones utilizando Gitea. Una soluci\u00f3n ligera, open source y f\u00e1cil de instalar.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-10-29T10:09:18+00:00","article_modified_time":"2025-11-26T13:57:47+00:00","og_image":[{"width":1024,"height":669,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp","type":"image\/webp"}],"author":"Miriam Domingo","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Miriam Domingo","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/"},"author":{"name":"Miriam Domingo","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6509605d062d43d62c5094040e966697"},"headline":"C\u00edclopes, sirenas y conexiones remotas &#8211; Gitea como redundancia de control de versiones","datePublished":"2025-10-29T10:09:18+00:00","dateModified":"2025-11-26T13:57:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/"},"wordCount":970,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp","keywords":["C\u00f3digo abierto"],"articleSection":["Open source"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/","name":"Gitea: La alternativa ligera a GitHub","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp","datePublished":"2025-10-29T10:09:18+00:00","dateModified":"2025-11-26T13:57:47+00:00","description":"Descubre c\u00f3mo implementar redundancia en tus sistemas de control de versiones utilizando Gitea. Una soluci\u00f3n ligera, open source y f\u00e1cil de instalar.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp","width":1024,"height":669},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/ciclopes-sirenas-y-conexiones-remotas-gitea-como-redundancia-de-control-de-versiones\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Open source","item":"https:\/\/www.codemotion.com\/magazine\/es\/open-source-es\/"},{"@type":"ListItem","position":3,"name":"C\u00edclopes, sirenas y conexiones remotas &#8211; Gitea como redundancia de control de versiones"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6509605d062d43d62c5094040e966697","name":"Miriam Domingo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1cf3c329aa26fe932e4268c0500fc92765ae539d1e6404b1c2f6893f326fe782?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1cf3c329aa26fe932e4268c0500fc92765ae539d1e6404b1c2f6893f326fe782?s=96&d=mm&r=g","caption":"Miriam Domingo"},"description":"I'm a Junior Cloud Devops, but I also love playing TCG games, traveling and reading SciFi novels. My main goal for the upcoming years is to let people know more about how junior possitions are for the newcommers to the IT world, to share my experience and hopefully inspire people to join this journey of exploring a world full of tinkerings and great people that seek creation at their best.","sameAs":["https:\/\/gitlab.com\/Miridev"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/miri98\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-600x600.webp","author_info":{"display_name":"Miriam Domingo","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/miri98\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp",1024,669,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-300x196.webp",300,196,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-768x502.webp",768,502,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp",1024,669,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp",1024,669,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1.webp",1024,669,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/10\/2roman-synkevych-wX2L8L-fGeA-unsplash-1024x669-1-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Miriam Domingo","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/miri98\/"},"uagb_comment_info":0,"uagb_excerpt":"A d\u00eda de hoy, las empresas y los desarrolladores no solo utilizan, sino que necesitan de alg\u00fan tipo de control de versiones para su c\u00f3digo, los usos son tan diversos como las diferentes herramientas en funcionamiento productivo y\/o en desarrollo. Ejemplo de esto puede ser tener proyectos dedicados a micro-servicios de pasarelas de pago, este&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/314"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=34358"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34358\/revisions"}],"predecessor-version":[{"id":34659,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/34358\/revisions\/34659"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/34656"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=34358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=34358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=34358"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=34358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}