From 7e61f73b8cdeefe6d604790af85b3803d4fd4659 Mon Sep 17 00:00:00 2001 From: Hannah Wolfe Date: Wed, 7 Jul 2021 20:51:41 +0100 Subject: [PATCH] Moved vhost mounts into boot file - This stops the mounting of the admin and frontend from being buried deep in express initialisation - Instead it's explicit, which makes two things almost possible: 1. we can potentially boot the frontend or backend independently 2. we can pass services and settings loaded during boot into the frontend - This needs more work, but we can start to group all the frontend code together - Meanwhile we also need to rip apart the routing and url services to decouple the frontend from the backend fully - BABY STEPS! --- core/boot.js | 12 ++++++++++++ core/server/web/parent/app.js | 16 +++------------- core/server/web/parent/backend.js | 4 ++++ core/server/web/parent/frontend.js | 3 +++ 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/core/boot.js b/core/boot.js index 488c5fa355..8effee0930 100644 --- a/core/boot.js +++ b/core/boot.js @@ -131,6 +131,18 @@ async function initFrontend() { async function initExpressApps() { debug('Begin: initExpressApps'); const parentApp = require('./server/web/parent/app')(); + const vhost = require('@tryghost/vhost-middleware'); + + // Mount the express apps on the parentApp + + // ADMIN + API + const backendApp = require('./server/web/parent/backend')(); + parentApp.use(vhost(backendApp.get('vhostArg'), backendApp)); + + // SITE + MEMBERS + const frontendApp = require('./server/web/parent/frontend')({}); + parentApp.use(vhost(frontendApp.get('vhostArg'), frontendApp)); + debug('End: initExpressApps'); return parentApp; } diff --git a/core/server/web/parent/app.js b/core/server/web/parent/app.js index 6c5b226277..2b6780f464 100644 --- a/core/server/web/parent/app.js +++ b/core/server/web/parent/app.js @@ -3,10 +3,8 @@ const config = require('../../../shared/config'); const express = require('../../../shared/express'); const compress = require('compression'); const mw = require('./middleware'); -const vhost = require('@tryghost/vhost-middleware'); -const vhostUtils = require('./vhost-utils'); -module.exports = function setupParentApp(options = {}) { +module.exports = function setupParentApp() { debug('ParentApp setup start'); const parentApp = express('parent'); @@ -25,17 +23,9 @@ module.exports = function setupParentApp(options = {}) { // @TODO: figure out if this is really needed everywhere? Is it not frontend only... parentApp.use(mw.ghostLocals); - // Mount the express apps on the parentApp - - // ADMIN + API - const backendApp = require('./backend')(); - parentApp.use(vhost(vhostUtils.getBackendHostArg(), backendApp)); - - // SITE + MEMBERS - const frontendApp = require('./frontend')(options); - parentApp.use(vhost(vhostUtils.getFrontendHostArg(), frontendApp)); - debug('ParentApp setup end'); return parentApp; }; + +// const vhostUtils = require('./vhost-utils'); diff --git a/core/server/web/parent/backend.js b/core/server/web/parent/backend.js index 2e40dae378..64ab05e05c 100644 --- a/core/server/web/parent/backend.js +++ b/core/server/web/parent/backend.js @@ -1,5 +1,6 @@ const debug = require('@tryghost/debug')('web:backend'); const express = require('../../../shared/express'); +const vhostUtils = require('./vhost-utils'); /** * @@ -10,6 +11,9 @@ module.exports = () => { // BACKEND // Wrap the admin and API apps into a single express app for use with vhost const backendApp = express('backend'); + + backendApp.set('vhostArg', vhostUtils.getBackendHostArg()); + backendApp.use('/ghost/api', require('../api')()); backendApp.use('/ghost/oauth', require('../oauth')()); backendApp.use('/ghost/.well-known', require('../well-known')()); diff --git a/core/server/web/parent/frontend.js b/core/server/web/parent/frontend.js index 6276195eef..cea8c5e265 100644 --- a/core/server/web/parent/frontend.js +++ b/core/server/web/parent/frontend.js @@ -1,5 +1,6 @@ const debug = require('@tryghost/debug')('frontend'); const express = require('../../../shared/express'); +const vhostUtils = require('./vhost-utils'); const shared = require('../shared'); @@ -14,6 +15,8 @@ module.exports = (options) => { // FRONTEND const frontendApp = express('frontend'); + frontendApp.set('vhostArg', vhostUtils.getFrontendHostArg()); + // Force SSL if blog url is set to https. The redirects handling must happen before asset and page routing, // otherwise we serve assets/pages with http. This can cause mixed content warnings in the admin client. frontendApp.use(shared.middlewares.urlRedirects.frontendSSLRedirect);