Usage
The premiere application of baselayer
is
SkyPortal. Several pieces of functionality
have been implemented there, but have not been backported to
baselayer
yet. Please refer to the SkyPortal documentation, and if
you see a feature you’d like to use, file an issue so we can bring it
in.
Permissions
Access to resources in Skyportal is controlled in two ways:
Roles are sets of site-wide permissions (ACLs) that allow a user to perform certain actions: e.g, create a new user, upload spectra, post comments, etc.
Groups are sets of sources that are accessible to members of that group
Members can also be made an admin of the group, which gives them group-specific permissions to add new users, etc.
The same source source can belong to multiple groups
Microservices
Baselayer uses stand-alone micro-services whenever possible. These services are monitored by supervisord, and by default include nginx, the web app, a cron-job handler, the websocket server, etc.
Services are configured in the config.yaml
file (defaults in
config.yaml.defaults
), and are discovered by path:
services:
paths:
- ./baselayer/services
- ./services
enabled:
disabled:
For example, the cron
microservice lives in
./baselayer/services/cron
. In that directory, there is a
supervisor.conf
file and any other files that implement the
microservice (in this case, cron.py
).
A microservice is loaded by injecting the supervisor.conf
into the
supervisor.conf
file used by the entire system.
By default, all discovered microservices are loaded, but this can be
customized through the services.enabled
and services.disabled
configuration keys. services.disabled
can be set to '*'
to disable
all services. E.g., to only load the cron
service, you would do:
services:
paths:
- ./baselayer/services
- ./services
enabled:
- cron
disabled: '*'
Sometimes, the supervisor configuration needs information from the
configuration file, therefore supervisor.conf
can instead be
provided as supervisor.conf.template
, which will be compiled before
launching. See, e.g., services/dask
.
Web Application
Baselayer comes with a microservice capable of bundling a web application. A great example of this is given in the template application. When building your own application on top of baselayer, you’ll need to add your own static
directory at the root of your project, as well as a rspack.config.js
file to bundle your application. The rspack.config.js
from the template application is a good starting point, and will be sufficient for most use cases. Instead of using the very popular webpack, we use rspack as a 1:1 replacement. It covers all the features needed by baselayer, but offers much faster build times in development and production modes. We’ve noticed a x2 speedup on average when building a complex & heavy web app such as SkyPortal, and at least a x5 speedup when re-building the app in watch mode, which we use to update the web app in real-time when developing.