Hello everyone, welcome to my blog again after a long long time. Today, we will look at how I set up my server to host this blog once again. First step was getting the hardware for the server itself. As much as I'd love to use an Intel Xeon with 144cores for an ftp server and couple other things, that would've been way out the (~120-160$) budget, and ey, theyll still be more powerful than anything Ive ever used even 5 years from now, so I said screw and I started looking for a more budget CPU. After looking at all the i7's with 20cores, I decided on the Intel N150, a quad core that you can powerprofile to like 19W for a 3.6ghz boost. Then I had to also decide on what kindof machine to use with this CPU, and after deciding between the lattepanda iota, and the gmktec nucbox g3 plus, I decided to go with the latter, since I could actually upgrade the ram down the line and wouldn't have to print a case that propably would need 3 reprints, if I managed to model a sensibly looking one at all. Then, I started looking for an operating system. While running arch would be cool and all, I still need a system that I can update packages on, and still be able to flash a new archiso to reinstall the other 2 systems I run arch on that break because of the update, without having to wait for my raspberry pi to do it for 2 hours (assuming I even have it setup so I can login from my phone at all at the point of faulty arch update). Therefore, I started looking for some other distro. Debian I have played with before, but it wouldn't be a challenge and it doesn't have rolling update cycle, which is dumb. So, I started looking again. I also looked at alpine, but the musl clib isn't great for running non docker stuff. So I looked again. I encountered opensuse. It was an interesting distro which altho I have heard of before, I have never really tried or read much about, so I decided I will install that and if it doesn't work very well or just doesn't fit my usecase, I will just install something else. Obviously I didn't learn anything about it (other than it being a rolling release distro) beforehand, so I knew it would be a great and propably somewhat easy challenge to do, and that I'd go to sleep at 3PM or later, and foreshadowing, one of those statements ended up being true. So I downloaded the ISO over my network, and at first was confused because it was 3.6gb, way more than I would expect for an installer for a base distro (not a derived distro like ubuntu with debian + 18gb of bloat, that is), turns out I was downloading a DVD aligned version of the ISO file, so I quickly started downloading the normal one instead, and with a way smaller installer iso, flashed it to a usb stick and I was off to the races. Next problem, I didn't have any HDMI monitor, except a TV that worked terribly with every computer in the past, due to it reporting itself as a 1080p TV, even tho it was a 768p one. So 1 stolen HDMI to DVI connector from my brother later, I was able to get a normal video output on a monitor that I could actually move(unlike the 4k tv I had used with it while testing it out, that I couldn't really manipulate easilly, nor use it at 3am). Once I actually got to the installer, I got hit with something. I have not used a graphical OS installer in like 3 years now, atleast not on my own machines. I have installed windows 10, but due to me being a dummy and flashing an ISO with dd on linux, that made me think windows installer was just stupid(while I think the problem was actually mismatching UDF blocksizes with the dd ones or something), and always ended up having to do something janky with the command line anyway, and therefore.. not use the graphical installer, and for linux, I have always used arch, or debian on my raspberry pi, but there's not really a graphical on device installer on the rpi, you kindof just flash the image onto the sdcard and it just worked, and on arch its all command line. So I had to navigate this weirdly user friendly installer, and I obviously forgot to use a mouse(because of not being used to them), and opensuse maintainers.. please make your installer more tab/arrow/space/enter friendly, its awful. So after 2h of that and finally deciding getting a mouse connected wouldn't be a dumb idea, I got the OS installed, altho it suprised me that opensuse didn't allow me to not let me not install any one of those network manager services like NetworkManager or some other ones, instead only giving me option to choose which one. So after installing it with NetworkManager(which I didn't want, but oh well), I was finally in an operating system installed on the main drive. But there was still networkmanager bloating everything, and for some reason, when I wanted to install screenfetch, it wanted 300mb of dependencies, and apparently it wanted to isntall the whole X11 service, which wouldn't make sence (atleast not yet), to have on a server unless I wanted the ssh -X thing (I didn't), but turning off "recomended packages" in zypper's config(the pkg manager in opensuse), solved the issue with these kinds of huge dependency lists for everything. Then, I checked out my /etc/resolv.conf, and I got enraged to see that NetworkManager was trying to force me to use my IPS's DNS, which wouldn't be a problem if I was in a free country, but the default IPS's DNS here is so censored that I got enraged and imidietly uninstalled NetworkManager(the bigger reason was the fact that NetworkManager is bloat), which may have been a mistake without having another network managing program/some kind of script, so I had to turn on network manually on every reboot(for now) manually with the ip command. And, after looking for lighter alternatives, I looked at systemd-network, and it was kindof cool. I could assign static IP's easilly, its lightweight, and when I tried it, it worked amazing, first try. So I decided to go with that, and honestly its kinda sick, especially compared to the pile of burning garbage that is NetworkManager. So now, it was finally time to finally start setting up stuff. I wanted to finally build my own dockerfiles for stuff instead of editing existing ones at runtime, and that was actually kindof cool! My site was quite simple, I started with a light variant of nginx thats based on alpine base, and then just copied over my static files. Then it was time for my FTP server that you're reading this on, and initially I wanted to have 2 separate containers, one for FTP server and one for the listing, but after selinux something something security shared volumes having to be reflagged every time a 2nd container with volume was started, I decided to join them in a single container. I decided to go with nginx for the listing, because as much as I would love to run a custom C# webserver by me, I didn't trust myself with handling files + public network requests by myself, so I let nginx do it for me. As for the FTP server, I didn't really care too much because its running on my own LAN anyway, so I just went with the one I had prior experience with, VSFTPd, and would've called it a day if it actually worked. After a while of banging my head against the table and editing the vsftpd.conf file for the 90th time, at last it worked, and somehow adding SSL just worked with no issues at all. Sadly, I still haven't figured out why the vsftpd session crashes every time I exit filezilla, if anyone knows the solution let me know. So at last, I got my vsftpd and nginx and other more different nginx setup, and it was time to develop a maze that I could run without the worry of someone DDOSing it by requesting big enough mazes often enough, so I rewrote the whole API in C++.. maybe I just wanted to rewrite it in C++ and took this as an excuse, but we don't talk about that do we. So at last, it was all done! My existing services work now. I am planning to add a few more down the road, and hey, I am planning to order a receipt printer soon, so I am sure there will definetly be a post about that here in the next 2 months, we will see how long aliexpress takes to deliver again. As for now, this is it! Have the good rest of your millenium guys, peace.