<?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: thirzq</title>
    <description>The latest articles on DEV Community by thirzq (@thirza258).</description>
    <link>https://dev.to/thirza258</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%2F1133564%2F4765524f-8e4d-4e04-b0fb-e62f29130e27.jpeg</url>
      <title>DEV Community: thirzq</title>
      <link>https://dev.to/thirza258</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thirza258"/>
    <language>en</language>
    <item>
      <title>How I SSH the Cloudflare Tunnel based Home Server</title>
      <dc:creator>thirzq</dc:creator>
      <pubDate>Sat, 17 Jan 2026 16:29:41 +0000</pubDate>
      <link>https://dev.to/thirza258/how-i-ssh-the-cloudflare-tunnel-based-home-server-2fpj</link>
      <guid>https://dev.to/thirza258/how-i-ssh-the-cloudflare-tunnel-based-home-server-2fpj</guid>
      <description>&lt;p&gt;Continuing from the setup of a home server using Cloudflare Tunnel, the next step is enabling SSH access so the device can be accessed remotely. Normally, SSH access is done using ssh &lt;a href="mailto:user@ip-address"&gt;user@ip-address&lt;/a&gt;. However, as explained in the previous article, the server uses a dynamic IP address, which means the IP can change at any time.&lt;/p&gt;

&lt;p&gt;To solve this, the SSH setup must use an address that does not change. Cloudflare Tunnel makes this possible by allowing SSH access through a domain name instead of an IP address. With this configuration, SSH access can be done using ssh user@domain.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Verify Cloudflare Tunnel status&lt;br&gt;
Ensure that the Cloudflare Tunnel is active and its status is shown as Healthy in the Cloudflare Zero Trust dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Edit the tunnel configuration&lt;br&gt;
Click Edit on the active tunnel, then navigate to Published Application Routes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a new published application route&lt;br&gt;
Click Add a published application route to create a new route for SSH access.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tacnsv3i2gp0lgwlxkt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tacnsv3i2gp0lgwlxkt.png" alt="The set up" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure the SSH route

&lt;ul&gt;
&lt;li&gt;Subdomain: Use an unguessable subdomain for better security. For this example, use ssh.&lt;/li&gt;
&lt;li&gt;Domain: Select the active domain, which in this case is nevatal.tech.&lt;/li&gt;
&lt;li&gt;Service Type: Select SSH.&lt;/li&gt;
&lt;li&gt;URL: Set the URL to localhost:22, the default SSH port.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4ybklm6vqubvtwzx5g8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4ybklm6vqubvtwzx5g8.png" alt="the sidebar location" width="261" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next step is to secure SSH access by configuring Access Control.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open Access Control&lt;br&gt;
Go to Access Control and select Applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the application type&lt;br&gt;
Select Self-Hosted as the application type, since the server is a self-hosted device.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set the application name&lt;br&gt;
Enter an Application Name of your choice. For clarity, you can use a name such as ssh-server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure the session duration&lt;br&gt;
Set the Session Duration as needed. This controls how long a user can remain logged in before being required to reauthenticate.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku27d4y37fzrugq1t10g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fku27d4y37fzrugq1t10g.png" alt="Settings" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then Add the public hostname using the subdomain and domain configured earlier. In this case, the hostname is ssh.nevatal.tech.&lt;/p&gt;

&lt;p&gt;After that, you need to create an Access Policy. This is done under Access Policies and is used to define who is allowed to access your SSH service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2v2a0n827iwxuhd2m0m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2v2a0n827iwxuhd2m0m.png" alt="Policy Settings" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create a new policy&lt;br&gt;
Create a new policy and fill in the Basic Information.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set the policy name and action&lt;br&gt;
Enter a Policy Name of your choice. In this example, use john-access.&lt;br&gt;
Set the Action to Allow, since this policy is intended to permit SSH access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure the session duration&lt;br&gt;
Set the Session Duration to any value you prefer, or choose the same duration as the application session timeout. In this case, it is set to 24 hours.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add access rules&lt;br&gt;
Add Rules to define who is allowed to access the SSH service.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the authentication method&lt;br&gt;
For the Selector, choose the authentication method you want to use. In this example, select Email.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the allowed email address&lt;br&gt;
Enter John’s email address to grant him access to the SSH service.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After that you can access it from browser by input the link of ssh to the browser search in my case that is ssh.nevatal.tech&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Input the User Login
&lt;/h3&gt;

