From 48a5312ee7f84e515b965211032ffadf08fa76e3 Mon Sep 17 00:00:00 2001 From: Artyom Popov Date: Fri, 1 Nov 2019 17:02:03 +0200 Subject: [PATCH 1/4] [ru] translation of dockerizing node.js app guide --- locale/ru/docs/guides/index.md | 2 +- locale/ru/docs/guides/nodejs-docker-webapp.md | 278 ++++++++++++++++++ 2 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 locale/ru/docs/guides/nodejs-docker-webapp.md diff --git a/locale/ru/docs/guides/index.md b/locale/ru/docs/guides/index.md index ec32dc89a561f..c6aaf1a366754 100644 --- a/locale/ru/docs/guides/index.md +++ b/locale/ru/docs/guides/index.md @@ -11,7 +11,7 @@ layout: docs.hbs * [Debugging - Getting Started](/ru/docs/guides/debugging-getting-started/) * [Easy profiling for Node.js Applications](/ru/docs/guides/simple-profiling/) * [Diagnostics - Flame Graphs](/en/docs/guides/diagnostics-flamegraph/) -* [Dockerizing a Node.js web app](/en/docs/guides/nodejs-docker-webapp/) +* [Докеризация веб-приложения node.js](/ru/docs/guides/nodejs-docker-webapp/) * [Migrating to safe Buffer constructors](/en/docs/guides/buffer-constructor-deprecation/) ## Ключевые концепции Node.js diff --git a/locale/ru/docs/guides/nodejs-docker-webapp.md b/locale/ru/docs/guides/nodejs-docker-webapp.md new file mode 100644 index 0000000000000..074d5134ba573 --- /dev/null +++ b/locale/ru/docs/guides/nodejs-docker-webapp.md @@ -0,0 +1,278 @@ +--- +title: Докеризация веб-приложения node.js +layout: docs.hbs +--- + +# Докеризация веб-приложения node.js + +Цель этого примера — показать, как поместить приложение node.js в docker-контейнер. +Это руководство предназначено для разработки, но не для прямого использования в +продакшене. Мы также предполагаем, что Вы успешно установили docker на свой ПК и +имеете базовое представление того, как структурировано приложение node.js. + +В перовой части руководства мы создадим простое node.js приложение, затем +мы создадим для него docker образ, и, наконец, мы создадим экземпляр контейнера +из этого образа. + +Docker позволяет Вам упаковать приложение вместе с его окружением и всеми зависимостями в +"коробку", называемую контейнером. Обычно контейнер состоит из приложения, работающего в +упрощенной версии ОС Linux. Образ — это шаблон для контейнера, контейнер — это работающий +экземпляр образа. + +## Создание приложения node.js + +Для начала создадим новую директорию, в которой будут находиться все файлы приложения. В этой директории +создайте файл `package.json`, в котором описано приложение и его зависимости: + +```json +{ + "name": "docker_web_app", + "version": "1.0.0", + "description": "node.js on docker", + "author": "first last ", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "express": "^4.16.1" + } +} +``` + +После создания файла `package.json`, выполните команду `npm install`. Если вы используете `npm` +версии 5 или выше, это также создаст файл `package-lock.json`, который будет скопирован в Ваш docker-образ. + +Далее создайте файл `server.js` который обозначает веб-приложение с использованием +фреймворка [express.js](https://expressjs.com/): + +```javascript +'use strict'; + +const express = require('express'); + +// константы +const port = 8080; +const host = '0.0.0.0'; + +// приложение +const app = express(); +app.get('/', (req, res) => { + res.send('hello world\n'); +}); + +app.listen(port, host); +console.log(`running on http://${host}:${port}`); +``` + +Далее мы рассмотрим, как вы можете запускать это приложение внутри docker-контейнера, +используя официальный образ docker. Сперва давайте создадим docker-образ с нашим приложением. + +## Создание файла Dockerfile + +Создайте пустой файл с именем `Dockerfile`: + +```markup +touch Dockerfile +``` + +Откройте этот файл в Вашем любимом текстовом редакторе. + +Первое, что нам надо сделать — определить базовый образ, +который мы возьмем за основу. Мы используем образ `node` последней версии +LTS* (версии с долгосрочной поддержкой) — `10`, +доступный на [docker hub](https://hub.docker.com/). + +\* Прим. переводчика: на момент написания статьи. + +```docker +FROM node:10 +``` + +Затем создадим директорию, в которой будет содержаться код приложения внутри образа. +Это будет рабочая директория для Вашего приложения. + +```docker +# создание директории приложения +WORKDIR /usr/src/app +``` + +Образ, который мы используем, поставляется с уже предустановленным node.js и npm. +Поэтому мы можем просто установить зависимости приложения с помощью команд `npm`. +Обратите внимание, если Вы используете `npm` 4 или ниже, файл `package-lock.json` +не будет сгенерирован. + +```docker +# установка зависимостей +# символ астериск «*» используется для того чтобы по возможности +# скопировать оба файла: package.json и package-lock.json +COPY package*.json ./ + +RUN npm install +# Если вы создаете сборку для продакшн +# RUN npm ci --only=production +``` + +Обратите внимание, что вместо того, чтобы копировать весь рабочий каталог, +мы копируем только файл `package.json`. Это позволяет воспользоваться +кэшированием слоев в docker. По [этой](http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/) +ссылке есть хорошее объяснение того, как это работает. Более того, +команда `npm ci`, указанная в комментарии, позволяет создавать +более быстрые, надежные, воспроизводимые сборки для продакшена. +Вы можете прочесть больше об этой команде [здесь](https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable). + +Чтобы отправить исходный код Вашего приложения внутрь docker-образа, +используйте директиву `copy`. + +```docker +# копируем исходный код +COPY . . +``` + +Наш сервер запускается на порту `8080`, поэтому мы будем использовать +инструкцию `expose`, чтобы проинформировать Docker о том, что в контейнере +имеется приложение, прослушивающее этот порт. + +```docker +EXPOSE 8080 +``` + +Последняя, тем не менее важная команда `cmd` содержит все необходимые +переменные среды и инструкции для запуска приложения. +Здесь мы просто используем `node server.js` для запуска. + +```docker +CMD [ "node", "server.js" ] +``` + +Ваш `Dockerfile` теперь должен выглядеть примерно так: + +```docker +FROM node:10 + +# создание директории приложения +WORKDIR /usr/src/app + +# установка зависимостей +# символ астериск «*» используется для того чтобы по возможности +# скопировать оба файла: package.json и package-lock.json +COPY package*.json ./ + +RUN npm install +# Если вы создаете сборку для продакшн +# RUN npm ci --only=production + +# копируем исходный код +COPY . . + +EXPOSE 8080 +CMD [ "node", "server.js" ] +``` + +## Файл .dockerignore + +Создайте файл `.dockerignore` в той же директории, что и `Dockerfile`, +со следующим содержимым: + +``` +node_modules +npm-debug.log +``` + +Это предотвратит копирование локально установленных модулей и дебаг-логов +в docker-образ и возможную перезапись модулей установленных внутри образа. + +## Сборка образа + +Перейдите в директорию, в которой находится Ваш `Dockerfile` и запустите +следующую команду, чтобы собрать образ docker. Флаг `-t` позволяет поставить +тэг к Вашему образу, чтобы его позже было проще найти при помощи команды +`docker images`: + +```bash +docker build -t /node-web-app . +``` + +Созданный образ теперь будет отображаться в списке всех образов: + +```bash +$ docker images + +# пример вывода +repository tag id created +node 10 1934b0b038d1 5 days ago +/node-web-app latest d64d3505b0d2 1 minute ago +``` + +## Запуск образа + +Запуск образа с флагом `-d` позволяет контейнеру работать в фоновом режиме. +Флаг `-p` перенаправляет публичный порт на приватный порт внутри контейнера. +Запустите образ, который Вы ранее создали: + +```bash +docker run -p 49160:8080 -d /node-web-app +``` + +Отобразите вывод вашего приложения: + +```bash +# отобразить все контейнеры, чтобы получить id нужного нам +$ docker ps + +# отобразить логи вывода +$ docker logs + +# пример вывода +running on http://localhost:8080 +``` + +Если Вам нужно попасть внутрь контейнера, используйте команду `exec`: + +```bash +# войти в контейнер в интерактивном режиме +$ docker exec -it /bin/bash +``` + +## Проверка + +Чтобы проверить Ваше приложение, используйте публичный порт, к которому привязан контейнер: + +```bash +$ docker ps + +# пример вывода +id image command ... ports +ecce33b30ebf /node-web-app:latest npm start ... 49160->8080 +``` + +В примере выше docker связал порт `8080` внутри контейнера с портом `49160` +на Вашем компьютере. + +Вы можете сделать запрос к Вашему приложению с помощью утилиты `curl` +(установите ее, если требуется с помощью команды: `sudo apt-get install curl`): + +```bash +$ curl -i localhost:49160 + +http/1.1 200 ok +x-powered-by: express +content-type: text/html; charset=utf-8 +content-length: 12 +etag: w/"c-m6twob/y57lesdjquheb1p/qtv0" +date: mon, 13 nov 2017 20:53:59 gmt +connection: keep-alive + +hello world +``` + +Надеемся, что эта инструкция помогла Вам настроить и запустить простое приложение +node.js с помощью docker. + +Вы можете найти больше информации о docker и node.js в docker по следующим ссылкам: + +* [Официальный docker-образ node.js](https://hub.docker.com/_/node/) +* [Руководство по лучшим практикам node.js docker](https://github.com/nodejs/docker-node/blob/master/docs/bestpractices.md) +* [Официальная документация docker](https://docs.docker.com/) +* [Тэг docker на stack overflow](https://stackoverflow.com/questions/tagged/docker) +* [Канал docker на reddit](https://reddit.com/r/docker) From c61181ac5f60c85398ec14dbd3a2010a57e80bd7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2019 16:22:21 -0700 Subject: [PATCH 2/4] build(deps): bump metalsmith-markdown from 1.2.0 to 1.3.0 (#2739) Bumps [metalsmith-markdown](https://github.com/segmentio/metalsmith-markdown) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/segmentio/metalsmith-markdown/releases) - [Changelog](https://github.com/segmentio/metalsmith-markdown/blob/master/History.md) - [Commits](https://github.com/segmentio/metalsmith-markdown/compare/v1.2.0...v1.3.0) Signed-off-by: dependabot-preview[bot] --- package-lock.json | 13 ++++--------- package.json | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index f35f74823e169..8e3e051901e18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4519,12 +4519,12 @@ } }, "metalsmith-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/metalsmith-markdown/-/metalsmith-markdown-1.2.0.tgz", - "integrity": "sha512-YAZZ1G4Y+AfnlJEoba6sr8zGBxg2xiAetf2xvGCTOpUR5CKV6G+X3Oq0BcS1aKBLYf86rWmm6Nu0Wq/5O2CEMQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/metalsmith-markdown/-/metalsmith-markdown-1.3.0.tgz", + "integrity": "sha512-wStYRbJIYwNTDtHmVfb6RjNfFB+DkloIoQr600pXT2QRnbqMsdnAdSVfPjXX+vP7upCulZmp/xlcYzfDxKpx1w==", "requires": { "debug": "^4.1.1", - "marked": "^0.6.1" + "marked": "^0.7.0" }, "dependencies": { "debug": { @@ -4535,11 +4535,6 @@ "ms": "^2.1.1" } }, - "marked": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.3.tgz", - "integrity": "sha512-Fqa7eq+UaxfMriqzYLayfqAE40WN03jf+zHjT18/uXNuzjq3TY0XTbrAoPeqSJrAmPz11VuUA+kBPYOhHt9oOQ==" - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/package.json b/package.json index e352500dff259..d905c4e76261f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "metalsmith-discover-partials": "^0.1.2", "metalsmith-feed": "^1.0.0", "metalsmith-layouts": "^2.3.1", - "metalsmith-markdown": "^1.2.0", + "metalsmith-markdown": "^1.3.0", "metalsmith-metadata": "0.0.4", "metalsmith-permalinks": "^2.2.0", "metalsmith-prism": "^3.1.1", From 704e5ef59686b98cbbe7d87583159af76496c656 Mon Sep 17 00:00:00 2001 From: Evelyn Stender <35370302+evelynstender@users.noreply.github.com> Date: Fri, 1 Nov 2019 21:10:35 +0000 Subject: [PATCH 3/4] [PT-BR] Translation of the first 4 items on uncategorized pages (#2729) * translation of the first 4 items on uncategorized pages --- ...-way-to-build-scalable-network-programs.md | 19 ++++++++++ .../uncategorized/bnoordhuis-departure.md | 14 +++++++ .../uncategorized/development-environment.md | 36 ++++++++++++++++++ .../evolving-the-node-js-brand.md | 37 +++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 locale/pt-br/blog/uncategorized/an-easy-way-to-build-scalable-network-programs.md create mode 100644 locale/pt-br/blog/uncategorized/bnoordhuis-departure.md create mode 100644 locale/pt-br/blog/uncategorized/development-environment.md create mode 100644 locale/pt-br/blog/uncategorized/evolving-the-node-js-brand.md diff --git a/locale/pt-br/blog/uncategorized/an-easy-way-to-build-scalable-network-programs.md b/locale/pt-br/blog/uncategorized/an-easy-way-to-build-scalable-network-programs.md new file mode 100644 index 0000000000000..194779e22f60e --- /dev/null +++ b/locale/pt-br/blog/uncategorized/an-easy-way-to-build-scalable-network-programs.md @@ -0,0 +1,19 @@ +--- +title: Um Jeito Fácil de Construir Programas Escaláveis de Rede +author: ryandahl +date: 2011-10-04T22:39:56.000Z +status: publish +category: Uncategorized +slug: an-easy-way-to-build-scalable-network-programs +layout: blog-post.hbs +--- + +Suponha que você esteja escrevendo um servidor web que codifica vídeos em cada upload de arquivo. A codificação de vídeo é muito ligada ao processador. Algumas postagens recentes em blogs sugerem que o Node.js falharia miseravelmente nisso. + +O uso do Node não significa que você precise escrever um algoritmo de codificação de vídeo em JavaScript (uma linguagem sem inteiros 64 bits) e analisar o loop de eventos do servidor principal. A abordagem sugerida é separar a tarefa de I/O (Input/Output - Entrada/Saída) de receber uploads e servir downloads da tarefa do processador de codificação de vídeo. No caso da codificação de vídeo, isso é feito usando o ffmpeg. O Node fornece meios avançados de controle assíncrono de subprocessos para trabalhos como este. + +Também foi sugerido que o Node não tira proveito de máquinas com processadores multicore. O Node suporta há muito tempo conexões de balanceamento de carga em vários processos em apenas algumas linhas de código - dessa maneira, um servidor Node usará os núcleos disponíveis. Nas próximas versões, tornaremos ainda mais fácil: basta passar `--balance` na linha de comando e o Node gerenciará o cluster de processos. + +O Node tem um objetivo claro: fornecer uma maneira fácil de criar programas escaláveis de rede. Não é uma ferramenta para todos os problemas. Não escreva um ray tracer com Node. Não escreva um navegador da web com o Node. No entanto, procure o Node se tiver a tarefa de escrever um servidor DNS, servidor DHCP ou mesmo um servidor de codificação de vídeo. + +Confiando no kernel para agendar e antecipar tarefas custosas em termos de computação e para balancear a carga de novas conexões, o Node parece menos mágico do que as plataformas de servidor que empregam o agendamento da "userland". Até agora, nosso foco na simplicidade e transparência valeu a pena: [o](https://www.joyent.com/blog/node-js-meetup-distributed-web-architectures) [número](https://venturebeat.com/2011/08/16/linkedin-node/) [de](http://corp.klout.com/blog/2011/10/the-tech-behind-klout-com/) [histórias de](http://pow.cx/) [sucesso](https://www.joelonsoftware.com/2011/09/13/announcing-trello/) de desenvolvedores e corporações que estão adotando a tecnologia continua a crescer. diff --git a/locale/pt-br/blog/uncategorized/bnoordhuis-departure.md b/locale/pt-br/blog/uncategorized/bnoordhuis-departure.md new file mode 100644 index 0000000000000..10f12f5c27d1c --- /dev/null +++ b/locale/pt-br/blog/uncategorized/bnoordhuis-departure.md @@ -0,0 +1,14 @@ +--- +title: A saída de Ben Noordhuis +date: 2013-12-03T22:13:57.000Z +slug: bnoordhuis-departure +layout: blog-post.hbs +--- + +Desde o final de semana passado, Ben Noordhuis decidiu se afastar do Node.js e do libuv, e não está mais atuando como um "commiter" principal. + +Ben fez uma tremenda quantidade de ótimos trabalhos no passado. Estamos tristes por perder o benefício de seu contínuo trabalho duro e experiência e, extremamente agradecidos pelo que ele acrescentou ao Node.js e ao libuv ao longo dos anos. + +Muitos de vocês já expressaram sua opinião sobre o drama recente, e eu gostaria de pedir que respeitem nossos desejos de deixar esse assunto pra trás para que todos possamos nos concentrar no caminho a seguir. + +Obrigado. diff --git a/locale/pt-br/blog/uncategorized/development-environment.md b/locale/pt-br/blog/uncategorized/development-environment.md new file mode 100644 index 0000000000000..59944f2db43c4 --- /dev/null +++ b/locale/pt-br/blog/uncategorized/development-environment.md @@ -0,0 +1,36 @@ +--- +title: Ambiente de Desenvolvimento +author: ryandahl +date: 2011-04-05T03:16:27.000Z +status: publish +category: Uncategorized +slug: development-environment +layout: blog-post.hbs +--- + +Se você está compilando um pacote de software porque precisa de uma versão específica (por exemplo, a mais recente), isso requer um pouco mais de manutenção do que usar um gerenciador de pacotes como o `dpkg`. Softwares que você mesmo compila *não* devem ser salvos em `/usr`, mas sim em seu diretório principal. Isso faz parte de ser um desenvolvedor de software. + +Uma maneira de fazer isso é instalar tudo no `$HOME/local/$PACKAGE`. Aqui está como eu instalo o Node na minha máquina: + +```bash +./configure --prefix=$HOME/local/node-v0.4.5 && make install +``` + +Para definir meus caminhos automaticamente, coloquei isso dentro do meu `$HOME/.zshrc`: + +```bash +PATH="$HOME/local/bin:/opt/local/bin:/usr/bin:/sbin:/bin" +LD_LIBRARY_PATH="/opt/local/lib:/usr/local/lib:/usr/lib" +*for* i *in* $HOME/local/*; *do* +[ -d $i/bin ] && PATH="${i}/bin:${PATH}" +[ -d $i/sbin ] && PATH="${i}/sbin:${PATH}" +[ -d $i/include ] && CPATH="${i}/include:${CPATH}" +[ -d $i/lib ] && LD_LIBRARY_PATH="${i}/lib:${LD_LIBRARY_PATH}" +[ -d $i/lib/pkgconfig ] && PKG_CONFIG_PATH="${i}/lib/pkgconfig:${PKG_CONFIG_PATH}" +[ -d $i/share/man ] && MANPATH="${i}/share/man:${MANPATH}" +*done* +``` + +O Node está em desenvolvimento suficientemente rápido para que *todos* possam compilá-lo. Um corolário disso é que o `npm` (que deve ser instalado junto ao Node) não requer "root" para instalar pacotes. + +O CPAN e o RubyGems embaçaram as linhas entre ferramentas de desenvolvimento e gerenciadores de pacotes do sistema. Com o `npm`, desejamos traçar uma linha clara: não é um gerenciador de pacotes do sistema. Não é para instalar o firefox, ffmpeg ou OpenSSL; é para baixar, criar e configurar rapidamente pacotes do Node. O `npm` é uma ferramenta de *desenvolvimento*. Quando um programa escrito em Node se torna suficientemente maduro, ele deve ser distribuído como um tarball, `.deb`, `.rpm` ou outro sistema de pacotes. Não deve ser distribuído para usuários finais com `npm`. diff --git a/locale/pt-br/blog/uncategorized/evolving-the-node-js-brand.md b/locale/pt-br/blog/uncategorized/evolving-the-node-js-brand.md new file mode 100644 index 0000000000000..acd89f915f99e --- /dev/null +++ b/locale/pt-br/blog/uncategorized/evolving-the-node-js-brand.md @@ -0,0 +1,37 @@ +--- +title: Evoluindo a Marca Node.js +author: Emily Tanaka-Delgado +date: 2011-07-11T19:02:45.000Z +status: publish +category: Uncategorized +slug: evolving-the-node-js-brand +layout: blog-post.hbs +--- + +Para ecoar a natureza evolutiva do [Node](https://nodejs.org/), atualizamos a identidade para ajudar a marcar um momento emocionante para desenvolvedores, empresas e usuários que se beneficiam da tecnologia pioneira. + +**Construindo uma marca** + +Começamos a explorar elementos para expressar o Node.js e descartamos noções preconcebidas sobre como pensávamos que o Node deveria ser e focamos no que o Node é: **cinético**, **conectado**, **escalável**, **modular**, **mecânico** e **orgânico**. Trabalhando com o designer [Chris Glass](http://www.chrisglass.com/), nossas explorações enfatizaram o dinamismo de Node e formaram uma linguagem visual baseada na estrutura, relacionamentos e interconectividade. + +![grid](/static/images/blog/uncategorized/evolving-the-node-js-brand/grid.png) + +Inspirados pela **visualização do processo**, descobrimos padrão, forma, e por alívio, o formato hexagonal. A infraestrutura angular inspira energia com o formato das letras. + +![nodejs](/static/images/blog/uncategorized/evolving-the-node-js-brand/nodejs.png) + +Essa linguagem pode se expandir para topografia orgânica de rede do Node ou se destilar em um único ponto de conexão hexadecimal. + +Essa escala representa a natureza dinâmica do Node de uma maneira simples e distinta. + +![Node.js network](/static/images/blog/uncategorized/evolving-the-node-js-brand/network.png) + +Estamos ansiosos para explorar essa linguagem visual, pois a tecnologia tem um futuro muito promissor. + +![Node.js nebula](/static/images/blog/uncategorized/evolving-the-node-js-brand/node.png) + +Esperamos que você se divirta usando. + +Para baixar o novo logotipo, visite [nodejs.org/pt-br/about/resources/](http://nodejs.org/pt-br/about/resources/) + +![Tri-color Node](/static/images/blog/uncategorized/evolving-the-node-js-brand/tri-color-node.png) From d5e73d672e9e209e7f87f67bf38baffb1458a7f8 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Sat, 2 Nov 2019 21:10:03 +0800 Subject: [PATCH 4/4] Add upcoming Code + Learn in Shanghai (#2740) --- locale/en/get-involved/code-and-learn.md | 1 + 1 file changed, 1 insertion(+) diff --git a/locale/en/get-involved/code-and-learn.md b/locale/en/get-involved/code-and-learn.md index 0001bc586ae10..04d573928baaa 100644 --- a/locale/en/get-involved/code-and-learn.md +++ b/locale/en/get-involved/code-and-learn.md @@ -10,6 +10,7 @@ Code & Learn events allow you to get started (or go further) with Node.js core c ## Upcoming Code + Learn Events * [Moscow, Russia on November 6, 2019](https://medium.com/piterjs/announcement-node-js-code-learn-in-moscow-fd997241c77) +* Shanghai, China at [COSCon](https://bagevent.com/event/5744455): November 3, 2019 ## Past Code + Learn Events