1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/vcs-all-in-one-git-push-deploy-for-node

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

POD — git push deploy для Node.js

Скриншот

NPM version Build Status

Core API JSCoverage: 95,52%

Pod упрощает настройку, обновление и управление несколькими приложениями Node.js на сервере Linux. Идеально подходит для размещения личных проектов Node на виртуальном частном сервере (VPS). Есть две основные части: 1. развёртывание с помощью git hooks и 2. управление процессами с помощью pm2.

Он не управляет маршрутизацией DNS для вас (лично я делаю это в Nginx), но вы можете использовать pod для запуска сервера node-http-proxy на порту 80, который направляет входящие запросы к другим приложениям.

Быстрый старт

На сервере:

$ pod create myapp

На вашем локальном компьютере:

$ git clone ssh://your-server/pod_dir/repos/myapp.git
# хак хак хак, коммит
# убедитесь, что ваш основной файл — app.js
# или укажите «main» в package.json
$ git push

Вы также можете просто добавить его как удалённый в существующий локальный репозиторий:

$ git remote add deploy ssh://your-server/pod_dir/myapp.git
$ git push deploy master

Это всё! Приложение должно автоматически запуститься после нажатия. Для последующих нажатий процесс приложения будет перезапущен. Однако есть ещё кое-что, читайте дальше, чтобы узнать больше.

Предварительные требования

  • Node >= 0.10.x
  • git
  • правильно настроен ssh, чтобы вы могли отправлять данные в репозиторий на VPS через ssh

Установка

$ [sudo] npm install -g pod

Чтобы pod автоматически запускал все управляемые приложения при запуске системы, вы также можете написать простой скрипт upstart, который содержит что-то вроде этого:

# /etc/init/pod.conf
start on (local-filesystems and net-device-up IFACE!=lo)
exec sudo -u <username> /path/to/node /path/to/pod startall

При первом запуске pod спросит вас, где вы хотите разместить свои файлы. Структура данного каталога будет выглядеть так:

.
├── repos # содержит голые репозитории .git
│   └── example.git
└── apps # содержит рабочие копии
    └── example
        ├──app.js
        └──.podhook

Использование CLI

  Usage: pod [command]

  Commands:

    create <app>            Create a new app
    remote <app> <repo>     Create a app from a remote GitHub repo
    rm <app>                Delete an app
    start <app>             Start an app monitored by pm2
    stop <app>              Stop an app
    restart <app>           Restart an app that's already running
    list                    List apps and status
    startall                Start all apps not already running
    stopall                 Stop all apps
    restartall              Restart all running apps
    prune                   Clean up dead files
    hooks                   Update hooks after a pod upgrade
    web [command]           Start/stop/restart the web interface
    help                    You are reading it right now

Веб-сервис

$ pod web [stop|restart|status]

Эта команда запустит веб-службу pod, по умолчанию на порту 19999, которая предоставляет несколько функций:

  • / : веб-интерфейс, отображающий текущий статус приложений.
  • /json : возвращает данные о статусе приложения в формате json.
  • /jsonp : принимает jsonp. Этот маршрут должен быть включён в конфигурации.
  • /hooks/appname : запускает выборку/перезапуск соответствующих удалённых приложений.

И /, и /json требуют базовой аутентификации http. Обязательно установите имя пользователя и пароль. Использование удалённого репозитория GitHub

Пошаговое руководство

Вы можете настроить приложение для отслеживания удалённого репозитория GitHub с помощью команды pod remote:

$ pod remote my-remote-app username/repo

После этого добавьте вебхук в ваш репозиторий GitHub, указав на /hooks/my-remote-app вашего веб-интерфейса. Вебхук вызовет выборку и перезапуск, как и локальные приложения. По умолчанию удалённое приложение будет отслеживать только основную ветку, если вы хотите отслеживать другую ветку, вы можете изменить её в файле конфигурации.

Также можно настроить удалённое приложение для отслеживания произвольного адреса git. Однако в этом случае вам нужно вручную сделать POST-запрос, соответствующий полезной нагрузке вебхука GitHub.

Начиная с версии 0.8.2, также поддерживаются вебхуки GitLab.

Начиная с версии 0.8.6, также поддерживаются вебхуки Bitbucket.

Конфигурация

Файл конфигурации находится по адресу ~/.podrc. Обратите внимание, что с версии 0.7.0 все поля следуют формату подчёркивания, поэтому проверьте свой файл конфигурации, если после обновления что-то сломается.

Пример конфигурации:

