Set up a node
Complete step-by-step guide to spin up your own LOOKLOCK node: a mailbox that stores end-to-end encrypted messages and files. Not even you, as the operator, can read anything.
What a node is
An encrypted mailbox, nothing more
A node is a mailbox that stores end-to-end ENCRYPTED messages and files, separated per user. The node operator CANNOT read anything: it only holds sealed blobs. It is a single Python file (llnode.py), with no external dependencies, with its own SQLite database (node.sqlite). Setting it up takes minutes.
Requirements
The bare minimum
Linux VPS with a public IP.
Minimum 1 vCPU, 1 GB of RAM and 20 GB of disk.
Python 3.8 or higher (usually preinstalled on most Linux distributions).
Port 8770 reachable from the Internet.
Detailed steps
a) Get a Linux VPS
Rent a Linux virtual server (for example Ubuntu Server or Debian) with a public IP from any provider. Any modest plan is more than enough.
b) Place the node file
Copy the node file to the path /opt/llnode/llnode.py on the server. It is a single Python file, with no dependencies to install.
c) Run it once by hand
Run the node manually the first time:
python3 /opt/llnode/llnode.py 8770 /opt/llnode/data
This command creates the data folder, generates the node.sqlite file and prints an adminSecret. Store that secret in a safe place: it gives you administrative access to the node.
d) Create a systemd service
So the node starts on its own and restarts if it fails, create a systemd service. For security, do NOT run it as root: first create an unprivileged user and give it ownership of the node folder:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin llnode
sudo chown -R llnode:llnode /opt/llnode
Then define the service with that user:
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/llnode/llnode.py 8770 /opt/llnode/data
Restart=always
User=llnode
Group=llnode
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/opt/llnode/data
[Install]
WantedBy=multi-user.target
Then enable and start it with: systemctl enable --now llnode
e) Open the firewall
Allow incoming traffic to the node port:
ufw allow 8770/tcp
f) Check the node health
Verify the node responds:
curl http://TU_IP:8770/health
It should return something like: {"ok":true,"version":"3.0.0",...}. If you see it, the node is alive.
g) Production: HTTPS in front
For real use, assign a domain and put a reverse proxy with HTTPS in front of the node (for example caddy or nginx). This way traffic between the app and the node travels TLS-encrypted on top of the end-to-end encryption of the content.
h) Register the node in the network
Finally, join your node to the network: send its URL to LOOKLOCK or configure it in the app. From then on users will be able to choose your node as a mailbox.
How it works inside
Directory, deposit and pickup
The central server acts as a DIRECTORY: it stores which node hosts each user and a public depositToken. Other users deposit encrypted messages in the recipient mailbox using that public token. The mailbox owner picks up their messages with their secret ownerToken, which only lives inside their app and never leaves it. Default quotas: 8 GB per user and files up to 5 MB.
Privacy
The node only stores end-to-end encrypted blobs. Neither the operator nor anyone else can read their content: without the recipient private key, which never leaves their device, the data is unreadable.