From 55186bbef5c36facaee583a7f93f81243733e351 Mon Sep 17 00:00:00 2001 From: bunkerity Date: Wed, 4 Aug 2021 16:54:59 +0200 Subject: [PATCH] examples improvement - hardened, joomla, kubernetes, load-balancer and moodle --- examples/hardened/README.md | 11 ++++ examples/hardened/architecture.png | Bin 0 -> 8565 bytes examples/joomla/README.md | 11 ++++ examples/joomla/architecture.png | Bin 0 -> 14655 bytes examples/kubernetes/README.md | 16 ++++++ examples/kubernetes/architecture.png | Bin 0 -> 15728 bytes examples/kubernetes/ingress.yml | 66 ++++++++++++++++++++++++ examples/kubernetes/php.yml | 27 +++++----- examples/kubernetes/reverse-proxy.yml | 25 +++++---- examples/load-balancer/README.md | 15 ++++++ examples/load-balancer/architecture.png | Bin 0 -> 15792 bytes examples/moodle/README.md | 11 ++++ examples/moodle/moodle.png | Bin 0 -> 17036 bytes 13 files changed, 159 insertions(+), 23 deletions(-) create mode 100644 examples/hardened/README.md create mode 100644 examples/hardened/architecture.png create mode 100644 examples/joomla/README.md create mode 100644 examples/joomla/architecture.png create mode 100644 examples/kubernetes/README.md create mode 100644 examples/kubernetes/architecture.png create mode 100644 examples/kubernetes/ingress.yml create mode 100644 examples/load-balancer/README.md create mode 100644 examples/load-balancer/architecture.png create mode 100644 examples/moodle/README.md create mode 100644 examples/moodle/moodle.png diff --git a/examples/hardened/README.md b/examples/hardened/README.md new file mode 100644 index 0000000..65f5880 --- /dev/null +++ b/examples/hardened/README.md @@ -0,0 +1,11 @@ +# Hardened + +Example on how you can harden the container executing bunkerized-nginx. See the [documentation](https://bunkerized-nginx.readthedocs.io/en/latest/security_tuning.html#container-hardening) for details. + +## Architecture + + + +## Docker + +See [docker-compose.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/hardened/docker-compose.yml). diff --git a/examples/hardened/architecture.png b/examples/hardened/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..899064a8b3328d701fffd33a2bf9fcf74f115f9f GIT binary patch literal 8565 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 literal 0 HcmV?d00001 diff --git a/examples/joomla/README.md b/examples/joomla/README.md new file mode 100644 index 0000000..e12ca64 --- /dev/null +++ b/examples/joomla/README.md @@ -0,0 +1,11 @@ +# Joomla + +Joomla is a free and open-source content management system (CMS) for publishing web content on websites. Web content applications include discussion forums, photo galleries, e-Commerce and user communities and numerous other web-based applications. More info on the official [website](https://www.joomla.org/) and [repository](https://github.com/joomla/joomla-cms). + +## Architecture + + + +## Docker + +See [docker-compose.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/joomla/docker-compose.yml). diff --git a/examples/joomla/architecture.png b/examples/joomla/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..5c6eb24fe185b29edf7382c416b1fa51c98754da GIT binary patch literal 14655 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 + +## Configuration + +We will assume that you have setup the [bunkerized-nginx ingress controller](#TODO) inside your cluster. + +## Kubernetes + +See [ingress.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/kubernetes/ingress.yml), [php.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/kubernetes/php.yml) and [reverse-proxy.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/kubernetes/reverse-proxy.yml). + diff --git a/examples/kubernetes/architecture.png b/examples/kubernetes/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..65f475a65876f7d981c4ab62e96c761e5525fd5f GIT binary patch literal 15728 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 m;msT16otIcBeR|Vf4yh)1)JQM* + +## Configuration + +Edit the custom `upstream` directive in the **http-confs/upstream.conf** file according to your use case. + +## Docker + +See [docker-compose.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/load-balancer/docker-compose.yml). diff --git a/examples/load-balancer/architecture.png b/examples/load-balancer/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7dfea97268ed802ff5f501118bb7fd7d4d0e3cf5 GIT binary patch literal 15792 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

eb42KG~q#3=FYta=R5~R?V3?b7hdsmHqYq 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 literal 0 HcmV?d00001 diff --git a/examples/moodle/README.md b/examples/moodle/README.md new file mode 100644 index 0000000..afe70a3 --- /dev/null +++ b/examples/moodle/README.md @@ -0,0 +1,11 @@ +# Moodle + +Moodle is a free and open-source learning management system (LMS) written in PHP and distributed under the GNU General Public License. See the official [website](https://moodle.org/) and [repository](https://git.in.moodle.com/moodle/moodle) for more information. + +## Architecture + + + +## Docker + +See [docker-compose.yml](https://github.com/bunkerity/bunkerized-nginx/blob/master/examples/moodle/docker-compose.yml). diff --git a/examples/moodle/moodle.png b/examples/moodle/moodle.png new file mode 100644 index 0000000000000000000000000000000000000000..313b6b670d261063cf092c0668bede5af8996008 GIT binary patch literal 17036 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 literal 0 HcmV?d00001