Want to start a home file server and don't know where to start

I want to create my own home server from scratch that contains a bunch of personal media files (pictures, videos, music, etc).But I want to create a website where I can access these files and view and stream all that content from within the browser. I'm having difficulty on where I would even start with all of this. I Have some intermediate to decent knowledge of c++,java, Javascript, html and xml. Where should I go from here?

FreeNAS + Own Cloud

Plex

You might also want take a look at Kodi. Maybe use that on a raspberry that is connected to your FreeNAS.

Ok I think people are getting confused with my question. I want to write my own server from scratch completely. I want to basically make my own version of plex without using anyone else's already made program.

I see, sorry for the confusion.
Apache / Nginx + PHP / Java (Tomcat) on the server side to handle request and reply content.
Html5 mostly combined with javascript for slideshows and ajax commands on the client side.
For video / audio in html5 is very simple and straight forward.

Wish you luck and success!

Ok sweet that gives me a good start. Would this help me with streaming video files. I'm trying to create my own kind of YouTube per-say for my video files, more for learning purposes and just giving me something to do programming wise. Would these sources help me achieve such a thing?

Sure. The videos have to be in a certain format (depending on your browser) or you can even use ffmpeg or other tools to encode your video into all needed formats.
The example of the video-element is a good start. There are plenty of other examples in the internet for further work, but the most import information is covered there.

You might also look at access restrictions for access and also please be aware that when allowing to read stuff from a system, security is also very important. So before you make the service available over the internet, please consider looking into these kind of things:

  • By any means disable read of /etc/ passwd and other elements you don't want any third party to have access to. Maybe add a layer of security where reads / paths are checked.
  • If you do allow the client to initiate a write (upload, comment,..) to the file system or any database (mysql, postgres) be aware that SQL-Injection is a thing
  • If possible use https if Interested take a look at letsencrypt and FreeDNS to get a valid ssl certificate

There was still something on my mind, but I kinda dropped it. Still, I hope this helps and you get your project going and learn a lot in the process.

1 Like