This document covers every piece of physical/virtual infrastructure behind the
SupplyShore deployment: the Linode server, the OVH domain, DNS, and the admin
tooling installed on the local workstation.
┌─────────────────────────────────────────────────────────────────┐
│ OVH │ Domain: supplyshoreltd.com (registrar)
│ Registrar │ Registered 2026-08-03, expires 2027-08-03
└──────────────────────────────┬──────────────────────────────┘
│ Nameservers switched to Linode
▼
┌─────────────────────────────────────────────────────────────────┐
│ Linode DNS (zone 3497598) │ ns1–ns5.linode.com
│ A records: @ , www , crm , n8n , traefik ──► 139.162.176.234 │
└──────────────────────────────┬──────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ Linode Compute: supplyshore-stack (ID 102403067) │
│ g6-standard-2 · eu-central · Ubuntu 24.04 · 4GB / 2vCPU / 80GB │
│ Docker + Compose running /opt/supplyshore │
└─────────────────────────────────────────────────────────────────┘
| Property | Value |
|---|---|
| ID | 102403067 |
| Label | supplyshore-stack |
| Plan | g6-standard-2 (2 vCPU, 4 GB RAM, 80 GB SSD) |
| Region | eu-central (Frankfurt) |
| Image | Ubuntu 24.04 LTS |
| Public IPv4 | 139.162.176.234 |
| Monthly price | $24.00 |
Access: passwordless SSH as root using the local key
~/.ssh/id_ed25519.pub (ssh root@139.162.176.234).
Note: A first node was briefly created in
gb-lon(ID102403035) then
deleted. Theeu-centralnode is the single authoritative one.
| Item | Value |
|---|---|
| CLI | linode-cli v5.68.0, installed in venv ~/.venvs/linode/ |
| Symlink | ~/bin/linode-cli → venv binary |
| Config | ~/.config/linode-cli (INI format, contains API token) |
| Auth method | API token (see credentials.md) |
Common commands:
source ~/.venvs/linode/bin/activate
# Node info
linode-cli linodes list
linode-cli linodes view 102403067
# DNS records (zone 3497598)
linode-cli domains records-list 3497598 --text
# Add an A record
linode-cli domains records-create 3497598 --type A --name <sub> --target 139.162.176.234 --ttl 300
# Delete an A record (by record id)
linode-cli domains records-delete 3497598 <record_id>
ovhcloud CLI.| Item | Value |
|---|---|
| CLI | ovhcloud v0.12.0 at ~/bin/ovhcloud |
| Python lib | python-ovh 1.2.0 (same venv: ~/.venvs/linode/) |
| Config | ~/.ovh.conf |
| Endpoint | ovh-eu |
| API keys | Application key / secret / consumer key (see credentials.md) |
| Required scope | /domain/* (full DNS + nameserver rights) |
Two key pairs were created during setup:
/domain/zone/* rights — insufficient for nameserver changes./domain/* — used for everything since.Originally the domain used OVH DNS. To use Linode's DNS we switched the
nameservers via the OVH API:
POST /domain/supplyshoreltd.com/nameServers/update
with
{
"nameServers": [
{ "host": "ns1.linode.com" },
{ "host": "ns2.linode.com" },
{ "host": "ns3.linode.com" },
{ "host": "ns4.linode.com" },
{ "host": "ns5.linode.com" }
]
}
The OVH task returned task ID 597285519 and completed with status done.
Propagation was confirmed via public resolvers.
Zone: 3497598 for supplyshoreltd.com.
| Name | Type | Target | Purpose |
|---|---|---|---|
@ (root) |
A | 139.162.176.234 | apex → future landing page |
www |
A | 139.162.176.234 | www alias |
crm |
A | 139.162.176.234 | EspoCRM |
n8n |
A | 139.162.176.234 | n8n automation |
traefik |
A | 139.162.176.234 | Traefik dashboard |
wiki |
A | 139.162.176.234 | Wiki.js knowledge base |
Record IDs (for delete operations): root=45450029, www=45450025,
crm=45450026, n8n=45450027, traefik=45450028, wiki=45458239.
| Name | Type | Reason |
|---|---|---|
erp |
A | Created for the ERPNext trial (2026-08-07), removed after reverting to EspoCRM |
Pattern for adding a new service: add A record here + Traefik router label
indocker-compose.yml. TLS is issued automatically by Let's Encrypt.
Everything below lives on the local machine (/home/admkhalil).
| Tool | Location | Purpose |
|---|---|---|
| SSH key | ~/.ssh/id_ed25519 (+ .pub) |
Passwordless root SSH to the Linode |
linode-cli |
~/.venvs/linode/bin/linode-cli, symlink ~/bin/linode-cli |
Linode + DNS management |
ovhcloud |
~/bin/ovhcloud |
OVH domain/DNS/nameserver API |
python-ovh |
~/.venvs/linode/lib/... |
OVH API via Python |
| Stack source | ~/supplyshore-stack/ |
Authoritative copy of compose + env + docs |
| Deployed stack | root@139.162.176.234:/opt/supplyshore/ |
Runtime copy on the node |
ovh alias |
in ~/.bashrc |
SSH to OVH shared hosting (legacy, unused now) |
scp ~/supplyshore-stack/docker-compose.yml ~/supplyshore-stack/.env \
root@139.162.176.234:/opt/supplyshore/
ssh root@139.162.176.234 "cd /opt/supplyshore && docker compose up -d"
ssh.cluster131.hosting.ovh.net) was abandoned because shared