<?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: HostnExtra Technologies</title>
    <description>The latest articles on DEV Community by HostnExtra Technologies (@hostnextra).</description>
    <link>https://dev.to/hostnextra</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F488814%2Fd35683ec-6a52-4401-a7cc-9478f9c1f493.png</url>
      <title>DEV Community: HostnExtra Technologies</title>
      <link>https://dev.to/hostnextra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hostnextra"/>
    <language>en</language>
    <item>
      <title>Introducing HostnExtra CLI: An Open Source Toolkit for Linux Server Management</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Fri, 07 Aug 2026 05:19:15 +0000</pubDate>
      <link>https://dev.to/hostnextra/introducing-hostnextra-cli-an-open-source-toolkit-for-linux-server-management-595e</link>
      <guid>https://dev.to/hostnextra/introducing-hostnextra-cli-an-open-source-toolkit-for-linux-server-management-595e</guid>
      <description>&lt;p&gt;Managing Linux servers often involves a collection of commands, scripts, and configuration files spread across multiple tools. While each tool serves its purpose, switching between them can slow down routine administration tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://hostnextra.com/docs" rel="noopener noreferrer"&gt;HostnExtra CLI&lt;/a&gt;&lt;/strong&gt; was created to bring these everyday operations together into a single, extensible command-line toolkit. Built with TypeScript and designed around a plugin architecture, it helps system administrators, DevOps engineers, developers, and hosting providers manage infrastructure more efficiently from the terminal.&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/hostnextra/cli" rel="noopener noreferrer"&gt;https://github.com/hostnextra/cli&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why We Built HostnExtra CLI
&lt;/h2&gt;

&lt;p&gt;At HostnExtra, we work with Linux servers every day. Whether we're deploying new infrastructure, managing SSH access, monitoring server health, or creating secure tunnels, we rely heavily on the command line.&lt;/p&gt;

&lt;p&gt;Over time, we noticed that many administrative tasks followed the same workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure SSH connections&lt;/li&gt;
&lt;li&gt;Verify server health&lt;/li&gt;
&lt;li&gt;Access internal services securely&lt;/li&gt;
&lt;li&gt;Organize server configurations&lt;/li&gt;
&lt;li&gt;Perform routine maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of creating isolated utilities for each task, we built a modular CLI that brings them together under one consistent interface.&lt;/p&gt;

&lt;p&gt;Our goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build an open source toolkit that makes Linux server management faster, cleaner, and more organized.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Built Around Plugins
&lt;/h2&gt;

&lt;p&gt;HostnExtra CLI uses a plugin-based architecture. Each plugin focuses on a specific area of server administration while maintaining a consistent user experience across the entire CLI.&lt;/p&gt;

&lt;p&gt;This design allows the project to grow naturally while keeping commands easy to discover and use.&lt;/p&gt;

&lt;p&gt;Current plugins include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH Configuration Management&lt;/li&gt;
&lt;li&gt;Server Monitoring&lt;/li&gt;
&lt;li&gt;Secure SSH Tunnels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More plugins are already planned for future releases.&lt;/p&gt;




&lt;h2&gt;
  
  
  SSH Configuration Management
&lt;/h2&gt;

&lt;p&gt;Managing SSH configurations manually works well for a few servers, but as infrastructure grows, keeping everything organized becomes increasingly important.&lt;/p&gt;

&lt;p&gt;The SSH plugin simplifies common operations such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating new SSH hosts&lt;/li&gt;
&lt;li&gt;Editing existing configurations&lt;/li&gt;
&lt;li&gt;Listing saved hosts&lt;/li&gt;
&lt;li&gt;Testing SSH connections&lt;/li&gt;
&lt;li&gt;Connecting directly from the CLI&lt;/li&gt;
&lt;li&gt;Importing and exporting configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of manually editing &lt;code&gt;~/.ssh/config&lt;/code&gt;, the CLI provides a structured workflow for managing server access.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hostnextra ssh add
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hostnextra ssh list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hostnextra ssh connect production-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Server Monitoring
&lt;/h2&gt;

&lt;p&gt;Understanding the health of a server should be quick and straightforward.&lt;/p&gt;

&lt;p&gt;The Monitor plugin collects important system information and presents it in a clean, easy-to-read report.&lt;/p&gt;

&lt;p&gt;It analyzes areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory utilization&lt;/li&gt;
&lt;li&gt;Swap usage&lt;/li&gt;
&lt;li&gt;Disk usage&lt;/li&gt;
&lt;li&gt;Operating system information&lt;/li&gt;
&lt;li&gt;Overall server health&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes it useful for routine maintenance, troubleshooting, and verifying server performance after deployments.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hostnextra monitor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Within seconds, you receive a comprehensive overview of your server's current state.&lt;/p&gt;




&lt;h2&gt;
  
  
  Secure SSH Tunnels
&lt;/h2&gt;

&lt;p&gt;SSH tunneling is one of the most useful tools available to Linux administrators. It enables secure access to services running on remote machines without exposing them publicly.&lt;/p&gt;

&lt;p&gt;The Tunnel plugin simplifies the process of creating and managing SSH tunnels.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hostnextra tunnel open &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from&lt;/span&gt; web-prod-01:3306 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--to&lt;/span&gt; localhost:3306
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the tunnel is no longer needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hostnextra tunnel close
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The plugin manages the tunnel lifecycle, making it easy to open, monitor, and close secure connections.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designed for Developers and System Administrators
&lt;/h2&gt;

&lt;p&gt;HostnExtra CLI is suitable for anyone who works with Linux infrastructure, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System Administrators&lt;/li&gt;
&lt;li&gt;DevOps Engineers&lt;/li&gt;
&lt;li&gt;Backend Developers&lt;/li&gt;
&lt;li&gt;Hosting Providers&lt;/li&gt;
&lt;li&gt;Platform Engineers&lt;/li&gt;
&lt;li&gt;Home Lab Enthusiasts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're managing one server or an entire fleet, the CLI is designed to simplify everyday operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built with TypeScript
&lt;/h2&gt;

&lt;p&gt;HostnExtra CLI is developed using modern TypeScript, providing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong type safety&lt;/li&gt;
&lt;li&gt;Modular architecture&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility&lt;/li&gt;
&lt;li&gt;Easy plugin development&lt;/li&gt;
&lt;li&gt;Improved maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project follows modern development practices to ensure reliability and long-term growth.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open Source from Day One
&lt;/h2&gt;

&lt;p&gt;HostnExtra CLI is fully open source.&lt;/p&gt;

&lt;p&gt;We believe infrastructure tools become stronger through community collaboration. Developers are welcome to explore the codebase, report issues, suggest improvements, and contribute new features.&lt;/p&gt;

&lt;p&gt;Every contribution helps improve the experience for Linux users around the world.&lt;/p&gt;

&lt;p&gt;GitHub Repository:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/hostnextra/cli" rel="noopener noreferrer"&gt;https://github.com/hostnextra/cli&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Install HostnExtra CLI globally using npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; hostnextra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or run it directly using npx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx hostnextra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To view all available commands:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;HostnExtra CLI is actively evolving, with several new plugins already in development.&lt;/p&gt;

&lt;p&gt;Future areas of focus include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Container management&lt;/li&gt;
&lt;li&gt;Backup utilities&lt;/li&gt;
&lt;li&gt;Deployment automation&lt;/li&gt;
&lt;li&gt;Additional networking tools&lt;/li&gt;
&lt;li&gt;Infrastructure productivity plugins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our vision is to build a comprehensive command-line toolkit that supports the daily workflow of Linux professionals while remaining lightweight, modular, and easy to extend.&lt;/p&gt;




&lt;h2&gt;
  
  
  Join the Community
&lt;/h2&gt;

&lt;p&gt;We're excited to continue building HostnExtra CLI alongside the open source community.&lt;/p&gt;

&lt;p&gt;If you're passionate about Linux, DevOps, server management, or open source software, we'd love to have you involved.&lt;/p&gt;

&lt;p&gt;⭐ Star the project on GitHub&lt;/p&gt;

&lt;p&gt;🐞 Report issues and suggest features&lt;/p&gt;

&lt;p&gt;💡 Share ideas for new plugins&lt;/p&gt;

&lt;p&gt;🤝 Contribute to the codebase&lt;/p&gt;

&lt;p&gt;GitHub Repository:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/hostnextra/cli" rel="noopener noreferrer"&gt;https://github.com/hostnextra/cli&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thank you for being part of the journey. We look forward to building the future of Linux server management together.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>linux</category>
      <category>cli</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Introducing Two Open Source CLI Tools from HostnExtra</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Wed, 29 Jul 2026 11:51:28 +0000</pubDate>
      <link>https://dev.to/hostnextra/introducing-two-open-source-cli-tools-from-hostnextra-15f1</link>
      <guid>https://dev.to/hostnextra/introducing-two-open-source-cli-tools-from-hostnextra-15f1</guid>
      <description>&lt;p&gt;At &lt;strong&gt;&lt;a href="https://hostnextra.com" rel="noopener noreferrer"&gt;HostnExtra&lt;/a&gt;&lt;/strong&gt;, we believe the best developer tools solve real problems without adding unnecessary complexity.&lt;/p&gt;

&lt;p&gt;Working with Linux servers, SSH, and infrastructure automation every day exposed the same repetitive tasks across projects. Instead of solving those problems internally, we decided to build reusable tools and release them as open source so developers, DevOps engineers, and system administrators can benefit from them as well.&lt;/p&gt;

