Me (left) accepitng a momento from Hadif (right), one of the two NITC students on my team

Me (left) accepitng a momento from Hadif (right), one of the two NITC students on my team

On Feb 11, I conducted a 3 hour introductory workshop on Self Hosting at FOSSMeet ‘23 at NIT Calicut. This post has my notes on teaching Self-Hosting to a crowd and an easy-to-find link for people who land on my personal website.

My slides for the workshop are available here.


The audience for the event was mostly smart students who were relatively new to the Linux terminal. Rather surprisingly, I got to know after the workshop that some of the attendees were not even coming from a tech background.

I think this is what should be expected for future workshops too. The people who will benefit the most from an introductory workshop to Self Hosting are people who have some familiarity with the Linux terminal but things like SSH, tmux, nginx configuration might be new to them.

Structure / Infra

The structure of the workshop was that each participant would get a DigitalOcean droplet allotted to them for the day. We had set up these droplets with a non-root sudo user, and a default password for all instances that they could use. Agreed that while even things like creating a non-root user would be useful to someone looking to self-host, it is better to include things like that in an appendix and use the workshop time on more interesting things.

The DNS entries were set for all nodes (an A record) for a subdomain and the corresponding wildcard for it (e.g. and * would point to the same node). Authentication was done with a password, with SSH authentication disabled.

After this, we would go over SSH, tmux, apt, Nginx, static hosting, dynamic hosting, HTTPS with certbot, persistent services, and htop. Each of these would include a small exercise that the participants will need to do. The workshop team would then go around the participants, help whoever might be stuck and then keep going.

The highlight of the workshop was hosting a static website and a dynamic website, enabled from HTTPS.

What went well?

It was a crowded workshop and we had to say no to some interested participants because we had only prepared 40 nodes for the workshop. Participants showed interest and there were attendees with different levels of familiarity attending.

During the tasks, the three of us (me and two student volunteers from NITC) on the conducting team used to walk around different areas, help participants, and answer queries. This worked very well because a lot of little things could go wrong and having an experienced person to fix things on the spot meant that the participants weren’t getting stuck anywhere.

For example, when we were using certbot to apply HTTPS, some participants made a typo in the domain and certbot wrote a new configuration to the Nginx default configuration, rather than the site it was intended to be on. This configuration needed to be restored back to normal and the website configuration had to be fixed. I had to do this for multiple participants and it wouldn’t have been easy to fix if someone experienced hadn’t been there on the spot.

At the end, it made me very happy that almost all of the participants had stuck through the 3 hours and had deployed both the static and dynamic websites. Some of these participants were new even to SSH, cat and nano commands when they started, and by the end they knew their way around tmux and nginx.

It helped to keep the things to cover very limited. I didn’t go into docker and docker-compose, vim, Makefiles, and other things I had initially wanted to cover. That was the right call. I had my notes reviewed by my colleague Anand, who has conducted such trainings before, and that helped me set the goals accordingly.

Publishing the notes to a website helped because then participants could catch up on things they had forgotten. They could also use it later at home to remember what they learnt in case they decide to start self-hosting on their own. An easy to pronounce, short link makes it even better.

mdbook worked very well for my slides.

What could’ve been better?

Self-hosting also refers to using your own hardware at home to host software and exposing it to the web. A workshop on that kind of self-hosting is hard to conduct at scale, and it’s easier to get started with cloud machines. Some participants came to me later saying that they expected this kind of self-hosting rather than relying on cloud vendors. I should’ve stated it at the start to set the expectations of participants on what kind of self-hosting we would be talking about.

While most of the content in my notes was correct, there were 2 times that I forgot to include a line of code somewhere and 1 task where I had only mentioned a step in English text and not as code. I was able to get most students to see my correction, but some still missed them. Then I had to repeat it multiple times and help some participants personally on it. Typos or forgotten lines of code like this are easily mendable in small groups but they become much more expensive as the number of participants scales.

Some participants mentioned to me later that the pace of the workshop was quite slow for them, and that it was beginner oriented. While I think that was the right pace anyway while keeping the whole crowd in mind, it might have helped to have some fun bonus tasks along with normal tasks so that the participants remained engaged.