meteor deploy to ubuntu like a node app

Деплой метеор приложения на собственный сервер

В этой статье хочу рассказать про деплой meteor приложения на собственный сервер на Ubuntu. Деплой нативный и чистый, в виде node.js приложения.

Конечно, есть такие инструменты как mup или mupx, но лично у меня «наболело», больше не хочу завязываться на какие то дополнительные утилиты, которые вовремя не обновляются. Началось всё с выходом meteor 1.3, после того как я обновил приложение на эту версию, mup перестал работать. Я долго смотрел в логи, пытался что то поправить, потом решил «плюнуть» и сделать всё самому. Пришлось самому поставить mongo и node.js, настроить, немного похимичить с правами, но это того стоит, теперь я свободен от mup !   Далее обо всём по порядку.

Ubuntu

Хостить метеор будем на этой операционной системе. Не важно у какого провайдера вы её возьмёте, лично я использую Microsoft Azure, который мне достался по программе BizSpark. В статье описан метод проверенный на Ubuntu 16.04 LTS, но думаю для других версий этой ОС отличаться ничего не будет.  Лучше обновить пакеты, для этого нужно зайти по ssh в виртуальную машину и выполнить:

Node.js

Теперь установим node.js . Пишут что для работы meteor 1.3 и выше нужна версия 0.10.X, поэтому её и ставим командой:

Проверяем :

Нужная версия ноды поставилась, идём далее.

MongoDB

На момент написания статьи mongo официально ещё не вышла на Ubuntu 16.04, но это не проблема, следуя следующим инструкциям установка MongoDB на Ubuntu 16.04 LTS не составит труда. Итак, по порядку выполняем команды:

Поставили MongoDB. Проверим, завелась ли она командой:

Если всё сделано правильно, то мы увидим shell mongo. Если что то не заработало, то перезагрузитесь.

Дополнительные пакеты

Если ваше приложение на meteor использует какие то дополнительные средства, то поставьте их.  Например, я в своем приложении обрезаю аватарки пользователей с помощью graphicsmagick. Поэтому ставим (если нужно) :

Архив с приложением

Пришло время сбилдить node.js app. Для этого переходим на локальной машине в папку с вашим meteor сайтом и выполняем команду :

По истечению некоторого времени meteor сделает тарбол с вашим приложением. Загрузите его на сервер в вашу домашнюю директорию. У меня это /home/azureuser/ . Далее его нужно распаковать командой:

Даём права на файлы и папки пользователю:

Далее ставим необходимые для вашего приложения npm модули:

Далее переходим в директорию:

Тут лежит основной файл приложения — main.js . Чтобы приложение заработало нужно натравить ноду на этот файл. Но перед этим нужно настроить переменные окружения:

Обратите внимание что я запускаю апп на 3000 порту, соответственно я замапил внешний 80 порт на 3000 внутренний. И доступ к моему приложению осуществляется просто по доменному имени. Кстати, посмотреть переменные окружения можно командой env .

Выполняем:

После этого, если всё сделано правильно, проект запустится. Получили работающее node.js приложение. Проверить можно, например, по ROOT_URL или по IP виртуальной машины.

Итак, meteor приложение задеплоено и работает. Теперь хочется сделать так, чтобы в случае ошибки, отключения электричества в дата-центре, перезагрузки, оно автоматически перезапускалось. Если вам это не нужно, то дальше можете не читать.

Делаем сервис в Ubuntu

Идея в том, чтобы сайт работал как сервис и для его старта или остановки использовались команды для работы с сервисами. Просто для удобства. Создадим новый сервис node-meteor.service, который будет представлять наше meteor приложение. Для этого переходим в директорию /lib/systemd/system и создаём там новый файл, который и будет сервисом:

В только что созданный файлик вставляем команды, которые описывают сервис(тут следует заменить пути на ваши):

После этого добавляем новый сервис в систему командой :

Теперь добавляем его в автозапуск при загрузке:

Что мы только что сделали ? Создали сервис для Ubuntu который автозапускается при старте системы и при ошибке в приложении. Также каждый раз перед запуском вставляются переменные окружения. Подход очень удобный. Теперь с сайтом можно работать командами :

Кстати, сервис пишет логи в syslog, который лежит в /var/log/ .

Вот так просто можно организовать деплой meteor приложения на ваш собственный сервер без mup, mupx, и прочих сторонних продуктов.

Также можно почитать:

  • Сергей Олегович Савельев

    Здорово! На основе статьи использовал структуру:
    app/ // здесь файлы метеора
    bundle/ // здесь скомпилированное node приложение
    build.sh // сценарий компиляции node приложения

    build.sh содержит:
    #!/bin/bash

    cd app
    npm install —production
    meteor build .. —architecture os.linux.x86_64
    cd ..
    tar -xf app.tar.gz
    rm -rf app.tar.gz
    cd bundle/programs/server
    npm install

    далее:
    chmod -x build.sh

    и всё, можно жить поживать, да добра наживать 🙂

  • osc

    Добрый день. Спасибо за статью, прекрасно все. Только вот подскажите, как деплоит с SSL ?

    • Добрый день. Думаю использовать nginx в качестве прокси.
      Либо использовать mup — http://meteor-up.com , у них на лендинге стоит галка «SSL support».
      Возможно для метеора есть какие-то пакеты, не изучал тему.