Return to Level1Techs.com

Whats my best option for a hosted NAS

storage
#1

I’m sure this has been discussed somewhere and i just can’t find it. And many of you might have experience with this stuff, so.
Let’s say i want to leave Google Drive behind. Currently, OneDrive works decently well and i trust microsoft more than google, none the less, my data relies on a single big company. Now, Let’s also say i have a NAS at home with a decent amount of storage, but no power to speak of and i would like to run my own Nextcloud or similar Solution.

What are my best options for a hosted server that i can spin my own Nextcloud instance up on? I’m aware of AWS and Azure, both tend to get expensive fast when you need a lot of storage. I’m currently at 50-100Gb of Data but this might grow. Plus, backing up the data locally can be expensive too, as they often charge for transfered Data.

What do you recommend?

1 Like

#2

Good question. This has been on my mind for a while as well.

I don’t have recommendations, but a couple of options to consider:

  • rsync.net seems competitively priced
  • Odroid HC2 and self-hosting if you don’t mind the hassle.

You mention a NAS, but it’s not clear to me what you mean by “no power to speak of.”

I just bought an HC2 + 10 TB HDD for backups, and my mind is swimming with the possibilities it opens up.

Curious to hear others’ suggestions.

0 Likes

#3

I think i’m planning to do this the exact opposite way. I’m not looking for an offsite backup or such. I’m looking for a cloud application to share data between my devices and i will do the backup to my NAS at home.

My NAS is a QNAP TS251+ (i think, need ot look at it at home). While it’s decent, own/nextcloud have shown to be a bit slow for my taste. I might give it another go with newer versions.
Also, DynDNS is not optimal and reconfirming the hostname every 30 days isn’t ideal either.

I could just as well go with Mega or Dropbox, both are reasonable options. I’ve just learned, that OneDrive does NOT encrypt your data at rest, which is a Problem. I’m not to worried about privacy, just enough to maybe move my files aways from google and to care about a local copy. So, if rolling my own won’t work, and hosted is to expensive, i’ll do a shoot out between all the common cloud providers and choose one. Syncing to my NAS should be easy, as Qnap has sync options for most popular clouds.

0 Likes

#4

Have you tried duckdns? No hassles there. I haven’t used DynDNS since their free plan went extinct.

I’ve heard good things about Sync. Looks like the plans and pricing are better than Dropbox and Mega, but no linux client means I never gave them a second thought.

0 Likes

#5

I was talking about DynDNS as a tech, not the actual company. So far, i’m with no-ip because my Router can Update it automatically and it just works. I could upgrade to a 25 bucks a year plan to avoid having to reenable it every 30 days. Since i’m not using it at the moment, i won’t do that though. I’ll take a look at duckdns. Looks like a great choice.

0 Likes

#6

YunoHost
https://yunohost.org

OpenMediaVault
https://openmediavault.org

0 Likes

#7

Personally, I use HC1+OMV.
hc1

0 Likes

#8
  • Keep one extra local copy (Western Digital 8TB external drive are reliable)

  • Rent a lowend storage VPS to keep a remote copy of your data ($80 / year or so) - use Borg Backup or a similar alternative that encrypts your data at rest.

0 Likes

#9

Really, i’m not looking for an offsite or onsite backup. I have all of that sorted.
I need a solution to have a set of files available on all my devices, sync changes and be done with it. I take care of backups and archival in different ways.

I’m now going to set up Nextcloud on my QNap and see how it holds up.

0 Likes

#10

Nextcloud is probably your best bet. I dont know of anything else thats simpler or easier to self host and just works™

0 Likes

#11

You cloud optionally take a look at OwnCloud, I explored it a while back as an alternative to OneDrive. I was impressed with it at the time as a lot of things I was interested in worked relatively easily. (for example, LDAP integration)

I never continued with it though as in enterprise we ended up with OneDrive and Sharepoint.

0 Likes

#12

