{"id":3907,"date":"2017-09-05T07:00:02","date_gmt":"2017-09-05T14:00:02","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3907"},"modified":"2023-06-08T13:38:35","modified_gmt":"2023-06-08T20:38:35","slug":"continuously-deploying-nodejs-application-circleci","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/continuously-deploying-nodejs-application-circleci\/","title":{"rendered":"Despliegue continuo de una aplicaci\u00f3n Node.js con CircleCI"},"content":{"rendered":"<p>Hace unos meses escrib\u00ed sobre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/create-continuous-deployment-pipeline-nodejs-jenkins\/\" target=\"_blank\" rel=\"noopener\">creaci\u00f3n de una canalizaci\u00f3n de despliegue continuo con Node.js y Jenkins<\/a>donde la aplicaci\u00f3n Node.js utilizaba <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\" target=\"_blank\" rel=\"noopener\">Couchbase<\/a> de alguna manera. Esencialmente, tom\u00f3 un proyecto de GitHub, instal\u00f3 las dependencias, ejecut\u00f3 las pruebas y luego ejecut\u00f3 la aplicaci\u00f3n en alg\u00fan servidor, donde alg\u00fan servidor era la misma m\u00e1quina en la que estaba Jenkins.<\/p>\n<p>Jenkins est\u00e1 muy bien, pero cuesta mucho trabajo configurarlo y mantenerlo en funcionamiento. En su lugar, existen soluciones alojadas de integraci\u00f3n continua (CI) y despliegue continuo (CD), como <a href=\"https:\/\/circleci.com\/\" target=\"_blank\" rel=\"noopener\">CircleCI<\/a>.<\/p>\n<p>Vamos a ver c\u00f3mo tomar un proyecto Node.js que est\u00e1 controlado por versiones en GitHub y desplegarlo continuamente en alg\u00fan servidor remoto usando CircleCI cada vez que se hace un push.<\/p>\n<p><!--more--><\/p>\n<p>Antes de continuar, deber\u00edas haber creado una cuenta CircleCI, disponer de un servidor remoto y tener un proyecto Node.js disponible en GitHub.<\/p>\n<p>En este ejemplo, estoy usando un Droplet que he creado en <a href=\"https:\/\/m.do.co\/c\/ee4903914bb4\" target=\"_blank\" rel=\"noopener\">Oc\u00e9ano Digital<\/a> y el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/creating-user-profile-store-with-node-js-nosql-database\/\" target=\"_blank\" rel=\"noopener\">Proyecto de tienda de perfiles de usuario en Node.js<\/a> que hab\u00eda escrito hace un tiempo. Si\u00e9ntete libre de usar lo que quieras.<\/p>\n<h2>Preparaci\u00f3n del servidor remoto para conexiones SSH<\/h2>\n<p>El objetivo del despliegue continuo es poder desplegar autom\u00e1ticamente un proyecto estable en su servidor sin problemas.<\/p>\n<p>Cuando usamos CircleCI, durante el paso de despliegue, queremos que nuestro proyecto sea copiado despu\u00e9s de que nuestro flujo de trabajo de pruebas tenga \u00e9xito. Esto puede ocurrir a trav\u00e9s de un SCP o un Git Checkout con una serie de comandos en el servidor remoto. Lo que mejor se adapte a tus necesidades.<\/p>\n<p>Como estamos usando Node.js, es mejor usar la segunda opci\u00f3n porque necesitaremos instalar dependencias y reiniciar el servicio Node.js. Tiene un poco m\u00e1s de profundidad que simplemente copiar archivos. Por esta raz\u00f3n, necesitaremos CircleCI para poder conectarnos a nuestra instancia remota a trav\u00e9s de SSH.<\/p>\n<p>La forma m\u00e1s segura de hacerlo es crear una clave privada SSH para CircleCI. Desde su servidor, suponiendo que sea Linux, ejecute lo siguiente:<\/p>\n<pre class=\"lang:default decode:true\">ssh-keygen -t rsa -C \"circleci\"<\/pre>\n<p>Se le har\u00e1n una serie de preguntas relacionadas con la clave. Es importante que esta clave SSH no contenga una contrase\u00f1a, ya que CircleCI no admite contrase\u00f1as de clave por el momento.<\/p>\n<p>Una vez generada la clave, ejecute lo siguiente:<\/p>\n<pre class=\"lang:default decode:true\">cat ~\/.ssh\/id_rsa.pub &gt;&gt; ~\/.ssh\/authorized_keys<\/pre>\n<p>El comando anterior asume que usted ha nombrado a su clave <strong>id_rsa<\/strong>. A\u00f1adir\u00e1 la clave p\u00fablica al final del archivo <strong>llaves_autorizadas<\/strong> archivo.<\/p>\n<p>El contenido del <strong>id_rsa<\/strong> El archivo de clave privada debe copiarse en nuestro panel CircleCI m\u00e1s adelante en esta gu\u00eda.<\/p>\n<p>Antes de dise\u00f1ar el flujo de trabajo, necesitamos clonar el proyecto de GitHub en nuestro servidor. Tomemos como ejemplo lo siguiente:<\/p>\n<pre class=\"lang:default decode:true\">git clone https:\/\/github.com\/my-example-project .\/profile-store<\/pre>\n<p>Es importante recordar d\u00f3nde ha clonado el proyecto, ya que ser\u00e1 utilizado por el script de despliegue en nuestro flujo de trabajo. CircleCI har\u00e1 SSH en nuestro servidor y har\u00e1 un <code>git pull<\/code> dentro del directorio del proyecto.<\/p>\n<h2>Dise\u00f1o de los pasos del flujo de trabajo<\/h2>\n<p>Antes de que el proyecto sea recogido por CircleCI, necesita ser alterado un poco en GitHub. CircleCI, como muchas otras soluciones CI \/ CD, requiere un archivo de configuraci\u00f3n para ser colocado en el proyecto.<\/p>\n<p>Suponiendo que est\u00e9 mirando el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/creating-user-profile-store-with-node-js-nosql-database\/\" target=\"_blank\" rel=\"noopener\">perfil de usuario tienda proyecto<\/a>necesitamos crear un directorio llamado <strong>.circleci<\/strong> en la ra\u00edz con un archivo llamado <strong>config.yml<\/strong>.<\/p>\n<p>Abra este <strong>.circleci\/config.yml<\/strong> y a\u00f1ada lo siguiente:<\/p>\n<pre class=\"lang:default decode:true\">version: 2\r\njobs:\r\n    build:\r\n        docker:\r\n            - image: circleci\/node:7\r\n        steps:\r\n            - checkout\r\n            - run:\r\n                name: install-dependencies\r\n                command: npm install\r\n            - run:\r\n                name: tests\r\n                command: npm test\r\n            - deploy:\r\n                name: digital-ocean\r\n                command: ssh -o \"StrictHostKeyChecking no\" user@hostname \"cd ~\/profile-store; git pull; npm install; forever start app.js\"<\/pre>\n<p>\u00bfQu\u00e9 ocurre en la configuraci\u00f3n anterior?<\/p>\n<p>Estamos diciendo que queremos hacer girar un contenedor Docker ejecutando Node 7.x para realizar nuestras pruebas y otras pruebas de flujo de trabajo. En cuanto a los pasos, en primer lugar el proyecto se comprueba desde GitHub en el contenedor. A continuaci\u00f3n, instalamos todas las dependencias en el proyecto, ya que no est\u00e1n confirmadas en GitHub. El <strong>paquete.json<\/strong> de nuestro proyecto tiene un script llamado <strong>prueba<\/strong> que en teor\u00eda ejecutar\u00eda nuestras pruebas. Nuestro proyecto no tiene pruebas reales.<\/p>\n<p>Si los tres pasos anteriores se han realizado correctamente, se producir\u00e1 el despliegue. Este comando se SSH en nuestro servidor, navegar hasta el directorio de nuestra elecci\u00f3n, tirar de los cambios en el proyecto, instalar cualquier potencialmente nuevas dependencias, e iniciar el <strong>para siempre<\/strong> proceso.<\/p>\n<p>Somos capaces de desplegar nuestro proyecto a trav\u00e9s de SSH porque en este punto estamos seguros de que los pasos locales anteriores han tenido \u00e9xito en el contenedor.<\/p>\n<p>Compila los cambios del proyecto en GitHub para que podamos configurarlo en el panel de control de CircleCI.<\/p>\n<h2>Configuraci\u00f3n del proyecto en CircleCI Dashboard<\/h2>\n<p>Es necesario configurar algunas cosas en CircleCI para que el proceso CI\/CD funcione en el proyecto. Dentro de su <a href=\"https:\/\/circleci.com\/projects\" target=\"_blank\" rel=\"noopener\">Cuadro de mandos de CircleCI<\/a> encuentra el proyecto de GitHub que deseas gestionar. Si has vinculado GitHub con CircleCI, es muy probable que ya aparezca gracias a la adici\u00f3n del archivo de configuraci\u00f3n.<\/p>\n<p>En la configuraci\u00f3n del proyecto, busque la opci\u00f3n\u00a0<strong>Permisos SSH<\/strong> secci\u00f3n.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3910 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/08\/circle-ci-ssh-key.png\" alt=\"CircleCI SSH Permissions Example\" width=\"1100\" height=\"510\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/circle-ci-ssh-key.png 1100w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/circle-ci-ssh-key-300x139.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/circle-ci-ssh-key-1024x475.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/circle-ci-ssh-key-768x356.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/08\/circle-ci-ssh-key-20x9.png 20w\" sizes=\"auto, (max-width: 1100px) 100vw, 1100px\" \/><\/p>\n<p>Deber\u00e1 copiar la clave privada creada anteriormente en esta secci\u00f3n. Esto permitir\u00e1 a CircleCI conectarse a su servidor para el despliegue. Recuerde que, a partir de ahora, la clave SSH no debe tener contrase\u00f1a.<\/p>\n<p>En este punto, cualquier empuje futuro a GitHub debe resultar en el inicio de la tuber\u00eda. Si todo va bien, deber\u00edas poder acceder a los cambios a medida que se producen en tu servidor que ejecuta Node.js.<\/p>\n<h2>\u00bfD\u00f3nde est\u00e1 el beneficio de NoSQL?<\/h2>\n<p>Digamos que los cambios en el c\u00f3digo implican cambios en el modelo de datos. Si estuvieras usando un RDBMS, probablemente tendr\u00edas que empujar un script SQL con un mont\u00f3n de <code>ALTERAR<\/code> cada vez que realice un cambio. Aunque es posible, no es nada c\u00f3modo.<\/p>\n<p>Seamos un poco m\u00e1s espec\u00edficos.<\/p>\n<p>Digamos que quiero incluir informaci\u00f3n sobre direcciones en cada uno de mis perfiles de usuario, algo que no se estaba recopilando anteriormente. Con NoSQL y un modelo JSON flexible, podr\u00eda simplemente a\u00f1adir la informaci\u00f3n a mis objetos JavaScript que se est\u00e1n guardando y completar el guardado. Sin necesidad de crear ning\u00fan script de migraci\u00f3n.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Acabamos de ver c\u00f3mo utilizar CircleCI para el despliegue continuo de una aplicaci\u00f3n web Node.js. Hab\u00edamos utilizado un <a href=\"https:\/\/www.couchbase.com\/blog\/es\/user-profile-store-advanced-data-modeling\/\">almac\u00e9n de perfiles de usuario<\/a> solicitud de un <a href=\"https:\/\/www.couchbase.com\/blog\/es\/creating-user-profile-store-with-node-js-nosql-database\/\" target=\"_blank\" rel=\"noopener\">ejemplo anterior<\/a>y lo desplegaba en un servidor a trav\u00e9s de SSH cada vez que se introduc\u00edan nuevos cambios en GitHub.<\/p>\n<p>Hay muchas soluciones de integraci\u00f3n continua y despliegue continuo disponibles. Si desea alojar su propia soluci\u00f3n, puede consultar una variaci\u00f3n de este tutorial que utiliza Jenkins llamada,\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/create-continuous-deployment-pipeline-nodejs-jenkins\/\" target=\"_blank\" rel=\"noopener\">Crear una tuber\u00eda de despliegue continuo con Node.js y Jenkins<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>A few months back I had written about creating a continuous deployment pipeline with Node.js and Jenkins, where the Node.js application was using Couchbase in some fashion. Essentially, it took a project from GitHub, installed the dependencies, ran the tests, [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1822],"tags":[1919,2031,1567],"ppma_author":[9032],"class_list":["post-3907","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-node-js","tag-cd","tag-ci","tag-continuous-deployment"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Continuously Deploying a Node.js Application Using CircleCI<\/title>\n<meta name=\"description\" content=\"Learn how to continuously deploy your Node.js web application changes on GitHub to a remote web server via SSH with CircleCI.\" \/>\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.couchbase.com\/blog\/es\/continuously-deploying-nodejs-application-circleci\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Continuously Deploying a Node.js Application Using CircleCI\" \/>\n<meta property=\"og:description\" content=\"Learn how to continuously deploy your Node.js web application changes on GitHub to a remote web server via SSH with CircleCI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/continuously-deploying-nodejs-application-circleci\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-05T14:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-08T20:38:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/08\/circle-ci-ssh-key.png\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Continuously Deploying a Node.js Application Using CircleCI\",\"datePublished\":\"2017-09-05T14:00:02+00:00\",\"dateModified\":\"2023-06-08T20:38:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/\"},\"wordCount\":1072,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"cd\",\"ci\",\"Continuous Deployment\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Node.js\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/\",\"name\":\"Continuously Deploying a Node.js Application Using CircleCI\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-09-05T14:00:02+00:00\",\"dateModified\":\"2023-06-08T20:38:35+00:00\",\"description\":\"Learn how to continuously deploy your Node.js web application changes on GitHub to a remote web server via SSH with CircleCI.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Continuously Deploying a Node.js Application Using CircleCI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Despliegue continuo de una aplicaci\u00f3n Node.js con CircleCI","description":"Aprende a desplegar de forma continua los cambios de tu aplicaci\u00f3n web Node.js en GitHub a un servidor web remoto a trav\u00e9s de SSH con CircleCI.","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.couchbase.com\/blog\/es\/continuously-deploying-nodejs-application-circleci\/","og_locale":"es_MX","og_type":"article","og_title":"Continuously Deploying a Node.js Application Using CircleCI","og_description":"Learn how to continuously deploy your Node.js web application changes on GitHub to a remote web server via SSH with CircleCI.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/continuously-deploying-nodejs-application-circleci\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2017-09-05T14:00:02+00:00","article_modified_time":"2023-06-08T20:38:35+00:00","og_image":[{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/08\/circle-ci-ssh-key.png","type":"","width":"","height":""}],"author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Continuously Deploying a Node.js Application Using CircleCI","datePublished":"2017-09-05T14:00:02+00:00","dateModified":"2023-06-08T20:38:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/"},"wordCount":1072,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["cd","ci","Continuous Deployment"],"articleSection":["Best Practices and Tutorials","Node.js"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/","url":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/","name":"Despliegue continuo de una aplicaci\u00f3n Node.js con CircleCI","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-09-05T14:00:02+00:00","dateModified":"2023-06-08T20:38:35+00:00","description":"Aprende a desplegar de forma continua los cambios de tu aplicaci\u00f3n web Node.js en GitHub a un servidor web remoto a trav\u00e9s de SSH con CircleCI.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/continuously-deploying-nodejs-application-circleci\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Continuously Deploying a Node.js Application Using CircleCI"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3907"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3907\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3907"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}