Server Applications - cockpit-project/cockpit GitHub Wiki
This is a whiteboard of sorts, where I scribble things while I talk to myself.
Demo:
Previous versions:
Server Apps aka Server Roles
Users want to add stuff to their servers so that they can do their real job, such as serving web pages, running data bases, etc. We call this stuff "Server Applications".
Users also want to add stuff to extend the functionality of the operating system and its UI, such as lvm2, network teams, container runtimes, selinux troubleshooting, etc. We call this other stuff "Operating System Extenstions".
This here is about Server Applications.
(Cockpit should also be able to manage Operating System Extensions, of course, and it isn't any good at it right now.)
We model "Server Applications" after other kinds of applications that people are familiar with: You discover them in some sort of AppStore, you install them without any dialog wizards, and after that you can use them.
Unlike desktop applications, you don't launch server applications. They are always there, just like "Storage" and "Journal" are always there.
Some applications have their UI entirely inside Cockpit, and installing them will make them appear in the Cockpit navigation menus.
Some applications have their setup configuration and basic monitoring in Cockpit, but the main UI is reached via a link.
Others are one or more systemd units without any dedicated Cockpit UI, and Cockpit will create a suitable UI for them.
User stories
Robert Paulson is a developer at his job, but ends up doing a lot of the sysadmin tasks, because nobody else does. They have a couple of different servers, filling various tasks, such as build servers, shared file-server, internal issue tracker etc. They've come to the point when setting up accounts on each and every server for a new employee is getting painful, in addition to that, passwords easily gets out of sync etc, so he wishes to centralize the account handling with a domain server.
Phillip J Fry is a junior admin at his workplace. He's been asked to decomission their Samba server, and install Nextcloud instead, since they are to that as their file sharing solution instead. He's not too good at all the CLI-tools, so if there is a graphical way to install/uninstall the software, that would make things a lot easier for him.
Sarah Manning is a part-time backend-developer, part-time sysadmin. She's very worried about security vulnabilities hitting their external services. She's mainly worried about their web server. She wants to know if there are any security vulnearbilities, and if that's the case, update is as soon as possible.
Workflows
Robert installs the OS on the new server and once that's done, he logs in to it via Cockpit. He tries to search for "Domain", finds FreeIPA Domain Controller, and installs it. He then does the initial setup tasks needed and starts FreeIPA. He then logs in to the FreeIPA admin UI to set up all the users and permissions.
Phillip logs in to the server with Cockpit. He searches for "Nextcloud" and installs that. He starts it and goes through the inital setup, hooking it up to their LDAP-server etc. He then searches for "Samba" and finds that in the list of installed applications. He stops the service and uninstalls it.
Sarah logs in to Cockpit. She goes to the Applications page. She sees that there is critical updates avaliable for Apache. She installs them right away and restarts the service.
Previous Art
Wireframes
Application Manager
Applications are managed in a new "Applications" tool. It lists the installed applications, and has a way to discover and install more.
The details for one application can be shown on a full page. This includes icon, description, and screenshots. The user can install and remove the application on that page.
For a installed application, the description and screenshots is replaced with a minimal UI tailored to that application. It might be a link to the real UI inside Cockpit, or a list of services with Start/Stop buttons and their journal entries. Or a terminal for console applications.
Application Store
Applications will come as OS packages or various kinds of container images. So we use the existing sources for these things to also retrieve Server Application meta data and to download the actual application.
OS packages
We copy what GNOME Software does and maybe extend it.
Container images
We check what "System Containers" are doing and maybe extend it. Maybe push them into the appstream. After downloading the container image, there will be a systemd service for it.
Other kind of containers, such as from Docker or Atomic App, are also worth investigating.
Concrete Applications
These applications have a Cockpit-specific interface and show up in the navigation. See unified sidebar navigation / application support for more details.
FreeIPA - Domain Controller
There is a dedicated FreeIPA UI in Cockpit that handles setup and monitoring, and shows a link to the real FreeIPA web UI.
At least initially, this application will use OS packages and be developed in the Cockpit source tree.
PostgreSQL - Database
TBD
NFS - File Sharing
TBD
Apache - Web Server
TBD
References
Older "Roles" page: https://github.com/cockpit-project/cockpit/wiki/Roles
Older Mockups: https://github.com/cockpit-project/cockpit-design/tree/master/roles
Appstream: https://www.freedesktop.org/wiki/Distributions/AppStream/
System Containers: http://www.projectatomic.io/blog/2016/09/intro-to-system-containers/