&lt;p&gt;Enter the username that will be used to access the server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy8guwcwop576hf8twla.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy8guwcwop576hf8twla.png" alt="Input the user login" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 2: Fill in the Password
&lt;/h3&gt;

&lt;p&gt;Provide the password for the user, then proceed. In this step, you can also input your private key; however, for this setup, I will sign in using a password.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqgd5djya5xkeluelm3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqgd5djya5xkeluelm3g.png" alt="Fill the password" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: SSH Browser Rendering Appears
&lt;/h3&gt;

&lt;p&gt;After enabling Browser Rendering, the &lt;strong&gt;SSH Browser Rendering&lt;/strong&gt; option will appear.&lt;br&gt;&lt;br&gt;
You can now run commands and interact with your server through a &lt;strong&gt;terminal-like interface directly in the browser&lt;/strong&gt; using SSH.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7zks4lv7xfiuoqona3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7zks4lv7xfiuoqona3m.png" alt="Browser Rendering Page" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With this setup, SSH access to the home server is now available &lt;strong&gt;without relying on a static IP address&lt;/strong&gt;. By combining Cloudflare Tunnel, a dedicated SSH route, and Access Control policies, the server can be accessed securely using a &lt;strong&gt;domain name&lt;/strong&gt; instead of an IP.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>How I handle Dynamic IP for my Home Server</title>
      <dc:creator>thirzq</dc:creator>
      <pubDate>Fri, 09 Jan 2026 08:24:05 +0000</pubDate>
      <link>https://dev.to/thirza258/how-i-handle-dynamic-ip-for-my-home-server-40np</link>
      <guid>https://dev.to/thirza258/how-i-handle-dynamic-ip-for-my-home-server-40np</guid>
      <description>&lt;p&gt;Running a home server is a great learning experience, but it comes with a major headache: &lt;strong&gt;Connectivity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I recently ran into a specific problem. I am running my Ubuntu home server using a SIM card through a mobile hotspot rather than a traditional wired connection. As a result, my public IP address is dynamic and changes every time I restart the connection or the device. Additionally, mobile networks often use CGNAT, which makes traditional port forwarding impossible.&lt;/p&gt;

&lt;p&gt;Re-configuring my domain to point to a new IP address every single day was painful and unsustainable.&lt;/p&gt;

&lt;p&gt;I found a solution that eliminates the need for a static IP entirely: &lt;strong&gt;Cloudflare Tunnel&lt;/strong&gt;. Here is how I set it up to expose my Docker containers to the internet securely.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Need
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;A Server:&lt;/strong&gt; I am using a laptop running Ubuntu.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;A Domain Name:&lt;/strong&gt; You need a custom domain.

&lt;ul&gt;
&lt;li&gt;  &lt;em&gt;Tip:&lt;/em&gt; If you are a student, you can get a free domain from &lt;strong&gt;Name.com&lt;/strong&gt; via the GitHub Student Developer Pack. Alternatively, &lt;strong&gt;eu.org&lt;/strong&gt; offers free subdomains (for non-commercial use).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;A Cloudflare Account:&lt;/strong&gt; The free tier works perfectly for this.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 1: Connect Your Domain to Cloudflare
&lt;/h2&gt;

