Build a full-featured home server or NAS replacement with an Ubuntu box and this playbook.

Overview

Ansible NAS

CI Gitter chat license Ko-fi

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 Ansible-NAS Can Set Up

  • An awesome dashboard to your home server (Heimdall)
  • Any number of Samba shares or NFS exports for you to store your stuff
  • A BitTorrent client
  • A Usenet downloader
  • Various media management tools - Sonarr, Sickchill, CouchPotato, Radarr, Bazarr, Lidarr
  • Media streaming via Plex or Emby
  • Music streaming with Airsonic
  • An RSS newsfeed reader - Miniflux
  • 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 and web-based client
  • Source control with Gitea
  • SSL secured external access to applications via Traefik
  • A Docker host with Portainer for image and container management
  • An automatic dynamic DNS updater if you use Cloudflare to host your domain DNS
  • A Personal finance manager
  • eBook management with Calibre-web
  • Content management with Joomla
  • A dual panel local file manager
  • Self-service media request web application
  • A PXE server to boot OS images over the network

Available Applications

  • Airsonic - catalog and stream music
  • Bazarr - companion to Radarr and Sonarr for downloading subtitles
  • Bitwarden_rs - Self-Hosting port of password manager
  • Calibre-web - Provides a clean interface for browsing, reading and downloading eBooks using an existing Calibre database.
  • Cloud Commander - A dual panel file manager with integrated web console and text editor
  • Cloudflare DDNS - automatically update Cloudflare with your IP address
  • CouchPotato - for downloading and managing movies
  • Deluge - A lightweight, Free Software, cross-platform BitTorrent client.
  • DokuWiki - A simple to use and highly versatile Open Source wiki software that doesn't require a database.
  • Duplicati - for backing up your stuff
  • Emby - Media streaming and management
  • Firefly III - Free and open source personal finance manager
  • get_iplayer - download programmes from BBC iplayer
  • Gitea - Simple self-hosted GitHub clone
  • GitLab - Self-hosted GitHub clone of the highest order
  • Glances - for seeing the state of your system via a web browser
  • Gotify Self-hosted server for sending push notifications
  • Grafana - Dashboarding tool
  • Guacamole - Web based remote desktop gateway, supports VNC, RDP and SSH
  • Heimdall - Home server dashboard
  • Home Assistant - Open source home automation
  • InfluxDB - Time series database used for stats collection
  • Jackett - API Support for your favorite torrent trackers
  • Jellyfin - The Free Software Media System
  • Joomla - Open source content management system
  • Krusader - Twin panel file management for your desktop
  • Lidarr - Music collection manager for Usenet and BitTorrent users
  • MiniDLNA - simple media server which is fully compliant with DLNA/UPnP-AV clients
  • Miniflux - An RSS news reader
  • Mosquitto - An open source MQTT broker
  • Mylar - An automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents
  • MyMediaForAlexa - Lets you stream your music collection to your alexa device
  • n8n - Nodemation, a node based workflow and automation service like IFTTT.
  • netboot.xyz - a PXE boot server
  • Netdata - An extremely comprehensive system monitoring solution
  • Nextcloud - A self-hosted Dropbox alternative
  • NZBget - The most efficient usenet downloader
  • Ombi - web application that automatically gives your users the ability to request content
  • Organizr - ORGANIZR aims to be your one stop shop for your Servers Frontend.
  • openHAB - A vendor and technology agnostic open source automation software for your home
  • Plex - Plex Media Server
  • Portainer - for managing Docker and running custom images
  • pyLoad - A download manager with a friendly web-interface
  • PyTivo - An HMO and GoBack server for TiVos.
  • Radarr - for organising and downloading movies
  • Sickchill - for managing TV episodes
  • Sonarr - for downloading and managing TV episodes
  • Syncthing - sync directories with another device
  • Tautulli - Monitor Your Plex Media Server
  • Telegraf - Metrics collection agent
  • The Lounge - Web based always-on IRC client
  • TimeMachine - Samba-based mac backup server
  • Traefik - Web proxy and SSL certificate manager
  • Transmission - BitTorrent client (with OpenVPN if you have a supported VPN provider)
  • Ubooquity - Book and comic server
  • uTorrent - The best torrent downloading app for beginners
  • Virtual Desktop - A virtual desktop running on your NAS.
  • Wallabag - Save and classify articles. Read them later.
  • Watchtower - Monitor your Docker containers and update them if a new version is available
  • YouTubeDL-Material - Self-hosted YouTube downloader built on Material Design
  • 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. Check out the docs for recommended setups.