From what i’ve read NextCloud is basically a fork of OwnCloud, as OwnCloud went commercial and a lot of people didn’t like that move.
Not sure how much is actual concern and how much is people just being… people. It seems though, that for personal use, NextCloud seems to be the winner by most accounts.

I had OwnCloud running a few years back and didn’t have a major Problem with it.

1 Like

#13

Most people have issue with something that was once free now having some paid element to it. So I can see why people would be annoyed.

I wasn’t aware that it had gone commercial, so in that case NextCloud may be the better option. (Note to self, take a look at NextCloud)

0 Likes

#14

In general, any substantial amount of storage on the cloud seems expensive, especially when compared to a NAS. I’m curious to hear what solutions you find.

OMV looks great. It’s already downloaded and waiting for the HC2 to arrive. You can bet I’ll have questions on how best to administer it.

P.S. Is that a Vantec NexStar 3 enclosure at the top of the pic?

0 Likes

#15

If you want to use this qnap then nextcloud or anything else this NAS supports.
Pydio is also worth mentioning, but…

0 Likes

#16

Like any headless server. :wink:
Install armbian and use armbian-config, contains omv and some other things. Yunohost should also be able to be installed on armbian.
Treat like any debian server instead of x86 is armv7.
https://forum.armbian.com
https://forum.openmediavault.org

Welland SunBright. Old 3.5, usb 2.0
9506151_1GG

0 Likes

#17

On that note digitalocean has free DNS servers (I think you can also use them when you don’t actually buy anything… but maybe you have to buy something once in your life).

Since they have an API you can do just about anything. Including adding new DNS entries and updating IPs. You can also use that for dyndns.

There is this node script that you can run on a set schedule to update a DNS entry for your home IP. I run that every day even though my IP rarely ever changes.

There was SOMETHING that didn’t quite work out for me with that script, but I made some changes to get it working. I don’t know what I changed. But it didn’t update the IP for me initially.

The changed script

#!/usr/bin/env node
var request = require("request");
var fs = require("fs");
var figlet = require("figlet");
var args = process.argv;
var updated = false;

if (process.argv.indexOf("-h") != -1 || process.argv.indexOf("--help") != -1) {
    showHelp();
    process.exit();
}
try {
    var configFileId = process.argv.indexOf("--config");
    var config = JSON.parse(
        fs.readFileSync(process.argv[configFileId + 1], "utf8")
    );
} catch (error) {
    if (configFileId === -1) {
        console.log(new Date() + " Missing --config parameter.");
    } else {
        console.log(
            new Date() +
            " Error reading cofig file. File either missing or malformed."
        );
    }
    process.exit();
}

if (
    process.argv.indexOf("--list") !== -1 ||
    process.argv.indexOf("-l") !== -1
) {
    var domainInfo = JSON.parse(getDomainInfo());
    console.dir(domainInfo, { depth: null, colors: true });
    process.exit();
}

function getIPv4() {
    var source;
    request(
        {
            url: "http://ip4.iurl.no",
            method: "GET",
            headers: {
                "Content-Type": "application/text"
            }
        },
        function (error, response, body) {
            if (error) {
                console.log(
                    new Date() +
                    " Error getting IP " +
                    error.code +
                    " (" +
                    error.host +
                    ")"
                );
                process.exit();
            }
            source = body;
        }
    );
    while (source === undefined) {
        require("deasync").runLoopOnce();
    }
    return source;
}

function updateIP(newIP, domain, API_KEY, domainid) {
    var rest_response = undefined;
    request(
        {
            method: "PUT",
            url: `https://api.digitalocean.com/v2/domains/${domain}/records/${domainid}?data=${newIP}`,
            headers: {
                "Content-Type": "application/json",
                Authorization: `Bearer ${API_KEY}`
            }
        },
        function (error, response, body) {
            rest_response = response;

            if (error) {
                console.log(new Date() + " Error uppdating IP " + error.code);
                process.exit();
            }
        }
    );

    while (rest_response === undefined) {
        require("deasync").runLoopOnce();
    }
}

