A decentralized personal data server inspired by the Solid Project
npm install life-server

> A decentralized personal data server inspired by Solid
- Background
- Audience
- Roadmap
- Differences from Solid Server
- Install
- Usage
- Security
- Contribute
- License
Important: For upgrade notes and change history, see
CHANGELOG.md.
Life Server is personal data server written in Node.js, originally
based on MIT's Solid Server.
This server is intended for the following audiences:
1. (primarily) Myself. I'm using this as an experimental platform for incubating
and implementing various Solid-related
and Solid-adjacent specifications and standards.
1. (hopefully) Other developers of user centric offline-first decentralized
applications.
1. (to a much smaller extent) End-users interested in running their own file
sharing server (a minimal Dropbox/Google Drive sort of setup). This server
is not really ready for mainstream (or even early adopter) usage.
1. (almost not at all) For system administrators / potential service providers
interested in running their own multi-user data server.
To put it another way, due to a shortage of engineering resources, the
priorities will be: Developer QoL (Quality of Life) over User QoL over DevOps QoL.
Updated: June 2020.
This is an experimental server focusing on interop exploration and rapid feature
iteration. "Move fast and break things (and then fix them just as quickly)", to use a tired cliché.
#### Roadmap Phase One
This phase focuses on general cleanup and refactoring from the source node-solid-server v4 baseline.
* [x] Remove external dependency on Mashlib and the Data Browser. (The various
built-in apps (account homepage, data viewing and file management, sharing
and permission management, etc) will be performed on the server side.)
* [x] Simplify architecture, remove a number of non-core components (globbing,
realtime updates via WebSockets, WebID-TLS local authentication, CORS proxy
and authentication proxy, storage quotas, external WebIDs).
* [x] Refactor the LDP interface to more closely match the proposed Solid
architecture,
and to support modular/pluggable storage backends
beyond the existing File System based one (such as an in-memory store, graph
stores and others).
* [x] Bring some external authn-related dependencies (such as the
oidc-auth-manager and the
solid-multi-rp-client)
libs into this repository (to make for a faster release and refactoring
process).
* [x] Replace logging layer (currently a mix of console and debug) with a
dedicated logger like Bunyan or Pino.
* [x] Shorten the WebID Profile URL template for new accounts from
/profile/card#me to /web#id
* [x] Simplify the new account templating system (do not create template and
view copies for customizability)
Bonus/If-time:
* [x] Update node-mailer package to latest version
* [x] Update inquirer and commander packages to latest version
* [x] Make all tests pass on Windows 10
#### Roadmap Phase Two
This phase focuses on exploring some advanced features that may make it into
Solid spec proposals, as well as integration with external Solid-adjacent
projects and specs.
[x] Fix/update Dockerfile (to enable *Life Server to be hosted on
PermanentCloud**)
* [ ] DID Integration
* [x] Generate a did:web DID
and corresponding keys for the Server itself, during installation.
* [x] Generate a did:web DID
and corresponding keys for each user on account registration.
* [ ] (in progress) Implement DIDAuth for wallet, hook it up to Login page.
* [ ] Add did:key
support
* [ ] Add Veres One DIDs support
* [ ] Interop with Verifiable Credentials
* [x] Implement
Credential Handler API Wallet
registration when user creates an account.
* [ ] Implement an in-Memory based LDP backend, to go alongside the FS backend.
* [ ] Integrate or implement Static OIDC Client Registration functionality,
to make interfacing with server-side Solid apps easier.
* [ ] Investigate level of effort required to switch from the current oidc-op
OpenID Connect Provider library to a more widely supported one, such as
Filip's node-oidc-provider
lib.
* [ ] Implement a server-side metadata mechanism, to support being able to
record who created a resource
* [ ] _(in progress)_ Experimental integration with
CouchDB
(for synchronizing of graphs and documents to mobile and offline-first
clients).
* [ ] Explore using an Encrypted Data Vault
as a storage backend. This would require some basic Key Management capability,
possible based on the Web KMS spec.
* [ ] Interop with the Fediverse by implementing ActivityPub
protocol.
Since node-solid-server (NSS) is
being deprecated in favor of inrupt/pod-server,
this repo intends to be another compatible implementation (the more the merrier!).
Does not support:
* Using an external WebID on signup
* acl:origin checking or Trusted Apps (uses solid-permissions
instead of acl-check.js for access control)
* Password strength checking on account signup.
* Enforcement of storage space quotas
* WebID-TLS local authentication
* WebSockets
* Globbing
See Solid and Life Server Value Proposition for Developers
doc.
* Linux, Mac OS X, or Windows 10
* Node 12+
To run the Life Server server, you will first need to install
Node.js. (The developers recommend using nvm
to install Node.)
``bash`
git clone https://github.com/interop-alliance/life-server.git
cd life-server
npm install
To run the account creation on unit tests, life-server's test suitenic.localhost
uses the following localhost domains: , tim.localhost, andnicola.localhost. You will need to create host file entries for these, in
order for the tests to pass.
Edit your /etc/hosts file, and append:
``Used for unit testing
127.0.0.1 nic.localhost
127.0.0.1 tim.localhost
127.0.0.1 nicola.localhost
Local/Development: life-server includes a default localhost self-signedconfig/
TLS certificate in the folder. Advanced users may want to create
their own certificates for local testing.
Production: Installing life-server in a production environment will
require a valid TLS certificate (self-signed certs will not work). In addition,
if you're running the server in Multi User mode, you will need a
Wildcard Certificate.
The easiest way to customize life-server is by running the init wizard.config.dev.js
This will create a in your current folder:
``
./bin/server init
To run your server:
``
./bin/server start
After startup, the server is available at the configured server URL (by default,
https://localhost:7070).
You can run life-server from our prebuilt docker image with the following command:
Run latest build from master branch
``
docker run -p 7070:7070 interopalliance/life-server:master
Run a tagged release
``
docker run -p 7070:7070 interopalliance/life-server:{gitTag}e.g. docker run -p 7070:7070 interopalliance/life-server:v6.0.2
You can then access the application at https://localhost:7070.
If you want to provide a custom config.js, mount it as a volume:
``
docker run -p 7070:7070 -v $(pwd)/config.json:/usr/src/app/config.dev.js
Clone the repository, then:
```
docker build -t life-server .
docker run -p 7070:7070 life-server
TBD
Note: This is an experimental research server, not for production use.
Life Server is only possible because of a large community of
Solid contributors.
A heartfelt thank you to everyone for all of your efforts!