# Deploy Radicle on a box
## Components
- radicle-node
- radicle-httpd
- rad
- caddy (reverse proxy)
## Run seed node
- install radicle (sh <(curl -sSf https://radicle.xyz/install))
- rad auth (obtain radicle keypair)
- set environment variables `RAD_HOME`, `RAD_PASSPHRASE`
- run `rad node start` (there is systemd unit for it)
## Run additional services (required for web client, etc.)
- run `radicle-httpd`
- install caddy
- update config -> ssl 443 -> 8080
- **we don't support http for remote seed nodes**
**Start following a user**
- `rad follow <nid> [--alias <name>]`
**Stop following a user**
- `rad unfollow <nid>`
- (cloudhead: how to define policy for followed nodes)
**Start seeding a project**
- `rad seed <rid> --scope <all | followed>`
**Stop seeding a project**
- `rad seed <rid> --scope <all | followed> --delete`
**Visit your node**
`https://app.radicle.xyz/nodes/<your radicle node>`
**Update your nodes config**
*Example snippet seed.radicle.xyz*
```json
{
"externalAddresses": [
"seed.radicle.xyz:8776"
],
"policy": "block",
"scope": "followed"
}
```
*Example snippet radicle.garden*
```json
{
"externalAddresses": [
"radicle.garden:8776"
],
"policy": "allow",
"scope": "all"
}
```
policy: block + scope: followed = you have to define every project and every remote (delegates come included).
policy: allow + scope: followed = you get all the projects and need to define the remotes (delegates come included).
policy: block + scope: all = you get only the projects you seed but all the remotes.
policy: allow + scope: all = you get everything example radicle.garden
## Update a seed node
- stop `radicle-node` `radicle-httpd`
- (sh <(curl -sSf https://radicle.xyz/install))
- start `radicle-node` `radicle-httpd`
**the docker way**
- `docker-compose up -d --build`
## References
- [docker-compose](https://app.radicle.xyz/nodes/seed.radicle.xyz/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/docker-compose.yml)
- [awesome-radicle launchers](https://app.radicle.xyz/nodes/seed.rhizoma.dev/rad:z3yQUb9HDAC7TQrUDGkQsXDsYFj9G#launchers)