Ответы пользователя по тегу Node.js
  • Как настроить сервер на работу двух отдельных приложений?

    Softovick
    @Softovick
    программист, администратор
    Если используете Докер и прямо хотите докеризировать с мастабированием, то используйте сеть докера для связи между контейнерами для начала.
    У вас должно быть 1 контейнер с nginx наружу (80 порт и/или 443), 1 контейнер для сборки приложения VueJS, 1 контейнер для работы с PHP-проектом и дальше что там у вас, по контейнеру для СУБД (1 Redis, 1 RabbitMQ, 1 MySQL). Каждому контейнеру дайте нормальное уникальное имя, чтобы можно было их подключать друг к другу по dns-имени. Наружу порт только для nginx давайте, он будет за все отвечать.
    1. Контейнер с nginx отдает статику, собранную из приложения VueJS. Собственно все как обычно - собрали dist, из него и отдаете. В идеале собирать в отдельном контейнере c NodeJS, а полученные данные из dist копировать в какой-нибудь volume наверное и подключить его к контейнеру с Nginx. Это можно делать на уровне файлов docker-compose и автоматизировать при сборке проекта. Этот же volume можно подключить и к контейнеру с backend-api, тогда оно сможет работать с файлами, которые загрузили.
    2. Из первого контейнера с nginx по upstream отдавать backend-api, который будет обращаться к еще одному контейнеру, где крутится PHP и собственно ваш symphony проект. Наружу этот контейнер не пускайте, подключайте к первому контейнеру через имя. Таким образом вы сможете запустить несколько контейнеров с api, указав все их dns-имена в разделе нужного upstream. Уже получаете горизонтальную масштабируемость, эти контейнеры потом можно запускать вообще на разных серверах, соединив их, например при помощи Docker Swarm или в Kubernetes. Опять же все можно оформить на уровне файлов конфигурации Docker Compose, там не сложно, достаточно почитать документацию.
    3. Все контейнеры с СУБД запускайте тоже в отдельных контейнерах, где нужно - создавайте volume для хранения БД. Их тоже наружу не пускайте, биндите на уровне Docker с контейнером (ами) с backend-api. Вообще если предполагается серьезная нагрузка, то СУБД вообще рекомендуют запускать не в контейнерах, но тогда чуть сложнее автоматизировать привязку и масштабирование будет. Для начала можно и в контейнерах, когда она придет, эта нагрузка то... Тем более контенеры с СУБД тоже можно в нескольких экземплярах запускать, между ними репликацию сделать или вообще шардинг. Все это можно наверное во всех описанных БД сделать, но с шардингом помучаться конечно придется. Репликация проще всего. А уже к ним подключаться из backend-api по dns-именам, как настроите.

    Как то так.
    Ответ написан
  • Как правильно выставить порт на хостинге если запускать сервер на Node.js?

    Softovick
    @Softovick
    программист, администратор
    Странные вопросы для написавшего веб-приложение :)
    Во первых, если это сайт - то считается по умолчанию 80 порт для http и 443 для https (с шифрованием и сертификатами).
    Во вторых, сильно зависит от того, какой это сайт. Если в нем много статичных файлов, типа картинок, файлов, или это SP, то есть отдается просто html - то настоятельно рекомендуют использовать Nginx как прокси. В остальных случаях не обязательно, но все же тоже рекомендуют. То есть Nginx запускают на портах 80/443, а в конфигурации виртуального хоста прописывают прокси на тот порт, на котором запущено приложение Node.JS. Какой это порт, определяете сами, главное чтобы он не совпадал с зарезервированными системными портами и портами, занятыми другими приложениями. В этом случае основную нагрузку по отдаче контента несете более производительный Nginx, а ваше приложение генерирует динамический контент. Желательно еще, чтобы по порту отвечало только локально на сервере, тогда проблем меньше будет.
    В третьих, если это все же не сайт (сервис REST API например) или не совсем сайт (скажем SPA на html и бекенд на Node.JS выполняются какие-либо задачи, ну или другие варианты) - то порт может быть абсолютно любым на ваш вкус. Главное чтобы он не пересекался с другими, так как обычно на одном порту может висеть только одно приложение.
    Дополнение: некоторые используют Docker или более современный вариант CoreOS. в этом случае какой порт использует виртуально ваше приложение, прописываете в настройках. Соответственно можно например запускать несколько контейнеров с разными приложениями на разных портах, связывая при необходимости их друг с другом (все тот же Nginx например и прокси на адрес контейнера с вашим приложением).
    Ответ написан
  • Как перенести в оффлайн среду npm сервер?

    Softovick
    @Softovick
    программист, администратор
    Чтобы это выглядело именно как репозиторий npm - то вот вариант https://www.npmjs.com/package/npm-mirror
    Но сразу все пакеты, боюсь вы не сможете никак скачать. Только те, которые нужны для проектов.
    Возможно проще скачать там, где есть интернет и просто принести папку node_modules на флешке.
    Ответ написан
  • Как запустить nodejs приложение на apache?

    Softovick
    @Softovick
    программист, администратор
    Для работы приложения на node.js нужна собственно среда node.js на сервере, без нее код не будет работать никак.
    Практически всегда веб-приложение на node.js уже запускает свой вебсервер, это действительно хороший вариант и производительный. Никаких прослоек, обычно не требуется. Иногда поверх пускают nginx, так как он лучше справляется с отдачей статики (например css, js и картинок).
    В вашем случае, так как порт для сайтов уже занят Apache, то вам достаточно создать в нем вхост, где сделать прокси на порт, на котором будет работать ваше приложение на node.js. При этом напрямую доступа Apache к папке с файлами приложения иметь не обязательно (да и не нужно, лишняя дырка).
    В идеале конечно следует избавиться от Apache в пользу nginx. Так как Apache будет создавать узкое горлышко для производительности приложения на node.js
    Ответ написан
  • Node.js может работать с базой данных?

    Softovick
    @Softovick
    программист, администратор
    Добавлю и от себя (хотя чего уж добавлять, все уже ответили).
    Прикрутить к node.js можно практически любую БД. Причем все зависит не от личных впечатлений, а от задач скорее. В некоторых случаях хочешь не хочешь, а придется MySQL, потому что есть еще другое приложение, которое работает в MySQL... Ну вы поняли?
    По личным ощущениям, если писать приложение с нуля и объем данных предполагается большим - MongoDB. Если разобраться и объем не сильно большой - Redis без компромиссов по скорости работы. Если с пониманием noSQL туго - MySQL или PostgreSQL в большинстве случаев справляются с задачами на ок.
    Ответ написан
  • Какую БД лучше использовать?

    Softovick
    @Softovick
    программист, администратор
    Есть такое решение от Total.JS - обычная встраиваемая NoSQL база в виде файлов, где данные хранятся в формате JSON. Так вот такой вариант на небольших проектах показывает весьма впечатляющие результаты по скорости работы. Этот модуль разработчик вроде распространяет отдельно от фреймворка, рекомендую взглянуть и изучить. Также можно посмотреть на NeDB.
    Если же требуется интеграция с другими сервисами - либо делайте прослойку в виде того же api на node.js, либо возьмите что-то простое, типа Redis. Вот в случае Redis вы точно не упретесь в его производительность, скорее ваш код не будет успевать обрабатывать запросы. Но для его работы нужно побольше ОЗУ.
    Ответ написан
  • Какую БД выбрать под node debian?

    Softovick
    @Softovick
    программист, администратор
    Самые бескомпромиссные варианты на скорость чтения и записи - база данных Redis и подобные ей (Aerospike, Tarantool). Данные хранятся в памяти, их чтение и запись максимально быстрая. Эти базы NoSQL в виде ключ-значение, то собственно всю вашу задачу покрывает с лихвой. Ключ = номер телефона, значение = описание. Можно чуть усложнить базу данных , чуть изучив структуры даннных Redis - при желании конечно.
    Единственное ограничение в случае Redis - количество ОЗУ на сервере. Под 1.5 млн записей по 200 байт понадобится больше 700МБ. Соответственно с ростом количества записей потребление памяти будет расти пропорционально. Впрочем сейчас можно найти недорогие сервера с большим количеством памяти, не то, что раньше. Потребление памяти можно распределить, используя кластерное решение, которые выглядит вроде интересным, но если честно - не очень удобным. По крайней мере не текущем этапе разработки. Надежность такой базы тоже можно увеличить, если сделать репликацию на другой сервер, где данные будут постоянно записываться на диск в режиме AOF - тогда потерять их будет сложнее, а работа с базой на мастере не будет замедлена небыстрыми дисковыми операциями. Можно этот AOF сделать и на одном сервере, если SSD - то нагрузка будет практически незаметная.
    Если есть время и достаточно опыта в разработке - можно разобраться в аналогах, у которых ограничение в ОЗУ не так сказывается. Тот же Aerospike например оптимизирован под работу на SSD, а Tarantool может хранить в себе гораздо больше данных, чем позволяет объем ОЗУ, без особых потерь производительности (так заявляют).
    Также у облачных сервисов Amazon / Azure / Google есть свои базы для key-value, можете изучить их стоимость, возможно вас устроит.

    Теоретически вы так же можете использовать MySQL или PostgreSQL, структура не настолько сложная у вас, чтобы эти СУБД не справлялись с ними. Но их производительность все будет уступать Redis на порядок.
    Ответ написан
  • Как найти преподавателя по Node.js?

    Softovick
    @Softovick
    программист, администратор
    Далеко не надо ходить. Вот тут и скринкаст и преподователь с курсами learn.javascript.ru/courses
    И https://geekbrains.ru/ посетить можно
    Ответ написан