The option I took:
Tongue in cheek, but as Eden encouraged others to share their method, here's mine. I run a self-hosted, in-house developed Tor hidden service, and to get to that point, I had to learn several technologies.
Following is a list of resources for learning these things. Kicking off with a self-plug for my own garbage.
My computer related articles (Tor link):
http://oh3curby3abfknsydatt2qc3vgxggfjxd6infybwvlbgaezjhvhzqhad.onion/reader.php?page=1&category=cyb
Ctrl+F for "Web". I've been trying to bang out articles about how to develop and run a site. Hopefully these help, but honestly I don't have much right now and really kinda feel that I'm long winded and hard to read.
Here's some more resources:
HTML:
This is for marking up the structure of documents. Good thing for us, modern HTML doesn't have nearly as many presentational elements and attributes as it used to, so it's pretty easy to pick up.
Resources:
-
https://www.w3schools.com/html/default.asp <<< teaches modern HTML. The site also has a good reference section.
-
https://web.archive.org/web/20060307030712/http://www.htmlgoodies.com/primers/html/ <<< want to learn retroweb development? This is an HTML tutorial site from 2006. If you want, it goes back all the way to the late 90s.
CSS:
CSS is for styling shit. Like adding colors, changing the font, positioning shit on the page, etc. If HTML is the bones, CSS is the skin.
Resources:
-
https://www.w3schools.com/css/default.asp <<< W3 schools is really gonna be my crutch here...
-
https://developer.mozilla.org/en-US/docs/Learn/CSS <<< Mozilla has tutorials and reference works too. Their stuff is really good for when you need very technical documentation.
JavaScript:
JS is used for programming interactive front end stuff. I learned how to do all of this shit before JS was as ubiquitous as it is now, and as a hidden service operator, I don't use it because Tor users are paranoid as fuck about client side tech...so I don't know it. As far as I know, you can make interactive, animated shit with it (which honestly, you can do with CSS animations and pseudo-classes, newer features in HTML, and some clever use of animated media like gifs and videos), but it also can be used for malicious shit that corpos use to track users with. So...I avoid it and generally have a negative opinion of it.
-
https://www.w3schools.com/js/default.asp
I don't really have many more resources on this since, again, I don't know it nor really use it.
PHP:
PHP is a server side scripting language used for programmatically generating web pages. For example, as you're reading this off of the page in a forum, the post itself likely is just an entry in a database somewhere. A PHP script on the server programmatically retrieves that DB info and then automatically builds out an HTML page to present to the browser.
Resources:
-
https://www.w3schools.com/php/default.asp
-
https://www.php.net/manual/en/langref.php <<< language reference. Once you get basic syntax down, you'll basically be looking at this and googling shit on stack exchange.
MySQL:
MySQL is a database query language. You use it to insert and retrieve shit from a database. You'll usually use it in combination with PHP to interact with a database.
-
https://www.w3schools.com/sql/default.asp
-
https://docs.digitalocean.com/products/databases/mysql/tutorials/ <<< Digital Ocean is a shady VPS provider that has a lot of tutorials on how to run various sorts of common software you'd use on a VPS. Pay attention here to their docs on how to actually admin the DB and lean on w3schools for the stuff about how to form queries and shit.
If you know all of the above, you're pretty much golden for actually designing a site.
Protip: don't try to memorize whole languages in one sitting. Instead, get the gist of some basic syntax so that you can generally read the language and google for "how do X + language" and read through stack exchange or documentation, etc.
Running a server:
A server is more or less a headless program that runs in the background and can be setup through one or more config files.
There are 3 main http servers in use: Apache (oldschool, but advised against...but I use it), nginx (newer, but I don't know how to configure it), and IIS (microsoft Internet Information Services...you really shouldn't run this in a hobby capacity)
How you install and set these up will depend on what OS you're installing to and what server modules you need (e.g. if you're running PHP in apache, you'd also need the the apache module for PHP, etc).
Google around for how to install and configure either Apache or Nginx; everyone has documentation on how to do this stuff.
Pros of doing shit manually:
- You have total freedom and do not rely on anyone else.
- You can self host or use a VPS instead of a web host, which means you have system access to the machine and can build better integrations for server automation and security monitoring.
- You won't really have technical limitations. E.g. if you want server side scripting, you can have it. If you want to write a cron job to auto-test your favourite web ring for uptime stats, you can.
- Because you're not relying on a publically available CMS, attackers won't have open documentation for vulns that your platform might have -- automated and low effort attacks therefore generally won't work against your site unless you're grossly incompetent.
- You'll learn a lot.
Cons of doing shit manually:
- You have total freedom and do not rely on anyone else -- when shit goes sideways, it's your fault and it's on you to fix it.
- In house development produces lead time -- you'll need time to write and test code before you push it to production.
- You have to know a lot -- by the time you can go to production, you're basically a junior full stack dev.
- You'll end up reinventing wheels.