<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zeyrian Faris</title>
    <description>The latest articles on DEV Community by Zeyrian Faris (@zeyrian_faris).</description>
    <link>https://dev.to/zeyrian_faris</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3950809%2F08e57afc-a6c6-4b72-bc60-0be9c27653db.jpg</url>
      <title>DEV Community: Zeyrian Faris</title>
      <link>https://dev.to/zeyrian_faris</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zeyrian_faris"/>
    <language>en</language>
    <item>
      <title>How I self-hosted my Flask app on an old laptop for almost free</title>
      <dc:creator>Zeyrian Faris</dc:creator>
      <pubDate>Mon, 25 May 2026 14:37:30 +0000</pubDate>
      <link>https://dev.to/zeyrian_faris/how-i-self-hosted-my-flask-app-on-an-old-laptop-for-almost-free-52h9</link>
      <guid>https://dev.to/zeyrian_faris/how-i-self-hosted-my-flask-app-on-an-old-laptop-for-almost-free-52h9</guid>
      <description>&lt;p&gt;I recently built fourpointo, a Flask web app for polytechnic students to manage assignments. Once it was working locally, I needed to get it live without paying for cloud hosting every month.&lt;/p&gt;

&lt;p&gt;Then I realised I had an old, unused laptop which I was trying to find a purpose for. I figured it would be great to use it as a home server to host my website and it saves costs.&lt;/p&gt;

&lt;p&gt;I wiped the laptop and went with Ubuntu Server since it's lightweight and widely used. There's plenty of documentation if I got stuck.&lt;/p&gt;

&lt;p&gt;I then cloned fourpointo from my new laptop onto my server.&lt;/p&gt;

&lt;p&gt;When developing fourpointo, I used Python's Flask library. However, Flask's built-in server is single-threaded and not designed to handle multiple requests at once. Gunicorn is a production-grade server that runs multiple workers so it can handle real traffic.&lt;/p&gt;

&lt;p&gt;After installing Gunicorn, I got the domain fourpointo.app from Namecheap which serves as the URL for my app.&lt;/p&gt;

&lt;p&gt;I then used Cloudflare Tunnel because it routes traffic through Cloudflare's servers, so my home IP stays hidden rather than being exposed publicly.&lt;/p&gt;

&lt;p&gt;One issue I ran into was fourpointo going down every time I closed the lid of my server. Then I realised the server cannot go to sleep, even if the lid is closed. So I edited a systemd script using the Command Line Interface to set it so that it doesn't go to sleep when the lid is closed.&lt;/p&gt;

&lt;p&gt;Another issue I faced was fixing bugs and pushing updates remotely. In order to update fourpointo, I needed to SSH into the server. However, that only worked if I was on the same wifi as my server. So remote fixing was impossible. To solve this issue, I used Tailscale which acts as a bridge between my server and my laptop. Tailscale generated an IP for me to use when I want to SSH into the server remotely.&lt;/p&gt;

&lt;p&gt;Through this experience, I learnt the basics of server and network administration using Linux. I will continue to push updates to fourpointo to enhance users' experiences and hopefully in the future, I will be able to scale the app up.&lt;/p&gt;

</description>
      <category>python</category>
      <category>webdev</category>
      <category>linux</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
