There is currently one publicly available Pod server available that you can run yourself: Node Solid Server. Instructions on how to set it up and how to get help are available at its website, and some documentation is also provided below.
Example config for NSS on a root server
We assume Linux (Debian 8) on the host system. This is how it’ s tested. The aim is to get a Solid Pod Server that is public reachable in the Internet using Apache as reverse-proxy.
Connect root-server to net (depends on Hosting Service Provider) (you will need ssh)
- Order virtual server at Provider of your choice
- Assign Fully Qualified Domain Name to the machine
- Setup DNS properly
- Get and deploy https certificate
- ssh into the machine as user root
- Deploy two certificates with letsencrypt/certbot (domain-cert and wildcard-cert). Note that you might need to edit a DNS-text-record depending on the challenge.
- sample commands using certbot-auto
$ wget https://dl.eff.org/certbot-auto
$ mv certbot-auto /usr/local/bin/certbot-auto
$ chown root /usr/local/bin/certbot-auto
$ chmod 0755 /usr/local/bin/certbot-auto
$ cd /usr/local/bin/
$ ./certbot-auto certonly \
--email firstname.lastname@example.org \
--server https://acme-v02.api.letsencrypt.org/directory \
-d example.org -d *.example.org
$ chmod -R 755 /etc/letsencrypt/live/
Configure a reverse proxy
The Solid server will run as a local Web server. You can directly expose the port it binds to, but you may also choose to access it through a reverse proxy. We provide some guidance for the following reverse proxies:
Install Node Solid Server
First, if it is not already done on your machine, install Node.js (version 8 or above), and npm (this guide provides detailed instructions).
Then, run the command
$ npm install -g solid-server. After the init-command you’ ll be prompted a series of questions to configure the server:
$ solid init * ? Path to the folder you want to serve. Default is (./data) /var/www/your.host.example.org/data ? SSL port to run on. Default is (8443) 8443 ? Solid server uri (with protocol, hostname and port) https://your.host.example.org ? Enable WebID authentication Yes ? Serve Solid on URL path / ? Path to the config directory (for example: /etc/solid-server) (./config) /var/www/your.host.example.org/config ? Path to the config file (for example: ./config.json) (./config.json) /var/www/your.host.example.org/config.json ? Path to the server metadata db directory (for users/apps etc) (./.db) /var/www/your.host.example.org/.db ? Path to the SSL private key in PEM format /etc/letsencrypt/live/your.host.example.org/privkey.pem ? Path to the SSL certificate key in PEM format /etc/letsencrypt/live/your.host.example.org/fullchain.pem ? Enable multi-user mode Yes ? Do you want to set up an email service (y/N) N ? A name for your server (not required) your.host.example.org ? A description of your server (not requred) undefined ? A logo (not required) undefined ? Do you want to enforce Terms & Conditions for your service (y/N) N ? Do you want to disable password strength checking (y/N) N ? The support email you provide for your users (not required) undefined config created on /root/config.json
- Finally, make sure to create the paths that you entered if they do not already exist. You would also need to copy the config.json file to where you indicated it should be.
Run NSS at startup
- add user solid:
$ adduser --system --ingroup www-data --no-create-home solid
[Unit] Description=solid - Social Linked Data Documentation=https://solid.inrupt.com/docs/ After=network.target [Service] Type=simple User=solid WorkingDirectory=/var/www/your.host.example.org ExecStart=/usr/bin/solid start Restart=on-failure [Install] WantedBy=multi-user.target
- Create symlink
$ ln -s /lib/systemd/system/solid.service /etc/systemd/system/multi-user.target.wants/
- chown solid config directories:
$ cd /var/www/your.host.example.org/
$ chown solid:www-data config/ data/ .db/
- start the service:
$ systemctl start solid.service