{"id":2940,"date":"2020-03-19T10:49:33","date_gmt":"2020-03-19T16:49:33","guid":{"rendered":"https:\/\/ugit.siua.ac.cr\/?p=2940"},"modified":"2020-03-19T10:49:33","modified_gmt":"2020-03-19T16:49:33","slug":"nodejs-server-instalar-servidor-de-produccion","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=2940","title":{"rendered":"NodeJS Server: Instalar servidor de producci\u00f3n"},"content":{"rendered":"\n<p>Vamos a instalar un servidor de producci\u00f3n para aplicaciones de ReactJs con Node.js<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">PREREQUISITOS<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Un servidor con Debian 9 instalado y todas las medidas de seguridad requeridas.<\/li><li>Un nombre de dominio asociado al servidor y una ip est\u00e1tica.<\/li><li>Instalado un servidor web como Apache2.<\/li><li>Configuraci\u00f3n de certificados usando Let&#8217;s Encrypt.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 1: Instalar Node.js y NPM<\/h4>\n\n\n\n<p>Para instalar Node.js primero se debe de descargar el script de instalaci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -sL https:\/\/deb.nodesource.com\/setup_13.x | -E bash -<\/code><\/pre>\n\n\n\n<p>Instalar Node.js, NPM y los paquetes adicionales.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get install gcc g++ make build-essential nodejs -y<\/code><\/pre>\n\n\n\n<p>Actualizar el sistema.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get update &amp;&amp; apt-get upgrade -y<\/code><\/pre>\n\n\n\n<p>Verificar las versiones.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>node -v\nnpm -v<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 2: Crear una prueba de aplicaci\u00f3n Node.js<\/h4>\n\n\n\n<p>Creamos una aplicaci\u00f3n de prueba (las aplicaciones de node usualmente corren en los puertos 3000 o 3001 pero se pueden modificar).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/var\/www\/html\/app\nnano \/var\/www\/html\/app\/server.js<\/code><\/pre>\n\n\n\n<p>Ahora se copia lo siguiente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const http = require('http');\n\nconst hostname = '192.168.43.31';\nconst port = 3000;\n\nconst server = http.createServer((req, res) => {\n\tres.statusCode = 200;\n  \tres.setHeader('Content-Type', 'text\/plain');\n  \tres.end('This is the Main App!\\n');\n});\n\nserver.listen(port, hostname, () => {\n  \tconsole.log(`Server running at http:\/\/${hostname}:${port}\/`);\n});<\/code><\/pre>\n\n\n\n<p>Se guarda el archivo y se sale.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 3: Instalar PM2<\/h4>\n\n\n\n<p>PM2 es un administrador de procesos para aplicaciones de Node.js. Hace posible demonizar las apps para que corran en el background como un servicio.<\/p>\n\n\n\n<p>Utilice NPM para instalar la \u00faltima versi\u00f3n de PM2.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm i -g pm2@latest<\/code><\/pre>\n\n\n\n<p>Para poder utilizar la aplicaci\u00f3n como servicio primero nos colocamos en la carpeta donde se creo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/var\/www\/html\/app\/<\/code><\/pre>\n\n\n\n<p>Luego ejecutamos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm2 start #nombre_de_la_app<\/code><\/pre>\n\n\n\n<p>Para hacer que PM2 se ejecute cada vez que se inicia el servidor, se ejecuta el comando. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm2 startup systemd<\/code><\/pre>\n\n\n\n<p>Para guardar la lista de procesos de PM2 se ejecuta.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pm2 save<\/code><\/pre>\n\n\n\n<p>Para saber m\u00e1s sobre pm2 puede visitar este <a href=\"https:\/\/www.npmjs.com\/package\/pm2\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"enlace (abre en una nueva pesta\u00f1a)\">enlace<\/a>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 4: Accesar prueba desde explorador web<\/h4>\n\n\n\n<p>Accesar a la direcci\u00f3n y puerto que se estableci\u00f3 en la aplicaci\u00f3n de Node en server.js:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const hostname = '192.168.43.31';\nconst port = 3000;<\/code><\/pre>\n\n\n\n<p>Entonces se ingresa la URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;192.168.43.31:3000<\/code><\/pre>\n\n\n\n<p><em><strong>IMPORTANTE: La direcci\u00f3n 192.168.43.31 se puede cambiar por la que sea necesaria.<\/strong><\/em><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 5: Instalar Python 3<\/h4>\n\n\n\n<p>Ejecutar<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt install python3<\/code><\/pre>\n\n\n\n<p>Verificar instalaci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 -v<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 6: Instalar ReactJS <\/h4>\n\n\n\n<p>Ejecutar<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install -g create-react-app<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 7: Instalar Nestjs<\/h4>\n\n\n\n<p>Ejecutar<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm i @nestjs\/cli<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Paso 8: Instalar MongoDB como motor de BD<\/h4>\n\n\n\n<p>Importar la llave p\u00fablica.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget -qO - https:\/\/www.mongodb.org\/static\/pgp\/server-4.2.asc | apt-key add -<\/code><\/pre>\n\n\n\n<p>La operaci\u00f3n debe responder con OK. Sin embargo, si se recive un error se debe instalar gnupg.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get install gnupg<\/code><\/pre>\n\n\n\n<p>Se vuelve a intentar la importaci\u00f3n de la llave p\u00fablica.<\/p>\n\n\n\n<p>Se debe crear la lista de archivos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"deb http:\/\/repo.mongodb.org\/apt\/debian stretch\/mongodb-org\/4.2 main\" | tee \/etc\/apt\/sources.list.d\/mongodb-org-4.2.list<\/code><\/pre>\n\n\n\n<p>Se actualiza el sistema.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get update -y<\/code><\/pre>\n\n\n\n<p>Instalamos mongoDB.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get install -y mongodb-org<\/code><\/pre>\n\n\n\n<p>Se inicia y se revisa el estado.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl start mongod\nsystemctl status mongod<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Vamos a instalar un servidor de producci\u00f3n para aplicaciones de ReactJs con Node.js PREREQUISITOS Un servidor con Debian 9 instalado y todas las medidas de seguridad requeridas. Un nombre de dominio asociado al servidor y una ip est\u00e1tica. Instalado un servidor web como Apache2. Configuraci\u00f3n de certificados usando Let&#8217;s Encrypt. Paso 1: Instalar Node.js y [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2944,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[187,208],"tags":[],"class_list":["post-2940","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-debian","category-node-js"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/2940","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2940"}],"version-history":[{"count":3,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/2940\/revisions"}],"predecessor-version":[{"id":2943,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/2940\/revisions\/2943"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/media\/2944"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2940"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}