&lt;p&gt;Before setting up the server, Cloudflare needs to manage your domain’s DNS.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Log in to Cloudflare and click &lt;strong&gt;"Add a Site."&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs1by2x7q1h7rk08ohv21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs1by2x7q1h7rk08ohv21.png" alt="DNS Records" width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Enter your domain name (e.g., &lt;code&gt;nevatal.tech&lt;/code&gt;) and click &lt;strong&gt;Quick Scan&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Select the &lt;strong&gt;Free Plan&lt;/strong&gt;. Cloudflare will scan your current DNS records.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6lhquow9gn4f2oord6v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6lhquow9gn4f2oord6v.png" alt="Cloudflare Nameserver" width="738" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;The Important Part:&lt;/strong&gt; Cloudflare will provide you with two Nameservers (e.g., &lt;code&gt;ns1.cloudflare.com&lt;/code&gt; and &lt;code&gt;ns2.cloudflare.com&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt; Go to your domain registrar (Name.com, GoDaddy, etc.).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2dja1rg8kkx4zptkqx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2dja1rg8kkx4zptkqx1.png" alt="Nameserver" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Find the &lt;strong&gt;Nameservers&lt;/strong&gt; setting, delete the existing ones, and input the two provided by Cloudflare.&lt;/li&gt;
&lt;li&gt; Save changes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Note: It may take anywhere from a few minutes to a few hours for the nameservers to update globally. You can bookmark the page and come back later if it’s taking time.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Create the Tunnel in Cloudflare Zero Trust
&lt;/h2&gt;

&lt;p&gt;Once your domain is active on Cloudflare, you need to create the tunnel configuration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzahd7kj0xa68gdbqrlhx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzahd7kj0xa68gdbqrlhx.png" alt="My Cloudfare Dashboard" width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to the &lt;strong&gt;Cloudflare Dashboard&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; On the left sidebar, click &lt;strong&gt;Zero Trust&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj19y55oetegceagcd2f5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj19y55oetegceagcd2f5.png" alt="Cloudflare Tunnel Dashboard" width="800" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Zero Trust dashboard, go to &lt;strong&gt;Networks&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Tunnels&lt;/strong&gt; (sometimes labeled as "Connectors").&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Create a Tunnel&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhltxm2o33putqrjiilw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhltxm2o33putqrjiilw9.png" alt="Cloudflared Tunnel" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Select &lt;strong&gt;Cloudflared&lt;/strong&gt; as the connector type.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Name your tunnel:&lt;/strong&gt; I named mine &lt;code&gt;my-server&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Save Tunnel&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 3: Install Cloudflared on Ubuntu
&lt;/h2&gt;

&lt;p&gt;After saving the tunnel name, Cloudflare will ask you to choose your environment. Since I am using Ubuntu, I selected &lt;strong&gt;Debian&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cloudflare provides a set of commands to install the &lt;code&gt;cloudflared&lt;/code&gt; agent and link it to your account. Open your Ubuntu terminal and run the following:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Add Cloudflare GPG Key
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0755 /usr/share/keyrings
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://pkg.cloudflare.com/cloudflare-public-v2.gpg | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /usr/share/keyrings/cloudflare-public-v2.gpg &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Add the Repository
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main'&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/cloudflared.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Install Cloudflared
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;cloudflared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. authenticate and Start the Service
&lt;/h3&gt;

&lt;p&gt;Look at your Cloudflare browser window. It will provide a command that looks like &lt;code&gt;sudo cloudflared service install [LONG-TOKEN]&lt;/code&gt;. Copy and paste that into your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;cloudflared service &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;YOUR_TOKEN_HERE]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you run this, the &lt;code&gt;cloudflared&lt;/code&gt; service will start automatically. If you look at your Cloudflare dashboard, the status of your Connector should change from "Inactive" to &lt;strong&gt;"Healthy"&lt;/strong&gt; or &lt;strong&gt;"Connected"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foctayty5929hec4357l9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foctayty5929hec4357l9.png" alt="My Cloudflare Tunnel Status" width="800" height="43"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are unable to activate it, or if it has already been registered but the terminal session was exited, you can activate it again by&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel run &lt;span class="nt"&gt;--protocol&lt;/span&gt; http2 &lt;span class="nt"&gt;--token&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;YOUR_TOKEN_HERE]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Exposing Your Applications (Routing)
&lt;/h2&gt;

