### New infrastructure for documentation sites (based on Gitlab Pages) --- #### Why did we decide to change the architecture? - creation of new sites required many manual steps to be performed and it wasn't very friendly for less technical users - hidden steps in between (S2I container image whose responsibility was to build the static assets) made the whole setup harder to understand (in case someone wanted to customize the builds) --- #### More reasons for the change - necessity to streamline the architecture based on the components we commonly use - imminent decommissioning campaign of Openshift 3 made us rethink the solution used so far - future integration with the new WebServices Portal --- #### What changed --- #### Gitlab CI is now responsible for building static assets Static assets are no longer built on Openshift. Now Gitlab CI/CD is responsible for that ![](https://codimd.web.cern.ch/uploads/upload_81ff87a4ffd74df2fc67d579cc2ff70f.png) In order to build your MkDocs site you can use our [Gitlab CI/CD template](https://gitlab.cern.ch/authoring/documentation/mkdocs-ci/). --- #### Integration with the new Keycloak-based SSO Now you can protect your static sites with new Keycloak-based SSO. ![](https://codimd.web.cern.ch/uploads/upload_f4b84a9dbc3d282b14ed69f02def3ccd.png =480x320) --- #### MkDocs is not the only option now Users can now use other Static Site Generators offered by Gitlab Pages as well as MkDocs. ![](https://docs.gitlab.com/ee/user/project/pages/img/ssgs_pages.png) There is also one interesting option which is a WYSIWYG editor that can prove to be useful to users who don't want to learn Markdown. --- #### Based on OKD4 (webeos.cern.ch) All the components of the new infrastructure are deployed on an OKD4 cluster ([webeos.cern.ch](https://webeos.cern.ch)). All of them are regularly updated and have been designed in a way that will streamline the future integration with the new `WebServices Portal`. --- #### `nginx` not needed for setting up redirects Thanks to [`_redirects`](https://docs.gitlab.com/ee/user/project/pages/redirects.html) file, which is supported by Gitlab Pages, there is no need to use `nginx` for custom redirections. ``` /home / 302 /home-not-existing / 302 # should be soon available /news/* /blog/:splat /news/:year/:month/:date /blog-:year-:month-:date.html ``` Keep in mind that not all types of redirects are available at the moment, e.g. domain-level redirects (however Gitlab adds support for more and more with each release) --- #### Review sites Due to a limitation in how static site content is stored by `Gitlab`, reviewing a site requires a few more steps from the users. We suggest that users use a repository fork to test and review their changes. More info can be found [here](https://how-to.docs.cern.ch/gitlabpagessite/review/create_test_site/). The suggested workaround above might be replaced with [Review Apps for Pages](https://gitlab.com/gitlab-org/gitlab/-/issues/16907) once it is fully implemented. --- #### Architecture (plain Gitlab Pages) ```mermaid flowchart TB user[Site Owner]-- Pushes pages deployment -->gitlab{Gitlab} gitlab{Gitlab}-- Pushes static content -->s3[(Object Storage)] pages((Gitlab Pages))-. Reads configuration from API .->gitlab{Gitlab} pages((Gitlab Pages))-. Reads static content .->s3[(Object Storage)] pages((Gitlab Pages))-. Serves static content .->users(Visitors) ``` --- #### Architecture (CERN customization) ```mermaid flowchart TB user[Site Owner]-- Creates resource on webeos.cern.ch -->okd[webeos.cern.ch] user[Site Owner]-- Pushes pages deployment plus creates a custom Pages domain -->gitlab{Gitlab} gitlab{Gitlab}-- Pushes static content -->s3[(Object Storage)] visitor[Visitor]-. Visits e.g. how-to.docs.cern.ch .->haproxy[Auth Proxy] operator[Custom K8S operator]-. Dynamically generates httpd config for each site .->haproxy[Auth Proxy] haproxy[Auth Proxy]-- Authenticates requests if necessary before proxying it to Gitlab Pages -->pages((Gitlab Pages)) pages((Gitlab Pages))-. Reads configuration from API .->gitlab{Gitlab} pages((Gitlab Pages))-. Stores and reads static content .->s3[(Object Storage)] ``` --- #### Alternative solution for highly-customized pages In some cases, migration to the new infrastructure can turn out to be problematic, e.g.: * if custom `nginx` configuration can't be easily converted to the [_redirects rules](https://docs.gitlab.com/ee/user/project/pages/redirects.html) * or if build assets of the site exceed `Gitlab Pages` limits In those cases, we recommend that users use our custom `Helm` chart that should be soon available to our users. --- #### Some stats As of today (29.11.2021) there are **193** sites hosted on the new infrastructure whereas there are still **126** sites left to be migrated. --- #### More info You can find more information on how to provision or migrate your site in [our documentation](https://how-to.docs.cern.ch). --- #### Demo
{"title":"New infrastructure for documentation sites (based on Gitlab Pages)","type":"slide","slideOptions":{"transition":"fade","theme":"cern6"}}