Skip to content

Commit b5a5a85

Browse files
massive doc rewrite and simplification
1 parent bd7cd30 commit b5a5a85

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+546
-678
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ stacks/obico-server/
1717
# Prefixes for stacks not tracked by git
1818
stacks/p-*
1919
stacks/dev-*
20+
21+
**/ollama*/local/*

README.md

Lines changed: 71 additions & 186 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
# Saffron
22

3-
![GitHub repo size](https://img.shields.io/github/repo-size/ivylikethevine/saffron) ![GitHub last commit](https://img.shields.io/github/last-commit/ivylikethevine/saffron) ![GitHub Repo stars](https://img.shields.io/github/stars/ivylikethevine/saffron) ![GitHub forks](https://img.shields.io/github/forks/ivylikethevine/saffron) ![GitHub License](https://img.shields.io/github/license/ivylikethevine/saffron)
3+
[![GitHub repo size](https://img.shields.io/github/repo-size/ivylikethevine/saffron) ![GitHub last commit](https://img.shields.io/github/last-commit/ivylikethevine/saffron) ![GitHub Repo stars](https://img.shields.io/github/stars/ivylikethevine/saffron) ![GitHub License](https://img.shields.io/github/license/ivylikethevine/saffron)](https://github.com/ivylikethevine/saffron)
44

55
## (S)erver (A)s a (F)ile (F)older (R)unning (O)n (N)etwork
66

77
...the second half is a backcronym
88

9+
### What is Saffron?
10+
11+
Saffron is a(n)
12+
1. open sourced
13+
2. homelab deployment
14+
3. annotated notebook
15+
4. self documenting wiki
16+
5. docker compose system
17+
918
**Saffron is GPL-3.0 open sourced [on github](https://github.com/ivylikethevine/saffron)**
1019

1120
### Saffron is a docker compose deployment of a homelab via (almost entirely) static files
@@ -16,197 +25,42 @@ I built saffron because I wanted a way to utilize docker compose on a homelab se
1625

1726
Read this project's README's as a wiki [here](https://ivylikethevine.github.io/saffron), served via [docsify](https://ivylikethevine.github.io/saffron).
1827

19-
#### Features
28+
### What does Saffron replace?
2029

2130
- Media libraries for TV, movies, music, ebooks, & audiobooks. (+ subtitles!)
22-
- Easy migration from any existing docker or docker compose deployment.
31+
- Radarr/Sonarr + Plex/Jellyfin
32+
- Lidarr + Navidrome
33+
- Readarr + Kavita & Audiobookshelf
34+
- Bazarr
35+
- Overseerr/Jellyseer
36+
- Self contained and reactive wiki
37+
- docsify
38+
- vscode-server
39+
- Comprehensive monitoring/administration suite
40+
- dockage
41+
- uptime kuma
42+
- dozzle
43+
- netdata
44+
- speedtest-tracker
2345
- Full torrenting suite with VPN integration.
46+
- qbittorrentvpn
47+
- prowlarr
48+
- flaresolvarr
2449
- Automated backup to cloud storage.
50+
- duplicati
2551
- Smart home automation & integration.
26-
- Network speedtests + hardware monitoring.
27-
- Minecraft server hosting.
28-
- PXE environment for OS booting on other nodes.
29-
- Zero DNS or networking configuration outside of docker.
30-
- Easily configurable volume mounting via [common.yaml](#common-yaml) and [docker extends](https://docs.docker.com/compose/multiple-compose-files/extends/)
31-
32-
##### Features (Under Development)
33-
34-
1. Automatic traefik routing of containers using docker integration.
35-
1. Avahi mdns/nss-mdns discovery.
36-
1. Git submodules/subtrees for additional services.
37-
1. SSL certs
38-
39-
#### To deploy
40-
41-
In depth instructions [here](resources/README.md).
42-
43-
Requires: git, docker, docker compose
44-
45-
Tested on: Linux Mint, Ubuntu, and Debian
46-
47-
```bash
48-
# Grab saffron (either http or ssh)
49-
git clone https://github.com/ivylikethevine/saffron.git # http, works with no SSH key
50-
git clone [email protected]:ivylikethevine/saffron.git # ssh
51-
cd saffron/resources
52-
53-
# Make directories with correct permssions, create common.yaml, & start dockge
54-
./install-saffron.sh
55-
```
56-
57-
##### Easy installation of git & docker
58-
59-
```bash
60-
sudo apt install -y git # required to install saffron
61-
sudo apt install -y curl # required to install docker via script
62-
sudo apt install -y avahi-daemon # optional, but highly recommended for easy configuration
63-
64-
# Install docker from the easy install script
65-
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh ./get-docker.sh
66-
67-
# Allow docker to run without sudo
68-
sudo usermod -aG docker $USER && newgrp docker
69-
# And verify
70-
docker run hello-world
71-
```
72-
73-
Then visit `http://localhost:5001` or `http://<hostname>.local:5001` to start and stop individual stacks via the [Dockge](https://github.com/louislam/dockge) interface. Dockge is a Web UI to manage & control docker containers. As opposed to portainer, the user maintains direct and full control of the [compose](https://docs.docker.com/compose/) [yaml](https://learnxinyminutes.com/docs/yaml/) files.
74-
75-
##### To Update
76-
77-
```bash
78-
docker stop $(docker ps -a -q) # Important to stop before updates! (remove the $ if using fish shell)
79-
cd /home/$USER/saffron
80-
git pull
81-
docker compose up -d dockge # Then visit dockge to start/stop containers
82-
```
83-
84-
#### To Remove
85-
86-
```bash
87-
cd /home/$USER/saffron/resources
88-
./remove-saffron.sh
89-
```
90-
91-
### Important Paths
92-
93-
1. `/containers/` - stores individual generated configs, db files, etc.
94-
- This is not a perfect separation, since some containers will use config for "data" (such as torrent clients using it as a default download location)
95-
2. `/home/$USER/saffron/stacks` - all stacks & services' compose files
96-
3. `$DATA_DIR` - where bulk files are stored (configured during setup) See [common.yaml](#common-yaml) for more infromation.
97-
98-
## v0.35 List of Stacks & Services (35+ Apps, 40+ Containers)
99-
100-
[Stacks](stacks/README.md) rely on a customized [common.yaml.public] for correct permissions, time zones, and data directory mounts.
101-
102-
\*\* Names are lowercased per dockge stack naming requirements
103-
104-
- &#128679; [avahi](stacks/avahi/README.md) - Allows docker containers to access mdns on LAN.
105-
106-
- &#x2705; [crafty](stacks/crafty/README.md) - Easily deploy/manage minecraft servers.
107-
108-
- &#x2705; [dokemon](stacks/dokemon/README.md) - Web UI to manage docker containers/view logs/etc.
109-
110-
- &#x2705; [dockge](dockge.md) - Web UI to manage docker compose files (integral to `saffron`).
111-
112-
- &#x2705; [docsify](stacks/docsify/README.md) - Web UI to view this repo's `README.md`'s as a wiki reflecting local edits. See the [public](https://ivylikethevine.github.io/saffron) instance or visit <http://hostname.local:5001> (if the container is running).
113-
114-
- &#x2705; [dozzle](stacks/dozzle/README.md) - Web UI to live docker container logs.
115-
116-
- &#x2705; [duplicati](stacks/duplicati/README.md) - Automated backup to AWS/Backblaze/etc.
117-
118-
- &#x2705; [esphome](stacks/esphome/README.md) - Easily create & mange esp32-based IoT devices, such as temp. sensors.
119-
120-
- &#x2705; [handbrake](stacks/handbrake/README.md) - Web UI for transcoding video/audio files.
121-
122-
- &#x2705; [heimdall](stacks/heimdall/README.md) - Easy to use home page.
123-
124-
- &#x2705; [homeassistant](stacks/homeassistant/README.md) - Smart home automation.
125-
126-
- &#x2705; [it-tools](stacks/it-tools/README.md) - Helpful tool for various tasks (generating UUIDs, hashes, etc.).
127-
128-
- &#x2705; [mariadb](stacks/mariadb/README.md) - Basic database (mostly used as template for adding to services that require a DB).
129-
130-
- &#128994; [media-clients](stacks/media-clients/README.md) - Various media streaming services.
131-
132-
- &#x2705; jellyfin - TV/movie streaming.
133-
134-
- &#x2705; jellyseerr - TV/movie requests.
135-
136-
- &#x2705; kavita - Ebook reader.
52+
- homeassistant
53+
- ustreamer
54+
- octoprint
55+
- esphome
13756

138-
- &#x2705; navidrome - Music streaming service.
57+
AND MORE
13958

140-
- &#x2705; audiobookshelf - Audiobook streaming.
59+
All while being:
14160

142-
- &#x2705; [netboot](stacks/netboot/README.md) - PXE boot system.
143-
144-
- &#x2705; [netdata](stacks/netdata/README.md) - Hardware usage/monitoring (incl. containers).
145-
146-
- &#x2705; [octoprint](stacks/octoprint/README.md) - 3D printer automation/monitoring
147-
148-
- &#x2705; [plex](stacks/plex/README.md) - Fully featured media player/environment with many smart tv integrations.
149-
150-
- &#128994; [servarr](stacks/servarr/README.md) - Media library systems.
151-
152-
- &#x2705; sonarr - TV library manager.
153-
154-
- &#x2705; radarr - Movie library manager.
155-
156-
- &#x2705; lidarr - Music library manager.
157-
158-
- &#x2705; readarr - Ebook library manager.
159-
160-
- &#x2705; bazarr - Subtitle management/requests for sonarr/radarr.
161-
162-
- &#x2705; [speedtest-tracker](stacks/speedtest-tracker/README.md) - Internet speed monitoring.
163-
164-
- &#128679; [tdarr](stacks/tdarr/README.md) - Additional Web UI for transcoding video/audio files, with ability to use distributed compute nodes.
165-
166-
- &#x2705; [thelounge](stacks/thelounge/README.md) - IRC client.
167-
168-
- &#128994; [torrent](stacks/torrent/README.md) - Full torrenting suite with a preconfigured <a href="https://github.com/ivylikethevine/saffron/blob/main/stacks/torrent/.env.public"><code>.env.public</code></a>.
169-
170-
- &#x2705; qbittorrentvpn - Torrent client that runs only on VPN connection.
171-
172-
- &#x2705; prowlarr - Search aggregator.
173-
174-
- &#x2705; flaresolverr - Search proxy (required for some search engines & reduces error rates in general).
175-
176-
- &#128679; [traefik](stacks/traefik/README.md) - Reverse proxy with easy docker integration.
177-
178-
- &#x2705; [uptime-kuma](stacks/uptime-kuma/README.md) - Nice health checking tool with simple UI (same dev as Dockge!).
179-
180-
- &#x2705; [ustreamer](stacks/ustreamer/README.md) - Easily deployable IP camera.
181-
182-
- &#x2705; [utils](stacks/utils/README.md) - Simple dockerfile-based compose with basic utils for debugging.
183-
184-
- &#x2705; [vscode-server](stacks/vscode-server/README.md) - VSCode running with a Web UI (for editing saffron config files, etc.).
185-
186-
- &#x2705; [watchtower](stacks/watchtower/README.md) - Automatically update & restart docker containers.
187-
188-
- &#x2705; [windows](stacks/windows/README.md) - Automatic install/configuration with web VNC & native RDP for Windows XP -> Windows 11
189-
190-
### Services under consideration
191-
192-
- [Adguard](https://adguard.com/en/welcome.html) - for whole home ad blocking.
193-
- [Ansible Semaphore](https://www.semui.co/) - for easier host updating/management.
194-
- Mail Server - for notifications.
195-
- [Cloudflare](https://developers.cloudflare.com/cloudflare-one/) - for access outside of home network.
196-
- [Nextcloud](https://nextcloud.com/) - for general homelab "cloud".
197-
198-
If a service isn't on here yet, feel free to add it! Most of these are very simple applications of the excellent [linuxserver docker images](https://docs.linuxserver.io/images/). See creating a [saffron-styled compose](#saffron-example) for more detail on the format of `compose.yaml`. There are also the [official docker hub images](https://hub.docker.com/u/library).
199-
200-
I've also made stacks using Lissy93's well maintained [portainer template repo](https://github.com/Lissy93/portainer-templates), although this is slightly different than working from raw compose files.
201-
202-
#### Compatible with
203-
204-
- [obico](https://www.obico.io/docs/server-guides/install/) - 3D print failure detection notification/stopping
205-
206-
- To install:
207-
`cd /home/$USER/saffron/stacks && git clone -b release https://github.com/TheSpaghettiDetective/obico-server.git && cd obico-server && docker compose up -d`
208-
209-
- For other projects that use a docker compose file from locally build Dockerfiles, clone the repo into `/home/$USER/saffron/stacks`, then add `stacks/repoName/` to the `.gitignore` file. An alternative is to use either the `p-` or `dev-` prefix in the stack name to be ignored by git. See [editing .gitignore](https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository#_ignoring) for more information.
61+
- Zero DNS or networking configuration outside of docker.
62+
- Easily configurable volume mounting via [common.yaml](#common-yaml) and [docker extends](https://docs.docker.com/compose/multiple-compose-files/extends/)
63+
- Easy migration from any existing docker or docker compose deployment.
21064

21165
<!-- [filename](.gitignore ':include :type=code') -->
21266

@@ -224,7 +78,7 @@ On install, saffron copies it's local `stacks/common.yaml.public` file to `stack
22478

22579
\*\* : These aren't full services since they have no images defined. As such, they can't run alone.
22680

227-
[filename](stacks/common.yaml.public ':include :type=code')
81+
[filename](stacks/common.yaml.public ":include :type=code")
22882

22983
#### Env Files
23084

@@ -266,7 +120,7 @@ Saffron is designed to be extensible. It is more an amalgamation of my experienc
266120
#### stacks/vscode-server/compose.yaml
267121

268122
```yaml
269-
version: '3.8'
123+
version: "3.8"
270124
services:
271125
vscode-server:
272126
# "vscode-server" is the name of our service.
@@ -289,3 +143,34 @@ services:
289143
# Again, usually easiest to follow /containers/container_name/folder:/folder for consistency & clarity.
290144
networks: {}
291145
```
146+
147+
#### To Install \* Deploy
148+
149+
In depth instructions, including prerequisites [here](resources/README.md).
150+
151+
Requires: git, docker, docker compose
152+
153+
Tested on: Linux Mint, Ubuntu, and Debian
154+
155+
```bash
156+
# Grab saffron (either http or ssh)
157+
git clone https://github.com/ivylikethevine/saffron.git # http, works with no SSH key
158+
git clone [email protected]:ivylikethevine/saffron.git # ssh
159+
cd saffron/resources
160+
161+
# Make directories with correct permssions, create common.yaml, & start dockge
162+
./install-saffron.sh
163+
```
164+
165+
Then visit `http://localhost:5001` or `http://<hostname>.local:5001` to start and stop individual stacks via the [Dockge](https://github.com/louislam/dockge) interface. Dockge is a Web UI to manage & control docker containers. As opposed to portainer, the user maintains direct and full control of the [compose](https://docs.docker.com/compose/) [yaml](https://learnxinyminutes.com/docs/yaml/) files.
166+
167+
If a service isn't on here yet, feel free to add it! Most of these are very simple applications of the excellent [linuxserver docker images](https://docs.linuxserver.io/images/). See creating a [saffron-styled compose](#saffron-example) for more detail on the format of `compose.yaml`. There are also the [official docker hub images](https://hub.docker.com/u/library).
168+
169+
I've also made stacks using Lissy93's well maintained [portainer template repo](https://github.com/Lissy93/portainer-templates), although this is slightly different than working from raw compose files.
170+
171+
### Important Paths
172+
173+
1. `/containers/` - stores individual generated configs, db files, etc.
174+
- This is not a perfect separation, since some containers will use config for "data" (such as torrent clients using it as a default download location)
175+
2. `/home/$USER/saffron/stacks` - all stacks & services' compose files
176+
3. `$DATA_DIR` - where bulk files are stored (configured during setup) See [common.yaml](#common-yaml) for more infromation.

_navbar.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
* [Resources](resources/README.md)
2+
* [Stacks](stacks/README.md)

_sidebar.md

Whitespace-only changes.

index.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@
2121
name: 'Saffron Wiki',
2222
repo: 'https://github.com/ivylikethevine/saffron',
2323
auto2top: true,
24+
loadSidebar: true,
25+
loadNavbar: true,
26+
mergeNavbar: true,
2427
timeUpdater: {
2528
text: '<span style="text-align:right;display:grid;">last updated at {docsify-updated}</span>',
2629
formatUpdated: '{HH}:{mm} on {DD}-{MM}-{YYYY}',
2730
},
2831
};
2932
</script>
33+
3034
<!-- Docsify v4 -->
3135
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
3236

@@ -62,5 +66,15 @@
6266
/>
6367
<script src="//cdn.jsdelivr.net/npm/marked@4"></script>
6468
<script src="//cdn.jsdelivr.net/npm/docsify-katex@latest/dist/docsify-katex.js"></script>
69+
70+
<!-- Custom Page Titles -->
71+
<script src="//cdn.jsdelivr.net/npm/@sujaykumarh/[email protected]/dist/plugin.min.js"></script>
72+
73+
<!-- Prism Language Highlights -->
74+
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script>
75+
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-docker.min.js"></script>
76+
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-git.min.js"></script>
77+
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-markdown.min.js"></script>
78+
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-yaml.min.js"></script>
6579
</body>
6680
</html>

resources/README.md

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,40 @@
1-
[filename](install-saffron.sh ':include :type=code')
1+
# Installation of Saffron (+ git, docker, and avahi)
22

3-
[filename](remove-saffron.sh ':include :type=code')
3+
## Easy installation of git & docker
4+
5+
```bash
6+
sudo apt install -y git # required to install saffron
7+
sudo apt install -y curl # required to install docker via script
8+
sudo apt install -y avahi-daemon # optional, but highly recommended for easy configuration
9+
10+
# Install docker from the easy install script
11+
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh ./get-docker.sh
12+
13+
# Allow docker to run without sudo
14+
sudo usermod -aG docker $USER && newgrp docker
15+
# And verify
16+
docker run hello-world
17+
```
18+
19+
### To Update
420

21+
```bash
22+
docker stop $(docker ps -a -q) # Important to stop before updates! (remove the $ if using fish shell)
23+
cd /home/$USER/saffron
24+
git pull
25+
docker compose up -d dockge # Then visit dockge to start/stop containers
26+
```
527

6-
[filename](settings.json ':include :type=code')
28+
#### To Remove
729

8-
<!-- [filename](pre-commit ':include :type=code') -->
30+
```bash
31+
cd /home/$USER/saffron/resources
32+
./remove-saffron.sh
33+
```
34+
35+
#### `install-saffron.sh`
36+
37+
[filename](install-saffron.sh ':include :type=code')
38+
39+
##### `remove-saffron.sh`
40+
[filename](remove-saffron.sh ':include :type=code')

0 commit comments

Comments
 (0)