Installation

See Installation.

Upgrading

The way Ansible-NAS configuration is structured has changed! See Upgrading for more information. See the Getting Help section if you get stuck.

Documentation

You can read the docs here. PRs for more documentation always welcome!

Migrating from FreeNAS

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

  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.

Requirements

  • Ansible NAS targets the latest Ubuntu LTS release, which is currently Ubuntu Server 20.04 LTS.
  • You can run Ansible-NAS on whatever you like, read the docs for more info. I use an HP Microserver.

Getting Help

Getting help is easy! You can:

Contributing

Contributions are always welcome! Please read CONTRIBUTING.md first.

Support

If you've enjoyed Ansible-NAS as much as I do working on it, please consider buying me a coffee

Thanks

Thanks to the awesome dudes at JetBrains for supplying core contributors with JetBrains Open Source licenses!

Issues
  • Ubuntu 20.04 LTS Support

    Ubuntu 20.04 LTS Support

    RE: https://github.com/davestephens/ansible-nas/issues/143

    Ubuntu 20.04 LTS is only three months away and changes to how ansible-nas installs docker is going to have to be addressed. It may be 30 Internet years away, but it's going to sneak up on us fast.

    Personally I'm looking forward to the OS update.

    I will look into this in the weeks to come. No commitments other than discovery at the moment.

    EDIT: uploaded the focal-server-amd64.iso daily build to ESXi for playing...

    on hold 
    opened by bcurran3 35
  • Reorganize all.yml

    Reorganize all.yml

    The number of entries in the lower parts of all.yml is getting large enough that finding things is becoming hard. Starting about line 243 - the part the user shouldn't touch anyway - we should sort them by name to make everybody's life easier. (I should be able to do a PR later today)

    opened by scotws 16
  • Added watchtower support

    Added watchtower support

    Re-created the branch to clean up the excessive number of commits :)

    opened by C-J1 15
  • Add Pi-hole via Docker image

    Add Pi-hole via Docker image

    Feature request: As you probably know, Pi-hole (https://pi-hole.net/) is a DNS server that blocks ads. It was originally made for the RPi (hence the name) but also is available as a Docker image at https://hub.docker.com/r/pihole/pihole/ . If you have a NAS running anyway 24/7, you might want to have it running. (Note: AFAIK there is no way of running Pi-hole on FreeNAS/FreeBSD without installing a Linux VM).

    And thanks for all the work!

    enhancement help wanted 
    opened by scotws 15
  • Upgrade to Traefik 2.0

    Upgrade to Traefik 2.0

    Traefik 2 is now GA, Ansible-NAS currently uses 1.7.

    enhancement help wanted 
    opened by davestephens 13
  • Security: add a WAF or similar

    Security: add a WAF or similar

    On my server according to traefik, I get thousands of requests from strangers/bots. To block all unwanted traffic it would be nice to have some sort of WAF (or Web application firewall) to allow only the wanted traffic. I did a little research and could not find a WAF that natively integrates with traefik. But maybe this https://modsecurity.org/ could work...!?

    Has anybody else experience or thought about this?

    If this approach is from the wrong angle, please tell me. (e.g. instead of a WAF you might use a pfsense firewall in your network or so)

    opened by FPMilan 13
  • Ambiguous env options must be wrapped in quotes to avoid them being interpreted on Ansible 2.8.1

    Ambiguous env options must be wrapped in quotes to avoid them being interpreted on Ansible 2.8.1

    Apologies for not following the bug template - seems overkill for such a simple bug.

    It would appear that recent versions of Ansible enforce checks on ambiguous environment options:

    TASK [Create Heimdall container] ****************************************************************************************************************************************************
    fatal: [[email protected]]: FAILED! => {"changed": false, "msg": "Non-string value found for env option. Ambiguous env options must be wrapped in quotes to avoid them being interpreted. Key: PUID"}
    

    The above was when running the playbook remotely on Ansible 2.8.1, macOS. Manually quoting the options in tasks/heimdall.yml also fixed the issue in this instance, although it would go on to fail during later steps for the same reason.

    When running the playbook locally with an older version of Ansible, 2.5.1, everything ran fine. I suppose quoting all the environment options would resolve this.

    bug help wanted 
    opened by spacemud 12
  • replaced cloudflare-ddns

    replaced cloudflare-ddns

    What this PR does / why we need it: I ran into bug #243 and tried to fix it. After some research I replaced the docker container with cloudflare-ddns from oznu, which seems to be more popular (10M+ downloads vs. 5M downloads on docker hub). But for me it was much more important that the code was easier to understand.

    Which issue (if any) this PR fixes: Fixes #243

    Any other useful info: network_mode: host is required for IPv6 to work properly.

    opened by odbaeu 12
  • Installation pymodule update

    Installation pymodule update

    What this PR does / why we need it: Existing Ansible installation instructions will result in version 2.5.2 rather than the current 2.9.x version. Official Ansible documentation has been updated as per the change in docs/installation.md.

    Additionally the docker-py module is deprecated and has been replaced with the 'docker' module.

    Which issue (if any) this PR fixes:

    Fixes #

    Any other useful info: These two changes are needed for the upcoming Traefik 2.1.1 PR I will be submitting once finished testing.

    opened by Malpractis 11
  • Docker Unable to start

    Docker Unable to start

    Short problem description

    I keep getting an error while trying to install docker using the playbook. I am running in a virtual machine to test until I can get it stable to deploy on my server. In the all.yml I have my docker home directory set to /tank/docker on my zfs tank and zfs is set the storage driver

    Environment

    • Ansible-NAS revision (git rev-parse --short HEAD): 867441e
    • Ansible version (paste the entire output of ansible --version on the machine you run the playbook from): 2.5.1
    • Ansible-NAS operating system (cat /etc/lsb-release on the Ansible-NAS box) - If this is anything other than Ubuntu 18.04 help will be limited: Ubuntu 18.04.2
    • Ansible-NAS kernel (cat /etc/lsb-release on the Ansible-NAS box): Not listed
    • Ansible-NAS Python version (python --version on the Ansible-NAS box): 2.7.15
    • Ansible-NAS Docker version (docker --version on the Ansible-NAS box): 19.03.1 Build 74ble89
    • Latest Docker logs (journalctl -u docker.service on the Ansible-NAS box): posted below
    • Are you running the playbook from a remote box or the Ansible-NAS box itself? The NAS
    • Vagrant version, if testing (vagrant --version)

    Expected behavior

    Playbook should run successfully

    Actual behavior

    Playbook errors out at TASK [geerlingguy.docker : Ensure Docker is started and enabled at boot.]

    Steps to reproduce

    What does someone need to do to reproduce this?

    Attempt to install on a clean install of Ubuntu 18.04.2 LTS

    Paste the output of the playbook at the problematic point.

    TASK [geerlingguy.docker : Reload systemd daemon if template is changed.] ***********************************************************************************************************************************
    task path: /root/.ansible/roles/geerlingguy.docker/tasks/docker-1809-shim.yml:13
    skipping: [localhost] => {
        "changed": false,
        "skip_reason": "Conditional result was False"
    }
    
    TASK [geerlingguy.docker : Ensure Docker is started and enabled at boot.] ***********************************************************************************************************************************
    task path: /root/.ansible/roles/geerlingguy.docker/tasks/main.yml:18
    Using module file /usr/lib/python2.7/dist-packages/ansible/modules/system/systemd.py
    <localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
    <localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
    <localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010 `" && echo ansible-tmp-1566747879.76-34933015883010="` echo /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010 `" ) && sleep 0'
    <localhost> PUT /root/.ansible/tmp/ansible-local-22197oGN7Pr/tmp8o7BaX TO /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010/systemd.py
    <localhost> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010/ /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010/systemd.py && sleep 0'
    <localhost> EXEC /bin/sh -c '/usr/bin/python3 /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010/systemd.py && sleep 0'
    <localhost> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-tmp-1566747879.76-34933015883010/ > /dev/null 2>&1 && sleep 0'
    fatal: [localhost]: FAILED! => {
        "changed": false,
        "invocation": {
            "module_args": {
                "daemon_reload": false,
                "enabled": true,
                "masked": null,
                "name": "docker",
                "no_block": false,
                "state": "started",
                "user": false
            }
        },
        "msg": "Unable to start service docker: Job for docker.service failed because the control process exited with error code.\nSee \"systemctl status docker.service\" and \"journalctl -xe\" for details.\n"
    }
    
    PLAY RECAP **************************************************************************************************************************************************************************************************
    localhost                  : ok=24   changed=0    unreachable=0    failed=1
    

    Output of systemctl status docker.service

    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
       Active: failed (Result: exit-code) since Sun 2019-08-25 11:44:46 EDT; 7min ago
         Docs: https://docs.docker.com
      Process: 23469 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE)
     Main PID: 23469 (code=exited, status=1/FAILURE)
    
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.service: Service hold-off time over, scheduling restart.
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.service: Scheduled restart job, restart counter is at 3.
    Aug 25 11:44:46 ansible-nas systemd[1]: Stopped Docker Application Container Engine.
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.service: Start request repeated too quickly.
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.service: Failed with result 'exit-code'.
    Aug 25 11:44:46 ansible-nas systemd[1]: Failed to start Docker Application Container Engine.
    

    output of journalctl -xe

    -- the configured Restart= setting for the unit.
    Aug 25 11:44:46 ansible-nas systemd[1]: Stopped Docker Application Container Engine.
    -- Subject: Unit docker.service has finished shutting down
    -- Defined-By: systemd
    -- Support: http://www.ubuntu.com/support
    --
    -- Unit docker.service has finished shutting down.
    Aug 25 11:44:46 ansible-nas systemd[1]: Closed Docker Socket for the API.
    -- Subject: Unit docker.socket has finished shutting down
    -- Defined-By: systemd
    -- Support: http://www.ubuntu.com/support
    --
    -- Unit docker.socket has finished shutting down.
    Aug 25 11:44:46 ansible-nas systemd[1]: Stopping Docker Socket for the API.
    -- Subject: Unit docker.socket has begun shutting down
    -- Defined-By: systemd
    -- Support: http://www.ubuntu.com/support
    --
    -- Unit docker.socket has begun shutting down.
    Aug 25 11:44:46 ansible-nas systemd[1]: Starting Docker Socket for the API.
    -- Subject: Unit docker.socket has begun start-up
    -- Defined-By: systemd
    -- Support: http://www.ubuntu.com/support
    --
    -- Unit docker.socket has begun starting up.
    Aug 25 11:44:46 ansible-nas systemd[1]: Listening on Docker Socket for the API.
    -- Subject: Unit docker.socket has finished start-up
    -- Defined-By: systemd
    -- Support: http://www.ubuntu.com/support
    --
    -- Unit docker.socket has finished starting up.
    --
    -- The start-up result is RESULT.
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.service: Start request repeated too quickly.
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.service: Failed with result 'exit-code'.
    Aug 25 11:44:46 ansible-nas systemd[1]: Failed to start Docker Application Container Engine.
    -- Subject: Unit docker.service has failed
    -- Defined-By: systemd
    -- Support: http://www.ubuntu.com/support
    --
    -- Unit docker.service has failed.
    --
    -- The result is RESULT.
    Aug 25 11:44:46 ansible-nas systemd[1]: docker.socket: Failed with result 'service-start-limit-hit'.
    

    If anymore info is needed I will do my best to provide.

    more info required 
    opened by Micim987 11
  • Disable AppArmor via 'unconfined' profile

    Disable AppArmor via 'unconfined' profile

    What this PR does / why we need it: To stop log spamming by AppArmor.

    Any other useful info: A better long-term solution might be to create (or find) a proper AppArmor profile ala https://docs.docker.com/engine/security/apparmor/.

    opened by wmudge 0
  • Update integration hostname to match Vagrant VM name

    Update integration hostname to match Vagrant VM name

    What this PR does / why we need it: Simple mismatch between the defined hostname created by the Vagrantfile and the integration testing inventory.

    Which issue (if any) this PR fixes: Fixes #483

    opened by wmudge 0
  • Integration testing inventory does not match Vagrant VM hostname

    Integration testing inventory does not match Vagrant VM hostname

    Describe the bug The default Vagrant VM hostname ansible-nas-test does not match any defined inventory listed in tests/inventory/integration_testing/inventory. When the ansible_local provisioning is then executed by the Vagrantfile, no host pattern is found and the execution fails.

    Environment

    • Ansible-NAS revision (git rev-parse --short HEAD): 639dc47
    • Ansible version (paste the entire output of ansible --version on the machine you run the playbook from):
    ansible 2.9.6
      config file = /home/webster/devel/ansible-nas/ansible.cfg
      configured module search path = ['/home/webster/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python3/dist-packages/ansible
      executable location = /usr/bin/ansible
      python version = 3.8.10 (default, Jun  2 2021, 10:49:15) [GCC 9.4.0]
    
    • Ansible-NAS operating system (cat /etc/lsb-release on the Ansible-NAS box) - Support won't be provided for non-LTS releases of Ubuntu:
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=20.04
    DISTRIB_CODENAME=focal
    DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
    
    • Ansible-NAS kernel (uname -a on the Ansible-NAS box): Linux home-nas 5.4.0-74-generic #83-Ubuntu SMP Sat May 8 02:35:39 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    • Ansible-NAS Python version (python --version on the Ansible-NAS box): Python 3.8.10
    • Ansible-NAS Docker version (docker --version on the Ansible-NAS box): Docker version 20.10.8, build 3967b7d
    • Latest Docker logs (journalctl -u docker.service on the Ansible-NAS box):
    Aug 31 21:41:28 home-nas systemd[1]: Starting Docker Application Container Engine...
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.303148678-04:00" level=info msg="Starting up"
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.303596238-04:00" level=info msg="detected 127.0.0.53 nameserver, assuming system>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304150160-04:00" level=info msg="parsed scheme: \"unix\"" module=grpc
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304167412-04:00" level=info msg="scheme \"unix\" not registered, fallback to def>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304187158-04:00" level=info msg="ccResolverWrapper: sending update to cc: {[{uni>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304197946-04:00" level=info msg="ClientConn switching balancer to \"pick_first\">
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304789128-04:00" level=info msg="parsed scheme: \"unix\"" module=grpc
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304801610-04:00" level=info msg="scheme \"unix\" not registered, fallback to def>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304810978-04:00" level=info msg="ccResolverWrapper: sending update to cc: {[{uni>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.304820453-04:00" level=info msg="ClientConn switching balancer to \"pick_first\">
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.411580424-04:00" level=warning msg="Your kernel does not support swap memory lim>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.411638357-04:00" level=warning msg="Your kernel does not support CPU realtime sc>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.411657973-04:00" level=warning msg="Your kernel does not support cgroup blkio we>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.411673774-04:00" level=warning msg="Your kernel does not support cgroup blkio we>
    Aug 31 21:41:28 home-nas dockerd[3473811]: time="2021-08-31T21:41:28.412093163-04:00" level=info msg="Loading containers: start."
    Aug 31 21:41:29 home-nas dockerd[3473811]: time="2021-08-31T21:41:29.243795674-04:00" level=info msg="Default bridge (docker0) is assigned with an IP>
    Aug 31 21:41:34 home-nas dockerd[3473811]: time="2021-08-31T21:41:34.416242550-04:00" level=info msg="Loading containers: done."
    Aug 31 21:41:34 home-nas dockerd[3473811]: time="2021-08-31T21:41:34.422243733-04:00" level=info msg="Docker daemon" commit=75249d8 graphdriver(s)=bt>
    Aug 31 21:41:34 home-nas dockerd[3473811]: time="2021-08-31T21:41:34.422285463-04:00" level=info msg="Daemon has completed initialization"
    
    • Are you running the playbook from a remote box or the Ansible-NAS box itself? Ansible-NAS
    • Vagrant version, if testing (vagrant --version): Vagrant 2.2.6
    • Ansible-NAS filesystems (df -hT on the Ansible-NAS box):
    Filesystem     Type      Size  Used Avail Use% Mounted on
    udev           devtmpfs  7.8G     0  7.8G   0% /dev
    tmpfs          tmpfs     1.6G  4.1M  1.6G   1% /run
    /dev/sda2      btrfs     3.7T  329G  3.4T   9% /
    tmpfs          tmpfs     7.8G     0  7.8G   0% /dev/shm
    tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
    tmpfs          tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
    /dev/sdc1      vfat       99M  5.2M   94M   6% /boot/efi
    /dev/loop2     squashfs   56M   56M     0 100% /snap/core18/2074
    /dev/loop4     squashfs   68M   68M     0 100% /snap/lxd/20326
    tmpfs          tmpfs     1.6G     0  1.6G   0% /run/user/1000
    /dev/loop5     squashfs   71M   71M     0 100% /snap/lxd/21029
    /dev/loop1     squashfs   33M   33M     0 100% /snap/snapd/12704
    /dev/loop7     squashfs   56M   56M     0 100% /snap/core18/2128
    /dev/loop0     squashfs   33M   33M     0 100% /snap/snapd/12883
    
    • Mounted filesystems (mount on the Ansible-NAS box)
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    udev on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=8102612k,nr_inodes=2025653,mode=755)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=1629540k,mode=755)
    /dev/sda2 on / type btrfs (rw,relatime,degraded,space_cache,subvolid=5,subvol=/)
    securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
    tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
    cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
    cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
    pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
    efivarfs on /sys/firmware/efi/efivars type efivarfs (rw,nosuid,nodev,noexec,relatime)
    none on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
    cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
    cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
    cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
    cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
    cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
    cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
    cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
    cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
    cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
    cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
    cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
    systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=28,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=18814)
    mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
    hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
    debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
    tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
    sunrpc on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
    nfsd on /proc/fs/nfsd type nfsd (rw,relatime)
    configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
    fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
    /dev/sdc1 on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
    /var/lib/snapd/snaps/core18_2074.snap on /snap/core18/2074 type squashfs (ro,nodev,relatime,x-gdu.hide)
    /var/lib/snapd/snaps/lxd_20326.snap on /snap/lxd/20326 type squashfs (ro,nodev,relatime,x-gdu.hide)
    tmpfs on /run/snapd/ns type tmpfs (rw,nosuid,nodev,noexec,relatime,size=1629540k,mode=755)
    nsfs on /run/snapd/ns/lxd.mnt type nsfs (rw)
    tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1629536k,mode=700,uid=1000,gid=1000)
    /var/lib/snapd/snaps/lxd_21029.snap on /snap/lxd/21029 type squashfs (ro,nodev,relatime,x-gdu.hide)
    /var/lib/snapd/snaps/snapd_12704.snap on /snap/snapd/12704 type squashfs (ro,nodev,relatime,x-gdu.hide)
    /var/lib/snapd/snaps/core18_2128.snap on /snap/core18/2128 type squashfs (ro,nodev,relatime,x-gdu.hide)
    /var/lib/snapd/snaps/snapd_12883.snap on /snap/snapd/12883 type squashfs (ro,nodev,relatime,x-gdu.hide)
    /dev/sda2 on /docker/data/btrfs type btrfs (rw,relatime,degraded,space_cache,subvolid=5,subvol=/)
    nsfs on /run/docker/netns/d37e83a9b0e5 type nsfs (rw)
    nsfs on /run/docker/netns/37d025b4b37a type nsfs (rw)
    nsfs on /run/docker/netns/default type nsfs (rw)
    nsfs on /run/docker/netns/1c1cdba31fcc type nsfs (rw)
    nsfs on /run/docker/netns/9096f4aa79aa type nsfs (rw)
    nsfs on /run/docker/netns/c37615a57cd1 type nsfs (rw)
    nsfs on /run/docker/netns/39a6087f4c38 type nsfs (rw)
    nsfs on /run/docker/netns/6f398017a359 type nsfs (rw)
    

    all.yml Variables

    • docker_image_directory:
    • docker_home:
    • docker_storage_driver:
    • samba_shares_root:

    Expected behavior Vagrant provision should execute the Ansible playbook.

    Actual behavior Does not execute the playbook.

    Steps to reproduce ./tests/test.sh or on a running Vagrant VM, vagrant provision.

    Playbook Output

    ==> ansible-nas-test: Running provisioner: ansible_local...
        ansible-nas-test: Running ansible-galaxy...
    - changing role geerlingguy.docker from 3.0.0 to 3.0.0
    - downloading role 'docker', owned by geerlingguy
    - downloading role from https://github.com/geerlingguy/ansible-role-docker/archive/3.0.0.tar.gz
    - extracting geerlingguy.docker to /vagrant/roles/geerlingguy.docker
    - geerlingguy.docker (3.0.0) was installed successfully
    - changing role bertvv.samba from v2.7.1 to v2.7.1
    - downloading role 'samba', owned by bertvv
    - downloading role from https://github.com/bertvv/ansible-role-samba/archive/v2.7.1.tar.gz
    - extracting bertvv.samba to /vagrant/roles/bertvv.samba
    - bertvv.samba (v2.7.1) was installed successfully
    - changing role geerlingguy.nfs from 2.0.0 to 2.0.0
    - downloading role 'nfs', owned by geerlingguy
    - downloading role from https://github.com/geerlingguy/ansible-role-nfs/archive/2.0.0.tar.gz
    - extracting geerlingguy.nfs to /vagrant/roles/geerlingguy.nfs
    - geerlingguy.nfs (2.0.0) was installed successfully
        ansible-nas-test: Running ansible-playbook...
    [WARNING]: Could not match supplied host pattern, ignoring: ansible-nas-test
    ERROR! Specified hosts and/or --limit does not match any hosts
    Ansible failed to complete successfully. Any error output should be
    visible above. Please fix these errors and try again.
    
    bug 
    opened by wmudge 0
  • Add role for Duplicacy Web UI

    Add role for Duplicacy Web UI

    What this PR does / why we need it:

    Adds the cloud backup application, Duplicacy, which includes a UI.

    Which issue (if any) this PR fixes:

    None.

    Any other useful info:

    opened by wmudge 0
  • Piwigo

    Piwigo

    What this PR does / why we need it:

    Add's Piwigo Photo Gallery.

    question needs work 
    opened by Narcolapser 2
  • Blocky - DNS proxy and ad-blocker

    Blocky - DNS proxy and ad-blocker

    Application you'd like to add:

    Blocky is a DNS proxy and ad-blocker for the local network.

    Link: https://0xerr0r.github.io/blocky/ .

    Link to Docker image:

    https://0xerr0r.github.io/blocky/installation/ spx01/blocky

    Why you'd like this application added:

    Blocky seems like a good choice to have an ad-blocker added on your homeserver. You just point the DNS server to your homeserver and off you go (and if your internet provider lets you, you can set DHCP so that it chooses your home server as DNS server).

    There's also Pi-Hole of course. To be honest I don't know very well what's the difference (except Pi-Hole exists for a long time so I expect it to be more mature).

    enhancement 
    opened by martinfiers 0
  • add Scrutiny for S.M.A.R.T. monitoring

    add Scrutiny for S.M.A.R.T. monitoring

    What this PR does / why we need it:

    It converts the stats task to a role and adds a container running Scrutiny. This container runs a webui with current S.M.A.R.T. data, keeps a history of drive temperatures, and handles notifications using shoutrrr URLs. A NAS obviously benefits heavily from monitoring the hardware that underlies all of its storage. This provides that using what seems to be a reasonably well-maintained container.

    Which issue (if any) this PR fixes:

    Fixes #2

    Any other useful info:

    This provides template files for both Scrutiny config files and makes the most important two things configurable: which drives to expose to the container for smartd (in the task docker_compose) and the URLs for notifications (in the scrutiny.yaml config template).

    opened by allthestairs 0
  • Update Bitwarden image and Traefik

    Update Bitwarden image and Traefik

    Updates deprecated Bitwarden image and it's old Traefik labels

    The image was deprecated: https://hub.docker.com/r/bitwardenrs/server

    None of the traefik settings worked with 2.0 so I pulled from : https://stackoverflow.com/questions/58474538/traefik-2-and-bitwarden-rs-protocol-ws-on-notifications-hub

    opened by tsjordan-eng 0
  • NextCloud Stability Problem: Help required on Upgrade and Backup

    NextCloud Stability Problem: Help required on Upgrade and Backup

    NextCloud v15 Stability is problematic, and I want to find a recommended methodology on how to upgrade versions. Can anyone help me? (Preferrably portainer based instructions that work for ZFS)

    Before even doing the ugprade, I thought it was a good idea to do a backup of NextCloud, but I cannot find the password for the mysql user, all I can find is a reference in the nextcloud.yml and nextcloud container config.php of "nextcloud-pass". I could really use some help here.

    Environment

    • Ansible-NAS revision 0f16c69
    • Ansible version ansible 2.5.1 config file = [redacted]/ansible-nas/ansible.cfg configured module search path = [u'/home/[redacted]/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/dist-packages/ansible executable location = /usr/bin/ansible python version = 2.7.17 (default, Feb 27 2021, 15:10:58) [GCC 7.5.0]
    • Operating System Ubuntu 18.04.5 LTS
    • kernel: 5.4.0-72-generic #80~18.04.1-Ubuntu SMP Mon Apr 12 23:26:25 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
    • Docker version 20.10.6, build 370c289
    bug 
    opened by flammableliquids 6
  • Add OpenNMS

    Add OpenNMS

    Application you'd like to add:

    OpenNMS

    Link to Docker image:

    Docker hub: https://hub.docker.com/r/opennms/horizon

    github for more info: https://github.com/OpenNMS/opennms

    Why you'd like this application added:

    Using this to monitor and diagnose home network outages. This application might be overkill for ansible-nas. I set it up, so I figured I'd put in a PR to let someone else decide.

    I have submitted this as PR #459, but thought it might need more discussion before merging. I am not convinced Ansible-NAS needs this application. I am also not convinced that I have the Ansible role setup exactly right.

    enhancement 
    opened by eniad 0
Owner
David Stephens
Gets stuff done with computers.
David Stephens
Ansible based Homeserver setup using Docker

CharjaBox Ansible based Homeserver setup using Docker. Inspired by Ansible NAS and HomelabOS What is this? CharjaBox is an Ansible playbook that can b

Sammy 31 Sep 12, 2021
A set of Ansible playbooks to build and maintain your own private cloud: email, calendar, contacts, file sync, IRC bouncer, VPN, and more.

Introduction Sovereign is a set of Ansible playbooks that you can use to build and maintain your own personal cloud based entirely on open source soft

null 10.1k Sep 21, 2021
[mirror] Install and manage self-hosted services/applications, on your own server(s) - ansible collection and utilities

╻ ╻┏━┓┏━┓╻ ╻ ░░╺╋╸┗━┓┣┳┛┃┏┛ ╹ ╹┗━┛╹┗╸┗┛ Install and manage self-hosted services/applications, on your own server(s). xsrv provides: a comprehensiv

nodiscc 141 Sep 16, 2021
Open and cheap DIY IP-KVM based on Raspberry Pi

Open and cheap DIY IP-KVM based on Raspberry Pi A very simple and fully functional Raspberry Pi-based KVM over IP that you can make with your own hand

Pi-KVM Project 3.3k Sep 11, 2021
Deploy self-hosted apps easily: simple, bloat-free, independent installation

DPlatform deprecated in favor of dppm The main reasons of this are to improve maintainability, stability and add new features. Discover DPlatform-Dock

DFabric 251 Aug 21, 2021
Deploy self-hosted apps easily: simple, bloat-free, independent installation

DPlatform deprecated in favor of dppm The main reasons of this are to improve maintainability, stability and add new features. Discover DPlatform-Dock

DFabric 251 Aug 21, 2021
An HTML5 management interface for KVM guests

What is Kimchi? Browser Support Desktop Browser Support Mobile Browser Support Linux Support Getting started JFrog Repositories Install Dependencies B

null 2.7k Sep 13, 2021
DockSTARTer helps you get started with home server apps running in Docker.

The main goal of DockSTARTer is to make it quick and easy to get up and running with Docker. You may choose to rely on DockSTARTer for various changes

null 1.4k Sep 16, 2021
Lightweight justice for your single-board computer!

Lightweight justice for your single-board computer! optimised • simplified • for everyone Website • Documentation • View all supported platforms • For

null 2.7k Sep 21, 2021
Lightweight justice for your single-board computer!

Lightweight justice for your single-board computer! optimised • simplified • for everyone Website • Documentation • View all supported platforms • For

null 2.7k Sep 17, 2021
TagSpaces is an offline, open source, document manager with tagging support

TagSpaces is a free, non-locking, open source application for organizing and managing your local files with the help of tags. It features note taking

TagSpaces 2.4k Sep 15, 2021
Run your web apps easily with a complete platform that you can install on any server. Build composable microservices and lambdas.

1Backend 1Backend is a platform designed to make deploying, running and maintaining lambda functions/microservices easy. It enables you to launch a ne

null 2k Sep 8, 2021
📦 Build code for NextcloudPi: Raspberry Pi, Odroid, Rock64, Docker, curl installer...

English | Traditional Chinese 繁體中文 | Simplified Chinese 简体中文 NextCloudPi This is the build code for NextCloudPi. NextCloudPi is a ready to use image f

Nextcloud 1.5k Sep 23, 2021
lightweight webapp catalog based on containers, with user interface à la mobile app store

Puffin NOTE: The project is not maintained anymore, the code is here for historical / fork purposes. Introduction The goal of the project is to allow

null 85 Aug 26, 2021
A web interface for managing docker containers with an emphasis on templating to provide 1 click deployments. Think of it like a decentralized app store for servers that anyone can make packages for.

Yacht Yacht is a container management UI with a focus on templates and 1-click deployments. If the built in update button isn't working for you try th

SelfhostedPro 1.1k Sep 21, 2021
Sandstorm is a self-hostable web productivity suite. It's implemented as a security-hardened web app package manager.

Sandstorm Sandstorm is a self-hostable web productivity suite. It's implemented as a security-hardened web app package manager. Sandstorm makes it eas

Sandstorm.io 5.9k Sep 16, 2021
VESTA Control Panel

Vesta Control Panel Vesta is an open source hosting control panel. Vesta has a clean and focused interface without the clutter. Vesta has the latest o

Serghey Rodin 2.5k Sep 24, 2021
TrueNAS CORE/Enterprise/SCALE Middleware Git Repository

TrueNAS CORE/Enterprise/SCALE main source repo Want to contribute or collaborate? Join our Slack instance. IMPORTANT NOTE: This is the master branch o

TrueNAS 1.8k Sep 16, 2021
TrueNAS CORE/Enterprise/SCALE Middleware Git Repository

TrueNAS CORE/Enterprise/SCALE main source repo Want to contribute or collaborate? Join our Slack instance. IMPORTANT NOTE: This is the master branch o

TrueNAS 1.8k Sep 16, 2021