No description
Find a file
2018-12-23 16:50:27 +00:00
.github Update issue template 2018-12-03 09:54:04 +00:00
.vscode Admin: Ansible-lint, recommended VSCode extensions, line-ending cleanup 2018-12-08 22:44:51 +00:00
files/guacamole Add Guacamole remote desktop server 💻 2018-11-19 22:58:06 +00:00
group_vars Split prometheus extension for netdata to new branch 2018-12-05 22:17:29 +11:00
tasks Fix ansible-lint 2018-12-23 16:50:20 +00:00
templates Split prometheus extension for netdata to new branch 2018-12-05 22:17:29 +11:00
tests Basic Travis CI tests 2018-12-09 23:46:41 +00:00
.gitignore Update .gitignore 2018-12-23 16:50:27 +00:00
.travis.yml Add ansible-lint to CI 2018-12-10 22:27:35 +00:00
ansible.cfg Initial Ansible NAS commit 2017-08-28 16:31:54 +01:00
inventory Fixed overwrite of inventory file 2018-12-05 22:17:29 +11:00
LICENSE Update LICENSE - 2018! 2018-08-09 23:54:56 +01:00
nas.yml Fix ansible-lint 2018-12-23 16:50:20 +00:00
README.md Merge pull request #29 from C-J1/add-support-for-netdata 2018-12-18 23:51:21 +00:00
requirements.yml Major updates: 2018-04-08 23:29:25 +01:00

Ansible NAS

Build Status Gitter chat license

After getting burned by broken FreeNAS updates one too many times, I figured I could do a much better job myself using just a stock Ubuntu install, some clever Ansible config and a bunch of Docker containers.

What This Sets Up

  • An awesome dashboard to your home server (Heimdall)
  • Any number of Samba shares for you to store your stuff
  • A BitTorrent client
  • Various media management tools - Sonarr, Sickrage, CouchPotato, Radarr
  • Media streaming via Plex or Emby
  • A Dropbox replacement via Nextcloud
  • Various ways to see stats about your NAS - Glances, dashboards in Grafana
  • A backup tool - allows scheduled backups to Amazon S3, OneDrive, Dropbox etc
  • An IRC bouncer
  • Source control with Gitea
  • SSL secured external access to some applications via Traefik
  • A Docker host with Portainer for image and container management

Docker Containers Used

  • CouchPotato - for downloading and managing movies
  • Duplicati - for backing up your stuff
  • Emby - Media streaming and management
  • Gitea - Self-hosted Github clone
  • Glances - for seeing the state of your system via a web browser
  • Grafana - Dashboarding tool
  • Guacamole - Web based remote desktop gateway, supports VNC, RDP and SSH
  • Heimdall - Home server dashboard
  • InfluxDB - Time series database used for stats collection
  • Netdata - An extremely comprehensive system monitoring solution
  • Nextcloud - A self-hosted Dropbox alternative
  • Plex - Plex Media Server
  • Portainer - for managing Docker and running custom images
  • Radarr - for organising and downloading movies
  • Sickrage - for managing TV episodes
  • Sonarr - for downloading and managing TV episodes
  • Tautulli - Monitor Your Plex Media Server
  • Telegraf - Metrics collection agent
  • Traefik - Web proxy and SSL certificate manager
  • Transmission BitTorrent client (with OpenVPN if you have a supported VPN provider)
  • ZNC - IRC bouncer to stay connected to favourite IRC networks and channels

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!

What This Doesn't Do

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 gained by automating it.

Hardware

Ansible NAS should work on any recent Ubuntu box. Development is done on Ubuntu Server 18.04.1 LTS running on an HP Microserver.

How To Use

  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
  4. Copy group_vars/all.yml.dist to group_vars/all.yml.
  5. Open up group_vars/all.yml and follow the instructions there for configuring your Ansible NAS.
  6. If you plan to use Transmission with OpenVPN, also copy group_vars/vpn_credentials.yml.dist to group_vars/vpn_credentials.yml and fill in your settings.
  7. Modify inventory and update it with the hostname of your NAS box, or use localhost ansible_connection=local if you want to run the playbook on the same box you want to use as your ansible-nas.
  8. Install the dependent roles: ansible-galaxy install -r requirements.yml (you might need sudo to install Ansible roles)
  9. Run the playbook - something like ansible-playbook -i inventory nas.yml -b -K should do you nicely.

Migrating from FreeNAS

Assuming that your Ubuntu system disk is separate from your storage (it should be!):

  1. Disconnect your drives.
  2. Run Ansible NAS against your server.
  3. Reconnect your drives.
  4. SSH to the server and run zpool list to determine available ZFS pools.
  5. zpool import <pool_name> against the pools you want to attach.
  6. chown -R root:root /mnt/<pool_name> to fix the ownership of the data.

Getting Help

Getting help is easy! You can:

Contributing

Contributions are welcome, please feel free to raise a PR!

  • Please restrict pull requests to one piece of functionality or bugfix at a time.
  • Please 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! 👍

Development of Ansible-NAS is carried out in Visual Studio Code - you'll get some nice recommended extensions and task setups if you do the same.