&lt;p&gt;Today, we're excited to introduce the first two projects in the &lt;strong&gt;HostnExtra Open Source&lt;/strong&gt; ecosystem.&lt;/p&gt;




&lt;h2&gt;
  
  
  HostnExtra CLI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;HostnExtra CLI&lt;/strong&gt; is a modern command-line toolkit built for infrastructure workflows.&lt;/p&gt;

&lt;p&gt;Our goal is to create a consistent and extensible CLI experience that helps simplify common server management tasks while providing a strong foundation for future infrastructure tools.&lt;/p&gt;

&lt;p&gt;Whether you're managing one server or hundreds, the CLI is designed to be fast, intuitive, and easy to extend.&lt;/p&gt;




&lt;h2&gt;
  
  
  HostnExtra SSH Config
&lt;/h2&gt;

&lt;p&gt;Managing SSH hosts often means manually editing &lt;code&gt;~/.ssh/config&lt;/code&gt;, searching through configuration files, or maintaining scripts for common tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HostnExtra SSH Config&lt;/strong&gt; provides a cleaner workflow by allowing you to manage SSH configurations directly from the command line.&lt;/p&gt;

&lt;p&gt;Current capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add and organise SSH hosts&lt;/li&gt;
&lt;li&gt;Edit existing configurations&lt;/li&gt;
&lt;li&gt;Connect to servers quickly&lt;/li&gt;
&lt;li&gt;Test SSH connectivity&lt;/li&gt;
&lt;li&gt;Import and export configurations&lt;/li&gt;
&lt;li&gt;View connection history&lt;/li&gt;
&lt;li&gt;Maintain a structured SSH configuration without manual file editing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The focus is on improving everyday productivity while keeping the experience familiar for developers and system administrators.&lt;/p&gt;




&lt;h2&gt;
  
  
  Engineering Principles
&lt;/h2&gt;

&lt;p&gt;Every project we release follows a few core principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open source from day one&lt;/li&gt;
&lt;li&gt;Built with TypeScript&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility&lt;/li&gt;
&lt;li&gt;Clean and maintainable architecture&lt;/li&gt;
&lt;li&gt;Consistent command design&lt;/li&gt;
&lt;li&gt;Minimal dependencies where practical&lt;/li&gt;
&lt;li&gt;Built for real production workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We believe developer tools should stay out of the way and let engineers focus on solving problems instead of managing repetitive tasks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Available on npm
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HostnExtra CLI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/hostnextra" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/hostnextra&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HostnExtra SSH Config
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/hostnextra-ssh-config" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/hostnextra-ssh-config&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Building an Open Source Ecosystem
&lt;/h2&gt;

&lt;p&gt;These projects mark the beginning of HostnExtra's open source journey.&lt;/p&gt;

&lt;p&gt;Our vision is to build a growing ecosystem of practical tools that simplify infrastructure management, automation, and developer workflows. Every new project will be guided by the same principles: solve real problems, keep the developer experience simple, and make the tools freely available to the community.&lt;/p&gt;

&lt;p&gt;We're actively developing new projects, and this is only the first step.&lt;/p&gt;

&lt;p&gt;If you explore these packages, we'd love to hear your thoughts. Feature requests, bug reports, discussions, and contributions all help shape the future of these tools.&lt;/p&gt;

&lt;p&gt;Open source thrives through collaboration, and we're excited to build that future together.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>npm</category>
      <category>typescript</category>
      <category>hostnextra</category>
    </item>
    <item>
      <title>How to Host Docker Apps on Ubuntu 26.04 with Caddy and Docker Compose</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Thu, 23 Jul 2026 07:17:30 +0000</pubDate>
      <link>https://dev.to/hostnextra/how-to-host-docker-apps-on-ubuntu-2604-with-caddy-and-docker-compose-ige</link>
      <guid>https://dev.to/hostnextra/how-to-host-docker-apps-on-ubuntu-2604-with-caddy-and-docker-compose-ige</guid>
      <description>&lt;p&gt;Deploying your own applications doesn't have to be complicated. Docker Compose makes it easy to manage containers, while Caddy automatically handles HTTPS using Let's Encrypt. Together, they provide a simple and reliable setup for hosting websites, APIs, and self hosted applications.&lt;/p&gt;

&lt;p&gt;In this guide, you'll create a basic production ready setup that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Compose for managing containers&lt;/li&gt;
&lt;li&gt;Caddy as a reverse proxy and web server&lt;/li&gt;
&lt;li&gt;Automatic HTTPS with Let's Encrypt&lt;/li&gt;
&lt;li&gt;A simple test page before deploying your own application&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before getting started, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hostnextra.com/dedicated-server" rel="noopener noreferrer"&gt;Ubuntu 26.04 dedicated server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A domain name pointing to your server&lt;/li&gt;
&lt;li&gt;Docker installed&lt;/li&gt;
&lt;li&gt;Docker Compose plugin installed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verify the installation:&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;
docker compose version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1: Create the project directory
&lt;/h3&gt;

&lt;p&gt;Create a directory for your project.&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;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/apps/myapp/site
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/apps/myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your project structure should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myapp/
├── compose.yml
├── Caddyfile
└── site/
    └── index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Create the Docker Compose file
&lt;/h3&gt;

&lt;p&gt;Create a file named &lt;code&gt;compose.yml&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Add 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;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy&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;caddy:2&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy&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;unless-stopped&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;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443/udp"&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;./Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./site:/srv&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_data:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_config:/config&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy_config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;caddy_data&lt;/code&gt; volume stores your SSL certificates, so they remain available even after updating the container.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure Caddy
&lt;/h3&gt;

&lt;p&gt;Create a file named &lt;code&gt;Caddyfile&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano Caddyfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com {

    root * /srv
    file_server
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;strong&gt;&lt;em&gt;example.com&lt;/em&gt;&lt;/strong&gt; with your own domain name.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Create a test page
&lt;/h3&gt;

&lt;p&gt;Inside the site directory, create an &lt;code&gt;index.html&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Caddy Test Page&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;🎉 Caddy is Working!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Your Ubuntu 26.04 server is serving this page securely with HTTPS.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This page helps confirm that your DNS, Docker, Caddy, and SSL certificate are all working correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Start Caddy
&lt;/h3&gt;

&lt;p&gt;Launch 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;Check that it is 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 compose ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your domain is already pointing to the server, Caddy will automatically request and install an SSL certificate.&lt;/p&gt;

&lt;p&gt;Visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the test page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: View logs
&lt;/h3&gt;

&lt;p&gt;If you need to troubleshoot, check the container logs.&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 logs &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hosting your application
&lt;/h3&gt;

&lt;p&gt;Once everything is working, you can replace the test page with your own application.&lt;/p&gt;

&lt;p&gt;Update your &lt;code&gt;compose.yml&lt;/code&gt;.&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;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&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;ghcr.io/yourusername/myapp:latest&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;unless-stopped&lt;/span&gt;

  &lt;span class="na"&gt;caddy&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;caddy:2&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;unless-stopped&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;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443/udp"&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;./Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_data:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;caddy_config:/config&lt;/span&gt;

    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;caddy_config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the &lt;code&gt;Caddyfile&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com {

    reverse_proxy app:3000
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace 3000 with the port used by your application.&lt;/p&gt;

&lt;p&gt;Apply the changes.&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;Your application will now be available through Caddy with automatic HTTPS.&lt;/p&gt;

&lt;p&gt;Caddy and Docker Compose are a great combination for hosting modern applications on Ubuntu 26.04. Caddy automatically manages HTTPS, while Docker Compose keeps your deployment simple and easy to maintain.&lt;/p&gt;

&lt;p&gt;You can use this same setup for Node.js, Next.js, Go, Laravel, Python, or any application running inside a Docker container by simply updating the reverse_proxy target in your Caddyfile.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>caddy</category>
      <category>ubuntu</category>
      <category>hostnextra</category>
    </item>
    <item>
      <title>Secure SSH on Ubuntu 26.04 with SSH Keys and Fail2ban</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Thu, 23 Jul 2026 07:04:49 +0000</pubDate>
      <link>https://dev.to/hostnextra/secure-ssh-on-ubuntu-2604-with-ssh-keys-and-fail2ban-31bm</link>
      <guid>https://dev.to/hostnextra/secure-ssh-on-ubuntu-2604-with-ssh-keys-and-fail2ban-31bm</guid>
      <description>&lt;p&gt;If your server is connected to the internet, automated bots are already trying to access it.&lt;/p&gt;

&lt;p&gt;One of the easiest ways to improve server security is to stop relying on passwords and switch to SSH keys. Combined with Fail2ban, this can drastically reduce the risk of brute force attacks.&lt;/p&gt;

&lt;p&gt;In this guide, we'll secure SSH on Ubuntu 26.04 by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using SSH key authentication&lt;/li&gt;
&lt;li&gt;Disabling root login&lt;/li&gt;
&lt;li&gt;Disabling password authentication&lt;/li&gt;
&lt;li&gt;Installing Fail2ban&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Password based SSH logins are a common target for automated attacks.&lt;/p&gt;

&lt;p&gt;Even strong passwords can eventually become a liability, especially when attackers can attempt thousands of logins from different IP addresses.&lt;/p&gt;

&lt;p&gt;SSH keys provide a much stronger authentication method, while Fail2ban automatically blocks repeated login failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Update the Server
&lt;/h2&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="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;h2&gt;
  
  
  Step 2: Generate an SSH Key Pair
&lt;/h2&gt;

&lt;p&gt;On your local computer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"ubuntu-server"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accept the default location and optionally set a passphrase.&lt;/p&gt;

&lt;p&gt;This creates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Copy the Public Key to the Server
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id username@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id admin@203.0.113.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Verify Key Authentication
&lt;/h2&gt;

&lt;p&gt;Open a new terminal window and connect:&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@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If login works without asking for the server password, SSH keys are working correctly.&lt;/p&gt;

&lt;p&gt;Keep your existing SSH session open until testing is complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Create a Custom SSH Security Configuration
&lt;/h2&gt;

&lt;p&gt;Ubuntu 26.04 supports configuration snippets through the &lt;code&gt;sshd_config.d&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;Create a new file:&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;nano /etc/ssh/sshd_config.d/99-security.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ssh"&gt;&lt;code&gt;&lt;span class="k"&gt;Port&lt;/span&gt; &lt;span class="m"&gt;52525&lt;/span&gt;
&lt;span class="k"&gt;PermitRootLogin&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;
&lt;span class="k"&gt;PasswordAuthentication&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;
&lt;span class="k"&gt;PubkeyAuthentication&lt;/span&gt; &lt;span class="no"&gt;yes&lt;/span&gt;
&lt;span class="k"&gt;ChallengeResponseAuthentication&lt;/span&gt; &lt;span class="no"&gt;no&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Above &lt;/p&gt;

&lt;p&gt;Step 7: Validate the Configuration&lt;/p&gt;

&lt;p&gt;Before restarting SSH:&lt;/p&gt;

&lt;p&gt;sudo sshd -t&lt;/p&gt;

&lt;p&gt;If no output appears, the configuration is valid.&lt;/p&gt;

&lt;p&gt;Step 8: Restart SSH&lt;br&gt;
sudo systemctl restart ssh&lt;/p&gt;

&lt;p&gt;Verify status:&lt;/p&gt;

&lt;p&gt;sudo systemctl status ssh&lt;/p&gt;

&lt;p&gt;Test SSH access from another terminal:&lt;/p&gt;

&lt;p&gt;ssh username@server_ip&lt;/p&gt;

&lt;p&gt;Password authentication should no longer work.&lt;/p&gt;

&lt;p&gt;Step 9: Install Fail2ban&lt;/p&gt;

&lt;p&gt;Install Fail2ban:&lt;/p&gt;

&lt;p&gt;sudo apt install fail2ban -y&lt;/p&gt;

&lt;p&gt;Enable and start the service:&lt;/p&gt;

&lt;p&gt;sudo systemctl enable fail2ban&lt;br&gt;
sudo systemctl start fail2ban&lt;/p&gt;

&lt;p&gt;Check status:&lt;/p&gt;

&lt;p&gt;sudo systemctl status fail2ban&lt;br&gt;
Step 10: Configure Fail2ban&lt;/p&gt;

&lt;p&gt;Create a local configuration file:&lt;/p&gt;

&lt;p&gt;sudo nano /etc/fail2ban/jail.local&lt;/p&gt;

&lt;p&gt;Add:&lt;/p&gt;

&lt;p&gt;[sshd]&lt;br&gt;
enabled = true&lt;br&gt;
port = ssh&lt;br&gt;
backend = systemd&lt;br&gt;
maxretry = 5&lt;br&gt;
findtime = 10m&lt;br&gt;
bantime = 1h&lt;/p&gt;

&lt;p&gt;Restart Fail2ban:&lt;/p&gt;

&lt;p&gt;sudo systemctl restart fail2ban&lt;br&gt;
Step 11: Verify Protection&lt;/p&gt;

&lt;p&gt;View active jails:&lt;/p&gt;

&lt;p&gt;sudo fail2ban-client status&lt;/p&gt;

&lt;p&gt;View SSH jail details:&lt;/p&gt;

&lt;p&gt;sudo fail2ban-client status sshd&lt;br&gt;
Monitoring SSH Activity&lt;/p&gt;

&lt;p&gt;View SSH logs:&lt;/p&gt;

&lt;p&gt;sudo journalctl -u ssh -f&lt;/p&gt;

&lt;p&gt;View Fail2ban activity:&lt;/p&gt;

&lt;p&gt;sudo journalctl -u fail2ban -f&lt;br&gt;
Final Checklist&lt;/p&gt;

&lt;p&gt;Before considering your SSH setup secure, verify:&lt;/p&gt;

&lt;p&gt;SSH keys are working&lt;br&gt;
Root login is disabled&lt;br&gt;
Password authentication is disabled&lt;br&gt;
SSH configuration validates successfully&lt;br&gt;
Fail2ban is running&lt;br&gt;
Updates are installed regularly&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;SSH is one of the most exposed services on a Linux server, making it a frequent target for automated attacks.&lt;/p&gt;

&lt;p&gt;By switching to SSH keys, disabling password authentication, and deploying Fail2ban, you add several layers of protection with very little effort.&lt;/p&gt;

&lt;p&gt;These changes take only a few minutes to implement but can significantly improve the security of any Ubuntu 26.04 server.&lt;/p&gt;

</description>
      <category>security</category>
      <category>ubuntu</category>
      <category>fail2ban</category>
      <category>ssh</category>
    </item>
    <item>
      <title>Secure SSH on Ubuntu 26.04 with SSH Keys and Fail2ban</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Thu, 04 Jun 2026 07:11:18 +0000</pubDate>
      <link>https://dev.to/hostnextra/secure-ssh-on-ubuntu-2604-with-ssh-keys-and-fail2ban-4056</link>
      <guid>https://dev.to/hostnextra/secure-ssh-on-ubuntu-2604-with-ssh-keys-and-fail2ban-4056</guid>
      <description>&lt;p&gt;If your server is connected to the internet, automated bots are already trying to access it.&lt;/p&gt;

&lt;p&gt;One of the easiest ways to improve server security is to stop relying on passwords and switch to SSH keys. Combined with Fail2ban, this can drastically reduce the risk of brute force attacks.&lt;/p&gt;

&lt;p&gt;In this guide, we'll secure SSH on Ubuntu 26.04 by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using SSH key authentication&lt;/li&gt;
&lt;li&gt;Disabling root login&lt;/li&gt;
&lt;li&gt;Disabling password authentication&lt;/li&gt;
&lt;li&gt;Installing Fail2ban&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;Password based SSH logins are a common target for automated attacks.&lt;/p&gt;

&lt;p&gt;Even strong passwords can eventually become a liability, especially when attackers can attempt thousands of logins from different IP addresses.&lt;/p&gt;

&lt;p&gt;SSH keys provide a much stronger authentication method, while Fail2ban automatically blocks repeated login failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Update the Server
&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 update
&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;h3&gt;
  
  
  Step 2: Generate an SSH Key Pair
&lt;/h3&gt;

&lt;p&gt;On your local computer:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; ed25519 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"ubuntu-server"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Accept the default location and optionally set a passphrase.&lt;/p&gt;

&lt;p&gt;This creates:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 3: Copy the Public Key to the Server
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id username@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-copy-id admin@203.0.113.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 4: Verify Key Authentication
&lt;/h3&gt;

&lt;p&gt;Open a new terminal window and connect:&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@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If login works without asking for the server password, SSH keys are working correctly.&lt;/p&gt;

&lt;p&gt;Keep your existing SSH session open until testing is complete.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 5: Create a Custom SSH Security Configuration
&lt;/h3&gt;

&lt;p&gt;Ubuntu 26.04 supports configuration snippets through the &lt;code&gt;sshd_config.d&lt;/code&gt; directory.&lt;/p&gt;

&lt;p&gt;Create a new file:&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;nano /etc/ssh/sshd_config.d/99-security.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Add:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Port 52525
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication &lt;span class="nb"&gt;yes
&lt;/span&gt;ChallengeResponseAuthentication no
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Note: We have set PermitRootLogin no be caution with that. You need to have normal user access. We are changing SSH port number, add it in firewall first.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Step 6: Validate the Configuration
&lt;/h3&gt;

&lt;p&gt;Before restarting SSH:&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;sshd &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If no output appears, the configuration is valid.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 7: Restart SSH
&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;systemctl restart ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Verify status:&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 status ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Test SSH access from another terminal:&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@server_ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Password authentication should no longer work.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 8: Install Fail2ban
&lt;/h3&gt;

&lt;p&gt;Install Fail2ban:&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;fail2ban &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


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

&lt;/div&gt;


&lt;p&gt;Check status:&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 status fail2ban
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 9: Configure Fail2ban
&lt;/h3&gt;

&lt;p&gt;Create a local configuration file:&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;nano /etc/fail2ban/jail.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Add:&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="o"&gt;[&lt;/span&gt;sshd]
enabled &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;port &lt;span class="o"&gt;=&lt;/span&gt; ssh
backend &lt;span class="o"&gt;=&lt;/span&gt; systemd
maxretry &lt;span class="o"&gt;=&lt;/span&gt; 5
findtime &lt;span class="o"&gt;=&lt;/span&gt; 10m
bantime &lt;span class="o"&gt;=&lt;/span&gt; 1h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Restart Fail2ban:&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 restart fail2ban
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Step 10: Verify Protection
&lt;/h3&gt;

&lt;p&gt;View active jails:&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;fail2ban-client status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;View SSH jail details:&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;fail2ban-client status sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Monitoring SSH Activity&lt;/p&gt;

&lt;p&gt;View SSH logs:&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;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; ssh &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;View Fail2ban activity:&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;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; fail2ban &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Final Checklist
&lt;/h3&gt;

&lt;p&gt;Before considering your SSH setup secure, verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH keys are working&lt;/li&gt;
&lt;li&gt;Root login is disabled&lt;/li&gt;
&lt;li&gt;Password authentication is disabled&lt;/li&gt;
&lt;li&gt;SSH configuration validates successfully&lt;/li&gt;
&lt;li&gt;Fail2ban is running&lt;/li&gt;
&lt;li&gt;Updates are installed regularly&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;SSH is one of the most exposed services on a Linux server, making it a frequent target for automated attacks.&lt;/p&gt;

&lt;p&gt;By switching to SSH keys, disabling password authentication, and deploying Fail2ban, you add several layers of protection with very little effort.&lt;/p&gt;

&lt;p&gt;These changes take only a few minutes to implement but can significantly improve the security of any Ubuntu 26.04 server.&lt;/p&gt;

&lt;p&gt;Originally published on HostnExtra.&lt;/p&gt;

&lt;p&gt;We regularly publish practical guides on Linux administration, dedicated servers, networking, infrastructure security, and hosting performance.&lt;/p&gt;

&lt;p&gt;Read the full version here:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://hostnextra.com/learn/tutorials/secure-ssh-ubuntu-26-04-key-authentication-fail2ban" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fboat.hnxcloud.com%2Fassets%2F4b6dfef3-1712-45bf-a597-625a2df41fe3.png" height="467" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://hostnextra.com/learn/tutorials/secure-ssh-ubuntu-26-04-key-authentication-fail2ban" rel="noopener noreferrer" class="c-link"&gt;
            Secure SSH on Ubuntu 26.04 with Key Authentication and Fail2ban - HostnExtra
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Learn how to secure SSH on Ubuntu 26.04 using SSH key authentication and Fail2ban. Disable password logins, block brute force attacks, and strengthen your server security.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhostnextra.com%2Ficon.svg%3Ficon.0s9fdicw3g4jp.svg" width="137" height="132"&gt;
          hostnextra.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



</description>
      <category>security</category>
      <category>ubuntu</category>
      <category>fail2ban</category>
      <category>ssh</category>
    </item>
    <item>
      <title>Switzerland Datacenters Explained: Power, Connectivity, and Infrastructure Design</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Thu, 04 Jun 2026 04:53:53 +0000</pubDate>
      <link>https://dev.to/hostnextra/switzerland-datacenters-explained-power-connectivity-and-infrastructure-design-d56</link>
      <guid>https://dev.to/hostnextra/switzerland-datacenters-explained-power-connectivity-and-infrastructure-design-d56</guid>
      <description>&lt;p&gt;Developers often spend significant time optimizing application code while overlooking the infrastructure layer underneath it.&lt;/p&gt;

&lt;p&gt;Yet infrastructure decisions can have a larger impact on performance, availability, and reliability than many software optimizations.&lt;/p&gt;

&lt;p&gt;Datacenter location is one of those decisions.&lt;/p&gt;

&lt;p&gt;Switzerland has become a popular European deployment location for dedicated servers, private cloud environments, virtualization platforms, and business-critical workloads. Understanding why requires looking beyond hardware specifications and examining the underlying infrastructure itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Datacenters Are More Than Server Racks
&lt;/h2&gt;

&lt;p&gt;When evaluating hosting environments, it's easy to focus on CPU models, RAM capacity, and storage performance.&lt;/p&gt;

&lt;p&gt;Those components matter.&lt;/p&gt;

&lt;p&gt;However, production infrastructure depends equally on facility engineering.&lt;/p&gt;

&lt;p&gt;Modern datacenters are built around multiple supporting systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Power distribution&lt;/li&gt;
&lt;li&gt;Cooling infrastructure&lt;/li&gt;
&lt;li&gt;Environmental monitoring&lt;/li&gt;
&lt;li&gt;Physical security&lt;/li&gt;
&lt;li&gt;Fire suppression&lt;/li&gt;
&lt;li&gt;Network connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each subsystem contributes to overall service availability.&lt;/p&gt;

&lt;p&gt;The server itself is only one part of the equation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Power Redundancy
&lt;/h2&gt;

&lt;p&gt;Power infrastructure is one of the most important elements inside any datacenter.&lt;/p&gt;

&lt;p&gt;A typical enterprise facility includes multiple layers of protection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Utility Power
&lt;/h3&gt;

&lt;p&gt;This is the primary electrical feed supplied by the regional power grid.&lt;/p&gt;

&lt;p&gt;Switzerland benefits from a highly developed electrical infrastructure that supports dependable service availability.&lt;/p&gt;

&lt;h3&gt;
  
  
  UPS Systems
&lt;/h3&gt;

&lt;p&gt;Uninterruptible Power Supply systems sit between utility power and customer equipment.&lt;/p&gt;

&lt;p&gt;If utility power fails, UPS batteries immediately continue supplying electricity.&lt;/p&gt;

&lt;p&gt;This transition occurs fast enough that servers remain operational without interruption.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backup Generators
&lt;/h3&gt;

&lt;p&gt;UPS systems are designed to bridge short interruptions.&lt;/p&gt;

&lt;p&gt;For longer events, backup generators take over.&lt;/p&gt;

&lt;p&gt;Once generators reach stable operating conditions, they assume the electrical load while UPS systems continue providing protection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Redundant Power Paths
&lt;/h3&gt;

&lt;p&gt;Many facilities deploy multiple independent power paths.&lt;/p&gt;

&lt;p&gt;If a failure occurs within one distribution path, the alternate path can continue supplying power.&lt;/p&gt;

&lt;p&gt;The goal is eliminating single points of failure wherever possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Network Connectivity Matters More Than Most Buyers Realize
&lt;/h2&gt;

&lt;p&gt;Hardware performance often receives most of the attention during server procurement.&lt;/p&gt;

&lt;p&gt;In reality, network quality frequently has a greater impact on user experience.&lt;/p&gt;

&lt;p&gt;Connectivity affects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application responsiveness&lt;/li&gt;
&lt;li&gt;API performance&lt;/li&gt;
&lt;li&gt;Replication traffic&lt;/li&gt;
&lt;li&gt;Backup operations&lt;/li&gt;
&lt;li&gt;End-user latency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Swiss datacenters benefit from strong connectivity toward major European markets including Germany, France, Italy, Austria, the Netherlands, Belgium, and the United Kingdom.&lt;/p&gt;

&lt;p&gt;This makes Switzerland an attractive location for workloads serving distributed European audiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Carrier-Neutral Facilities And Route Diversity
&lt;/h2&gt;

&lt;p&gt;One important concept many developers encounter only after operating production infrastructure is carrier diversity.&lt;/p&gt;

&lt;p&gt;A carrier-neutral datacenter allows multiple network providers to operate within the same facility.&lt;/p&gt;

&lt;p&gt;This creates several advantages:&lt;/p&gt;

&lt;h3&gt;
  
  
  Redundancy
&lt;/h3&gt;

&lt;p&gt;If one carrier experiences issues, traffic can potentially utilize alternate providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing Flexibility
&lt;/h3&gt;

&lt;p&gt;Infrastructure operators can select carriers based on performance, cost, or geographic reach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduced Dependency
&lt;/h3&gt;

&lt;p&gt;Organizations avoid becoming overly reliant on a single upstream network.&lt;/p&gt;

&lt;p&gt;Carrier diversity is often a stronger indicator of infrastructure quality than raw bandwidth numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency And Geographic Positioning
&lt;/h2&gt;

&lt;p&gt;Physics still applies to networking.&lt;/p&gt;

&lt;p&gt;Data cannot travel instantly.&lt;/p&gt;

&lt;p&gt;The further traffic must travel, the higher the potential latency.&lt;/p&gt;

&lt;p&gt;Switzerland's central European location helps provide balanced reachability toward several major markets.&lt;/p&gt;

&lt;p&gt;This can be particularly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SaaS platforms&lt;/li&gt;
&lt;li&gt;API services&lt;/li&gt;
&lt;li&gt;Enterprise applications&lt;/li&gt;
&lt;li&gt;Development infrastructure&lt;/li&gt;
&lt;li&gt;Monitoring systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than optimizing solely for one country, organizations can often achieve broader regional coverage from a centrally positioned deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Dedicated Servers Still Matter
&lt;/h2&gt;

&lt;p&gt;Despite the growth of cloud platforms, dedicated servers continue to solve specific problems effectively.&lt;/p&gt;

&lt;p&gt;Common reasons organizations choose dedicated infrastructure include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Predictable Performance
&lt;/h3&gt;

&lt;p&gt;Resources are not shared with unrelated tenants.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware Control
&lt;/h3&gt;

&lt;p&gt;Customers can select storage, CPU, memory, and networking configurations that fit workload requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Virtualization Platforms
&lt;/h3&gt;

&lt;p&gt;Dedicated servers are frequently used as hypervisor hosts for internal infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Large Databases
&lt;/h3&gt;

&lt;p&gt;Database management often benefit from dedicated resources and consistent performance characteristics.&lt;/p&gt;

&lt;p&gt;For many organizations, dedicated servers remain a practical complement to cloud deployments rather than a replacement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluating Infrastructure Beyond Marketing
&lt;/h2&gt;

&lt;p&gt;When selecting a hosting provider, technical teams should look beyond hardware specifications.&lt;/p&gt;

&lt;p&gt;Important questions include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How many carriers are available?&lt;/li&gt;
&lt;li&gt;What power redundancy model exists?&lt;/li&gt;
&lt;li&gt;What monitoring systems are implemented?&lt;/li&gt;
&lt;li&gt;How are incidents handled?&lt;/li&gt;
&lt;li&gt;What operational procedures exist for maintenance and failures?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These factors often determine long-term service quality more than processor generation alone.&lt;/p&gt;

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

&lt;p&gt;Switzerland's datacenter industry has built its reputation through infrastructure quality rather than marketing noise.&lt;/p&gt;

&lt;p&gt;Strong facility engineering, dependable power systems, extensive connectivity, and disciplined operational practices make it a compelling location for dedicated servers and critical workloads.&lt;/p&gt;

&lt;p&gt;For developers, infrastructure teams, and businesses deploying services across Europe, understanding these fundamentals can lead to better hosting decisions and more reliable applications.&lt;/p&gt;

&lt;p&gt;Because ultimately, users don't care where your servers are located.&lt;/p&gt;

&lt;p&gt;They care whether your application works when they need it.&lt;/p&gt;

&lt;p&gt;Infrastructure determines how often that happens.&lt;/p&gt;

&lt;p&gt;Originally published on HostnExtra.&lt;/p&gt;

&lt;p&gt;HostnExtra focuses on dedicated server infrastructure, networking, and performance-focused hosting across multiple global locations.&lt;/p&gt;

&lt;p&gt;Read the full version:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://hostnextra.com/learn/blog/switzerland-datacenter-infrastructure" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fboat.hnxcloud.com%2Fassets%2F938d9d2a-a155-468d-b0f0-49489096ebab.png" height="467" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://hostnextra.com/learn/blog/switzerland-datacenter-infrastructure" rel="noopener noreferrer" class="c-link"&gt;
            Switzerland Datacenter Infrastructure: Facilities, Power, and Connectivity - HostnExtra
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Learn how Switzerland's datacenter infrastructure delivers reliable power, strong connectivity, and modern facilities for dedicated servers, cloud platforms, and business-critical applications.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhostnextra.com%2Ficon.svg%3Ficon.0s9fdicw3g4jp.svg" width="137" height="132"&gt;
          hostnextra.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>datacenter</category>
      <category>switzerland</category>
      <category>networking</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why London Remains a Top-Tier Dedicated Server Location for Developers and Infrastructure Teams</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Mon, 01 Jun 2026 15:01:13 +0000</pubDate>
      <link>https://dev.to/hostnextra/why-london-remains-a-top-tier-dedicated-server-location-for-developers-and-infrastructure-teams-4oa0</link>
      <guid>https://dev.to/hostnextra/why-london-remains-a-top-tier-dedicated-server-location-for-developers-and-infrastructure-teams-4oa0</guid>
      <description>&lt;p&gt;When evaluating dedicated server locations, it's easy to get distracted by hardware specifications.&lt;/p&gt;

&lt;p&gt;CPU generation, storage type, RAM capacity, and bandwidth allocations are easy to compare.&lt;/p&gt;

&lt;p&gt;Network topology is harder to see.&lt;/p&gt;

&lt;p&gt;But once applications reach scale, routing quality often becomes just as important as the hardware itself.&lt;/p&gt;

&lt;p&gt;London is a good example.&lt;/p&gt;

&lt;p&gt;The city hosts one of the world's most important interconnection ecosystems through LINX (London Internet Exchange), where more than 950 networks exchange traffic directly. Aggregate traffic has exceeded 12 Tbps during peak periods, making London one of the most connected internet hubs in Europe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does this matter?
&lt;/h2&gt;

&lt;p&gt;Because every unnecessary network hop introduces additional latency and routing complexity.&lt;/p&gt;

&lt;p&gt;Direct peering relationships allow traffic to move between networks more efficiently, which can improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API response times&lt;/li&gt;
&lt;li&gt;SaaS platform performance&lt;/li&gt;
&lt;li&gt;CDN delivery efficiency&lt;/li&gt;
&lt;li&gt;Multiplayer gaming latency&lt;/li&gt;
&lt;li&gt;Replication between distributed systems&lt;/li&gt;
&lt;li&gt;Hybrid cloud connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;London is also strategically positioned for organizations serving both European and North American users.&lt;/p&gt;

&lt;p&gt;Many transatlantic routes intersect through London's carrier ecosystem, allowing providers to maintain strong connectivity in both directions.&lt;/p&gt;

&lt;p&gt;From an infrastructure perspective, London offers several practical advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dense carrier availability&lt;/li&gt;
&lt;li&gt;Mature data center ecosystems&lt;/li&gt;
&lt;li&gt;Extensive peering opportunities&lt;/li&gt;
&lt;li&gt;Strong cloud connectivity&lt;/li&gt;
&lt;li&gt;Multiple transit options&lt;/li&gt;
&lt;li&gt;Well-established international routing paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing worth noting is that good infrastructure isn't only about where a server is physically located.&lt;/p&gt;

&lt;p&gt;It's also about who surrounds that server.&lt;/p&gt;

&lt;p&gt;A server sitting inside a highly connected ecosystem often delivers better real-world performance than similar hardware deployed in a less connected region.&lt;/p&gt;

&lt;p&gt;That's the reason London continues to remain relevant despite the rapid growth of other European markets.&lt;/p&gt;

&lt;p&gt;For developers, sysadmins, SaaS operators, and infrastructure teams, London is still one of the strongest locations available when network quality is a primary consideration.&lt;/p&gt;

&lt;p&gt;Originally published on HostnExtra.&lt;/p&gt;

&lt;p&gt;We regularly write about network architecture, dedicated server deployments, latency, routing, peering, and global hosting infrastructure.&lt;/p&gt;

&lt;p&gt;Read the full article:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hostnextra.com/learn/blog/london-dedicated-server-connectivity" rel="noopener noreferrer"&gt;https://hostnextra.com/learn/blog/london-dedicated-server-connectivity&lt;/a&gt;&lt;/p&gt;

</description>
      <category>dedicatedservers</category>
      <category>linx</category>
      <category>network</category>
      <category>london</category>
    </item>
    <item>
      <title>Running Multiplayer Game Servers in Germany: Real-World Latency Across Europe</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Fri, 29 May 2026 04:46:34 +0000</pubDate>
      <link>https://dev.to/hostnextra/running-multiplayer-game-servers-in-germany-real-world-latency-across-europe-3fbc</link>
      <guid>https://dev.to/hostnextra/running-multiplayer-game-servers-in-germany-real-world-latency-across-europe-3fbc</guid>
      <description>&lt;p&gt;When developers deploy multiplayer infrastructure in Europe, Germany is usually one of the first locations considered.&lt;/p&gt;

&lt;p&gt;There is a practical reason for that beyond simple geography.&lt;/p&gt;

&lt;p&gt;Germany, particularly Frankfurt, sits near a dense concentration of European carrier networks and internet exchange ecosystems. That creates relatively efficient routing paths across large portions of Europe.&lt;/p&gt;

&lt;p&gt;For multiplayer workloads, this often produces balanced latency profiles for mixed regional player bases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typical European Latency Behavior
&lt;/h2&gt;

&lt;p&gt;Actual latency depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ISP routing&lt;/li&gt;
&lt;li&gt;Transit providers&lt;/li&gt;
&lt;li&gt;Congestion&lt;/li&gt;
&lt;li&gt;Peering quality&lt;/li&gt;
&lt;li&gt;Mitigation systems&lt;/li&gt;
&lt;li&gt;Physical distance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in general, properly connected German infrastructure often looks roughly like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Region&lt;/strong&gt;                            &lt;strong&gt;Approximate Latency&lt;/strong&gt;&lt;br&gt;
Germany / Netherlands / Belgium   5-20ms&lt;br&gt;
France / UK                   20-35ms&lt;br&gt;
Scandinavia                   25-45ms&lt;br&gt;
Southern Europe                    35-60ms&lt;/p&gt;

&lt;p&gt;These numbers vary significantly depending on the provider.&lt;/p&gt;

&lt;p&gt;People underestimate how much routing quality affects gameplay. Two servers inside Frankfurt can behave completely differently under real traffic conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Stable Routing Matters More Than Low Ping Marketing
&lt;/h2&gt;

&lt;p&gt;A lot of hosting advertisements obsess over “ultra-low latency.”&lt;/p&gt;

&lt;p&gt;In practice, multiplayer performance depends more on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jitter consistency&lt;/li&gt;
&lt;li&gt;Packet delivery stability&lt;/li&gt;
&lt;li&gt;Congestion handling&lt;/li&gt;
&lt;li&gt;Upstream quality&lt;/li&gt;
&lt;li&gt;Mitigation behavior under load&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A stable 40ms connection is usually preferable to unstable low-latency routes with spikes and packet loss.&lt;/p&gt;

&lt;p&gt;This becomes very noticeable in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FPS games&lt;/li&gt;
&lt;li&gt;Tickrate-sensitive workloads&lt;/li&gt;
&lt;li&gt;Voice-heavy environments&lt;/li&gt;
&lt;li&gt;Real-time PvP synchronization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Average ping alone does not tell the whole story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dedicated Servers vs VPS for Game Hosting
&lt;/h2&gt;

&lt;p&gt;Smaller communities often begin on VPS infrastructure, which is fine initially.&lt;/p&gt;

&lt;p&gt;Problems usually appear when workloads become sustained or player counts increase.&lt;/p&gt;

&lt;p&gt;Shared environments can introduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU contention&lt;/li&gt;
&lt;li&gt;Disk variability&lt;/li&gt;
&lt;li&gt;Resource throttling&lt;/li&gt;
&lt;li&gt;Scheduling inconsistencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dedicated servers avoid many of these issues by giving workloads isolated hardware access.&lt;/p&gt;

&lt;p&gt;This becomes especially useful for games like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minecraft&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;ARK&lt;/li&gt;
&lt;li&gt;CS2&lt;/li&gt;
&lt;li&gt;FiveM&lt;/li&gt;
&lt;li&gt;Factorio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many of these workloads are heavily sensitive to single-core performance and sustained CPU availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  DDoS Mitigation Is Mandatory
&lt;/h2&gt;

&lt;p&gt;Public game servers eventually attract attack traffic.&lt;/p&gt;

&lt;p&gt;Good mitigation systems should preserve routing stability while filtering malicious packets. Poor mitigation can actually worsen gameplay through excessive filtering overhead or unstable rerouting behavior.&lt;/p&gt;

&lt;p&gt;Important considerations include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always-on filtering&lt;/li&gt;
&lt;li&gt;Upstream mitigation capacity&lt;/li&gt;
&lt;li&gt;Clean packet forwarding&lt;/li&gt;
&lt;li&gt;Low additional latency overhead&lt;/li&gt;
&lt;li&gt;Stable routing during attacks&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Germany remains one of the strongest European deployment locations because it balances reachability across multiple regions reasonably well.&lt;/p&gt;

&lt;p&gt;But location alone does not create good multiplayer performance.&lt;/p&gt;

&lt;p&gt;Infrastructure quality ultimately depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network engineering&lt;/li&gt;
&lt;li&gt;Transit quality&lt;/li&gt;
&lt;li&gt;Hardware consistency&lt;/li&gt;
&lt;li&gt;Routing stability&lt;/li&gt;
&lt;li&gt;Operational discipline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The networking layer is usually where good multiplayer hosting succeeds or fails.&lt;/p&gt;

&lt;p&gt;Originally published on HostnExtra.&lt;/p&gt;

&lt;p&gt;If you're working on latency-sensitive infrastructure, multiplayer hosting, or dedicated server deployments, we publish deeper infrastructure-focused articles here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hostnextra.com/blog" rel="noopener noreferrer"&gt;https://hostnextra.com/blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>linux</category>
      <category>gameservers</category>
      <category>networking</category>
    </item>
    <item>
      <title>Install NetBox on Ubuntu 22.04 - HostnExtra</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Wed, 19 Oct 2022 13:01:08 +0000</pubDate>
      <link>https://dev.to/hostnextra/install-netbox-on-ubuntu-2204-hostnextra-5ekj</link>
      <guid>https://dev.to/hostnextra/install-netbox-on-ubuntu-2204-hostnextra-5ekj</guid>
      <description>&lt;p&gt;In this article, we'll explain how to install NetBox on Ubuntu 22.04. This will guide you with the installation and configuration process.&lt;/p&gt;

&lt;p&gt;NetBox is an infrastructure resource modeling (IRM) application designed to empower network automation. NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.&lt;/p&gt;

&lt;p&gt;NetBox runs as a web application atop the&amp;nbsp;Django&amp;nbsp;Python framework with a&amp;nbsp;PostgreSQL&amp;nbsp;database.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites:
&lt;/h4&gt;

&lt;p&gt;A Ubuntu 22.04 installed KVM VPS or dedicated server.&lt;br&gt;
A root user access or normal user with administrative privileges&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hostnextra.com/kb/install-netbox-on-ubuntu/" rel="noopener noreferrer"&gt;Install NetBox on Ubuntu 22.04&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Keep the server up to date
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# apt update -y &amp;amp;&amp;amp; apt upgrade -y&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Install and Configure PostgreSQL Database
&lt;/h4&gt;

&lt;p&gt;We'll install and configure a local PostgreSQL database.&lt;/p&gt;

&lt;p&gt;Note: NetBox requires PostgreSQL 9.6 or higher. Please note that MySQL and other relational databases are&amp;nbsp;not&amp;nbsp;currently supported.&lt;/p&gt;

&lt;p&gt;Install PostgreSQL database using following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# apt install -y postgresql libpq-dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to create a database for NetBox and assign it a username and password for authentication.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# sudo -u postgres psql

postgres=# CREATE DATABASE netbox;

CREATE DATABASE

postgres=# CREATE USER netbox WITH PASSWORD 'r5t6^7$%gyuuyt4';

CREATE ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;

GRANT

postgres=# \q
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Install Redis
&lt;/h4&gt;

&lt;p&gt;Redis is an in-memory key-value store which NetBox employs for caching and queuing. Use following command to install Redis:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# apt install redis-server -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use the&amp;nbsp;redis-cli&amp;nbsp;utility to ensure the Redis service is functional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# redis-cli ping

PONG
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Install and Configure NetBox
&lt;/h4&gt;

&lt;p&gt;There are two ways to install NetBox.&lt;/p&gt;

&lt;p&gt;Download a Release Archive&lt;br&gt;
Clone the Git Repository&lt;/p&gt;

&lt;p&gt;We'll install NetBox by cloning the Git repository.&lt;/p&gt;

&lt;p&gt;First, install required packages and its dependencies:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Update pip (Python's package management tool) to its latest release:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# pip3 install --upgrade pip&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create the base directory /opt/netbox for the NetBox installation.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# mkdir -p /opt/netbox/ &amp;amp;&amp;amp; cd /opt/netbox/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, clone the&amp;nbsp;master&amp;nbsp;branch of the NetBox GitHub repository into the current directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# git clone -b master https://github.com/netbox-community/netbox.git .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a system user account named&amp;nbsp;netbox. We'll configure the WSGI and HTTP services to run under this account. We'll also assign this user ownership of the media directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# adduser --system --group netbox

# chown --recursive netbox /opt/netbox/netbox/media/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Move into the NetBox configuration directory and make a copy of&amp;nbsp;configuration.example.py&amp;nbsp;named&amp;nbsp;configuration.py.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# cd /opt/netbox/netbox/netbox/

# cp configuration_example.py configuration.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a symbolic link of Python binary.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# ln -s /usr/bin/python3 /usr/bin/python&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Generate a random&amp;nbsp;SECRET_KEY&amp;nbsp;of at least 50 alphanumeric characters.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# /opt/netbox/netbox/generate_secret_key.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Above command will create a secret key, store it so that we can use it in the configuration.py.&lt;/p&gt;

&lt;p&gt;Open and edit the configuration file&amp;nbsp;configuration.py.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# nano /opt/netbox/netbox/netbox/configuration.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The final file should have the following configurations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOWED_HOSTS = ['*']

DATABASE = {
'NAME': 'netbox', # Database name you created
'USER': 'netbox', # PostgreSQL username you created
'PASSWORD': 'r5t6^7$%gyuuyt4', # PostgreSQL password you set
'HOST': 'localhost', # Database server
'PORT': '', # Database port (leave blank for default)
}

SECRET_KEY = 'YOUR SECRET KEY'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can add your domain or server IP in ALLOWED_HOSTS = [''] or you can simple enter "*" for all.&lt;/p&gt;

&lt;p&gt;Once NetBox has been configured, we're ready to proceed with the actual installation.&lt;/p&gt;

&lt;p&gt;We'll run the packaged upgrade script (upgrade.sh) to perform the following actions:&lt;/p&gt;

&lt;p&gt;Create a Python virtual environment&lt;br&gt;
Install all required Python packages&lt;br&gt;
Run database schema migrations&lt;br&gt;
Aggregate static resource files on disk&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# /opt/netbox/upgrade.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Enter the Python virtual environment created by the upgrade script:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# source /opt/netbox/venv/bin/activate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a superuser account using the createsuperuser&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# cd /opt/netbox/netbox

# python3 manage.py createsuperuser

Output:

Email address: admin@example.com

Password:

Password (again):

Superuser created successfully.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remember the username and password. It will require once we finish the installation process to login.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Configure Gunicorn
&lt;/h4&gt;

&lt;p&gt;NetBox ships with a default configuration file for gunicorn. To use it, copy&amp;nbsp;/opt/netbox/contrib/gunicorn.py&amp;nbsp;to&amp;nbsp;/opt/netbox/gunicorn.py.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Copy contrib/netbox.service and contrib/netbox-rq.service to the /etc/systemd/system/ directory and reload the systemd dameon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# cp -v /opt/netbox/contrib/*.service /etc/systemd/system/

# systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start and enable the netbox and netbox-rq services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl start netbox netbox-rq

# systemctl enable netbox netbox-rq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6. Configure Nginx Web Server
&lt;/h4&gt;

&lt;p&gt;Install Nginx web server using following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# apt install -y nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Copy the nginx configuration file provided by NetBox to /etc/nginx/sites-available/netbox.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Edit the netbox configuration file and remove all the content and copy paste below contents:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# nano /etc/nginx/sites-available/netbox&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Remember to change server_name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
listen 80;

# CHANGE THIS TO YOUR SERVER'S NAME
server_name 127.0.0.1;

client_max_body_size 25m;

location /static/ {
alias /opt/netbox/netbox/static/;
}

location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, delete&amp;nbsp;/etc/nginx/sites-enabled/default&amp;nbsp;and create a symlink in the&amp;nbsp;sites-enabled&amp;nbsp;directory to the configuration file you just created.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# rm /etc/nginx/sites-enabled/default

# ln -s /etc/nginx/sites-available/netbox /etc/nginx/sites-enabled/netbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Above Nginx code will give you error if you use as it is, because it mentioned SSL configuration too. You need to install SSL after the above commands.&lt;/p&gt;

&lt;p&gt;Please refer our How to Install Let’s Encrypt on Nginx Ubuntu article to install SSL certificate.&lt;/p&gt;

&lt;p&gt;Now test Nginx configuration and restart the Nginx service:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# nginx -t&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# systemctl restart nginx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's it we have successfully completed with the installation and configuration process.&lt;/p&gt;

&lt;p&gt;Navigate to your browser and access NetBox with using either server IP or domain name.&lt;/p&gt;

&lt;p&gt;In this article, we've seen how to install NetBox on Ubuntu 22.04.&lt;/p&gt;

</description>
      <category>netbox</category>
      <category>ubuntu</category>
      <category>django</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Install Caddy on Ubuntu 22.04 - HostnExtra</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Tue, 18 Oct 2022 17:26:33 +0000</pubDate>
      <link>https://dev.to/hostnextra/install-caddy-on-ubuntu-2204-hostnextra-50ha</link>
      <guid>https://dev.to/hostnextra/install-caddy-on-ubuntu-2204-hostnextra-50ha</guid>
      <description>&lt;p&gt;In this article, we’ll explain you how to install Caddy on Ubuntu 22.04. This article will guide you with the installation process and host a website.&lt;/p&gt;

&lt;p&gt;The Caddy web server is an open-source web server written in Go. It is designed around simplicity and security that comes with a number of features that are useful for hosting websites. Caddy is both a flexible, efficient static file server and a powerful, scalable reverse proxy.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;A Ubuntu install dedicated server or KVM VPS.&lt;/li&gt;
&lt;li&gt;A root user access or normal user with administrative privileges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.hostnextra.com/kb/install-caddy-on-ubuntu/" rel="noopener noreferrer"&gt;Install Caddy on Ubuntu 22.04&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Keep the server up to date
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;# apt update -y &amp;amp;&amp;amp; apt upgrade -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;WWWW2. Install Caddy&lt;/p&gt;

&lt;p&gt;Following command will install and automatically starts and runs Caddy for you as a systemd service named caddy using our official caddy.service unit file.&lt;/p&gt;

&lt;h4&gt;
  
  
  Install dependencies:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;First, add GPG key using following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# curl -1sLf ‘https://dl.cloudsmith.io/public/caddy/stable/gpg.key’ | sudo gpg –dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, add repository and update it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# curl -1sLf ‘https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt’ | sudo tee /etc/apt/sources.list.d/caddy-stable.list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;# apt update&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Finally, install Caddy using following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# apt install caddy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, navigate to your browser and enter your server IP or domain name:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://Server-IP" rel="noopener noreferrer"&gt;http://Server-IP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OR&lt;/p&gt;

&lt;p&gt;&lt;a href="http://example.com" rel="noopener noreferrer"&gt;http://example.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install Caddy on Ubuntu&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Configure Domain with Caddy
&lt;/h4&gt;

&lt;p&gt;Before moving following, first set up domain’s A/AAAA  DNS record at your registrar or control panel.&lt;/p&gt;

&lt;p&gt;Note: Replace hostnextra.com with your domain name&lt;/p&gt;

&lt;p&gt;Create a directory for your website files&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# mkdir -p /var/www/html/hostnextra.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, if you are using SELinux than you need to change the file security context for web content. (Optional)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# chcon -t httpd_sys_content_t /var/www/html/hostnextra.com -R
# chcon -t httpd_sys_rw_content_t /var/www/html/hostnextra.com -R
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, open Caddy’s configuration file and add your domain name and change website’s root directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# nano /etc/caddy/Caddyfile&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Change the site root to /var/www/html/hostnextra.com (write your website path) as&lt;/p&gt;

&lt;p&gt;install Caddy HostnExtra&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to use SSL, you need to mention :443 SSL port and also install SSL certificate.&lt;/p&gt;

&lt;p&gt;You can run caddy trust command to install SSL local certificate. We’ve not tested it yet. If we perform it in future, we’ll update the tutorial. You can check the official document about Automatic HTTPS for more information.&lt;/p&gt;

&lt;p&gt;Once you done with the changes reload the caddy.service to reflect the changes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# systemctl reload caddy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, create a index.html file in /var/www/html/hostnextra.com using following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# echo ‘&amp;lt;!doctype html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello from Caddy!&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1 style=”font-family: sans-serif”&amp;gt;This page is being served via Caddy&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;’ | sudo tee /var/www/html/hostnextra.com/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, refresh the page in your browser and you will see our newly created index.html.&lt;/p&gt;

&lt;p&gt;In this article, we have seen how to install Caddy on Ubuntu 22.04.&lt;/p&gt;

</description>
      <category>caddy</category>
      <category>webserver</category>
      <category>ubuntu</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Install Snipe-IT on Ubuntu 22.04 - HostnExtra</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Mon, 17 Oct 2022 12:14:14 +0000</pubDate>
      <link>https://dev.to/hostnextra/install-snipe-it-on-ubuntu-2204-hostnextra-n2a</link>
      <guid>https://dev.to/hostnextra/install-snipe-it-on-ubuntu-2204-hostnextra-n2a</guid>
      <description>&lt;p&gt;In this article, we'll explain how to install Snipe-IT on Ubuntu 22.04.&lt;/p&gt;

&lt;p&gt;Snipe-IT was made for IT asset management, to enable IT departments to track who has which laptop, when it was purchased, which software licenses and accessories are available, and so on. Snipe-IT is a open-source IT asset management and it eliminates the need for complex IT asset tracking spreadsheets.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;An Ubuntu 22.04 installed &lt;a href="https://www.hostnextra.com/dedicated-server.html" rel="noopener noreferrer"&gt;dedicated server&lt;/a&gt; or &lt;a href="https://www.hostnextra.com/vps-hosting.html" rel="noopener noreferrer"&gt;KVM VPS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A root user access or normal user with administrative privileges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.hostnextra.com/kb/install-snipe-it-on-ubuntu/" rel="noopener noreferrer"&gt;Install Snipe-IT on Ubuntu 22.04&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Update the server and install dependencies:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# sudo apt update -y &amp;amp;&amp;amp; apt upgrade -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install unzip dependency&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo apt-get install unzip git -y&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Install Apache Webserver
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# sudo apt install apache2 -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In case, you enabled firewall and firewall block requests of the apache web server, open a port in the firewall.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# sudo ufw allow 80/tcp

# sudo ufw allow 443/tcp

# sudo ufw reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's verify the Apache installation. Open browser and test default page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;http://[SERVER IP]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enable Apache's&amp;nbsp;mod_rewrite&amp;nbsp;module. Snipe-IT requires this extension to rewrite URLs more cleanly.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo a2enmod rewrite&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Restart your Apache web server to apply the changes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo systemctl restart apache2&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Install MariaDB
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# sudo apt install mariadb-server mariadb-client -y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The default configuration of the MariaDB will not be secured. Let's secured the installation using the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo mysql_secure_installation&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the script gets executed, it will ask multiple questions.&lt;/p&gt;

&lt;p&gt;It will ask you to enter the current password for root (enter for none):&lt;/p&gt;

&lt;p&gt;Then enter yes/y to the following security questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set a root password? [Y/n]: y
Remove anonymous users? : y
Disallow root login remotely? : y
Remove test database and access to it? : y
Reload privilege tables now? : y 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Install PHP and PHP Composer
&lt;/h4&gt;

&lt;p&gt;Here we are installing the default PHP version 8.1 and other modules for web deployments using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# sudo apt install php php-common php-bcmath php-bz2 php-intl php-gd php-mbstring php-mysql php-zip php-opcache php-intl php-json php-mysqli php-readline php-tokenizer php-curl php-ldap -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install PHP Composer, which is a PHP dependency management tool to install and update libraries in your Snipe-IT.&lt;/p&gt;

&lt;p&gt;Download the&amp;nbsp;Composer&amp;nbsp;installer.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo curl -sS https://getcomposer.org/installer | php&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Move the&amp;nbsp;composer.phar&amp;nbsp;executable to&amp;nbsp;/usr/local/bin/.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo mv composer.phar /usr/local/bin/composer&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  5. Create a Database
&lt;/h4&gt;

&lt;p&gt;Create a database and database user for Snipe-IT. First login into MySQL/MariaDB as a root user.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo mysql -u root -p&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Run following commands to perform this task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE DATABASE snipe_it;
CREATE USER 'snipe_it_user'@'localhost' IDENTIFIED BY 'EXAMPLE_PASSWORD';
GRANT ALL PRIVILEGES ON snipe_it.* TO 'snipe_it_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: Replace snipe_it_user to your choice username and replace EXAMPLE_PASSWORD to you choice password.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Install Snipe-IT
&lt;/h4&gt;

&lt;p&gt;Navigate to the root directory of your web server.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# cd /var/www/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Use git to clone the latest Snipe-IT repository from the&amp;nbsp;&lt;a href="https://github.com/snipe/snipe-it%C2%A0URL" rel="noopener noreferrer"&gt;https://github.com/snipe/snipe-it&amp;nbsp;URL&lt;/a&gt; and copy the downloaded files to a&amp;nbsp;snipe-it&amp;nbsp;directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo git clone https://github.com/snipe/snipe-it snipe-it&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Switch to the&amp;nbsp;snipe-it&amp;nbsp;directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# cd snipe-it&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Snipe-IT ships with a sample configuration file. Copy it to&amp;nbsp;/var/www/snipe-it/.env.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo cp /var/www/snipe-it/.env.example /var/www/snipe-it/.env&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Edit the configuration file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo nano /var/www/snipe-it/.env&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the Snipe-IT configuration file, locate these settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APP_URL=null
APP_TIMEZONE='UTC'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set&amp;nbsp;APP_URL&amp;nbsp;to your server's Fully Qualified Domain Name, or it's public IP address. If you use a time zone other than UTC, change the timezone to&amp;nbsp;a PHP-supported timezone, and enclose it in single quotes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;APP_URL=example.com
APP_TIMEZONE='America/New_York'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Locate these settings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_DATABASE=null
DB_USERNAME=null
DB_PASSWORD=null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change those values to the database information you set up in Step 3.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_DATABASE=snipe_it
DB_USERNAME=snipe_it_user
DB_PASSWORD=EXAMPLE_PASSWORD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and close the file.&lt;/p&gt;

&lt;p&gt;Install the Snipe-IT dependencies with Composer. You'll receive a warning not to run this as root on each command. It's okay to continue as root for the Snipe-IT install, so type&amp;nbsp;yes&amp;nbsp;and hit&amp;nbsp;ENTER.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# composer update --no-plugins --no-scripts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# composer install --no-dev --prefer-source --no-plugins --no-scripts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Set the correct ownership and permission for the Snipe-IT data directory.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo chown -R www-data:www-data /var/www/snipe-it&lt;/code&gt;&lt;br&gt;
&lt;code&gt;# sudo chmod -R 777 storage&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once the&amp;nbsp;Composer&amp;nbsp;finishes running, generate a Laravel&amp;nbsp;APP_Key&amp;nbsp;value in the&amp;nbsp;/var/www/snipe-it/.env&amp;nbsp;configuration file you created earlier. Type&amp;nbsp;yes&amp;nbsp;and hit&amp;nbsp;ENTER&amp;nbsp;when prompted to continue.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo php artisan key:generate&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  7. Create a Virtual Host File
&lt;/h4&gt;

&lt;p&gt;First we'll disable default Apacheconf file and create new vhost conf file.&lt;/p&gt;

&lt;p&gt;Disable the default Apache configuration file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#sudo&amp;nbsp; a2dissite 000-default.conf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a new Apache configuration file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo nano /etc/apache2/sites-available/snipe-it.conf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Paste the information below and replace&amp;nbsp;example.com&amp;nbsp;with your server's domain name or public IP address.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;VirtualHost *:80&amp;gt;
ServerName example.com
DocumentRoot /var/www/snipe-it/public
&amp;lt;Directory /var/www/snipe-it/public&amp;gt;
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
&amp;lt;/Directory&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit the file.&lt;/p&gt;

&lt;p&gt;Enable your new configuration file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo a2ensite snipe-it.conf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Restart your Apache web server to apply the changes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo systemctl restart apache2&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  8. Run the Setup Wizard
&lt;/h4&gt;

&lt;p&gt;Navigate to your browser and access the setup wizard using your server IP or domain name you have mentioned in vhost conf file.&lt;/p&gt;

&lt;p&gt;Once you complete the setup wizar your will redirect to dashbord&lt;/p&gt;

&lt;p&gt;In this article, we have seen how to install Snipe-IT on Ubuntu 22.04.&lt;/p&gt;

</description>
      <category>caddy</category>
      <category>webserver</category>
      <category>ubuntu</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Install CouchDB on Ubuntu 22.04 - HostnExtra</title>
      <dc:creator>HostnExtra Technologies</dc:creator>
      <pubDate>Thu, 13 Oct 2022 13:47:32 +0000</pubDate>
      <link>https://dev.to/hostnextra/install-couchdb-on-ubuntu-2204-hostnextra-42fp</link>
      <guid>https://dev.to/hostnextra/install-couchdb-on-ubuntu-2204-hostnextra-42fp</guid>
      <description>&lt;p&gt;In this article, we'll explain how to install CouchDB on Ubuntu 22.04 and configure it with Nginx proxy server and Certbot SSL.&lt;/p&gt;

&lt;p&gt;Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang. Seamless multi-master sync, that scales from Big Data to Mobile, with an Intuitive HTTP/JSON API and designed for Reliability. Store your data safely, on your own servers, or with any leading cloud provider. Your web- and native applications love CouchDB, because it speaks JSON natively and supports binary data for all your data storage needs.&lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;A Ubuntu 22.04 installed dedicated server or KVM VPS with root or non-root access (for non-root, use "sudo").&lt;/li&gt;
&lt;li&gt;A DNS A record that points your domain to the public IP address of the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's start with the installation process&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hostnextra.com/kb/install-couchdb-on-ubuntu/" rel="noopener noreferrer"&gt;Install CouchDB on Ubuntu&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Update the server and install dependency
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# sudo apt update &amp;amp;&amp;amp; sudo apt install -y curl apt-transport-https gnupg&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Configure the CouchDB repository and key.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# curl https://couchdb.apache.org/repo/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/couchdb-archive-keyring.gpg &amp;gt;/dev/null 2&amp;gt;&amp;amp;1
# echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] https://apache.jfrog.io/artifactory/couchdb-deb/ ${VERSION_CODENAME} main" | sudo tee /etc/apt/sources.list.d/couchdb.list &amp;gt;/dev/null
# sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If you get following error, edit couchdb.list and add jammy before main. It will resolve it.

E: Malformed entry 1 in list file /etc/apt/sources.list.d/couchdb.list (Component)
E: The list of sources could not be read
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Install CouchDB
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# sudo apt install -y couchdb&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The installation will ask few question.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. standalone 2. clustered 3. none
General type of CouchDB configuration: 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose according to your choice. We have select 1 for this demonstration purpose.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A CouchDB node has an Erlang magic cookie value set at startup.

This value must match for all nodes in the cluster. If they do not match, attempts to connect the node to the cluster will be rejected.

CouchDB Erlang magic cookie: monkey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the&amp;nbsp;Erlang Magic Cookie. This is a unique identifier to authenticate for your cluster, all nodes must have the same cookie. Here we have wrote monkey. You can write anything you want.&lt;/p&gt;

&lt;p&gt;The default is 127.0.0.1 (loopback) for standalone nodes, and 0.0.0.0 (all interfaces) for clustered nodes. In clustered mode, it is not allowed to bind to 127.0.0.1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CouchDB interface bind address: 0.0.0.0

Add bind address as 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A pre-existing admin user will not be overwritten by this package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Password for the CouchDB "admin" user:

Repeat password for the CouchDB "admin" user:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here add admin password as per your choice.&lt;/p&gt;

&lt;p&gt;The installation has been completed successfully. Navigate to browser and open http://:5984/_utils/&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Configure Nginx
&lt;/h4&gt;

&lt;p&gt;Now, let's configure Nginx proxy. Install Nginx using following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo apt-get install -y nginx apache2-utils&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Remove default Nginx config file, we'll create our own config file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# sudo rm -rf /etc/nginx/sites-enabled/default&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now create a new config file&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# nano /etc/nginx/sites-available/couchdb-site&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add following content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
listen 80 default_server;
server_name coachdb.local;

location / {
proxy_pass http://localhost:5984;
proxy_redirect off;

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

}

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For security reason, you can change the default http 80 port to something else like 5000. So to access it you need to mention 5000 port at the end of website name. But it may create conflict with SSL. We've not test different port with SSL.&lt;/p&gt;

&lt;p&gt;Now, create a symbolic link and restart Nginx service using following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ln -s /etc/nginx/sites-available/couchdb-site /etc/nginx/sites-enabled/
# nginx -t
# systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  5. Configure Firewall
&lt;/h4&gt;

&lt;p&gt;Enable UFW if its not enabled.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# ufw enable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Add following ports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ufw allow 22/tcp

# ufw allow 80/tcp

# ufw allow 443/tcp

# ufw allow 5984/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the status:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# ufw status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your SSH port might be different.&lt;br&gt;
If you have custom Nginx web server port, add that port also.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. Install certbot's nginx package
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;# apt install certbot python3-certbot-nginx -y&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  7. Obtaining a Certificate
&lt;/h4&gt;

&lt;p&gt;Obtain a certificate using certbot command. The Nginx plugin will take care of reconfiguring Nginx and reloading the config.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# certbot --nginx -d yoursite.com -d www.yousite.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;By running certbot first time, you will be prompted to enter an email address and agree to the terms of service.&lt;/p&gt;

&lt;p&gt;That's it, we have successfully install CouchDB on Ubuntu 22.04 and configured it with Nginx proxy server and Certbot SSL.&lt;/p&gt;

</description>
      <category>couchdb</category>
      <category>ubuntu</category>
      <category>database</category>
      <category>nginx</category>
    </item>
  </channel>
</rss>
