CursosEmpresasBlogLiveConfPrecios

Configuración de secrets y variables de entorno

Clase 11 de 20 • Curso de Deploy con Now.sh 2017

Clase anteriorSiguiente clase

Contenido del curso

Introducción al Cursos de Deploy con Now.sh

  • 1
    Componentes de una aplicación

    Componentes de una aplicación

    05:02 min
  • 2
    Opciones para hacer Deploy

    Opciones para hacer Deploy

    09:50 min
  • 3
    Aplicaciones monolíticas vs microservicios

    Aplicaciones monolíticas vs microservicios

    09:36 min
  • 4
    Instalación de Now.sh

    Instalación de Now.sh

    02:05 min

Aplicaciones Estáticas

  • 5
    Deploy con GitHub Pages

    Deploy con GitHub Pages

    02:07 min
  • 6
    Deploy con Surge.sh

    Deploy con Surge.sh

    02:52 min
  • 7
    Deploy con Now.sh

    Deploy con Now.sh

    02:14 min

Tipos de Deploy

  • 8
    Estructura del proyecto

    Estructura del proyecto

    02:02 min
  • 9
    Deploy de aplicaciones Node.js

    Deploy de aplicaciones Node.js

    04:22 min
  • 10
    Deploy de contenedores de Docker

    Deploy de contenedores de Docker

    05:02 min

Configuraciones

  • 11
    Configuración de secrets y variables de entorno

    Configuración de secrets y variables de entorno

    Viendo ahora
  • 12
    Ver el código fuente de tu aplicación

    Ver el código fuente de tu aplicación

    02:08 min
  • 13
    Definir aliases para tus deploy

    Definir aliases para tus deploy

    02:30 min
  • 14
    Usar un dominio personalizado

    Usar un dominio personalizado

    04:00 min
  • 15
    Componer microservicios

    Componer microservicios

    04:37 min

Conclusiones

  • 16
    Conclusión del proyecto

    Conclusión del proyecto

    01:54 min
  • 17
    Conclusiones del curso

    Conclusiones del curso

    02:39 min

Contenido Bonus

  • 18
    Deploy en Now.sh desde GitHub

    Deploy en Now.sh desde GitHub

    01:36 min

Retos y Desafíos

  • 19
    Combinar muchos servicios

    Combinar muchos servicios

    00:32 min
  • 20
    Usar un servicio diferente

    Usar un servicio diferente

    00:40 min
