# \[Tutorial\] Run your own satellite (part 17) - Placement

**URL:** <https://forum.storj.io/t/tutorial-run-your-own-satellite-part-17-placement/32108>\
**Category:** Developer Discussions\
**Tags:** satellite-operator, satellites\
**Created:** [July 30, 2026, 2:52pm UTC](https://forum.storj.io/t/tutorial-run-your-own-satellite-part-17-placement/32108 "2026-07-30T14:52:45Z")\
**Posts on this page:** 1\
**Showing post:** 13

<div class="post-metadata">

**Author:** ![elek](https://storj.bcdn.literatehosting.com/user_avatar/forum.storj.io/elek/32/9189_2.png) [@elek](https://forum.storj.io/u/elek)\
**Post date:** [September 30, 2026, 3:39pm UTC](https://forum.storj.io/t/tutorial-run-your-own-satellite-part-17-placement/32108/13 "2026-09-30T15:39:36Z")

</div>

I would phrase it in this way:

attributes and filters are two different level of abstractions.

- filters (and upload-filters) are expression to apply to nodes.
- attributes can be part of those expressions (with other elements). Attribute is just a node → string function. We also have node\_values (which is node → number function)

But attributes (and values) can be also used in other expressions (invariant, selector, …)

I strongly recommend to test placements locally, as it’s easy to shoot yourself on your own foot.

Examples from my shell history:

```auto
stbb placement nodes --placement=3 --satellite spiridon --placement-config=.../placement.yaml --selector last_ip

stbb placement select-pool --placement=3 --selector 'last_ip' --k 10000 --satellite spiridon --placement-config=.../placement.yaml

```

`--selector` is just the grouping for the output.

- The first command prints out the node pool.
- The second one simulates nodes selection (10000 times)

I test every single placement change first with these simulations.

stbb = [GitHub - elek/stbb · GitHub](http://github.com/elek/stbb)

---

_[View the full topic](https://forum.storj.io/t/tutorial-run-your-own-satellite-part-17-placement/32108)._
