ryanlelek / Raneto

Markdown powered Knowledgebase Wiki for Node.js
https://raneto.com
MIT License
2.79k stars 448 forks source link

Proxy subfolders #189

Closed drj-io closed 4 years ago

drj-io commented 7 years ago

We have a main domain http://domain.com/ which is serving up our main document.

We have added a proxy route (AWS ALB) to serve Raneto from https://domain.com/docs/

We have changed "base_url" to "/docs", but nothing is served from there.

Logs show the following:

0|server   | GET /docs/ 404 4.870 ms - 2180
0|server   | GET /docs/lib/bootstrap/dist/css/bootstrap.min.css 304 2.712 ms - -
0|server   | GET /docs/lib/highlightjs/styles/solarized_light.css 304 1.680 ms - -
0|server   | GET /docs/styles/raneto.css 304 4.797 ms - -
0|server   | GET /docs/styles/ghostdown.css 304 5.429 ms - -
0|server   | GET /docs/lib/jquery/dist/jquery.min.js 304 8.428 ms - -
0|server   | GET /docs/lib/bootstrap/dist/js/bootstrap.min.js 304 9.149 ms - -
0|server   | GET /docs/lib/highlightjs/highlight.pack.min.js 304 9.042 ms - -
0|server   | GET /docs/lib/fitvids/fitvids.min.js 304 8.891 ms - -
0|server   | GET /docs/lib/masonry-layout/dist/masonry.pkgd.min.js 304 9.202 ms - -
0|server   | GET /docs/scripts/ghostdown.js 304 7.922 ms - -
0|server   | GET /docs/scripts/raneto.js 304 8.475 ms - -

We basically want the index of the knowledgebase to be served from "/docs/", not from "/". Is this possible without modifying the application code? The load balancer does not have the option to proxy relative paths, from my understanding.

The other alternative is to put another loadbalancer (nginx) on top of this to forward requests and alter the incoming path (from "/docs/" to "/"), but this is overkill in my opinion. We would possibly need to do a subdomain otherwise, which we're not excited about.

Interested in hearing your ideas. Thanks!

drj-io commented 7 years ago

I have mostly fixed this by editing app/index.js and using the express-urlrewrite middleware: https://github.com/kapouer/express-urlrewrite

And also moved public theme assets to themes/default/public/docs

Here's what I did:

This takes care of most of the static routes that our users will need. It appears, however, that the login features are now broken, and who knows about the editing capability.

If this is something you guys would like to iterate with me on, I can submit a PR. Or if there's a better way, let me know... Thanks.

EDIT:

Fixed the style issues on the login page by adding config to the route:

'use strict';

function route_login_page (config) {
  return function (req, res, next) {

    return res.render('login', {
      config      : config,
      layout      : null,
      lang        : config.lang,
      rtl_layout  : config.rtl_layout,
      googleoauth : config.googleoauth
    });

  };
}

// Exports
module.exports = route_login_page;

There are still issues with static assets. I had to move themes/default/public to themes/default/public/docs to make that work, but the URLs are hard coded in the client side JS, so I'd have to change that too.

GrahamDumpleton commented 5 years ago

Issues relates to login page and editing when using base url hopefully addressed by PR #280.

ryanlelek commented 5 years ago

Closing due to Graham's PR. Please reopen if the issue continues.

Thanks Graham!

allout58 commented 4 years ago

I can't seem to get this to work.... If I set the base_url to /raneto, the index page loads, but everything else returns HTTP 500 (should be 404? Looking at the logs, it says this page doesn't exist). It looks to be trying to GET /raneto/ for the index page ✔️ , and tries for /raneto/styles/raneto.css for example which it fails to find ❌

ryanlelek commented 4 years ago

Yep, I tested it again just now from a fresh clone. Confirming:

ryanlelek commented 4 years ago

Please see this branch/PR to address your issue and confirm/deny the fix. https://github.com/gilbitron/Raneto/pull/312