function getServerIP(i) {
    var remoteIP;
    request(
        {
            url: `https://api.digitalocean.com/v2/domains/${config.domains[i].name}/records/${config.domains[i].id}`,
            method: "GET",
            headers: {
                "Content-Type": "application/json",
                Authorization: "Bearer " + config.api_key
            }
        },
        function (error, response, body) {
            try {
                var data = JSON.parse(body);
                remoteIP = [data.domain_record.type, data.domain_record.data];
            } catch (error) {
                console.log(new Date() + " Error getting remote IP " + error.code);
                process.exit();
            }
        }
    );
    while (remoteIP === undefined) {
        require("deasync").runLoopOnce();
    }
    return remoteIP;
}
function getDomainInfo() {
    var domainInfo;
    request(
        {
            url: `https://api.digitalocean.com/v2/domains/${config.domains[0].name}/records`,
            method: "GET",
            headers: {
                "Content-Type": "application/json",
                Authorization: `Bearer ${config.api_key}`
            }
        },
        function (error, response, body) {
            try {
                domainInfo = body;
            } catch (error) {
                console.log(new Date() + " Error getting domaininfo " + error.code);
                process.exit();
            }
        }
    );
    while (domainInfo === undefined) {
        require("deasync").runLoopOnce();
    }
    return domainInfo;
}

function showHelp() {
    console.log(
        figlet.textSync("dynDNS", {
            horizontalLayout: "default",
            verticalLayout: "default"
        })
    );
    console.log(
        "\r\ndynDNS updates your Digital Ocean DNS record with your local (public) IPv4"
    );
    console.log("Usage :");
    console.log('dyndns --config "/path/to/file/config.json"');
    console.log(
        "\r\nOptions : \r\n         -h or --help          Show this help"
    );
    console.log("         -l or --list          Lists subdomains");
    console.log('\r\nExample: dyndns --config "/home/testuser/config.json"');
}

if (
    process.argv.indexOf("--list") !== -1 ||
    process.argv.indexOf("-l") !== -1
) {
    var domainInfo = JSON.parse(getDomainInfo());
    console.dir(domainInfo, { depth: null, colors: true });
    process.exit();
}

var IP4 = getIPv4();

for (var i = 0; i < config.domains.length; i++) {
    var dnsIP = getServerIP(i);
    if (dnsIP[0] === "A" && IP4.localeCompare(dnsIP[1]) != 0) {
        updateIP(IP4, config.domains[i].name, config.api_key, config.domains[i].id);
        updated = true;
        console.log(new Date() + " Updated IP to " + IP4);
    }
}
if (!updated) console.log("[" + new Date() + "] IP not updated.");
process.exit();

I never got around to actually validate what I changed (it sure works for me now, but at this point I forgot what I changed). So, I didn’t contribute it to the github because of that. Should have done that back then.


The script looks huge, but it actually does not do all that much.
Effectively it just determines your ip using http://ip4.iurl.no and calls a digitalocean api to update the DNS entry with the result. So you could easiely make a MUCH shorter thing, but it would work just for your use case and for no one elses.

0 Likes

#18

https://freedns.afraid.org/

1 Like

#19

Take a look at Ansible Nas? It seems pretty flexible.
https://davidstephens.uk/ansible-nas/overview/


I believe it has a next cloud container.

I’m trying to wrap up an upgrade so I can take the spare parts and give this a go but haven’t used it myself.

0 Likes

#20

I also use afraid.org but I think it asks for activity/confirmation every… 6 months? It’s not bad, since they send an email with a link to click to keep the account active. But with duckdns I’ve never seen any activity requirement.

Well, someone copied someone. Even the cables at the back look the same. Yes, 3.5", USB2, optional eSATA. Vantec’s NexStar 3:

Is there a reason to use Armbian instead of OMV directly? I’ve never used ARM anything, so I’m kinda clueless. Wonder if there’s Armora based on Fedora instead. :smiley:

I should make a separate thread on this because I have a lot of questions and it’ll get off topic.

But back on the subject of a hosted NAS, it’s interesting that almost all suggestions are for self-hosting…

0 Likes