{
    // куда pod помещает все вещи
    "root": "/srv",

    // дефолтная среда
    "node_env": "development",

    // это можно переопределить в каждом package.json приложения "main" поле
    // или в конфигурации приложения ниже, используя поле "script"
    "default_script": "app.js",

    // минимальное время безотказной работы, чтобы считаться стабильным,
    // в миллисекундах. Если не установлено, все перезапуски
    // считаются нестабильными.
    "min_uptime": 3600000,

    // максимальное количество разрешённых нестабильных перезапусков
    // перед автоматическим остановкой приложения.
    "max_restarts": 10

    // конфигурация для веб-интерфейса
    "web": {
        // установите их! по умолчанию admin/admin
        "username": "admin",
        "password": "admin",
        "port": 19999,
        // разрешить jsonp для веб-интерфейса, по умолчанию false
        "jsonp": true
    },

    "apps": {
        "example1": {

            // передаётся приложению как process.env.NODE_ENV
            // если не установлено, наследуется от глобальных настроек
            "node_env": "production",

            // передаётся приложению как process.env.PORT
            // если не установлен, pod попытается проанализировать из
            // основного файла приложения (только для отображения), но не
            // гарантируется правильность.
            "port": 8080,

            // pod будет искать этот скрипт перед проверкой
            // в package.json приложения.
            "script": "dist/server.js",

            // *** любая допустимая конфигурация pm2 здесь передаётся pm2. ***

            // запустить 2 экземпляра с использованием модуля кластера
            "instances": 2,

            // передать дополнительные аргументы командной строки в приложение
            "args": "['--toto=heya coco', '-d', '1']",

            // пути к файлам для stdout, stderr журналов и pid.
            // будут в ~/.pm2/, если не указано
            "error_file": "/absolute/path/to/stderr.log",
            "out_file": "/absolute/path/to/stdout.log"
        },
        "example2": {
            // вы можете переопределить глобальные настройки
            "min_uptime": 1000,
            "max_restarts": 200
        },
        "my-remote-app": {
            "remote": "yyx990803/my-remote-app", // github shorthand
            "branch": "test" // если не указан, по умолчанию master
        }
    },

    // передавать переменные окружения всем приложениям
    "env": {
        "SERVER_NAME": "Commodore",
        "CERT_DIR": "/path/to/certs"
    }
}

Использование PM2 напрямую

Pod полагается на pm2 для управления процессами под капотом. При установке pod исполняемый файл pm2 также будет связан глобально. Вы можете вызывать команды pm2 для получения более подробной информации о процессе.

Ведение журнала делегировано pm2. Если вы не установили параметры out_file и error_file приложения, журналы по умолчанию будут сохранены в ~/.pm2/logs.

Если что-то пойдёт не так и перезагрузка не решит проблему, попробуйте pm2 kill. Он завершает все процессы, управляемые pm2, и сбрасывает потенциальные проблемы с переменными среды.

Все команды pod касаются только приложений, присутствующих в конфигурационном файле pod, так что всё в порядке, если... Использование PM2 отдельно для запуска дополнительных процессов

Пользовательский хук post-receive

По умолчанию pod будет запускать npm install каждый раз, когда вы отправляете изменения в репозиторий. Чтобы переопределить это поведение и запустить собственный сценарий оболочки перед перезапуском приложения, просто добавьте файл .podhook в своё приложение. Если .podhook завершает работу с кодом, отличным от 0, приложение не будет перезапущено и жёстко сбросится до фиксации перед отправкой.

Пример .podhook:

component install
npm install
grunt build
grunt test
passed=$?
if [[ $passed != 0 ]]; then
    # тест не пройден, выход. рабочее дерево приложения на сервере будет сброшено.
    exit $passed
fi
# перезапуск происходит автоматически, поэтому нет необходимости включать его здесь

Вы также можете напрямую отредактировать сценарий post-receive приложения, который находится в pod-root-dir/repos/my-app.git/hooks/post-receive, если хотите.

Использование API

Примечание: API можно использовать только после того, как вы инициировали конфигурационный файл через командную строку.

require('pod') вернёт API. Вы должны подождать, пока он будет готов, чтобы что-то с ним сделать:

var pod = require('pod')
pod.once('ready', function () {
    // ... делаем что-то
})

Методы API следуют традиционному стилю обратного вызова с ошибкой в первую очередь. Обратитесь к источнику для получения более подробной информации.

Образы Docker

Готовые образы Docker:

Изменения

0.9.1

  • Переход на последнюю версию PM2;
  • Добавлена поддержка Node 7.x.

0.9.0

  • Поддержка опции env в .podrc, которая передаёт переменные среды всем приложениям, управляемым pod;
  • Исправлена ошибка события ping GitHub при использовании удалённого репозитория GitHub.

0.8.6

  • Добавлена поддержка веб-хуков Bitbucket;
  • добавлена возможность указать точку входа в конфигурации приложения в .podrc с помощью поля script;
  • исправлена проблема с модулем readline, блокирующим stdin. Это вызывало проблемы при попытке клонировать репозиторий, для которого требовались имя пользователя и пароль.

0.8.0

  • Обновление PM2 до версии 0.12.9, что должно обеспечить правильную работу pod с Node 0.11/0.12 и последней стабильной версией iojs;
  • исправление веб-сервисов для учёта изменений формата веб-хука GitHub (#29);
  • теперь автоматически связывает исполняемый файл PM2 при установке.

И так далее.

Полный текст без форматирования доступен по запросу.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Гит пуш деплой фор нод точка джи эс эй. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/vcs-all-in-one-git-push-deploy-for-node.git
git@api.gitlife.ru:oschina-mirror/vcs-all-in-one-git-push-deploy-for-node.git
oschina-mirror
vcs-all-in-one-git-push-deploy-for-node
vcs-all-in-one-git-push-deploy-for-node
master