&lt;p&gt;Now that the tunnel is running, your server is connected to Cloudflare, but no one can access your apps yet. You need to tell Cloudflare where to send the traffic.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Zero Trust Dashboard, inside your Tunnel configuration, open the &lt;strong&gt;Public Hostname&lt;/strong&gt; or &lt;strong&gt;Published Application Routes&lt;/strong&gt; tab.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;Add a Public Hostname / Published Application Routes&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Subdomain&lt;/strong&gt; Choose a prefix that represents your application. This can be any value that makes sense in your context, for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;www&lt;/code&gt; for a main website
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app&lt;/code&gt; for a web application
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;blog&lt;/code&gt; for a blog service
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;note&lt;/code&gt; if you are deploying a note-taking application  This subdomain will be combined with your domain (e.g., &lt;code&gt;note.nevatal.tech&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Domain&lt;/strong&gt;  Select your registered domain, &lt;strong&gt;&lt;code&gt;nevatal.tech&lt;/code&gt;&lt;/strong&gt;, from the dropdown list. Cloudflare will automatically bind the chosen subdomain to this domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service Type&lt;/strong&gt;  Select &lt;strong&gt;HTTP&lt;/strong&gt; if your application is served over HTTP internally (Cloudflare Tunnel will handle HTTPS externally).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;URL / Service Address&lt;/strong&gt;  Specify the internal service that Cloudflare should forward traffic to, for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://127.0.0.1:8080&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;(Optional)&lt;/em&gt; &lt;strong&gt;Path&lt;/strong&gt; If your application is exposed under a specific path or you want to route different paths to different services, you can define it here. Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/api&lt;/code&gt; → forwards to an API service running on a different port
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/admin&lt;/code&gt; → forwards to an admin panel on another server
This is useful when multiple applications are running on the same host but different ports or backends.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdoyro837c9skgxrp7d2s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdoyro837c9skgxrp7d2s.png" alt="Published Application Routes Config" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Save Hostname&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That’s it! Now, when I type &lt;code&gt;app.nevatal.tech&lt;/code&gt; into my browser, Cloudflare receives the request, sends it through the secure tunnel to my laptop (connected via SIM card), and my Ubuntu server responds.&lt;/p&gt;

&lt;p&gt;I no longer have to worry about my IP address changing or setting up complicated port forwarding rules. My home server is accessible from anywhere, completely free of charge.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>virtualmachine</category>
      <category>tutorial</category>
      <category>linux</category>
    </item>
    <item>
      <title>Nevatal Joins Hacktoberfest 2025: Build the Future of AI Functions Hub 🚀</title>
      <dc:creator>thirzq</dc:creator>
      <pubDate>Sun, 19 Oct 2025 08:47:22 +0000</pubDate>
      <link>https://dev.to/thirza258/nevatal-joins-hacktoberfest-2025-build-the-future-of-ai-functions-hub-49ai</link>
      <guid>https://dev.to/thirza258/nevatal-joins-hacktoberfest-2025-build-the-future-of-ai-functions-hub-49ai</guid>
      <description>&lt;p&gt;🧠 What is Nevatal?&lt;/p&gt;

&lt;p&gt;Nevatal is an all-in-one platform that connects multiple AI functions through a single hub.&lt;/p&gt;

&lt;p&gt;It’s designed to make experimenting with AI simple and accessible. Just plug in your Gemini API key, and you’re ready to start building.&lt;/p&gt;

&lt;p&gt;🏗️ Tech Stack Highlights&lt;/p&gt;

&lt;p&gt;Backend: Django REST Framework&lt;br&gt;
AI Integration: Gemini API&lt;br&gt;
Frontend: Vite + React + TailwindCSS + TypeScript&lt;br&gt;
Deployment: Dockerized for quick setup anywhere&lt;/p&gt;

&lt;p&gt;In short, Nevatal delivers a smooth, modern developer experience from setup to execution.&lt;/p&gt;

&lt;p&gt;💡 Why Contribute?&lt;/p&gt;

&lt;p&gt;Hacktoberfest is about growing the open-source community, and Nevatal offers a perfect playground to explore AI-powered systems.&lt;/p&gt;

&lt;p&gt;By contributing, you’ll:&lt;br&gt;
✅ Learn how to build AI-driven backends and interactive frontends&lt;br&gt;
✅ Gain real experience in AI system design&lt;br&gt;
✅ Boost your open-source portfolio&lt;br&gt;
✅ Earn Hacktoberfest swag 🌱&lt;/p&gt;

&lt;p&gt;🛠️ How You Can Contribute&lt;/p&gt;

&lt;p&gt;There are plenty of ways to get involved:&lt;br&gt;
🧩 Add new AI use cases or endpoints&lt;br&gt;
🎨 Improve frontend components and UX&lt;br&gt;
⚙️ Enhance Docker setup and deployment&lt;br&gt;
📖 Write documentation or tutorials&lt;/p&gt;

&lt;p&gt;Every pull request counts, whether you’re fixing a small issue or adding a major new feature.&lt;/p&gt;

&lt;p&gt;📍 Get Started&lt;/p&gt;

&lt;p&gt;Ready to contribute?&lt;/p&gt;

&lt;p&gt;🔗 GitHub Repo: &lt;a href="https://github.com/thirza258/nevatal" rel="noopener noreferrer"&gt;Nevatal Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fork the repository, create a branch, make your changes, and open a pull request.&lt;br&gt;
Don’t forget to ⭐ the project to show your support!&lt;/p&gt;

&lt;p&gt;💫 Let’s Build Smarter Together&lt;/p&gt;

&lt;p&gt;Nevatal is about making AI development easier, faster, and more collaborative.&lt;br&gt;
With your help, we can turn it into a go-to hub for AI creators and developers around the world.&lt;/p&gt;

&lt;p&gt;Join us this Hacktoberfest and let’s make Nevatal smarter together 💻✨&lt;/p&gt;

&lt;h1&gt;
  
  
  Hacktoberfest #OpenSource #AI #Django #React #GeminiAPI #Docker
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