Tomar examen
    Joaquin Araujo

    Joaquin Araujo

    student•
    hace 8 años

    En ocasiones, se necesita almacenar información confidencial del proyecto que solo debe ser accedida con el código en ejecución. Esto puede lograrse utilizando los screts de asi de esta forma almacenar los datos necesarios (como tokens de API o contraseñas) para que la aplicación funcionen de una manera segura.

    Una vez que almacena un secreto, sus contenidos ya no son accesibles directamente por nadie. Solo pueden estar expuestos a implementaciones como variables de entorno.

    • now secret add [secret-id] [secret-valor] Permite agregar un nuevo secrets.
    • now secret rename [secret-id] [secret-valor] Permite renombrar un secrets.
    • now secret rm [secret-id] [secret-valor] Permite eliminar un secrets.
    • now secret ls Permite listar todos los secrets.

    Si necesitas una guía y resumen del curso aquí la tienes.

      Edgar Moises Valdez Faria

      Edgar Moises Valdez Faria

      student•
      hace 7 años

      Excelente aporte. Gracias

    Juan Carlos Mendoza Rodríguez

    Juan Carlos Mendoza Rodríguez

    student•
    hace 8 años

    Un comentario sobre el HOST: 0.0.0.0 como complemto

    Un servidor, o PC puede tener una o varias direcciones IPs y están asociadas a una o más interfaces de red (Tarjeta de red o WiFI).

    NOTA: no pueden existir direciones IP repetidas en la misma red ya que causaría lo que se denomina conflicto de IP y deshabilitarían dichas IPs

    localhost es el equivalente a colocar la ip 127.0.0.1 o lo que es lo mismo interface local (lo) y hace referencia al mismo equipo en si. Al colocar éste valor en 0.0.0.0, se le indica a un componente de software que se va a ejecutar para que acepte peticiones desde cualquiera de las direcciones IPs asociadas a todas las interfaces de red que posea el equipo o servidor.

    Si se coloca solo una, entonces la aplicación solo permitirá conexiones por esa dirección IP. En algunas aplicaciones es posible colocar más de una IPs separadas por “,”

    El puerto se refiere a un número de socket que se abrirá para que la aplicación secomunique, para este caso es el 3000.

    Existen 65535 puertos disponibles de los cuales los primeros 1024 están reservados para servicios conocidos.

    Estos son algunos:
    http: 80
    https: 443
    ssh: 22
    cups: 631

    Sergio Toshio Minei

    Sergio Toshio Minei

    student•
    hace 7 años

    Variables de Entorno

    Para crear variables de enterno, se añade un key env en el archivo now.json.

    { "name": "platzi-now-bff", "env": { "NODE_ENV": "production", "PORT": "3000", "HOST": "0.0.0.0", "DB_USER": "cobliwpv", "DB_PASS": "", "DB_HOST": "stampy.db.elephantsql.com", "DB_NAME": "cobliwpv", "DB_PORT": "5432" }, "type": "docker" }

    Secrets

    Hay veces en la que se necesita almacenar información confidencial del proyecto que solo debe ser accedida con el código en ejecución. Esto puede lograrse usando secrets.

    Una vez que almacena un secreto, sus contenidos ya no son accesibles directamente por nadie. Solo pueden estar expuestos a implementaciones como variables de entorno.

    • now secret add [key] [valor] Permite agregar un nuevo secrets.
    • now secret ls Permite listar todos los secrets.

    Para usar los secrets en el archivo now.json, se hace de la siguiente manera:

    { "env": { "DB_USER": "@platzi_now_db_user", "DB_PASS": "@platzi_now_db_pass" } }

    Pueden ver el resumen completo del curso aquí.
    Pueden ver mi lista de resúmenes aquí.

    Fernando Eladio Alvarez Noya

    Fernando Eladio Alvarez Noya

    student•
    hace 6 años

    Hola luego de ejecutar now en el directorio api al ir a la url solo me muestra los archivos pero nada ejecutandose! Que me falto hacer o que hice mal? Es el now 2.0

    Alejandro Robleto

    Alejandro Robleto

    student•
    hace 6 años

    me arroja este error The property type is not allowed in now.json when using Now 2.0 – please remove it.

    Francisco Martin Nacimiento

    Francisco Martin Nacimiento

    student•
    hace 6 años

    Mi pregunta es la siguiente, con esas variables de entorno de que definen en el now.json, lo que hacen es mapear esas variables al comando de docker run en la plataforma de now.sh? Si es así, podría decir que con un docker-compose.yml no seria necesario definir estas variables en now.json, pero no se como gestionaría los secrets desde el docker-compose.yml

    Edgar Moises Valdez Faria

    Edgar Moises Valdez Faria

    student•
    hace 7 años

    Hola. Necesito ayuda. Tengo un error al deployar el proyecto y pienso que se debe a los Puertos.
    Al ejecutar npm run dev con el puerto 3000
    Esto se muestra en el navegador

    500 Internal Server Error. Network error: request to http://localhost:4000/graphql failed, reason: connect ECONNREFUSED 127.0.0.1:4000 Error: Network error: request to http://localhost:4000/graphql failed, reason: connect ECONNREFUSED 127.0.0.1:4000 at new ApolloError (/home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/errors/ApolloError.js:32:28) at /home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/core/QueryManager.js:260:41 at /home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/core/QueryManager.js:692:25 at Array.forEach (<anonymous>) at /home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/core/QueryManager.js:689:27 at Array.forEach (<anonymous>) at QueryManager.broadcastQueries (/home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/core/QueryManager.js:686:42) at Array.<anonymous> (/home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/core/QueryManager.js:63:23) at dispatch (/home/evaldez/platzi/now-course/bff/node_modules/redux/lib/createStore.js:186:19) at /home/evaldez/platzi/now-course/bff/node_modules/apollo-client/src/ApolloClient.js:172:30

    Y esto en la consola del api

    [nodemon] 1.11.0 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node .` Executing (default): DROP TABLE IF EXISTS "todos" CASCADE; Executing (default): DROP TYPE IF EXISTS "public"."enum_todos_status"; Executing (default): SELECT t.typname enum_name, array_agg(e.enumlabel ORDER BY enumsortorder) enum_value FROM pg_type t JOIN pg_enum e ON t.oid = e.enumtypid JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace WHERE n.nspname = 'public' AND t.typname='enum_todos_status' GROUP BY 1 Executing (default): DROP TYPE IF EXISTS "public"."enum_todos_status"; CREATE TYPE "public"."enum_todos_status" AS ENUM('active', 'completed', 'deleted'); Executing (default): CREATE TABLE IF NOT EXISTS "todos" ("id" UUID UNIQUE , "content" VARCHAR(255), "status" "public"."enum_todos_status", "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, UNIQUE ("id"), PRIMARY KEY ("id")); Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'todos' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname; Executing (default): CREATE UNIQUE INDEX "todos_id" ON "todos" ("id") events.js:167 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE 127.0.0.1:3000 at Server.setupListenHandle [as _listen2] (net.js:1336:14) at listenInCluster (net.js:1384:12) at GetAddrInfoReqWrap.doListen [as callback] (net.js:1510:7) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:61:10) Emitted 'error' event at: at emitErrorNT (net.js:1363:8) at process._tickCallback (internal/process/next_tick.js:63:19) [nodemon] app crashed - waiting for file changes before starting...

    Estoy usando para la base de datos.
    Al deployar con now se muestra error 500 pienso que es el mismo error.
    En desarrollo el problema se soluciona cuando uso el Puerto 4000 para el api. Pero al deployar persite el error.

    Esta es la conf de now.json para el api

    { "name": "now_curso_api", "alias": "now_curso_api.now.sh", "type": "docker", "env": { "NODE_ENV": "production", "HOST": "0.0.0.0", "PORT": "3000", "DB_HOST": "@now_curso_platzi_db_host", "DB_PORT": "5432", "DB_USER": "@now_curso_platzi_db_user", "DB_PASS": "@now_curso_platzi_db_pass", "DB_NAME": "@now_curso_platzi_db_name" } }

    Y este el de bff

    { "name": "now_curso_bff", "type": "npm", "env": { "NODE_ENV": "production", "BACKEND_API_ENDPOINT": "https://now_curso_api.now.sh/graphql", "BACKEND_WS_ENDPOINT": "wss://now_curso_api.now.sh/subscriptions" } }

    Si alguien tiene alguna idea del problema. Se agradece la ayuda

    Saludos.

      Edgar Moises Valdez Faria

      Edgar Moises Valdez Faria

      student•
      hace 7 años

      El error de debía a que mis endpoint estaban mal apuntados.

    Pablo Elias Mercado Moreno

    Pablo Elias Mercado Moreno

    student•
    hace 7 años

    Primero colocó now secrets y luego now secret, no hay problema en esto? a mi me funciono tambien, pero me gustaría saber si hay alguna diferencia o si ocurre algo en otros SO que se deba usar estrictamente de alguna forma.

      Diego Forero

      Diego Forero

      Team Platzi•
      hace 7 años

      Es un alias, funcionan igual.

      Pablo Elias Mercado Moreno

      Pablo Elias Mercado Moreno

      student•
      hace 7 años

      @GOLLUM23 Pero alias definidas previamente por now cierto? algo así como palabras reservadas? porque yo probé y me sirvió pero no hice ningún alias.

    LUIGGI ALEXIS RODRIGUEZ RUIZ

    LUIGGI ALEXIS RODRIGUEZ RUIZ

    student•
    hace 7 años

    Hola, tengo un error en el bff: luego de hacer deploy y probar el enlace, obtengo Internal server error : 500
    Este es el log de mi ultimo deployment de bff, veo que hay un Error: Network request failed with status 404 - “Not Found”

    Capture.PNG

    Alquien me brindaría una pista? gracias!

      Eduardo José Álvarez

      Eduardo José Álvarez

      Team Platzi•
      hace 7 años

      Podría decir que tal vez exista un error en la escritura de la URL, por el código que retorna, 404.

    Eddy Arellanes

    Eddy Arellanes

    student•
    hace 7 años

    Me confundí un poco, pero al final funcionó el tema de los secrets, dejo un pedazo de código por si a alguien más le pasa:
    Añadiendo el secret:
    now secret add access_token 0101010
    en el archivo

    { "name": "Test", "alias": "test121.now.sh", "type": "npm", "env": { "access_token": "@access_token" } }

    Y en un archivo de config que uso:

    const ACCESS_TOKEN = process.env.access_token //Now Secret Variable const TOKEN_NAME = 'dummy_token' const URL_CALLBACK = 'test121.now.sh' module.exports = { ACCESS_TOKEN, TOKEN_NAME, URL_CALLBACK }

    Y así ya puedo usar mi secret y tantan (Y)

    Fabian Guzman

    Fabian Guzman

    student•
    hace 6 años

    Alguien me puede ayudar, por lo menos darme un indicio

    Downloading 12 deployment files... Installing build runtime... Build runtime installed: 465.970ms Looking up build cache... Build cache not found WARNING: your application is being deployed in @now/next's legacy mode. http://err.sh/zeit/now/now-next-legacy-mode Installing dependencies... yarn install v1.22.0 info No lockfile found. [1/4] Resolving packages... warning react &gt; fbjs &gt; core-js@1.2.7: core-js@&lt;3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3. warning next &gt; @babel/runtime-corejs2 &gt; core-js@2.6.11: core-js@&lt;3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3. warning next &gt; styled-jsx &gt; babel-types &gt; babel-runtime &gt; core-js@2.6.11: core-js@&lt;3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3. [2/4] Fetching packages... warning terser-webpack-plugin@1.1.0: Invalid bin field for &quot;terser-webpack-plugin&quot;. info fsevents@1.2.11: The platform &quot;linux&quot; is incompatible with this module. info &quot;fsevents@1.2.11&quot; is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies... warning &quot; &gt; next-server@7.0.2-canary.49&quot; has incorrect peer dependency &quot;react@^16.0.0&quot;. warning &quot; &gt; next-server@7.0.2-canary.49&quot; has incorrect peer dependency &quot;react-dom@^16.0.0&quot;. warning &quot; &gt; next@7.0.2-canary.49&quot; has incorrect peer dependency &quot;react@^16.0.0&quot;. warning &quot; &gt; next@7.0.2-canary.49&quot; has incorrect peer dependency &quot;react-dom@^16.0.0&quot;. warning &quot;next &gt; next-server@7.0.2-canary.50&quot; has incorrect peer dependency &quot;react@^16.0.0&quot;. warning &quot;next &gt; next-server@7.0.2-canary.50&quot; has incorrect peer dependency &quot;react-dom@^16.0.0&quot;. warning &quot; &gt; react-apollo@1.1.2&quot; has unmet peer dependency &quot;redux@^2.0.0 || ^3.0.0&quot;. warning &quot;react-apollo &gt; react-dom@16.13.0&quot; has incorrect peer dependency &quot;react@^16.0.0&quot;. [4/4] Building fresh packages... success Saved lockfile. Done in 11.94s. Running &quot;yarn run now-build&quot; yarn run v1.22.0 $ NODE_OPTIONS=--max_old_space_size=3000 next build --lambdas [10:49:59 PM] Compiling client [10:50:04 PM] Compiled client in 6s [10:50:04 PM] Compiling server [10:50:07 PM] Compiled server in 2s ModuleBuildError: Module build failed (from ./node_modules/next/dist/build/webpack/loaders/next-babel-loader.js): Error: .plugins[0][1] must be an object, false, or undefined at assertPluginItem (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:244:15) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:30 at Array.forEach (&lt;anonymous&gt;) at assertPluginList (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:9) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:107:5 at Array.forEach (&lt;anonymous&gt;) at validateNested (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:83:21) at validate (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:74:10) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:169:34 at cachedFunction (/zeit/30cd8a69/node_modules/@babel/core/lib/config/caching.js:33:19) at buildRootChain (/zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:118:36) at loadPrivatePartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:85:55) at Object.loadPartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:110:18) at Object.&lt;anonymous&gt; (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:105:26) at Generator.next (&lt;anonymous&gt;) at step (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:3:221) at /zeit/30cd8a69/node_modules/webpack/lib/NormalModule.js:286:20 at /zeit/30cd8a69/node_modules/loader-runner/lib/LoaderRunner.js:367:11 at /zeit/30cd8a69/node_modules/loader-runner/lib/LoaderRunner.js:233:18 at context.callback (/zeit/30cd8a69/node_modules/loader-runner/lib/LoaderRunner.js:111:13) at /zeit/30cd8a69/node_modules/babel-loader/lib/index.js:45:103 { details: undefined, missing: undefined, origin: MultiModule { dependencies: [ [SingleEntryDependency] ], blocks: [], variables: [], type: 'javascript/dynamic', context: '/zeit/30cd8a69', debugId: 1001, hash: '7a33a20d8672d01b741f0330250c9502', renderedHash: '7a33a20d8672d01b741f', resolveOptions: {}, factoryMeta: {}, warnings: [], errors: [], buildMeta: { providedExports: true }, buildInfo: {}, reasons: [ [ModuleReason] ], _chunks: SortableSet [Set] { [Chunk], _sortFn: [Function: sortById], _lastActiveSortFn: null, _cache: undefined, _cacheOrderIndependent: undefined }, id: 1, index: 364, index2: 365, depth: 0, issuer: null, profile: undefined, prefetched: false, built: true, used: true, usedExports: true, optimizationBailout: [ 'ModuleConcatenation bailout: Module is not an ECMAScript module' ], _rewriteChunkInReasons: undefined, useSourceMap: false, _source: null, name: 'static/P~qgTFiFlIL8HygngYQaV/pages/index.js', _identifier: 'multi ./pages/index.js' }, dependencies: [ SingleEntryDependency { module: [NormalModule], weak: false, optional: false, loc: [Object], request: './pages/index.js', userRequest: './pages/index.js' } ], module: NormalModule { dependencies: [], blocks: [], variables: [], type: 'javascript/auto', context: '/zeit/30cd8a69/pages', debugId: 1004, hash: '8f3dd13ed331f9e43c629b5936d75c0a', renderedHash: '8f3dd13ed331f9e43c62', resolveOptions: {}, factoryMeta: {}, warnings: [], errors: [ [Circular] ], buildMeta: { providedExports: true }, buildInfo: { cacheable: true, fileDependencies: [Set], contextDependencies: Set {} }, reasons: [ [ModuleReason] ], _chunks: SortableSet [Set] { [Chunk], _sortFn: [Function: sortById], _lastActiveSortFn: null, _cache: undefined, _cacheOrderIndependent: undefined }, id: 'RNiq', index: 365, index2: 364, depth: 1, issuer: MultiModule { dependencies: [Array], blocks: [], variables: [], type: 'javascript/dynamic', context: '/zeit/30cd8a69', debugId: 1001, hash: '7a33a20d8672d01b741f0330250c9502', renderedHash: '7a33a20d8672d01b741f', resolveOptions: {}, factoryMeta: {}, warnings: [], errors: [], buildMeta: [Object], buildInfo: {}, reasons: [Array], _chunks: [SortableSet [Set]], id: 1, index: 364, index2: 365, depth: 0, issuer: null, profile: undefined, prefetched: false, built: true, used: true, usedExports: true, optimizationBailout: [Array], _rewriteChunkInReasons: undefined, useSourceMap: false, _source: null, name: 'static/P~qgTFiFlIL8HygngYQaV/pages/index.js', _identifier: 'multi ./pages/index.js' }, profile: undefined, prefetched: false, built: true, used: true, usedExports: true, optimizationBailout: [ 'ModuleConcatenation bailout: Module is not an ECMAScript module' ], _rewriteChunkInReasons: undefined, useSourceMap: false, _source: RawSource { _value: 'throw new Error(&quot;Module build failed (from ./node_modules/next/dist/build/webpack/loaders/next-babel-loader.js):\\nError: .plugins[0][1] must be an object, false, or undefined\\n at assertPluginItem (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:244:15)\\n at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:30\\n at Array.forEach (&lt;anonymous&gt;)\\n at assertPluginList (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:9)\\n at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:107:5\\n at Array.forEach (&lt;anonymous&gt;)\\n at validateNested (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:83:21)\\n at validate (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:74:10)\\n at /zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:169:34\\n at cachedFunction (/zeit/30cd8a69/node_modules/@babel/core/lib/config/caching.js:33:19)\\n at buildRootChain (/zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:118:36)\\n at loadPrivatePartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:85:55)\\n at Object.loadPartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:110:18)\\n at Object.&lt;anonymous&gt; (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:105:26)\\n at Generator.next (&lt;anonymous&gt;)\\n at step (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:3:221)&quot;);' }, request: '/zeit/30cd8a69/node_modules/next/dist/build/webpack/loaders/next-babel-loader.js??ref--4!/zeit/30cd8a69/pages/index.js', userRequest: '/zeit/30cd8a69/pages/index.js', rawRequest: './pages/index.js', binary: false, parser: Parser { _pluginCompat: [SyncBailHook], hooks: [Object], options: {}, sourceType: 'auto', scope: undefined, state: undefined, comments: undefined }, generator: JavascriptGenerator {}, resource: '/zeit/30cd8a69/pages/index.js', matchResource: undefined, loaders: [ [Object] ], error: [Circular], _buildHash: '26e93971229cae3bdb6b342df05ccc42', buildTimestamp: 1582930199347, _cachedSources: Map { 'javascript' =&gt; [Object] }, lineToLine: false, _lastSuccessfulBuildMeta: {}, _ast: null }, name: 'ModuleBuildError', error: Error: .plugins[0][1] must be an object, false, or undefined at assertPluginItem (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:244:15) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:30 at Array.forEach (&lt;anonymous&gt;) at assertPluginList (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:9) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:107:5 at Array.forEach (&lt;anonymous&gt;) at validateNested (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:83:21) at validate (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:74:10) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:169:34 at cachedFunction (/zeit/30cd8a69/node_modules/@babel/core/lib/config/caching.js:33:19) at buildRootChain (/zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:118:36) at loadPrivatePartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:85:55) at Object.loadPartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:110:18) at Object.&lt;anonymous&gt; (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:105:26) at Generator.next (&lt;anonymous&gt;) at step (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:3:221) } ModuleBuildError: Module build failed (from ./node_modules/next/dist/build/webpack/loaders/next-babel-loader.js): Error: .plugins[0][1] must be an object, false, or undefined at assertPluginItem (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:244:15) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:30 at Array.forEach (&lt;anonymous&gt;) at assertPluginList (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:9) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:107:5 at Array.forEach (&lt;anonymous&gt;) at validateNested (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:83:21) at validate (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:74:10) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:169:34 at cachedFunction (/zeit/30cd8a69/node_modules/@babel/core/lib/config/caching.js:33:19) at buildRootChain (/zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:118:36) at loadPrivatePartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:85:55) at Object.loadPartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:110:18) at Object.&lt;anonymous&gt; (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:105:26) at Generator.next (&lt;anonymous&gt;) at step (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:3:221) at /zeit/30cd8a69/node_modules/webpack/lib/NormalModule.js:286:20 at /zeit/30cd8a69/node_modules/loader-runner/lib/LoaderRunner.js:367:11 at /zeit/30cd8a69/node_modules/loader-runner/lib/LoaderRunner.js:233:18 at context.callback (/zeit/30cd8a69/node_modules/loader-runner/lib/LoaderRunner.js:111:13) at /zeit/30cd8a69/node_modules/babel-loader/lib/index.js:45:103 { details: undefined, missing: undefined, origin: MultiModule { dependencies: [ [SingleEntryDependency] ], blocks: [], variables: [], type: 'javascript/dynamic', context: '/zeit/30cd8a69', debugId: 2092, hash: '166722774d26ebeabf250cffd337e080', renderedHash: '166722774d26ebeabf25', resolveOptions: {}, factoryMeta: {}, warnings: [], errors: [], buildMeta: { providedExports: true }, buildInfo: {}, reasons: [ [ModuleReason] ], _chunks: SortableSet [Set] { [Chunk], _sortFn: [Function: sortById], _lastActiveSortFn: null, _cache: undefined, _cacheOrderIndependent: undefined }, id: 0, index: 0, index2: 1, depth: 0, issuer: null, profile: undefined, prefetched: false, built: true, used: true, usedExports: true, optimizationBailout: [ 'ModuleConcatenation bailout: Module is not an ECMAScript module' ], _rewriteChunkInReasons: undefined, useSourceMap: false, _source: null, name: 'static/P~qgTFiFlIL8HygngYQaV/pages/index.js', _identifier: 'multi ./pages/index.js' }, dependencies: [ SingleEntryDependency { module: [NormalModule], weak: false, optional: false, loc: [Object], request: './pages/index.js', userRequest: './pages/index.js' } ], module: NormalModule { dependencies: [], blocks: [], variables: [], type: 'javascript/auto', context: '/zeit/30cd8a69/pages', debugId: 2096, hash: '8f3dd13ed331f9e43c629b5936d75c0a', renderedHash: '8f3dd13ed331f9e43c62', resolveOptions: {}, factoryMeta: {}, warnings: [], errors: [ [Circular] ], buildMeta: { providedExports: true }, buildInfo: { cacheable: true, fileDependencies: [Set], contextDependencies: Set {} }, reasons: [ [ModuleReason] ], _chunks: SortableSet [Set] { [Chunk], _sortFn: [Function: sortById], _lastActiveSortFn: null, _cache: undefined, _cacheOrderIndependent: undefined }, id: 'RNiq', index: 1, index2: 0, depth: 1, issuer: MultiModule { dependencies: [Array], blocks: [], variables: [], type: 'javascript/dynamic', context: '/zeit/30cd8a69', debugId: 2092, hash: '166722774d26ebeabf250cffd337e080', renderedHash: '166722774d26ebeabf25', resolveOptions: {}, factoryMeta: {}, warnings: [], errors: [], buildMeta: [Object], buildInfo: {}, reasons: [Array], _chunks: [SortableSet [Set]], id: 0, index: 0, index2: 1, depth: 0, issuer: null, profile: undefined, prefetched: false, built: true, used: true, usedExports: true, optimizationBailout: [Array], _rewriteChunkInReasons: undefined, useSourceMap: false, _source: null, name: 'static/P~qgTFiFlIL8HygngYQaV/pages/index.js', _identifier: 'multi ./pages/index.js' }, profile: undefined, prefetched: false, built: true, used: true, usedExports: true, optimizationBailout: [ 'ModuleConcatenation bailout: Module is not an ECMAScript module' ], _rewriteChunkInReasons: undefined, useSourceMap: false, _source: RawSource { _value: 'throw new Error(&quot;Module build failed (from ./node_modules/next/dist/build/webpack/loaders/next-babel-loader.js):\\nError: .plugins[0][1] must be an object, false, or undefined\\n at assertPluginItem (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:244:15)\\n at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:30\\n at Array.forEach (&lt;anonymous&gt;)\\n at assertPluginList (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:9)\\n at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:107:5\\n at Array.forEach (&lt;anonymous&gt;)\\n at validateNested (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:83:21)\\n at validate (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:74:10)\\n at /zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:169:34\\n at cachedFunction (/zeit/30cd8a69/node_modules/@babel/core/lib/config/caching.js:33:19)\\n at buildRootChain (/zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:118:36)\\n at loadPrivatePartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:85:55)\\n at Object.loadPartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:110:18)\\n at Object.&lt;anonymous&gt; (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:105:26)\\n at Generator.next (&lt;anonymous&gt;)\\n at step (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:3:221)&quot;);' }, request: '/zeit/30cd8a69/node_modules/next/dist/build/webpack/loaders/next-babel-loader.js??ref--4!/zeit/30cd8a69/pages/index.js', userRequest: '/zeit/30cd8a69/pages/index.js', rawRequest: './pages/index.js', binary: false, parser: Parser { _pluginCompat: [SyncBailHook], hooks: [Object], options: {}, sourceType: 'auto', scope: undefined, state: undefined, comments: undefined }, generator: JavascriptGenerator {}, resource: '/zeit/30cd8a69/pages/index.js', matchResource: undefined, loaders: [ [Object] ], error: [Circular], _buildHash: '26e93971229cae3bdb6b342df05ccc42', buildTimestamp: 1582930204951, _cachedSources: Map { 'javascript' =&gt; [Object] }, lineToLine: false, _lastSuccessfulBuildMeta: {}, _ast: null }, name: 'ModuleBuildError', error: Error: .plugins[0][1] must be an object, false, or undefined at assertPluginItem (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:244:15) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:30 at Array.forEach (&lt;anonymous&gt;) at assertPluginList (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/option-assertions.js:222:9) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:107:5 at Array.forEach (&lt;anonymous&gt;) at validateNested (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:83:21) at validate (/zeit/30cd8a69/node_modules/@babel/core/lib/config/validation/options.js:74:10) at /zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:169:34 at cachedFunction (/zeit/30cd8a69/node_modules/@babel/core/lib/config/caching.js:33:19) at buildRootChain (/zeit/30cd8a69/node_modules/@babel/core/lib/config/config-chain.js:118:36) at loadPrivatePartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:85:55) at Object.loadPartialConfig (/zeit/30cd8a69/node_modules/@babel/core/lib/config/partial.js:110:18) at Object.&lt;anonymous&gt; (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:105:26) at Generator.next (&lt;anonymous&gt;) at step (/zeit/30cd8a69/node_modules/babel-loader/lib/index.js:3:221) } &gt; Build error occured Error: &gt; Build failed because of webpack errors at Object.build [as default] (/zeit/30cd8a69/node_modules/next/dist/build/index.js:42:15) at runMicrotasks (&lt;anonymous&gt;) at processTicksAndRejections (internal/process/task_queues.js:94:5) error Command failed with exit code 1. info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command. Error: Exited with 1 at ChildProcess.&lt;anonymous&gt; (/zeit/7665ffb244d2ecd4/.build-utils/node_modules/@now/build-utils/dist/index.js:31347:24) at ChildProcess.emit (events.js:223:5) at ChildProcess.EventEmitter.emit (domain.js:475:20) at maybeClose (internal/child_process.js:1021:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:283:5) worker exited with code 20 and signal null Done with &quot;package.json&quot;
    Cesar Galindo

    Cesar Galindo

    student•
    hace 6 años

    Me esta apareciendo el siguiente error

    `Now CLI 17.0.4 ❗️ The `name` property in now.json is deprecated (https://zeit.ink/5F) 🔍 Inspect: https://zeit.co/chestergalindo/platzi-bbf-now/2q1m3rn8u [2s] Error! Build failed Error! Check your logs at https://platzi-bbf-now-2q1m3rn8u.now.sh/_logs or run `now logs https://platzi-bbf-now-2q1m3rn8u.now.sh````` mi repo es [](https://github.com/chestergalindo/now-course)
    Erickson Quintana

    Erickson Quintana

    student•
    hace 5 años

    Saludos a mi me sigue sin funcionar now, ejecuto en mi terminal now y no hace nada, es dificil seguir este curso con este problema y nadie quien pueda ayudar

    Captura.PNG

      Javier Rodolfo

      Javier Rodolfo

      student•
      hace 5 años

      naw cambio a vercel. digitas vercel

    Alejandro Robleto

    Alejandro Robleto

    student•
    hace 6 años

    alguien me podria ayudar a resover el punto de la version 2,0 de now cuando trato de hacer el deploy no me deja porque me indica que el The property type is not allowed in now.json when using Now 2.0 – please remove it. :(

      Oswaldo Peralta

      Oswaldo Peralta

      student•
      hace 6 años

      Estimado, en el video utilizan Now 1.0, por lo tanto la lìnea "type": "npm" era necesaria.

      Al estar en versiòn 2.0, lo que debe hacer es quitar esa lìnea del now.json y todo funcionarà implecable.

    carlinius PD

    carlinius PD

    student•
    hace 8 años

    hola, los datos de la conexión a la bbdd todavía funcionan? lo digo por que a mi me da un error de login
    gracias, un saludo

      David Toca

      David Toca

      student•
      hace 8 años

      No debes usar los datos de conexion del video, estos son los del profesor, tu debes tener unos propios de tu aplicacion, para ello puedes usar elephantsql, para usarlo, debes crear una cuenta en y una vez estes logeado creas tu propia base de datos y a continuacion ver los datos de conexion de esa base de datos en la seccion de details, esos datos de conexion son los que debes usar.

    David Moya Garcia

    David Moya Garcia

    student•
    hace 8 años

    Ayuda!
    Me da este error:

    Error! An unexpected error occurred!
    SyntaxError: Unexpected string in JSON at position 207
    at JSON.parse (<anonymous>)
    at readJSON (/snapshot/now-cli/dist/now.js:4503:17) SyntaxError: Unexpected string in JSON at position 207
    at JSON.parse (<anonymous>)
    at readJSON (/snapshot/now-cli/dist/now.js:4503:17)

      Diego Forero

      Diego Forero

      Team Platzi•
      hace 8 años

      Comparte tu archivo de configuración, al parecer hay un problema, esta llegando un string donde no los espera.

      David Moya Garcia

      David Moya Garcia

      student•
      hace 8 años

      Me faltaban unas " " 😉 Gracias.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads