<?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: Roshan Sharma</title>
    <description>The latest articles on DEV Community by Roshan Sharma (@prime_1).</description>
    <link>https://dev.to/prime_1</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%2F3445657%2Fe4473120-65e2-452d-9024-bf4fec46abfd.png</url>
      <title>DEV Community: Roshan Sharma</title>
      <link>https://dev.to/prime_1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prime_1"/>
    <language>en</language>
    <item>
      <title>How I Deployed and Self-Hosted n8n on Ubuntu 24.04 🚀</title>
      <dc:creator>Roshan Sharma</dc:creator>
      <pubDate>Tue, 16 Sep 2025 16:03:39 +0000</pubDate>
      <link>https://dev.to/prime_1/how-i-deployed-and-self-hosted-n8n-on-ubuntu-2404-12ao</link>
      <guid>https://dev.to/prime_1/how-i-deployed-and-self-hosted-n8n-on-ubuntu-2404-12ao</guid>
      <description>&lt;p&gt;I recently wanted to experiment with automating tasks across different apps without relying on third-party platforms. That’s when I came across &lt;strong&gt;n8n&lt;/strong&gt; — an open-source workflow automation tool. In this post, I’ll show you how I set it up from scratch on an Ubuntu 24.04 server using Docker.&lt;/p&gt;

&lt;p&gt;This guide assumes you're starting fresh with a new server.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ What You’ll Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A cloud VPS or server with &lt;strong&gt;Ubuntu 24.04&lt;/strong&gt; installed&lt;/li&gt;
&lt;li&gt;SSH access to the server&lt;/li&gt;
&lt;li&gt;Basic Linux knowledge (though I’ll guide you through everything)&lt;/li&gt;
&lt;li&gt;A domain name (optional, but recommended for production setups)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1 — Connect to Your Server
&lt;/h2&gt;

&lt;p&gt;If you don’t already have a server, you can create one using providers like DigitalOcean, AWS Lightsail, or Vultr. After that, you can connect using SSH like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh username@your-server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once connected, you’re ready to start!&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Update the Server Packages
&lt;/h2&gt;

&lt;p&gt;It's always a good practice to update your server before installing anything.&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;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This updates your package lists and installs the latest versions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Install Docker
&lt;/h2&gt;

&lt;p&gt;n8n works best with Docker, so let's install Docker first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Docker Engine
&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 &lt;span class="nb"&gt;install &lt;/span&gt;docker.io &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable and start Docker:&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;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify Docker is installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see something like &lt;code&gt;Docker version 20.xx.x&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Allow Docker Without &lt;code&gt;sudo&lt;/code&gt; (Optional)
&lt;/h3&gt;

&lt;p&gt;If you don't want to type &lt;code&gt;sudo&lt;/code&gt; every time, you can add your user to the Docker group:&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;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then log out and log back in to apply the changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4 — Install Docker Compose
&lt;/h2&gt;

&lt;p&gt;Docker Compose makes it easier to define and run multi-container Docker applications.&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;apt &lt;span class="nb"&gt;install &lt;/span&gt;docker-compose &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5 — Set Up n8n with Docker Compose
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create a Folder for n8n
&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;mkdir&lt;/span&gt; ~/n8n
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/n8n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create the &lt;code&gt;docker-compose.yml&lt;/code&gt; File
&lt;/h3&gt;

&lt;p&gt;You can create and edit the file using &lt;code&gt;nano&lt;/code&gt; or any text editor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then paste the following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3"&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;n8n&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8nio/n8n&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5678:5678"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_BASIC_AUTH_ACTIVE=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_BASIC_AUTH_USER=admin&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_BASIC_AUTH_PASSWORD=yourpassword&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;N8N_HOST=your-server-ip&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WEBHOOK_URL=http://your-server-ip:5678/&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;GENERIC_TIMEZONE=Asia/Kolkata&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;~/.n8n:/home/node/.n8n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Important:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace &lt;code&gt;yourpassword&lt;/code&gt; with a strong password&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;your-server-ip&lt;/code&gt; with your server’s public IP address&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save the file and exit (&lt;code&gt;Ctrl + X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6 — Start n8n
&lt;/h2&gt;

&lt;p&gt;Run the following command to start the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will download the required image and start the container in detached mode.&lt;/p&gt;

&lt;p&gt;Check if it’s running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the n8n container listed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7 — Access n8n in Your Browser
&lt;/h2&gt;

&lt;p&gt;Open your browser and navigate to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://your-server-ip:5678
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll see the n8n login page. Use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Username:&lt;/strong&gt; &lt;code&gt;admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password:&lt;/strong&gt; the password you set in the &lt;code&gt;docker-compose.yml&lt;/code&gt; file&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 8 — Start Automating!
&lt;/h2&gt;

&lt;p&gt;You can now create workflows that connect different apps and services without writing a lot of code. It’s a great tool for testing, personal projects, or even lightweight automation for your business.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus — Next Steps
&lt;/h2&gt;

&lt;p&gt;Here are some things you can consider next:&lt;/p&gt;

&lt;p&gt;✔ Set up &lt;strong&gt;Nginx&lt;/strong&gt; as a reverse proxy&lt;br&gt;
✔ Secure your instance with &lt;strong&gt;SSL certificates&lt;/strong&gt; using Let’s Encrypt&lt;br&gt;
✔ Automate backups of your workflows&lt;br&gt;
✔ Explore advanced workflows connecting APIs, messaging platforms, or databases&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Setting up n8n from scratch on Ubuntu 24.04 was smooth and super rewarding. It’s powerful, flexible, and helps automate tasks in a way that’s easy to manage. If you’re exploring automation tools, I highly recommend giving n8n a try.&lt;/p&gt;

&lt;p&gt;I actually learned how to set this up by following the documentation on docs.vultr.com&lt;br&gt;
 — huge thanks to them for making the process easy to understand!&lt;/p&gt;

&lt;p&gt;Feel free to share your workflows or ask if you want tips on securing or scaling your instance!&lt;/p&gt;

&lt;p&gt;Happy automating! 🚀&lt;/p&gt;

</description>
      <category>automation</category>
      <category>programming</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Top 10 Linux Commands I Use Daily as a Developer</title>
      <dc:creator>Roshan Sharma</dc:creator>
      <pubDate>Tue, 19 Aug 2025 16:44:44 +0000</pubDate>
      <link>https://dev.to/prime_1/top-10-linux-commands-i-use-daily-as-a-developer-437</link>
      <guid>https://dev.to/prime_1/top-10-linux-commands-i-use-daily-as-a-developer-437</guid>
      <description>&lt;p&gt;I spend a lot of time working with Linux (mostly Ubuntu/Debian), and over time, I’ve noticed that there are a handful of commands I end up using almost every single day. Some are simple, some are a bit more advanced, but together they make my workflow faster and less frustrating.&lt;br&gt;
Here’s my personal list, maybe it’ll help someone who’s just starting out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. ls -lh&lt;/strong&gt;&lt;br&gt;
Checking what’s in a directory with human-readable sizes. I use -lh almost by muscle memory now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. grep&lt;/strong&gt;&lt;br&gt;
Searching through logs or config files quickly. Example:&lt;br&gt;
grep "error" /var/log/syslog&lt;br&gt;
Super useful when debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. htop&lt;/strong&gt;&lt;br&gt;
For monitoring processes and system resources. It’s much nicer than plain top.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. df -h&lt;/strong&gt;&lt;br&gt;
To check free disk space. I’ve avoided full disks many times thanks to this.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;5. du -sh *&lt;/em&gt;*&lt;br&gt;
When I want to know which folder is eating all my storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. tar -czvf backup.tar.gz folder/&lt;/strong&gt;&lt;br&gt;
For quick backups of folders before I make changes. I always prefer having a safe copy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. ssh user@server&lt;/strong&gt;&lt;br&gt;
Nothing fancy here, but since I work with servers a lot, this is basically daily usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. systemctl status &lt;/strong&gt;&lt;br&gt;
For checking if a service is running (MySQL, Docker, etc.). Saves time compared to digging through logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. chmod and chown&lt;/strong&gt;&lt;br&gt;
Permissions can be annoying, but knowing how to quickly fix them is a lifesaver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. curl&lt;/strong&gt;&lt;br&gt;
For testing APIs or checking if a web service is responding. Example:&lt;br&gt;
curl -I &lt;a href="https://example.com" rel="noopener noreferrer"&gt;https://example.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This list isn’t exhaustive, but these 10 commands cover most of my daily Linux tasks as a developer. The more I use them, the more I realize how powerful the command line is.&lt;/p&gt;

&lt;p&gt;What about you? Which Linux commands do you find yourself using every single day?&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
