Skip to content

Commit b5560d1

Browse files
Merge pull request #7 from ivylikethevine/feature/embedded-docs
added embedded view of docker compose files as well as more READMEs
2 parents 954716f + b5a5a85 commit b5560d1

Some content is hidden

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

74 files changed

+601
-652
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@ stacks/common.yaml
99

1010
# To prevent VPN configurations being committed
1111
*.ovpn
12+
wg*.conf
1213

1314
# Section for repositories cloned into stacks/ directory
1415
stacks/obico-server/
1516

1617
# Prefixes for stacks not tracked by git
1718
stacks/p-*
1819
stacks/dev-*
20+
21+
**/ollama*/local/*

README.md

Lines changed: 74 additions & 189 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,205 +25,48 @@ 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-
Requires: git, docker, docker compose
42-
43-
Tested on: Linux Mint, Ubuntu, and Debian
44-
45-
```bash
46-
# Grab saffron (either http or ssh)
47-
git clone https://github.com/ivylikethevine/saffron.git # http, works with no SSH key
48-
git clone [email protected]:ivylikethevine/saffron.git # ssh
49-
cd saffron/resources
50-
51-
# Make directories with correct permssions, create common.yaml, & start dockge
52-
./install-saffron.sh
53-
```
54-
55-
##### Easy installation of git & docker
56-
57-
```bash
58-
sudo apt install -y git # required to install saffron
59-
sudo apt install -y curl # required to install docker via script
60-
sudo apt install -y avahi-daemon # optional, but highly recommended for easy configuration
61-
62-
# Install docker from the easy install script
63-
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh ./get-docker.sh
64-
65-
# Allow docker to run without sudo
66-
sudo usermod -aG docker $USER && newgrp docker
67-
# And verify
68-
docker run hello-world
69-
```
70-
71-
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.
72-
73-
##### To Update
74-
75-
```bash
76-
docker stop $(docker ps -a -q) # Important to stop before updates! (remove the $ if using fish shell)
77-
cd /home/$USER/saffron
78-
git pull
79-
docker compose up -d dockge # Then visit dockge to start/stop containers
80-
```
81-
82-
#### To Remove
83-
84-
```bash
85-
cd /home/$USER/saffron/resources
86-
./remove-saffron.sh
87-
```
88-
89-
### Important Paths
90-
91-
1. `/containers/` - stores individual generated configs, db files, etc.
92-
- 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)
93-
2. `/home/$USER/saffron/stacks` - all stacks & services' compose files
94-
3. `$DATA_DIR` - where bulk files are stored (configured during setup) See [common.yaml](#common-yaml) for more infromation.
95-
96-
## v0.35 List of Stacks & Services (35+ Apps, 40+ Containers)
97-
98-
\*\* Names are lowercased per dockge stack naming requirements
99-
100-
- &#128679; [avahi](stacks/avahi/README.md) - Allows docker containers to access mdns on LAN.
101-
102-
- &#x2705; [crafty](stacks/crafty/README.md) - Easily deploy/manage minecraft servers.
103-
104-
- &#x2705; [dokemon](stacks/dokemon/README.md) - Web UI to manage docker containers/view logs/etc.
105-
106-
- &#x2705; [dockge](https://github.com/louislam/dockge) - Web UI to manage docker compose files (integral to `saffron`).
107-
108-
- <details>
109-
<h3>WebUI Dashboard</h3>
110-
<img src="resources/screenshots/dockge.webp" alt="dockge ui screenshot"/>
111-
112-
<img alt="x64 Version" src="https://img.shields.io/docker/v/louislam/dockge/latest?arch=amd64&label=x64">
113-
<img alt="Arm64 Version" src="https://img.shields.io/docker/v/louislam/dockge/latest?arch=arm64&label=arm64">
114-
</details>
115-
116-
- &#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).
117-
118-
- &#x2705; [dozzle](stacks/dozzle/README.md) - Web UI to live docker container logs.
119-
120-
- &#x2705; [duplicati](stacks/duplicati/README.md) - Automated backup to AWS/Backblaze/etc.
121-
122-
- &#x2705; [esphome](stacks/esphome/README.md) - Easily create & mange esp32-based IoT devices, such as temp. sensors.
123-
124-
- &#x2705; [handbrake](stacks/handbrake/README.md) - Web UI for transcoding video/audio files.
125-
126-
- &#x2705; [heimdall](stacks/heimdall/README.md) - Easy to use home page.
127-
128-
- &#x2705; [homeassistant](stacks/homeassistant/README.md) - Smart home automation.
129-
130-
- &#x2705; [it-tools](stacks/it-tools/README.md) - Helpful tool for various tasks (generating UUIDs, hashes, etc.).
131-
132-
- &#x2705; [mariadb](stacks/mariadb/README.md) - Basic database (mostly used as template for adding to services that require a DB).
133-
134-
- &#128994; [media-clients](stacks/media-clients/README.md) - Various media streaming services.
135-
136-
- &#x2705; jellyfin - TV/movie streaming.
137-
138-
- &#x2705; jellyseerr - TV/movie requests.
139-
140-
- &#x2705; kavita - Ebook reader.
52+
- homeassistant
53+
- ustreamer
54+
- octoprint
55+
- esphome
14156

142-
- &#x2705; navidrome - Music streaming service.
57+
AND MORE
14358

144-
- &#x2705; audiobookshelf - Audiobook streaming.
59+
All while being:
14560

146-
- &#x2705; [netboot](stacks/netboot/README.md) - PXE boot system.
147-
148-
- &#x2705; [netdata](stacks/netdata/README.md) - Hardware usage/monitoring (incl. containers).
149-
150-
- &#x2705; [octoprint](stacks/octoprint/README.md) - 3D printer automation/monitoring
151-
152-
- &#x2705; [plex](stacks/plex/README.md) - Fully featured media player/environment with many smart tv integrations.
153-
154-
- &#128994; [servarr](stacks/servarr/README.md) - Media library systems.
155-
156-
- &#x2705; sonarr - TV library manager.
157-
158-
- &#x2705; radarr - Movie library manager.
159-
160-
- &#x2705; lidarr - Music library manager.
161-
162-
- &#x2705; readarr - Ebook library manager.
163-
164-
- &#x2705; bazarr - Subtitle management/requests for sonarr/radarr.
165-
166-
- &#x2705; [speedtest-tracker](stacks/speedtest-tracker/README.md) - Internet speed monitoring.
167-
168-
- &#128679; [tdarr](stacks/tdarr/README.md) - Additional Web UI for transcoding video/audio files, with ability to use distributed compute nodes.
169-
170-
- &#x2705; [thelounge](stacks/thelounge/README.md) - IRC client.
171-
172-
- &#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>.
173-
174-
- &#x2705; qbittorrentvpn - Torrent client that runs only on VPN connection.
175-
176-
- &#x2705; prowlarr - Search aggregator.
177-
178-
- &#x2705; flaresolverr - Search proxy (required for some search engines & reduces error rates in general).
179-
180-
- &#128679; [traefik](stacks/traefik/README.md) - Reverse proxy with easy docker integration.
181-
182-
- &#x2705; [uptime-kuma](stacks/uptime-kuma/README.md) - Nice health checking tool with simple UI (same dev as Dockge!).
183-
184-
- &#x2705; [ustreamer](stacks/ustreamer/README.md) - Easily deployable IP camera.
185-
186-
- &#x2705; [utils](stacks/utils/README.md) - Simple dockerfile-based compose with basic utils for debugging.
187-
188-
- &#x2705; [vscode-server](stacks/vscode-server/README.md) - VSCode running with a Web UI (for editing saffron config files, etc.).
189-
190-
- &#x2705; [watchtower](stacks/watchtower/README.md) - Automatically update & restart docker containers.
191-
192-
- &#x2705; [windows](stacks/windows/README.md) - Automatic install/configuration with web VNC & native RDP for Windows XP -> Windows 11
193-
194-
### Services under consideration
195-
196-
- [Adguard](https://adguard.com/en/welcome.html) - for whole home ad blocking.
197-
- [Ansible Semaphore](https://www.semui.co/) - for easier host updating/management.
198-
- Mail Server - for notifications.
199-
- [Cloudflare](https://developers.cloudflare.com/cloudflare-one/) - for access outside of home network.
200-
- [Nextcloud](https://nextcloud.com/) - for general homelab "cloud".
201-
202-
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).
203-
204-
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.
205-
206-
#### Compatible with
207-
208-
- [obico](https://www.obico.io/docs/server-guides/install/) - 3D print failure detection notification/stopping
209-
210-
- To install:
211-
`cd /home/$USER/saffron/stacks && git clone -b release https://github.com/TheSpaghettiDetective/obico-server.git && cd obico-server && docker compose up -d`
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.
21264

213-
- 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.
65+
<!-- [filename](.gitignore ':include :type=code') -->
21466

21567
### Configuration
21668

217-
#### `common.yaml` (new in v0.25) <a id="common-yaml"></a>
69+
#### `common.yaml` <a id="common-yaml"></a>
21870

21971
By using a set of base "services"\*\* inside of `saffron/stacks/common.yaml`, we can limit the length of each docker compose file & allow for easy re-use of shared docker configurations, mainly:
22072

@@ -226,6 +78,8 @@ On install, saffron copies it's local `stacks/common.yaml.public` file to `stack
22678

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

81+
[filename](stacks/common.yaml.public ":include :type=code")
82+
22983
#### Env Files
23084

23185
This project has 2 types of `.env` files:
@@ -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.

dockge.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
https://github.com/louislam/dockge
2+
3+
[filename](compose.yaml ':include :type=code')
4+
5+
<h3>WebUI Dashboard</h3>
6+
<img src="resources/screenshots/dockge.webp" alt="dockge ui screenshot"/>
7+
8+
<img alt="x64 Version" src="https://img.shields.io/docker/v/louislam/dockge/latest?arch=amd64&label=x64">
9+
<img alt="Arm64 Version" src="https://img.shields.io/docker/v/louislam/dockge/latest?arch=arm64&label=arm64">

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>

0 commit comments

Comments
 (0)