Назад | Перейти на главную страницу

Обновите 2 блога Ghost на одном сервере, 1 сразу же закрывается при запуске в качестве службы

У меня есть 2 блога Ghost на сервере Digital Ocean:

Я использовал инструкции предоставлены Digital Ocean для создания блогов, и они работали нормально и пережили обновления раньше.

Вчера вечером я обновил блог №1 с Ghost v0.6.0 до 0.7.0 и не испытал никаких проблем. После обновления я побежал service ghost-{blog1} restart и он появился с помпой и триумфом.

Я немедленно попытался обновить блог №2, выполнив те же действия, но когда я открыл его в своем браузере после перезапуска службы, я получил ошибку «502 Bad Gateway».

Я обнаружил, что npm не смог правильно установить SQLite3, и исправил это. Теперь я могу успешно запустить блог, запустив npm start --production. Терминал показывает, что Ghost работает и перехватывает запросы, и я могу использовать сайт и приложение для ведения блога в своем браузере.

Но когда я бегу service ghost-{blog2} start, он продолжает выходить из строя без вывода терминальной ошибки. Я получаю следующее сообщение:

ghost-{blog2} start/running, process 1693

Но я все еще вижу ошибку «502 Bad Gateway» в моем браузере.

Изменить: я изменил свой сценарий запуска на запуск npm start --production > ghost-{blog2}.log вместо того npm start --production, и я вижу, что Ghost запускается, а затем немедленно завершает работу без ошибок:

> ghost@0.7.0 start /var/www/{blog2}/ghost
> node index

Это все, что есть в журнале, даже после нескольких нажатий на страницу. Nginx регистрирует запросы, а Ghost - нет.

Напротив, когда я запускаю блог, npm start --production > ghost-{blog2}.log с терминала журнал продолжается так:

> ghost@0.7.0 start /var/www/{blog2}/ghost
> node index

Migrations: Up to date at version 004
Ghost is running in production...
Your blog is now available on http://{blog2}
Ctrl+C to shut down
{{Requests}}

Может ли кто-нибудь предложить шаги, которые я могу предпринять, чтобы решить эту проблему?

Изменить: вот соответствующие детали конфигурации для каждого блога.

Блог №1: это тот, который работает

/var/www/{blog1}/config.js

production: {
    url: 'http://{blog1}',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },

    server: {
        // Host to be passed to node's `net.Server#listen()`
        host: '127.0.0.1',
        // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
        port: '2369'
    }
},

/ etc / nginx / sites-enabled / {blog1}

    server {
        listen 80;

        server_name {blog1};

        root /usr/share/nginx/html;
        index index.html index.htm;

        client_max_body_size 10G;

        location / {
            proxy_pass http://localhost:2369;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_buffering off;
        }
    }

/etc/init/ghost-{blog1}.conf

    # ghost-{blog1}

    start on startup

    script
        cd /var/www/{blog1}
        npm start --production
    end script

Блог №2: это работает, когда я начинаю использовать npm start --production, но не работает, когда я запускаю как службу

/var/www/{blog2}/ghost/config.js

production: {
    url: 'http://{blog2}',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },

    server: {
        // Host to be passed to node's `net.Server#listen()`
        host: '127.0.0.1',
        // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
        port: '2777'
    }
},

/ etc / nginx / sites-enabled / {blog2}

    server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        server_name {blog2};

        root /usr/share/nginx/html;
        index index.html index.htm;

        client_max_body_size 10G;

        location / {
            proxy_pass http://localhost:2777;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_buffering off;
        }
    }

/etc/init/ghost-{blog2}.conf

    # ghost-{blog2}

    start on startup

    script
        cd /var/www/{blog2}/ghost
        npm start --production > ghost-{blog2}.log
    end script

В итоге я удалил node_modules для ghost, а затем переустановил все.

rm -rf node_modules && npm cache clean
npm install --production

Sqlite3 не был установлен должным образом, поэтому мне также пришлось переустановить его. Это удалило мою базу данных, но у меня была резервная копия.

npm install sqlite3

После перезапуска сервисов все снова заработало.

service nginx restart && service ghost restart

Я наконец решил эту проблему!

Ответ был на понизить рейтинг Node.js до версии 0.10.40. Когда я писал выше, у меня был узел vv0.12.7.

Документация по установке Ghost говорит, что поддерживает v0.12.x, но, взглянув на него сегодня снова, я заметил, что он рекомендует v0.10.40.

Мне вообще не понятно, почему это решает проблему, но я возьму.