How do I create a page not a topic?
I think the easiest way would be to hack the Core … but changes would be lost with an update.
You could fork so the changes wouldn’t get wiped … but very bad idea
I have been working on a plugin It’s very much pre-alpha but feel free to study it in hopes it can give you an idea of how to write your own plugin.
Need hack the core? Do you have other idea?
What most people do is set up another site on a different domain for pages, using wordpress or ghost or something else. Then you add a shared navigation across the top and you’re done.
Here’s how Namati does it with WordPress:
But I want a plugin, seems to have no way
You are right - there is no way. Discourse is not a content management system but a discussion platform. You need to set up another site for the rest of your pages.
Or, like @Mittineague says, make it happen by creating a plugin to share with the community. I think it would be valued - especially for sites that just need one or two more pages, or who really don’t need a full fledged website to accompany their community discussions. I’d probably use it for some of my communities! 
I don’t think this feature is going to be implemented soon in Discouse. Please see below topic.
https://meta.discourse.org/t/adding-custom-static-pages/5497
You can do as Jeff mentioned in the post or we have a plugin for this feature but it doesn’t seem to work stable yet.
https://meta.discourse.org/t/easy-to-use-static-pages-plugin/36280
So, as said by @tobiaseigen, it is better to host your custom webpages in your domain(www.example.com), and host discourse in sub-domain(forum.example.com).
How to configure Discourse docker to run alongside say nginx on the same server to achieve this? I know ngninx supports reverse proxies. Are there instructions for setting up Discourse in this mode?