2017-08-28 15:37:57 +00:00
# Ansible NAS
2018-12-26 11:52:46 +00:00
2018-12-09 23:58:58 +00:00
[![Build Status ](https://img.shields.io/travis/com/davestephens/ansible-nas.svg?logo=travis&style=flat-square )](https://travis-ci.com/davestephens/ansible-nas) [![Gitter chat ](https://img.shields.io/gitter/room/ansible-nas/chat.svg?logo=gitter&style=flat-square )](https://gitter.im/Ansible-NAS/Chat) [![license ](https://img.shields.io/github/license/DAVFoundation/api_doc.svg?style=flat-square )](https://github.com/davestephens/ansible-nas/blob/master/LICENSE)
2018-12-01 13:14:51 +00:00
2018-09-23 19:20:10 +00:00
After getting burned by broken FreeNAS updates one too many times, I figured I could do a much better job myself using
2018-11-28 23:28:44 +00:00
just a stock Ubuntu install, some clever Ansible config and a bunch of Docker containers.
2017-08-28 15:31:54 +00:00
2018-04-08 22:29:25 +00:00
## What This Sets Up
2017-08-28 15:31:54 +00:00
2018-11-28 23:28:44 +00:00
* An awesome dashboard to your home server (Heimdall)
2018-09-21 22:42:33 +00:00
* Any number of Samba shares for you to store your stuff
* A BitTorrent client
2019-04-15 15:38:08 +00:00
* Various media management tools - Sonarr, Sickchill, CouchPotato, Radarr
2018-11-11 22:45:09 +00:00
* Media streaming via Plex or Emby
2019-01-03 15:13:34 +00:00
* Music streaming with Airsonic
2018-12-31 00:24:18 +00:00
* An RSS newsfeed reader - Miniflux
2018-11-28 23:28:44 +00:00
* A Dropbox replacement via Nextcloud
2018-09-21 22:42:33 +00:00
* Various ways to see stats about your NAS - Glances, dashboards in Grafana
* A backup tool - allows scheduled backups to Amazon S3, OneDrive, Dropbox etc
2019-04-12 22:31:27 +00:00
* An IRC bouncer and web-based client
2018-11-28 23:28:44 +00:00
* Source control with Gitea
* SSL secured external access to some applications via Traefik
* A Docker host with Portainer for image and container management
2019-01-15 23:24:18 +00:00
* An automatic dynamic DNS updater if you use Cloudflare to host your domain DNS
2018-04-08 22:29:25 +00:00
### Docker Containers Used
2019-01-03 15:13:34 +00:00
* [Airsonic ](https://airsonic.github.io/ ) - catalog and stream music
2019-04-10 13:08:06 +00:00
* [Bitwarden_rs ](https://github.com/dani-garcia/bitwarden_rs ) - Self-Hosting port of password manager
2019-01-15 23:24:18 +00:00
* [Cloudflare DDNS ](https://hub.docker.com/r/joshuaavalon/cloudflare-ddns/ ) - automatically update Cloudflare with your dynamic IP address
2018-12-31 00:24:18 +00:00
* [CouchPotato ](https://couchpota.to/ ) - for downloading and managing movies
* [Duplicati ](https://www.duplicati.com/ ) - for backing up your stuff
* [Emby ](https://emby.media/ ) - Media streaming and management
2019-03-01 20:59:43 +00:00
* [get_iplayer ](https://github.com/get-iplayer/get_iplayer ) - download programmes from BBC iplayer
2018-12-31 00:24:18 +00:00
* [Gitea ](https://gitea.io/en-us/ ) - Self-hosted Github clone
* [Glances ](https://nicolargo.github.io/glances/ ) - for seeing the state of your system via a web browser
* [Grafana ](https://github.com/grafana/grafana ) - Dashboarding tool
* [Guacamole ](https://guacamole.apache.org/ ) - Web based remote desktop gateway, supports VNC, RDP and SSH
* [Heimdall ](https://heimdall.site/ ) - Home server dashboard
* [InfluxDB ](https://github.com/influxdata/influxdb ) - Time series database used for stats collection
2019-03-25 15:15:12 +00:00
* [Jackett ](https://github.com/Jackett/Jackett ) - API Support for your favorite torrent trackers
2019-03-01 23:13:11 +00:00
* [MiniDlna ](https://sourceforge.net/projects/minidlna/ ) - simple media server which is fully compliant with DLNA/UPnP-AV clients
2018-12-31 00:24:18 +00:00
* [Miniflux ](https://miniflux.app/ ) - An RSS news reader
2019-03-01 23:05:33 +00:00
* [MyMediaForAlexa ](https://www.mymediaalexa.com/ ) - Lets you stream your music collection to your alexa device
2018-12-31 00:24:18 +00:00
* [Netdata ](https://my-netdata.io/ ) - An extremely comprehensive system monitoring solution
* [Nextcloud ](https://nextcloud.com/ ) - A self-hosted Dropbox alternative
* [Plex ](https://www.plex.tv/ ) - Plex Media Server
* [Portainer ](https://portainer.io/ ) - for managing Docker and running custom images
* [Radarr ](https://radarr.video/ ) - for organising and downloading movies
2019-04-15 15:38:08 +00:00
* [Sickchill ](https://sickchill.github.io/ ) - for managing TV episodes
2018-12-31 00:24:18 +00:00
* [Sonarr ](https://sonarr.tv/ ) - for downloading and managing TV episodes
* [Tautulli ](http://tautulli.com/ ) - Monitor Your Plex Media Server
* [Telegraf ](https://github.com/influxdata/telegraf ) - Metrics collection agent
2019-04-12 22:31:27 +00:00
* [The Lounge ](https://thelounge.chat ) - Web based always-on IRC client
2019-01-08 02:43:55 +00:00
* [TimeMachine ](https://github.com/mbentley/docker-timemachine ) - Mac backup server
2018-12-31 00:24:18 +00:00
* [Traefik ](https://traefik.io/ ) - Web proxy and SSL certificate manager
* [Transmission ](https://transmissionbt.com/ ) - BitTorrent client (with OpenVPN if you have a supported VPN provider)
* [Watchtower ](https://github.com/v2tec/watchtower ) - Monitor your Docker containers and update them if a new version is available
* [ZNC ](https://wiki.znc.in/ZNC ) - IRC bouncer to stay connected to favourite IRC networks and channels
2018-04-08 22:29:25 +00:00
2018-04-09 12:22:21 +00:00
## What This Could Do
Ansible-NAS can run anything that's in a Docker image, which is why Portainer is included. A NAS configuration is a pretty personal thing based on what you download, what media you view, how many photos you take...so it's difficult to please everyone.
That said, if specific functionality you want isn't included and you think others could benefit, add it and raise a PR!
2017-08-28 15:31:54 +00:00
## What This Doesn't Do
2018-09-23 19:20:10 +00:00
Ansible NAS doesn't set up your disk partitions, primarily because getting it wrong can be incredibly destructive.
That aside, configuring partitions is usually a one-time (or very infrequent) event, so there's not much to be
2018-12-08 22:51:38 +00:00
gained by automating it.
2017-08-28 15:31:54 +00:00
2018-12-26 11:52:46 +00:00
## Quick Start
2018-04-08 22:29:25 +00:00
2018-12-31 00:24:18 +00:00
:skull: Before running anything, check out the playbook and understand what it does. Run it against a VM and make sure you're happy. ** *Do not*** blindly download code from the internet and trust that it's going to work as you expect. :skull:
2018-08-09 21:08:24 +00:00
1. Enable the Ubuntu Universe repository: `sudo add-apt-repository universe`
2. Install Ansible: `sudo apt install ansible`
3. `git clone https://github.com/davestephens/ansible-nas.git && cd ansible-nas`
2018-09-23 19:20:10 +00:00
4. Copy `group_vars/all.yml.dist` to `group_vars/all.yml` .
2018-08-09 21:08:24 +00:00
5. Open up `group_vars/all.yml` and follow the instructions there for configuring your Ansible NAS.
2018-09-23 19:20:10 +00:00
6. If you plan to use Transmission with OpenVPN, also copy `group_vars/vpn_credentials.yml.dist` to
2018-04-08 22:29:25 +00:00
`group_vars/vpn_credentials.yml` and fill in your settings.
2018-12-23 20:34:19 +00:00
7. Copy `inventory.dist` to `inventory` and update it.
2018-09-21 22:42:33 +00:00
8. Install the dependent roles: `ansible-galaxy install -r requirements.yml` (you might need sudo to install Ansible roles)
2018-08-09 21:08:24 +00:00
9. Run the playbook - something like `ansible-playbook -i inventory nas.yml -b -K` should do you nicely.
2018-04-08 22:29:25 +00:00
2018-12-26 11:52:46 +00:00
## Documentation
You can read the docs [here ](https://davestephens.github.io/ansible-nas ). PRs for more documentation always welcome!
2017-08-28 15:31:54 +00:00
## Migrating from FreeNAS
Assuming that your Ubuntu system disk is separate from your storage (it should be!):
2018-12-31 00:24:18 +00:00
1. Ensure you have a working backup of your data.
2. Check that the working backup you think you have actually works.
3. SSH to the server and run `zpool list` to determine available ZFS pools.
4. `zpool import <pool_name>` against each of the pools you want to attach.
5. `chown -R root:root /mnt/<pool_name>` to fix the ownership of the data.
6. Follow the Quick Start instructions above.
2018-04-08 22:29:25 +00:00
2019-04-15 13:01:48 +00:00
## Requirements
2018-12-26 11:52:46 +00:00
2019-04-15 13:01:48 +00:00
* Ansible NAS targets the latest Ubuntu LTS release, which is currently Ubuntu Server 18.04.2 LTS.
* You can run Ansible-NAS on whatever you like, read the docs for more info. I use an HP Microserver.
2017-08-28 15:31:54 +00:00
2018-12-01 13:14:51 +00:00
## Getting Help
Getting help is easy! You can:
2018-04-08 22:29:41 +00:00
2018-12-31 00:24:18 +00:00
* Read the [docs ](https://davestephens.github.io/ansible-nas )
* Raise an [issue ](https://github.com/davestephens/ansible-nas/issues )
* Chat on [Gitter ](https://gitter.im/Ansible-NAS/Chat )
2017-08-28 15:31:54 +00:00
## Contributing
2018-04-08 22:29:25 +00:00
2018-12-08 22:51:38 +00:00
Contributions are welcome, please feel free to raise a PR!
2018-12-31 00:24:18 +00:00
* Restrict pull requests to one piece of functionality or bugfix at a time.
* Test your new functionality or bugfix using the included `tests/test-vagrant.sh` script to spin up a test VM.
* Run `ansible-lint` against the playbook before committing. (There is a VSCode task set up to run the right command for you)
* Please know that your efforts are appreciated, thanks! :+1:
2018-12-08 22:51:38 +00:00
Development of Ansible-NAS is carried out in [Visual Studio Code ](https://code.visualstudio.com/ ) - you'll get some nice
2018-12-09 23:58:58 +00:00
recommended extensions and task setups if you do the same.