<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://voxihost.pl/" xml:lang="en">
  <title>Guides &amp; Tutorials</title>
  <subtitle>Master your infrastructure with professional server management tutorials and step-by-step guides from the VoxiHost team and community.</subtitle>
  <link href="https://voxihost.pl/guides/feed.xml" rel="self"/>
  <link href="https://voxihost.pl/guides/" rel="alternate"/>
  <updated>2026-07-28T00:00:00Z</updated>
  <id>https://voxihost.pl/guides/</id>
  <rights>© 2026 VoxiHost. All rights reserved.</rights>
  <generator uri="https://www.11ty.dev/" version="3.1.2">Eleventy</generator>
  <icon>https://voxihost.pl/assets/images/favicon-32x32.png</icon>
  <logo>https://voxihost.pl/assets/images/brand/logo-full.png</logo>
  <author>
    <name>VoxiHost</name>
    <uri>https://voxihost.pl</uri>
  </author>
  <entry>
    <title>How to Secure Nginx with Fail2Ban</title>
    <link href="https://voxihost.pl/guides/secure-nginx-with-fail2ban/" rel="alternate"/>
    <published>2026-07-28T00:00:00Z</published>
    <updated>2026-07-28T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/secure-nginx-with-fail2ban/</id>
    <summary type="text">Learn how to protect your web server by installing and configuring Fail2Ban on Ubuntu to automatically block malicious IP addresses targeting Nginx.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Exposing an Nginx web server to the public internet invites a constant stream of automated probes. Bots hunt for vulnerabilities, attempt credential stuffing, and flood your logs with malformed requests. If you are running your services on a &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt;, you need a proactive defense mechanism that works without constant manual intervention.&lt;/p&gt;
&lt;p&gt;Fail2Ban is the industry standard for this task. It monitors your server logs in real-time, identifies suspicious patterns-such as repeated 404 errors or failed login attempts-and automatically updates your firewall to block offending IP addresses. While Nginx handles your traffic, Fail2Ban acts as your automated gatekeeper.&lt;/p&gt;
&lt;p&gt;This guide focuses on a clean, maintainable installation on Ubuntu. We avoid the common trap of editing default configuration files directly, which ensures your security rules survive system updates. By the end of this tutorial, you will have a hardened Nginx environment configured to use the systemd backend for optimal performance and minimal resource overhead. We assume you have a base Ubuntu installation with root or sudo access. If you are starting from scratch, ensure your system is patched and your firewall is enabled before proceeding.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites &lt;/h2&gt;
&lt;p&gt;Before beginning, ensure your &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt; server meets the following requirements. Running these services requires a minimum of 1GB RAM and 1 CPU core to maintain stable performance during log parsing operations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access to a terminal with &lt;code&gt;sudo&lt;/code&gt; privileges on an Ubuntu 24.04 LTS or newer distribution.&lt;/li&gt;
&lt;li&gt;An active firewall, such as UFW, to manage network traffic effectively. If you have not yet set up your firewall, check out our guide: &lt;a href=&quot;https://voxihost.pl/guides/configure-ufw-ubuntu-debian/&quot;&gt;How to Configure UFW Firewall on Ubuntu &amp;amp; Debian: The Complete Server Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Nginx installed and running. If you need to perform a fresh install, refer to &lt;a href=&quot;https://voxihost.pl/guides/install-nginx-ubuntu-debian/&quot;&gt;How to Install Nginx on Ubuntu &amp;amp; Debian: The Complete Server Guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Basic familiarity with text editors like &lt;code&gt;nano&lt;/code&gt; or &lt;code&gt;vim&lt;/code&gt; for modifying configuration files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Verify that your system clock is synchronized using NTP, as Fail2Ban relies on accurate timestamps to calculate the duration of bans. You can check this by running &lt;code&gt;timedatectl status&lt;/code&gt;. Finally, ensure that your Nginx access logs are enabled and accessible, as Fail2Ban will need read permissions to monitor incoming traffic for malicious activity.&lt;/p&gt;
&lt;h2 id=&quot;step-1-install-nginx-and-fail2ban&quot;&gt;Step 1: Install Nginx and Fail2Ban &lt;/h2&gt;
&lt;p&gt;To begin, we need to ensure your package list is up to date and install the necessary software components. Using the official Ubuntu repositories ensures that you receive security updates and maintain compatibility with your system architecture.&lt;/p&gt;
&lt;p&gt;Execute the following commands to update your package index and install both Nginx and Fail2Ban:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Update package list and install Nginx and Fail2Ban
sudo apt update
sudo apt install -y nginx fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once the installation finishes, Fail2Ban creates a default configuration file located at &lt;code&gt;/etc/fail2ban/jail.conf&lt;/code&gt;. Modifying this file directly is discouraged because package updates can overwrite your changes. Instead, we create a local copy that takes precedence.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Create the local configuration file to preserve settings
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Modern Ubuntu distributions utilize &lt;code&gt;systemd&lt;/code&gt; to manage logs. For optimal performance and to reduce the latency between a malicious event and a ban, we must configure Fail2Ban to use the &lt;code&gt;systemd&lt;/code&gt; backend rather than the default log file polling method. Run this command to update your configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Set the Fail2Ban backend to systemd
sudo sed -i &#39;s/backend = auto/backend = systemd/g&#39; /etc/fail2ban/jail.local
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With these settings applied, your environment is ready for specific Nginx protection rules. In the next steps, we will define the jails that monitor your web traffic.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-400.avif 400w, https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-800.avif 800w, https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-400.webp 400w, https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-800.webp 800w, https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-400.jpeg&quot; alt=&quot;Terminal output showing successful installation of Nginx and Fail2Ban&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;516&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-400.jpeg 400w, https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-800.jpeg 800w, https://voxihost.pl/assets/images/generated/N3xp4Ut3PO-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-2-configure-the-fail2ban-jail&quot;&gt;Step 2: Configure the Fail2Ban Jail &lt;/h2&gt;
&lt;p&gt;Now that the backend is set, we need to create a specific jail configuration for Nginx. A jail defines which log files to monitor and what actions to take when a threshold is met. By default, Fail2Ban does not actively monitor Nginx unless you explicitly enable the corresponding jail in your &lt;code&gt;jail.local&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;To define your custom Nginx protection, open the local configuration file in your preferred text editor:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Open the local configuration file
sudo nano /etc/fail2ban/jail.local
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Scroll through the file until you find the &lt;code&gt;[nginx-http-auth]&lt;/code&gt; or &lt;code&gt;[nginx-botsearch]&lt;/code&gt; sections. You can enable these by changing the &lt;code&gt;enabled&lt;/code&gt; parameter from &lt;code&gt;false&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;. For a robust setup, ensure the following lines are present and uncommented within your file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[nginx-http-auth]
enabled = true
port    = http,https
filter  = nginx-http-auth
logpath = /var/log/nginx/error.log

[nginx-botsearch]
enabled = true
port    = http,https
filter  = nginx-botsearch
logpath = /var/log/nginx/access.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;nginx-http-auth&lt;/code&gt; jail protects your site against brute-force attacks on pages secured with Basic Auth, while &lt;code&gt;nginx-botsearch&lt;/code&gt; blocks malicious scanners attempting to find hidden administrative directories. After adding these blocks, save the file by pressing &lt;code&gt;Ctrl + O&lt;/code&gt;, followed by &lt;code&gt;Enter&lt;/code&gt;, and exit with &lt;code&gt;Ctrl + X&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you are running a &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt; with a high volume of traffic, ensure your log paths match your actual Nginx configuration. If you have customized your log directory, update the &lt;code&gt;logpath&lt;/code&gt; value accordingly to prevent the service from failing to start.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/NcyLYQJWCh-400.avif 400w, https://voxihost.pl/assets/images/generated/NcyLYQJWCh-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/NcyLYQJWCh-400.webp 400w, https://voxihost.pl/assets/images/generated/NcyLYQJWCh-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/NcyLYQJWCh-400.jpeg&quot; alt=&quot;Editing the jail.local configuration file in nano to enable Nginx jails&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;397&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/NcyLYQJWCh-400.jpeg 400w, https://voxihost.pl/assets/images/generated/NcyLYQJWCh-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-3-enable-the-nginx-jails&quot;&gt;Step 3: Enable the Nginx Jails &lt;/h2&gt;
&lt;p&gt;With the &lt;code&gt;jail.local&lt;/code&gt; configuration updated, the final step is to apply these changes. Fail2Ban must be instructed to reload its configuration so that the new Nginx jails are initialized and the monitoring service starts tracking your log files for suspicious activity.&lt;/p&gt;
&lt;p&gt;Because we have modified the core configuration, we need to restart the service to commit these changes to memory. Execute the following commands to enable the service, restart it, and verify that it is running correctly:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Enable, restart, and verify the status of the Fail2Ban service
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The status output should indicate that the service is &lt;code&gt;active (running)&lt;/code&gt;. You can also verify that your specific Nginx jails are active by using the &lt;code&gt;fail2ban-client&lt;/code&gt; utility. This tool interacts directly with the running daemon and confirms that the jails are successfully parsing your log files:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Verify that the nginx-http-auth and nginx-botsearch jails are active
sudo fail2ban-client status nginx-http-auth
sudo fail2ban-client status nginx-botsearch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the status returns &amp;quot;Currently failed: 0&amp;quot; and &amp;quot;Total failed: 0,&amp;quot; your setup is ready. The service is now actively scanning your &lt;code&gt;/var/log/nginx/&lt;/code&gt; files for patterns matching the default filters. If you notice any issues with log parsing, ensure that the permissions on your Nginx log files allow the Fail2Ban user to read them. For most standard installations on a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt;, the default permissions are sufficient.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/o2rg0oVqKs-400.avif 400w, https://voxihost.pl/assets/images/generated/o2rg0oVqKs-800.avif 800w, https://voxihost.pl/assets/images/generated/o2rg0oVqKs-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/o2rg0oVqKs-400.webp 400w, https://voxihost.pl/assets/images/generated/o2rg0oVqKs-800.webp 800w, https://voxihost.pl/assets/images/generated/o2rg0oVqKs-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/o2rg0oVqKs-400.jpeg&quot; alt=&quot;Verifying the status of active Fail2Ban jails for Nginx&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;648&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/o2rg0oVqKs-400.jpeg 400w, https://voxihost.pl/assets/images/generated/o2rg0oVqKs-800.jpeg 800w, https://voxihost.pl/assets/images/generated/o2rg0oVqKs-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-4-verify-fail2ban-functionality&quot;&gt;Step 4: Verify Fail2Ban Functionality &lt;/h2&gt;
&lt;p&gt;Now that the service is running and the jails are initialized, you need to confirm that Fail2Ban is actually watching your logs and ready to block malicious traffic. The most reliable way to test this is by checking the jail status and simulating a failed login attempt.&lt;/p&gt;
&lt;p&gt;First, verify that Fail2Ban is actively monitoring the Nginx log files by checking the jail summary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Display the list of currently active jails
sudo fail2ban-client status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see &lt;code&gt;nginx-http-auth&lt;/code&gt; and &lt;code&gt;nginx-botsearch&lt;/code&gt; listed under the &amp;quot;Jail list&amp;quot; section. If they appear there, the daemon has successfully linked the filters to your Nginx logs.&lt;/p&gt;
&lt;p&gt;To test if the filter is working, intentionally trigger a failed authentication request against your server. If you have an Nginx location block protected by Basic Auth, attempt to log in with the wrong credentials multiple times. If you do not have a protected page, you can simulate a bot attack by requesting a non-existent file that triggers the &lt;code&gt;nginx-botsearch&lt;/code&gt; filter.&lt;/p&gt;
&lt;p&gt;After triggering the failure, check the jail status again to see if the counter has incremented:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Check the status of a specific jail to see failed attempts
sudo fail2ban-client status nginx-http-auth
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the &amp;quot;Currently failed&amp;quot; count reflects your attempts, Fail2Ban is parsing your logs correctly. Once your predefined threshold (the &lt;code&gt;maxretry&lt;/code&gt; setting in &lt;code&gt;jail.local&lt;/code&gt;) is reached, Fail2Ban will automatically insert a rule into your firewall to drop incoming traffic from that IP. You can confirm the ban by inspecting the logs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Tail the Fail2Ban log to see real-time ban actions
sudo tail -f /var/log/fail2ban.log
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see entries indicating that an IP has been banned.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Securing your web server with Fail2Ban provides a critical layer of defense against automated attacks. By monitoring your Nginx logs in real-time and dynamically updating your firewall, you effectively neutralize brute-force attempts and malicious bot traffic before they can impact your system resources.&lt;/p&gt;
&lt;p&gt;On a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt;, this proactive security approach ensures that your services remain performant and available for legitimate users. Remember that security is not a one-time configuration. Periodically review your &lt;code&gt;jail.local&lt;/code&gt; settings and monitor your logs to ensure your filters remain effective against evolving threats.&lt;/p&gt;
&lt;p&gt;If you decide to modify your security policies, always remember to check the syntax of your configuration files before restarting the service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Validate your configuration syntax for errors
sudo fail2ban-client -t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Should you need to apply updates to your security configuration, stop the service first to ensure a clean state, apply your changes, and then reload:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Safely stop and reload Fail2Ban after configuration changes
sudo systemctl stop fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With Fail2Ban operational, you have significantly reduced the attack surface of your Linux environment. For further hardening, consider pairing this with a properly configured UFW firewall, as detailed in our guide on how to &lt;a href=&quot;https://voxihost.pl/guides/configure-ufw-ubuntu-debian/&quot;&gt;Configure UFW Firewall on Ubuntu &amp;amp; Debian: The Complete Server Guide&lt;/a&gt;. Staying vigilant and keeping your software updated remains the best way to maintain a secure and reliable server infrastructure.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Install Node.js on Ubuntu &amp; Debian</title>
    <link href="https://voxihost.pl/guides/install-nodejs-ubuntu-debian/" rel="alternate"/>
    <published>2026-07-27T00:00:00Z</published>
    <updated>2026-07-27T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/install-nodejs-ubuntu-debian/</id>
    <summary type="text">Learn how to install the latest stable Node.js on Ubuntu and Debian using the official NodeSource repository to ensure optimal performance and security.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Running JavaScript on the server side requires a reliable and up-to-date runtime environment. While many Linux distributions include Node.js in their default package managers, these versions are often outdated, which can lead to compatibility issues with modern frameworks or security vulnerabilities. For developers deploying applications on a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt;, maintaining a current environment is essential for performance and stability.&lt;/p&gt;
&lt;p&gt;The most effective way to manage your runtime is by using the official NodeSource binary distribution repositories. This approach ensures you are not limited by the older software versions found in standard system repositories. By configuring the official repository, you gain seamless access to the latest Long Term Support (LTS) releases, ensuring your production server remains stable while supporting modern ECMAScript features.&lt;/p&gt;
&lt;p&gt;This guide focuses on a clean, professional setup on Ubuntu and Debian systems. We will move beyond default package lists to install a production-ready Node.js environment. Whether you are hosting a lightweight API or a complex real-time application, the steps provided will ensure your server is correctly configured for long-term reliability. We assume you have a fresh instance running at least 1GB of RAM to ensure the build process completes without memory bottlenecks.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites &lt;/h2&gt;
&lt;p&gt;You must have root or sudo access to the server. Since we will be configuring external repositories, your system needs to be up to date to avoid conflicts with existing library versions. If you have not performed a system update recently, consider running &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;/code&gt; before proceeding.&lt;/p&gt;
&lt;p&gt;Additionally, this guide assumes you are working with a clean installation of Ubuntu 24.04 or later, or Debian 12 or later. If you are managing your firewall, ensure you have already configured it to allow traffic on the ports your application will eventually use.&lt;/p&gt;
&lt;p&gt;Finally, ensure that you have access to a terminal or SSH client. We will be using &lt;code&gt;curl&lt;/code&gt; to fetch the setup scripts, so verify that your environment is ready to handle these network requests. If you plan to manage multiple server instances or need enhanced protection for your applications, you might also consider our &lt;a href=&quot;https://voxihost.pl/shield/&quot;&gt;Shield DDoS protection&lt;/a&gt; to secure your traffic at the network edge.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Wbo74WSXiE-400.avif 400w, https://voxihost.pl/assets/images/generated/Wbo74WSXiE-772.avif 772w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Wbo74WSXiE-400.webp 400w, https://voxihost.pl/assets/images/generated/Wbo74WSXiE-772.webp 772w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/Wbo74WSXiE-400.jpeg&quot; alt=&quot;A terminal screen showing a freshly updated Ubuntu instance ready for software installation&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;772&quot; height=&quot;373&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Wbo74WSXiE-400.jpeg 400w, https://voxihost.pl/assets/images/generated/Wbo74WSXiE-772.jpeg 772w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-1-update-system-packages-and-install-dependencies&quot;&gt;Step 1: Update System Packages and Install Dependencies &lt;/h2&gt;
&lt;p&gt;Before we pull the Node.js binaries, we must prepare the environment. Standard distribution repositories often contain outdated versions of Node.js, which can cause compatibility issues with modern frameworks. To avoid this, we will use the official NodeSource repository.&lt;/p&gt;
&lt;p&gt;The setup script requires &lt;code&gt;curl&lt;/code&gt; to fetch the necessary GPG keys and repository configuration files. If your server is a minimal installation, this utility might not be present. Run the following command to refresh your package list and install the required dependency:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Update local package index and install curl
sudo apt update &amp;amp;&amp;amp; sudo apt install -y curl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once the installation finishes, your system is ready to communicate with the NodeSource servers. Keeping your package list updated ensures that you are pulling the most recent security patches for your OS libraries alongside the new Node.js environment. We have verified that this approach minimizes dependency conflicts on both Ubuntu and Debian systems.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-400.avif 400w, https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-772.avif 772w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-400.webp 400w, https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-772.webp 772w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-400.jpeg&quot; alt=&quot;Terminal output showing the successful installation of the curl package after an apt update&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;772&quot; height=&quot;373&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-400.jpeg 400w, https://voxihost.pl/assets/images/generated/d8c7-yv7Ym-772.jpeg 772w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-2-add-the-nodesource-repository&quot;&gt;Step 2: Add the NodeSource Repository &lt;/h2&gt;
&lt;p&gt;Now that your system has the necessary tools to handle remote requests, we will configure the NodeSource repository. This repository acts as a bridge, allowing your package manager to track and install the official Long Term Support (LTS) releases directly from the source.&lt;/p&gt;
&lt;p&gt;Using the automated setup script is the most reliable way to handle the GPG key imports and repository file generation. By using the &lt;code&gt;-E&lt;/code&gt; flag with &lt;code&gt;sudo&lt;/code&gt;, we ensure that your current environment variables are preserved during the execution of the script, which is critical for correctly detecting your system architecture and distribution version.&lt;/p&gt;
&lt;p&gt;Execute the following commands to download the setup script and apply the configuration to your server:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Download the NodeSource LTS setup script
curl -fsSL https://deb.nodesource.com/setup_lts.x -o nodesource_setup.sh

## Execute the script to configure the repository
sudo -E bash nodesource_setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script will automatically update your local package lists once the repository is added. You will see a series of logs in your terminal indicating that the package sources have been refreshed and that the GPG keys have been successfully imported. If you encounter any warnings regarding missing keys, verify that your internet connection is stable and that no firewall is blocking outbound traffic to &lt;code&gt;deb.nodesource.com&lt;/code&gt;. Once this process finishes, your server is primed to pull the latest stable Node.js binaries.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/9yCcfewAQJ-400.avif 400w, https://voxihost.pl/assets/images/generated/9yCcfewAQJ-800.avif 800w, https://voxihost.pl/assets/images/generated/9yCcfewAQJ-1227.avif 1227w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/9yCcfewAQJ-400.webp 400w, https://voxihost.pl/assets/images/generated/9yCcfewAQJ-800.webp 800w, https://voxihost.pl/assets/images/generated/9yCcfewAQJ-1227.webp 1227w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/9yCcfewAQJ-400.jpeg&quot; alt=&quot;Terminal output showing the NodeSource setup script configuring the repository and updating the package list&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1227&quot; height=&quot;840&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/9yCcfewAQJ-400.jpeg 400w, https://voxihost.pl/assets/images/generated/9yCcfewAQJ-800.jpeg 800w, https://voxihost.pl/assets/images/generated/9yCcfewAQJ-1227.jpeg 1227w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-3-install-node-js-and-npm&quot;&gt;Step 3: Install Node.js and NPM &lt;/h2&gt;
&lt;p&gt;With the NodeSource repository now active on your system, the final installation phase is straightforward. Since the previous step already triggered an automatic update of your package lists, you can proceed directly to installing the Node.js runtime and the Node Package Manager (NPM).&lt;/p&gt;
&lt;p&gt;Using the official repository ensures you receive a modern, supported version of Node.js, which is significantly more stable and feature-rich than the legacy versions often found in default distribution archives. Execute the following command to install the package:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Install Node.js and NPM from the NodeSource repository
sudo apt install -y nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;nodejs&lt;/code&gt; package includes both the binary for running your applications and the &lt;code&gt;npm&lt;/code&gt; tool for managing your project dependencies. The installation process is typically fast, as it only requires pulling the binaries from the repository you just configured.&lt;/p&gt;
&lt;p&gt;Once the command finishes, you have successfully set up the core environment. You are now ready to verify that everything is correctly linked and identify the specific version of the runtime active on your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt; server.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Qm6sdRZV35-400.avif 400w, https://voxihost.pl/assets/images/generated/Qm6sdRZV35-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Qm6sdRZV35-400.webp 400w, https://voxihost.pl/assets/images/generated/Qm6sdRZV35-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/Qm6sdRZV35-400.jpeg&quot; alt=&quot;Terminal output showing the successful installation of the nodejs package via apt&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;325&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Qm6sdRZV35-400.jpeg 400w, https://voxihost.pl/assets/images/generated/Qm6sdRZV35-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-4-verify-the-installation&quot;&gt;Step 4: Verify the Installation &lt;/h2&gt;
&lt;p&gt;Now that the binaries are installed, you need to confirm that the system is correctly pointing to the NodeSource versions. This is a critical check to ensure your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt; server is not accidentally using an older, cached, or system-default version of the runtime.&lt;/p&gt;
&lt;p&gt;Run the following commands to output the currently active versions:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Check the installed Node.js version
node -v

## Check the installed NPM version
npm -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;node -v&lt;/code&gt; command should return a version string starting with &lt;code&gt;v20&lt;/code&gt; or higher, depending on the current LTS release. If you see an output like &lt;code&gt;v26.x.x&lt;/code&gt;, your server is correctly configured to use the latest long-term support release. The &lt;code&gt;npm -v&lt;/code&gt; command will return the version of the package manager, confirming that it is also ready for use.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you encounter a &amp;quot;command not found&amp;quot; error, it usually indicates that the shell path was not updated. Simply log out and log back in to your SSH session to refresh your environment variables.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Everything is now set up for your development environment. You have successfully bypassed outdated system repositories and secured a stable foundation for your JavaScript applications on your &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/u5wXIlHzvQ-250.avif 250w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/u5wXIlHzvQ-250.webp 250w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/u5wXIlHzvQ-250.jpeg&quot; alt=&quot;Terminal showing the output of node -v and npm -v confirming successful installation&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;250&quot; height=&quot;110&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;You have successfully configured a reliable Node.js environment on your Linux server. By utilizing the official NodeSource repository instead of default distribution packages, you ensure that your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/&quot;&gt;VPS&lt;/a&gt; server receives timely security patches and access to modern JavaScript features. This setup provides the stability required for production workloads, whether you are running a lightweight API on a &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; or a high-traffic application on a &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Going forward, remember that keeping your runtime updated is essential for both performance and security. When a new LTS version is released, you can keep your environment current by updating your package lists and upgrading the binary:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Update local package lists
sudo apt update

## Upgrade the Node.js package to the latest version
sudo apt upgrade -y nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you plan to deploy complex applications, consider using a process manager like PM2 to keep your services running after a reboot. You may also want to explore our guides on &lt;a href=&quot;https://voxihost.pl/guides/install-nginx-ubuntu-debian/&quot;&gt;How to Install Nginx on Ubuntu &amp;amp; Debian: The Complete Server Guide&lt;/a&gt; if you intend to set up a reverse proxy for your Node.js application. Your server is now ready for development, testing, or production deployment. Happy coding.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Setup Python Venv on Ubuntu</title>
    <link href="https://voxihost.pl/guides/install-python-venv-ubuntu/" rel="alternate"/>
    <published>2026-07-21T00:00:00Z</published>
    <updated>2026-07-21T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/install-python-venv-ubuntu/</id>
    <summary type="text">Learn how to configure isolated Python virtual environments on Ubuntu using the native venv module. Avoid dependency conflicts and manage your projects.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Managing Python dependencies on a production server often leads to conflicts. When you install packages globally using &lt;code&gt;pip&lt;/code&gt;, you risk breaking system-level tools that rely on specific library versions. On modern Ubuntu distributions, this issue is further addressed by PEP 668, which restricts global package installations to ensure system stability.&lt;/p&gt;
&lt;p&gt;The industry-standard solution is the virtual environment, or &lt;code&gt;venv&lt;/code&gt;. By isolating your project dependencies into a local directory, you ensure that your application has exactly what it needs without interfering with the underlying operating system or other projects hosted on your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This guide provides a direct, no-nonsense approach to setting up isolated Python environments. We will walk through installing the necessary module, creating a clean workspace, and activating your environment to start installing packages safely. Whether you are running a lightweight microservice on a &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; or managing complex data pipelines, this setup is the foundation of professional Python development on Linux.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites &lt;/h2&gt;
&lt;p&gt;Before beginning, ensure your server meets the minimum requirements for a stable development environment. We recommend a minimum of 512MB of RAM and 1 CPU core, which is standard for our &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; and &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; instances.&lt;/p&gt;
&lt;p&gt;You should have access to an Ubuntu 22.04 LTS or newer server with a non-root user that has &lt;code&gt;sudo&lt;/code&gt; privileges. If you have not yet set up your administrative user, refer to our guide on &lt;a href=&quot;https://voxihost.pl/guides/add-sudo-user-ubuntu/&quot;&gt;How to Create a Sudo User on Ubuntu &amp;amp; Debian: The Complete Server Guide&lt;/a&gt; to ensure you are not running development tasks as the root user.&lt;/p&gt;
&lt;p&gt;Additionally, confirm that your system clock is synchronized to avoid SSL errors when fetching packages. You should also ensure that your APT package list is current to avoid dependency resolution issues. While no specific Python code is required at this stage, having basic familiarity with the command line is expected.&lt;/p&gt;
&lt;p&gt;Finally, check that you have enough disk space available in your project directory to accommodate the virtual environment structure, which typically consumes a few megabytes for the core files plus the size of any project-specific dependencies you intend to install later.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/OY76kvPNhr-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/OY76kvPNhr-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/OY76kvPNhr-400.jpeg&quot; alt=&quot;A terminal session displaying system resource checks and user validation before starting the Python venv installation&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;177&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-1-install-the-python-venv-module&quot;&gt;Step 1: Install the Python Venv Module &lt;/h2&gt;
&lt;p&gt;Modern versions of Ubuntu include Python by default, but the module required for creating isolated environments is often excluded from the core installation to save space. To manage your project dependencies without polluting the global system packages, you must install the &lt;code&gt;python3-venv&lt;/code&gt; package. This ensures you comply with PEP 668, which restricts global pip installations on newer Ubuntu releases to prevent conflicts with system-level software.&lt;/p&gt;
&lt;p&gt;Execute the following commands to update your local package index and pull the necessary module into your system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Update the package index and install the virtual environment module
sudo apt update
sudo apt install -y python3-venv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This installation provides the &lt;code&gt;venv&lt;/code&gt; module, which allows you to create lightweight, isolated Python environments. Once the process finishes, verify the installation by checking the Python version. While this doesn&#39;t explicitly confirm the module&#39;s presence, it ensures your environment is ready for the next steps:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Verify Python installation
python3 --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are using a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt;, this operation will complete in seconds. You are now prepared to initialize your first virtual environment within a dedicated project directory.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/GDhqxnj8kr-400.avif 400w, https://voxihost.pl/assets/images/generated/GDhqxnj8kr-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/GDhqxnj8kr-400.webp 400w, https://voxihost.pl/assets/images/generated/GDhqxnj8kr-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/GDhqxnj8kr-400.jpeg&quot; alt=&quot;Terminal output showing the successful installation of the python3-venv package via apt&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;558&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/GDhqxnj8kr-400.jpeg 400w, https://voxihost.pl/assets/images/generated/GDhqxnj8kr-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-2-create-a-project-directory&quot;&gt;Step 2: Create a Project Directory &lt;/h2&gt;
&lt;p&gt;Before you initialize your environment, you need a clean workspace to host your application code and its dependencies. Keeping your projects in separate directories prevents file clutter and makes it easier to manage multiple environments on your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; server.&lt;/p&gt;
&lt;p&gt;Navigate to your home directory or a dedicated folder for your development projects, then create a new directory for your specific task:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Create a new project directory and move into it
mkdir -p ~/my_python_project
cd ~/my_python_project
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/tUXOAzTB1g-386.avif 386w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/tUXOAzTB1g-386.webp 386w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/tUXOAzTB1g-386.jpeg&quot; alt=&quot;Terminal showing the creation of the project directory&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;386&quot; height=&quot;60&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-3-create-and-activate-the-virtual-environment&quot;&gt;Step 3: Create and Activate the Virtual Environment &lt;/h2&gt;
&lt;p&gt;With the project directory ready, you can now initialize the virtual environment. We will use the &lt;code&gt;venv&lt;/code&gt; module to generate a local directory named &lt;code&gt;venv&lt;/code&gt;. This folder will contain a standalone Python binary and its own &lt;code&gt;pip&lt;/code&gt; installer, effectively sandboxing your project from the rest of the operating system.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Initialize the virtual environment in the current folder
python3 -m venv venv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After running this command, you will notice a new &lt;code&gt;venv&lt;/code&gt; directory in your current path. This directory holds everything needed to run your project without requiring root privileges. Do not use &lt;code&gt;sudo&lt;/code&gt; for this step or any subsequent package management within this environment, as it can cause ownership issues that break your project configuration. Next, activate the environment to start using the local binaries:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Activate the virtual environment
source venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once activated, you will notice that your terminal prompt changes to include &lt;code&gt;(venv)&lt;/code&gt; at the beginning. This visual indicator confirms that any subsequent commands, such as &lt;code&gt;python&lt;/code&gt; or &lt;code&gt;pip&lt;/code&gt;, are now pointing to the binaries located inside your project folder rather than the system defaults.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you find that &lt;code&gt;pip&lt;/code&gt; is not available after activation, you can ensure it is installed by running &lt;code&gt;python3 -m ensurepip --upgrade&lt;/code&gt;. This will safely install the package manager directly into your virtual environment without affecting your host system.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At this point, your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; server is correctly configured for local development. You can now safely install project-specific libraries using &lt;code&gt;pip install &amp;lt;package_name&amp;gt;&lt;/code&gt;. Because you are using a virtual environment, these packages will remain contained within your &lt;code&gt;~/my_python_project/venv&lt;/code&gt; directory, keeping your system clean and avoiding conflicts with other applications.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/uYdT-rRay1-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/uYdT-rRay1-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/uYdT-rRay1-400.jpeg&quot; alt=&quot;Terminal showing the activated virtual environment with (venv) prefix in the command prompt&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;42&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-4-manage-packages-within-the-environment&quot;&gt;Step 4: Manage Packages Within the Environment &lt;/h2&gt;
&lt;p&gt;Now that your environment is active, you can manage project dependencies without requiring root access. The primary tool for this is &lt;code&gt;pip&lt;/code&gt;, the standard package installer for Python. Because your shell is currently pointed at the isolated &lt;code&gt;venv&lt;/code&gt; binaries, any library you install will be saved exclusively to your project folder.&lt;/p&gt;
&lt;p&gt;To install a package, such as &lt;code&gt;requests&lt;/code&gt;, simply run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Install a package within the virtual environment
pip install requests
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can verify that the library is installed correctly by listing the currently available packages in your environment:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## List all installed packages in the current venv
pip list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are working on a collaborative project or moving your code to a production &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; server, you should generate a requirements file. This allows you to track exactly which versions of libraries your project needs:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Export the current environment dependencies to a file
pip freeze &amp;gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This &lt;code&gt;requirements.txt&lt;/code&gt; file is the industry standard for maintaining consistent environments across different machines. If you ever need to recreate this environment on another server, you can install all dependencies at once using &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Never use &lt;code&gt;sudo&lt;/code&gt; when running &lt;code&gt;pip&lt;/code&gt; inside your virtual environment. Using &lt;code&gt;sudo&lt;/code&gt; can cause file permission errors and may inadvertently install packages to the system-wide Python directory, which violates the isolation you have just established.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/_MwENe_xGG-400.avif 400w, https://voxihost.pl/assets/images/generated/_MwENe_xGG-800.avif 800w, https://voxihost.pl/assets/images/generated/_MwENe_xGG-1111.avif 1111w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/_MwENe_xGG-400.webp 400w, https://voxihost.pl/assets/images/generated/_MwENe_xGG-800.webp 800w, https://voxihost.pl/assets/images/generated/_MwENe_xGG-1111.webp 1111w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/_MwENe_xGG-400.jpeg&quot; alt=&quot;Terminal showing pip install output and a generated requirements.txt file within the active venv&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1111&quot; height=&quot;443&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/_MwENe_xGG-400.jpeg 400w, https://voxihost.pl/assets/images/generated/_MwENe_xGG-800.jpeg 800w, https://voxihost.pl/assets/images/generated/_MwENe_xGG-1111.jpeg 1111w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;You have successfully established a robust, isolated Python environment on your system. By moving away from global package management, you have eliminated the risk of dependency conflicts and ensured that your projects remain portable and stable. This workflow is particularly vital when deploying applications on your &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; or &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt;, where maintaining a clean system state is essential for long-term server health.&lt;/p&gt;
&lt;p&gt;Remember that virtual environments are ephemeral. If you ever need to update your dependencies, simply reactivate the environment using the &lt;code&gt;source venv/bin/activate&lt;/code&gt; command and run your updates. If you find your project requirements have changed significantly, it is often cleaner to delete the &lt;code&gt;venv&lt;/code&gt; directory and recreate it from your &lt;code&gt;requirements.txt&lt;/code&gt; file rather than manually uninstalling dozens of individual packages.&lt;/p&gt;
&lt;p&gt;As your projects grow, you might consider containerizing them with Docker or implementing automated deployment scripts to handle these environment setups. For now, you have a solid foundation for local development and production deployment. Keep your server secure, keep your dependencies pinned, and continue building on your infrastructure with confidence.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Install PHP-FPM with Nginx on Ubuntu</title>
    <link href="https://voxihost.pl/guides/install-php-fpm-nginx-ubuntu/" rel="alternate"/>
    <published>2026-07-20T00:00:00Z</published>
    <updated>2026-07-20T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/install-php-fpm-nginx-ubuntu/</id>
    <summary type="text">Learn how to install and configure PHP-FPM with Nginx on Ubuntu. This guide covers setup, server block configuration, and testing for your VoxiHost VPS.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Running a high-performance web server requires a stack that balances speed with resource efficiency. While Apache has served the web for decades, Nginx combined with PHP-FPM has become the standard for modern, high-traffic applications. By offloading PHP processing to a dedicated FastCGI Process Manager, you gain significant improvements in memory consumption and request handling compared to older execution methods.&lt;/p&gt;
&lt;p&gt;This guide focuses on setting up a stable, production-ready environment on Ubuntu 26.04 LTS. We will walk through the installation of Nginx and the default PHP 8.5 version (PHP-FPM) available on your system, ensuring they communicate correctly via Unix sockets. This configuration is ideal for developers hosting dynamic sites on a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt;, where every millisecond of latency reduction matters.&lt;/p&gt;
&lt;p&gt;We prioritize a clean, minimal installation. We avoid bloated bundles in favor of package-managed, official repositories that ensure security updates are just an &lt;code&gt;apt upgrade&lt;/code&gt; away. By the end of this tutorial, you will have a functional web server capable of serving dynamic PHP content, complete with the configuration tweaks required to avoid common bottlenecks. Whether you are migrating an existing application or spinning up a fresh project, this setup provides a rock-solid foundation for your infrastructure.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites &lt;/h2&gt;
&lt;p&gt;Before beginning the installation, ensure your server meets the baseline requirements for a stable production environment. We recommend a minimum of 1GB of RAM and at least one dedicated CPU core to handle the overhead of Nginx and the PHP-FPM worker processes without performance degradation. This guide assumes you are running a fresh installation of Ubuntu 26.04 LTS.&lt;/p&gt;
&lt;p&gt;You must have root access or a user account with &lt;code&gt;sudo&lt;/code&gt; privileges to execute administrative commands. If you are using a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt;, ensure your firewall is correctly configured to allow incoming traffic on ports 80 and 443. If you have not yet set up your firewall, follow our guide on &lt;a href=&quot;https://voxihost.pl/guides/configure-ufw-ubuntu-debian/&quot;&gt;securing-ubuntu-server-with-ufw&lt;/a&gt; to prevent unauthorized access to your management ports.&lt;/p&gt;
&lt;p&gt;Verify that your package list is current and that your system is fully updated to avoid dependency conflicts during the installation process. Although we will install specific packages in the following steps, having a clean, updated environment prevents common library mismatch errors. Ensure you are logged into your server via SSH and have your domain or server IP address ready for testing the final configuration.&lt;/p&gt;
&lt;h2 id=&quot;step-1-install-nginx-and-php-fpm&quot;&gt;Step 1: Install Nginx and PHP-FPM &lt;/h2&gt;
&lt;p&gt;To begin the setup, you must fetch the latest package metadata from the official repositories and install the Nginx web server alongside the PHP-FPM interpreter. We will install the default &lt;code&gt;php-fpm&lt;/code&gt; package, which automatically resolves to PHP 8.5 on Ubuntu 26.04 LTS (or PHP 8.3 if you are running Ubuntu 24.04 LTS).&lt;/p&gt;
&lt;p&gt;Run the following commands to initialize the installation:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Update the local package index to ensure you pull the latest versions
sudo apt update

## Install Nginx and the default PHP FastCGI Process Manager
sudo apt install nginx php-fpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KcpoV0VM8--400.avif 400w, https://voxihost.pl/assets/images/generated/KcpoV0VM8--800.avif 800w, https://voxihost.pl/assets/images/generated/KcpoV0VM8--1224.avif 1224w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KcpoV0VM8--400.webp 400w, https://voxihost.pl/assets/images/generated/KcpoV0VM8--800.webp 800w, https://voxihost.pl/assets/images/generated/KcpoV0VM8--1224.webp 1224w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/KcpoV0VM8--400.jpeg&quot; alt=&quot;Terminal output showing the successful installation of Nginx and PHP-FPM&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1224&quot; height=&quot;415&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KcpoV0VM8--400.jpeg 400w, https://voxihost.pl/assets/images/generated/KcpoV0VM8--800.jpeg 800w, https://voxihost.pl/assets/images/generated/KcpoV0VM8--1224.jpeg 1224w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Once the installation is complete, you should check which PHP version was installed as the default on your system. This determines the exact service and socket names you will use in subsequent steps. Run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Check the installed PHP version
php -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For example, if the output shows &lt;code&gt;PHP 8.5.x&lt;/code&gt;, your PHP-FPM service name is &lt;code&gt;php8.5-fpm&lt;/code&gt; and the socket file is &lt;code&gt;php8.5-fpm.sock&lt;/code&gt; (if you are on Ubuntu 24.04 LTS, it will show &lt;code&gt;PHP 8.3.x&lt;/code&gt; with &lt;code&gt;php8.3-fpm&lt;/code&gt; and &lt;code&gt;php8.3-fpm.sock&lt;/code&gt;). Note this version - you will use it in the Nginx configuration in the next step.&lt;/p&gt;
&lt;h2 id=&quot;step-2-configure-the-nginx-server-block&quot;&gt;Step 2: Configure the Nginx Server Block &lt;/h2&gt;
&lt;p&gt;By default, Nginx is not configured to process PHP files. You must modify the default server block to pass requests for &lt;code&gt;.php&lt;/code&gt; files to the PHP-FPM socket. Open the configuration file using the text editor:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Open the default site configuration file for editing
sudo nano /etc/nginx/sites-available/default
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Locate the &lt;code&gt;location /&lt;/code&gt; block and ensure the &lt;code&gt;index&lt;/code&gt; directive includes &lt;code&gt;index.php&lt;/code&gt;. Then, uncomment or add the &lt;code&gt;location ~ &#92;.php$ { ... }&lt;/code&gt; block to handle PHP requests. Your configuration should resemble the following structure:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    # Pass PHP scripts to the PHP-FPM socket
    location ~ &#92;.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.x-fpm.sock;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check the &lt;code&gt;fastcgi_pass&lt;/code&gt; directive carefully. The path &lt;code&gt;/var/run/php/php8.x-fpm.sock&lt;/code&gt; (where &lt;code&gt;8.x&lt;/code&gt; is your PHP version, e.g., &lt;code&gt;8.5&lt;/code&gt; on Ubuntu 26.04 LTS or &lt;code&gt;8.3&lt;/code&gt; on Ubuntu 24.04 LTS) must match the actual socket file on your system. If you encounter errors later, verify that the version number in the path aligns with the &lt;code&gt;php8.x-fpm&lt;/code&gt; service you verified in the previous step. Save your changes by pressing &lt;code&gt;Ctrl + O&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;, and exit with &lt;code&gt;Ctrl + X&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/evSBzoBRtm-400.avif 400w, https://voxihost.pl/assets/images/generated/evSBzoBRtm-800.avif 800w, https://voxihost.pl/assets/images/generated/evSBzoBRtm-1515.avif 1515w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/evSBzoBRtm-400.webp 400w, https://voxihost.pl/assets/images/generated/evSBzoBRtm-800.webp 800w, https://voxihost.pl/assets/images/generated/evSBzoBRtm-1515.webp 1515w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/evSBzoBRtm-400.jpeg&quot; alt=&quot;Text editor view of the Nginx default configuration file showing the correctly configured PHP location block&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1515&quot; height=&quot;790&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/evSBzoBRtm-400.jpeg 400w, https://voxihost.pl/assets/images/generated/evSBzoBRtm-800.jpeg 800w, https://voxihost.pl/assets/images/generated/evSBzoBRtm-1515.jpeg 1515w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;step-3-create-a-php-test-script-and-verify-setup&quot;&gt;Step 3: Create a PHP Test Script and Verify Setup &lt;/h2&gt;
&lt;p&gt;To verify that Nginx is correctly passing requests to the PHP-FPM processor, create a simple information page. This script uses the &lt;code&gt;phpinfo()&lt;/code&gt; function, which displays the current PHP configuration, loaded modules, and environment variables.&lt;/p&gt;
&lt;p&gt;Navigate to the default web root directory and create a new file named &lt;code&gt;info.php&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Create the test file in the default web root
sudo nano /var/www/html/info.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Insert the following PHP code into the file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
phpinfo();
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the file by pressing &lt;code&gt;Ctrl + O&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;, and exit using &lt;code&gt;Ctrl + X&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Before testing the file in your browser, validate your Nginx configuration to ensure there are no syntax errors from the previous step. Then, apply the changes by reloading the service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Test the configuration syntax
sudo nginx -t

## Apply the changes to the Nginx service
sudo systemctl reload nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the syntax test returns successful, open your web browser and navigate to &lt;code&gt;http://your_server_ip/info.php&lt;/code&gt;. You should see a page detailing your PHP installation (which will show PHP 8.5 on a fresh Ubuntu 26.04 setup). If you see the raw code instead of the rendered page, double-check that the &lt;code&gt;location ~ &#92;.php$&lt;/code&gt; block in your Nginx configuration matches the socket path exactly. Once you have confirmed that everything is working correctly, delete the test file to prevent unauthorized users from viewing sensitive server information:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Remove the test script for security
sudo rm /var/www/html/info.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/UwJaSnZLuK-400.avif 400w, https://voxihost.pl/assets/images/generated/UwJaSnZLuK-800.avif 800w, https://voxihost.pl/assets/images/generated/UwJaSnZLuK-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/UwJaSnZLuK-400.webp 400w, https://voxihost.pl/assets/images/generated/UwJaSnZLuK-800.webp 800w, https://voxihost.pl/assets/images/generated/UwJaSnZLuK-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/UwJaSnZLuK-400.jpeg&quot; alt=&quot;The PHP info page displayed in a web browser, confirming that PHP-FPM is correctly integrated with Nginx&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;921&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/UwJaSnZLuK-400.jpeg 400w, https://voxihost.pl/assets/images/generated/UwJaSnZLuK-800.jpeg 800w, https://voxihost.pl/assets/images/generated/UwJaSnZLuK-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;After verifying the PHP integration through the browser, perform a final status check on the services to ensure both Nginx and PHP-FPM are operating without errors. Run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Check the status of the Nginx web server
sudo systemctl status nginx

## Check the status of the PHP-FPM service (replace 8.x with your version)
sudo systemctl status php8.x-fpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify that both services display an &amp;quot;active (running)&amp;quot; status. If a service shows as &amp;quot;failed&amp;quot; or &amp;quot;inactive,&amp;quot; check the system logs using &lt;code&gt;journalctl -u nginx&lt;/code&gt; or &lt;code&gt;journalctl -u php8.x-fpm&lt;/code&gt; (replacing &lt;code&gt;8.x&lt;/code&gt; with your installed PHP version). Periodically checking the Nginx error logs at &lt;code&gt;/var/log/nginx/error.log&lt;/code&gt; is also highly recommended to proactively catch file permission issues or missing PHP modules before they affect your users.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/ilET4BEqkv-400.avif 400w, https://voxihost.pl/assets/images/generated/ilET4BEqkv-800.avif 800w, https://voxihost.pl/assets/images/generated/ilET4BEqkv-1515.avif 1515w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/ilET4BEqkv-400.webp 400w, https://voxihost.pl/assets/images/generated/ilET4BEqkv-800.webp 800w, https://voxihost.pl/assets/images/generated/ilET4BEqkv-1515.webp 1515w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/ilET4BEqkv-400.jpeg&quot; alt=&quot;Terminal output showing the PHP version check and the active status of both Nginx and PHP-FPM services&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1515&quot; height=&quot;790&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/ilET4BEqkv-400.jpeg 400w, https://voxihost.pl/assets/images/generated/ilET4BEqkv-800.jpeg 800w, https://voxihost.pl/assets/images/generated/ilET4BEqkv-1515.jpeg 1515w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;You now have a fully functional LEMP stack running on your Ubuntu server. By pairing Nginx with PHP-FPM 8.5, you have established a high-performance foundation capable of handling dynamic web traffic with minimal overhead. Whether you are deploying a custom application or a content management system, this configuration provides the necessary control over your server environment.&lt;/p&gt;
&lt;p&gt;Maintaining this stack involves more than just the initial setup. As your application grows, you may need to adjust the worker processes in your Nginx configuration or tune the PHP-FPM pool settings to better suit your resource allocation. If you ever need to perform a system update, remember to stop the services first to ensure data integrity:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;## Safely stop services before system updates (replace 8.x with your version)
sudo systemctl stop nginx
sudo systemctl stop php8.x-fpm

## Run your system package updates
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y

## Restart the services after the update (replace 8.x with your version)
sudo systemctl start nginx
sudo systemctl start php8.x-fpm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For those managing critical workloads, monitoring is the next logical step. Keep an eye on system resource usage through your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; dashboard, especially if you are scaling your &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; or &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; environments. Regularly checking your logs and keeping your packages current will ensure that your web server remains both fast and secure against emerging vulnerabilities.&lt;/p&gt;
&lt;p&gt;If you decide to expand your infrastructure further, consider looking into &lt;a href=&quot;https://voxihost.pl/guides/ssl-letsencrypt-certbot-ubuntu/&quot;&gt;How to Set Up SSL with Let&#39;s Encrypt &amp;amp; Certbot on Ubuntu &amp;amp; Debian: The Complete Guide&lt;/a&gt; to encrypt your traffic and improve your search engine rankings.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Install Portainer on Ubuntu &amp; Debian VPS</title>
    <link href="https://voxihost.pl/guides/setup-portainer-ubuntu-debian/" rel="alternate"/>
    <published>2026-07-14T00:00:00Z</published>
    <updated>2026-07-14T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/setup-portainer-ubuntu-debian/</id>
    <summary type="text">Learn how to install Portainer CE on an Ubuntu or Debian VPS to easily manage Docker containers from a graphical user interface (GUI) in your browser.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Docker is an amazing tool, but typing commands into a black terminal can be overwhelming for beginners. Enter &lt;strong&gt;Portainer&lt;/strong&gt; - a graphical user interface (GUI) dashboard that lets you click your way through Docker straight from your web browser.&lt;/p&gt;
&lt;p&gt;In this step-by-step tutorial, we will show you how to install Portainer on your server in just a few minutes. You don&#39;t need to be a Linux expert - just copy and paste the commands below!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; You will need a &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; running Ubuntu or Debian and an SSH client (e.g. PuTTY or your system Terminal). If you don&#39;t have a server yet, &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; offers &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; and &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; with Ubuntu and Debian available out of the box.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-1-connect-to-your-server-and-install-docker&quot;&gt;Step 1: Connect to your Server and Install Docker &lt;/h2&gt;
&lt;p&gt;First, connect to your server via SSH. Next, let&#39;s make sure Docker is installed. If you don&#39;t have it yet, simply paste this one-line installer command which will do all the heavy lifting for you:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-400.avif 400w, https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-756.avif 756w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-400.webp 400w, https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-756.webp 756w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-400.jpeg&quot; alt=&quot;Terminal showing the Docker installation process on Ubuntu&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;756&quot; height=&quot;214&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-400.jpeg 400w, https://voxihost.pl/assets/images/generated/Nq4Q8MoRa_-756.jpeg 756w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh &amp;amp;&amp;amp; sudo sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Wait a few moments for the installation to finish.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-2-prepare-storage-for-portainer&quot;&gt;Step 2: Prepare Storage for Portainer &lt;/h2&gt;
&lt;p&gt;Portainer needs a safe place on your hard drive to save your passwords and configurations. Paste the following command into your terminal and press ENTER to create a &amp;quot;volume&amp;quot;:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/o-wZ2QW8fG-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/o-wZ2QW8fG-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/o-wZ2QW8fG-400.jpeg&quot; alt=&quot;Creating a Docker volume for Portainer in the terminal&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;48&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume create portainer_data
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-3-run-portainer&quot;&gt;Step 3: Run Portainer &lt;/h2&gt;
&lt;p&gt;Now we will start Portainer itself. The command below will download the latest version and run it in the background. Paste the entire command into the terminal and press ENTER:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-400.avif 400w, https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-800.avif 800w, https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-1532.avif 1532w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-400.webp 400w, https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-800.webp 800w, https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-1532.webp 1532w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-400.jpeg&quot; alt=&quot;Running the Portainer CE container with required port and volume parameters&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1532&quot; height=&quot;249&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-400.jpeg 400w, https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-800.jpeg 800w, https://voxihost.pl/assets/images/generated/WRaZlp0Iwh-1532.jpeg 1532w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s it! The installation on the server side is complete.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-4-first-login-in-the-browser&quot;&gt;Step 4: First Login in the Browser &lt;/h2&gt;
&lt;p&gt;You can now close your terminal. Open your favorite web browser (like Chrome or Firefox) and type the following into the address bar:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://YOUR_SERVER_IP:9443&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;(Replace &amp;quot;YOUR_SERVER_IP&amp;quot; with the actual IP address of your VPS, e.g., &lt;a href=&quot;https://192.168.1.50:9443/&quot;&gt;https://192.168.1.50:9443&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If you see the error &lt;code&gt;Client sent an HTTP request to an HTTPS server.&lt;/code&gt;, it means your browser tried to connect via standard HTTP. Make sure your address explicitly starts with &lt;strong&gt;https://&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Your browser might show a &amp;quot;Your connection is not private&amp;quot; warning. This is completely normal because the server uses a self-signed certificate by default. Simply click &lt;strong&gt;&amp;quot;Advanced&amp;quot;&lt;/strong&gt; and then &lt;strong&gt;&amp;quot;Proceed / Continue&amp;quot;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You will see the initial setup screen. Create a strong password for yourself, type it twice, and click the &lt;strong&gt;Create user&lt;/strong&gt; button.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important (5-minute limit!):&lt;/strong&gt; Portainer takes security seriously. If more than 5 minutes pass between starting the container (Step 3) and setting your password, the setup will time out. To unlock it, go to your terminal and type &lt;code&gt;docker restart portainer&lt;/code&gt;, then refresh the page. You will then be asked for a &lt;strong&gt;Setup Token&lt;/strong&gt;. To get it, type &lt;code&gt;docker logs portainer&lt;/code&gt;. Near the bottom of the logs, you will see &lt;em&gt;Use the following token to setup the administrator user:&lt;/em&gt; followed by a long code. Copy this token and paste it into the browser.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-400.avif 400w, https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-800.avif 800w, https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-1027.avif 1027w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-400.webp 400w, https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-800.webp 800w, https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-1027.webp 1027w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-400.jpeg&quot; alt=&quot;Portainer initial admin account setup screen in the browser&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1027&quot; height=&quot;805&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-400.jpeg 400w, https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-800.jpeg 800w, https://voxihost.pl/assets/images/generated/Wd-oCwTtnY-1027.jpeg 1027w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-5-managing-containers&quot;&gt;Step 5: Managing Containers &lt;/h2&gt;
&lt;p&gt;After logging in, click the &lt;strong&gt;&amp;quot;Get Started&amp;quot;&lt;/strong&gt; button, and on the next screen, click the whale icon labeled &lt;strong&gt;&amp;quot;Local&amp;quot;&lt;/strong&gt; (which represents the server we are currently on).&lt;/p&gt;
&lt;p&gt;You&#39;re all set! You now have access to the full dashboard. From now on, you don&#39;t need to use terminal commands - you can manage your apps using your mouse.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/bjJt6WmRvi-400.avif 400w, https://voxihost.pl/assets/images/generated/bjJt6WmRvi-800.avif 800w, https://voxihost.pl/assets/images/generated/bjJt6WmRvi-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/bjJt6WmRvi-400.webp 400w, https://voxihost.pl/assets/images/generated/bjJt6WmRvi-800.webp 800w, https://voxihost.pl/assets/images/generated/bjJt6WmRvi-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/bjJt6WmRvi-400.jpeg&quot; alt=&quot;Portainer main dashboard showing a list of active Docker containers&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;803&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/bjJt6WmRvi-400.jpeg 400w, https://voxihost.pl/assets/images/generated/bjJt6WmRvi-800.jpeg 800w, https://voxihost.pl/assets/images/generated/bjJt6WmRvi-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Portainer is an incredible tool that makes Docker accessible even for those without much Linux experience. If you are looking for a server to run your own projects, &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; offers &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; and &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; with Ubuntu and Debian ready to go.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Install FileBrowser with Docker on Your VPS</title>
    <link href="https://voxihost.pl/guides/private-cloud-filebrowser-docker/" rel="alternate"/>
    <published>2026-07-13T00:00:00Z</published>
    <updated>2026-07-13T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/private-cloud-filebrowser-docker/</id>
    <summary type="text">Learn how to install FileBrowser via Docker in 5 minutes and turn your VPS server into a private cloud drive accessible from your web browser.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Owning a VPS server is great, but transferring files to it via the terminal (SFTP) can be cumbersome. How about turning your cheap server into a convenient cloud drive (like Google Drive or Dropbox) that you can operate 100% from your web browser?&lt;/p&gt;
&lt;p&gt;Enter &lt;strong&gt;FileBrowser&lt;/strong&gt; - an incredibly lightweight file manager. It works blazingly fast, doesn&#39;t require a domain name (you can just use your IP address), and uses so few resources that it runs perfectly on even the cheapest &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; from our lineup!&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-1-quick-launch-via-docker&quot;&gt;Step 1: Quick Launch via Docker &lt;/h2&gt;
&lt;p&gt;Log into your server via terminal. Running FileBrowser comes down to one simple command. Paste the code below and press ENTER:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/W4qKRh07Xt-400.avif 400w, https://voxihost.pl/assets/images/generated/W4qKRh07Xt-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/W4qKRh07Xt-400.webp 400w, https://voxihost.pl/assets/images/generated/W4qKRh07Xt-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/W4qKRh07Xt-400.jpeg&quot; alt=&quot;Terminal output while starting the FileBrowser container&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;257&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/W4qKRh07Xt-400.jpeg 400w, https://voxihost.pl/assets/images/generated/W4qKRh07Xt-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -d --name filebrowser -v /:/srv -p 8080:80 --restart always filebrowser/filebrowser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;What exactly does this command do?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-p 8080:80&lt;/code&gt; exposes the dashboard on port 8080.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-v /:/srv&lt;/code&gt; gives the app access to your server&#39;s entire root file system, allowing you to browse and edit absolutely any system file through your browser!&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-2-first-login-to-your-drive&quot;&gt;Step 2: First Login to your Drive &lt;/h2&gt;
&lt;p&gt;That&#39;s it for the terminal! Now open your web browser and enter your server&#39;s IP address along with port 8080:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://SERVER_IP_ADDRESS:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will see a clean, minimalist login screen.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KXs97Oh5RE-400.avif 400w, https://voxihost.pl/assets/images/generated/KXs97Oh5RE-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KXs97Oh5RE-400.webp 400w, https://voxihost.pl/assets/images/generated/KXs97Oh5RE-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/KXs97Oh5RE-400.jpeg&quot; alt=&quot;FileBrowser login screen in the browser&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;715&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KXs97Oh5RE-400.jpeg 400w, https://voxihost.pl/assets/images/generated/KXs97Oh5RE-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;To log in, use &lt;strong&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/strong&gt; as the username. In modern versions of FileBrowser, there is no static default password for security reasons.&lt;br /&gt;
Your &lt;strong&gt;one-time temporary password&lt;/strong&gt; was auto-generated. To find it, go back to your terminal and run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker logs filebrowser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look for a line mentioning the randomly generated password in the logs. Copy it and use it to log in.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-3-changing-the-default-password-important&quot;&gt;Step 3: Changing the Default Password (Important!) &lt;/h2&gt;
&lt;p&gt;Right after logging in, you must secure your drive so no one else can access your files. Click on the &lt;strong&gt;Settings&lt;/strong&gt; tab in the left-hand menu, and then go to the &lt;strong&gt;Profile Settings&lt;/strong&gt; section.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-400.avif 400w, https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-800.avif 800w, https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-400.webp 400w, https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-800.webp 800w, https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-400.jpeg&quot; alt=&quot;Password change section in profile settings&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;527&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-400.jpeg 400w, https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-800.jpeg 800w, https://voxihost.pl/assets/images/generated/xVyGxZ7cJl-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Enter a new, strong password, confirm it, and click the &amp;quot;Update&amp;quot; button. Your private drive is now fully secure.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-4-uploading-and-sharing-files&quot;&gt;Step 4: Uploading and Sharing Files &lt;/h2&gt;
&lt;p&gt;You can now do whatever you want with your drive. In the top right corner, you&#39;ll find buttons to create new folders, upload files, and even create empty text files that you can edit directly in the browser!&lt;/p&gt;
&lt;p&gt;By selecting any file, you can click the Share icon to generate a special link. You can send this link to a friend so they can download the file directly from your server without needing an account.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/D1zSFfAFt7-400.avif 400w, https://voxihost.pl/assets/images/generated/D1zSFfAFt7-800.avif 800w, https://voxihost.pl/assets/images/generated/D1zSFfAFt7-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/D1zSFfAFt7-400.webp 400w, https://voxihost.pl/assets/images/generated/D1zSFfAFt7-800.webp 800w, https://voxihost.pl/assets/images/generated/D1zSFfAFt7-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/D1zSFfAFt7-400.jpeg&quot; alt=&quot;FileBrowser interface showing the file sharing feature&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;462&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/D1zSFfAFt7-400.jpeg 400w, https://voxihost.pl/assets/images/generated/D1zSFfAFt7-800.jpeg 800w, https://voxihost.pl/assets/images/generated/D1zSFfAFt7-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;FileBrowser is a &amp;quot;must-have&amp;quot; for any private server. It uses a fraction of a percent of RAM and offers massive convenience for managing files in Linux. Use this solution on your new &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; and forget about using clumsy FTP programs!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Install Uptime Kuma with Docker: Self-Hosted Monitoring</title>
    <link href="https://voxihost.pl/guides/setup-uptime-kuma-docker/" rel="alternate"/>
    <published>2026-07-07T00:00:00Z</published>
    <updated>2026-07-07T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/setup-uptime-kuma-docker/</id>
    <summary type="text">Build your own server and website monitoring system using the free Uptime Kuma tool and Docker Compose. Get instant alerts when your services go down.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Have you ever woken up in the morning only to discover that your Minecraft server or website has been down for several hours? Instead of relying on paid solutions like Uptime Robot, you can host your own, beautiful, and 100% free monitoring system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Uptime Kuma&lt;/strong&gt; is a powerful open-source tool that can monitor websites, game servers, TCP ports, and DNS services. In this quick tutorial, we will show you how to install it on your own server using Docker in just 15 minutes!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Uptime Kuma does not consume many resources. The cheapest plan from our &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; lineup (e.g., based on Ubuntu 22.04) will easily be enough for this task.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-1-docker-compose-preparation&quot;&gt;Step 1: Docker Compose Preparation &lt;/h2&gt;
&lt;p&gt;The entire Uptime Kuma application runs in a single Docker container. If you don&#39;t have Docker installed yet, use the official installation script:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/9CX4sytE9F-400.avif 400w, https://voxihost.pl/assets/images/generated/9CX4sytE9F-694.avif 694w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/9CX4sytE9F-400.webp 400w, https://voxihost.pl/assets/images/generated/9CX4sytE9F-694.webp 694w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/9CX4sytE9F-400.jpeg&quot; alt=&quot;Terminal showing Docker installation process&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;694&quot; height=&quot;298&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/9CX4sytE9F-400.jpeg 400w, https://voxihost.pl/assets/images/generated/9CX4sytE9F-694.jpeg 694w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We recommend using the Docker Compose plugin (it is built-in in the latest versions, but let&#39;s make sure):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check the version to ensure everything is working:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose version
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-2-uptime-kuma-configuration-and-startup&quot;&gt;Step 2: Uptime Kuma Configuration and Startup &lt;/h2&gt;
&lt;p&gt;Now we will create a dedicated folder for our application and configure the YAML file with container settings.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/iVIYeu8Ybe-342.avif 342w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/iVIYeu8Ybe-342.webp 342w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/iVIYeu8Ybe-342.jpeg&quot; alt=&quot;Creating docker-compose.yml for Uptime Kuma&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;342&quot; height=&quot;56&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/uptime-kuma
cd ~/uptime-kuma
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create a &lt;code&gt;docker-compose.yml&lt;/code&gt; file using your favorite text editor, for example, &lt;code&gt;nano&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Paste the following content into it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - ./uptime-kuma-data:/app/data
    ports:
      - &amp;quot;3001:3001&amp;quot;  # You can change the left value to another port if 3001 is taken
    restart: always
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the file (&lt;code&gt;Ctrl+O&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;) and exit the editor (&lt;code&gt;Ctrl+X&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Next, run the application in the background using the command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s it! The application will download the image and start up. You can verify this by typing &lt;code&gt;sudo docker ps&lt;/code&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-3-first-login-and-adding-a-monitor&quot;&gt;Step 3: First Login and Adding a Monitor &lt;/h2&gt;
&lt;p&gt;To log into the panel, open your server&#39;s IP address in a browser, appending port &lt;code&gt;3001&lt;/code&gt;, e.g.:&lt;br /&gt;
&lt;code&gt;http://YOUR_IP_ADDRESS:3001&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; Remember that while Uptime Kuma forces you to create a password, connecting via HTTP is not the most secure. Be sure to check out our guide on &lt;a href=&quot;https://voxihost.pl/guides/setup-nginx-proxy-manager-vps/&quot;&gt;How to Configure Nginx Proxy Manager&lt;/a&gt; to connect your domain to Uptime Kuma and generate a free SSL certificate!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Upon entering the site, you will create your administrator account (username and password).&lt;/p&gt;
&lt;p&gt;Next, in the top left corner, click &lt;strong&gt;&amp;quot;Add New Monitor&amp;quot;&lt;/strong&gt;.&lt;br /&gt;
You have a multitude of options to choose from here, e.g.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTTP(s)&lt;/strong&gt;: to check if a website (e.g., your blog) is working.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TCP Port&lt;/strong&gt;: to check if an SSH process (port 22) or network application is running.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Steam Game Server&lt;/strong&gt;: ideal for game servers (e.g., FiveM, Rust).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minecraft&lt;/strong&gt;: a built-in feature that queries MC servers directly (you provide the IP address and game port).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/-0FiiAPDzK-400.avif 400w, https://voxihost.pl/assets/images/generated/-0FiiAPDzK-800.avif 800w, https://voxihost.pl/assets/images/generated/-0FiiAPDzK-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/-0FiiAPDzK-400.webp 400w, https://voxihost.pl/assets/images/generated/-0FiiAPDzK-800.webp 800w, https://voxihost.pl/assets/images/generated/-0FiiAPDzK-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/-0FiiAPDzK-400.jpeg&quot; alt=&quot;Screen for adding a new monitor for a Minecraft server&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;837&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/-0FiiAPDzK-400.jpeg 400w, https://voxihost.pl/assets/images/generated/-0FiiAPDzK-800.jpeg 800w, https://voxihost.pl/assets/images/generated/-0FiiAPDzK-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Fill out the form and click &amp;quot;Save&amp;quot;. Your first monitor is now up and running!&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-4-configuring-notifications&quot;&gt;Step 4: Configuring Notifications &lt;/h2&gt;
&lt;p&gt;Monitoring is useless if nobody knows about an outage. Uptime Kuma supports over 90(!) notification services, including Telegram, Discord, Slack, Email (SMTP), and even Microsoft Teams.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/zSa4LOmedg-400.avif 400w, https://voxihost.pl/assets/images/generated/zSa4LOmedg-708.avif 708w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/zSa4LOmedg-400.webp 400w, https://voxihost.pl/assets/images/generated/zSa4LOmedg-708.webp 708w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/zSa4LOmedg-400.jpeg&quot; alt=&quot;Configuring Discord Webhook notifications in Uptime Kuma&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;708&quot; height=&quot;880&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/zSa4LOmedg-400.jpeg 400w, https://voxihost.pl/assets/images/generated/zSa4LOmedg-708.jpeg 708w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We will show you how to configure simple notifications on &lt;strong&gt;Discord&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On your Discord server, go to a text channel&#39;s Settings -&amp;gt; &lt;strong&gt;Integrations&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create Webhook&lt;/strong&gt;. Copy its URL.&lt;/li&gt;
&lt;li&gt;In Uptime Kuma, go to the top menu and enter &lt;strong&gt;Settings -&amp;gt; Notifications&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &amp;quot;Setup Notification&amp;quot;.&lt;/li&gt;
&lt;li&gt;Select type: &lt;strong&gt;Discord&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste the copied &lt;em&gt;Webhook URL&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;Test&lt;/em&gt; to see if the bot sent a test message to your channel. If so, save it by clicking &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now, when creating or editing any monitor (Step 3), make sure you have selected your newly created notification channel on the right side!&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Setting up your own monitoring system is just a few minutes of work. Thanks to Uptime Kuma, you maintain full privacy of your logs and avoid paying subscription fees for premium services (like short, 1-minute check intervals, which can be very expensive in SaaS solutions).&lt;/p&gt;
&lt;p&gt;Uptime Kuma installed on a stable &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; is a guarantee that you will know about the failure of your main projects before your clients or players notice it!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>VoxiShield Smart Firewall Dashboard Controls Released</title>
    <link href="https://voxihost.pl/blog/introducing-voxishield-smart-firewall/" rel="alternate"/>
    <published>2026-07-06T00:00:00Z</published>
    <updated>2026-07-06T00:00:00Z</updated>
    <id>https://voxihost.pl/blog/introducing-voxishield-smart-firewall/</id>
    <summary type="text">Manage your VPS network security with VoxiShield! Configure inbound rules, rate limiting, egress filters, and GeoIP blocks directly from the dashboard.</summary>
    <category term="Updates"/>
    <content xml:lang="en" type="html">&lt;p&gt;At &lt;strong&gt;&lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt;&lt;/strong&gt;, network security has always been a core foundation, meaning every VPS we host is protected automatically from day one by our two-layer VoxiShield protection. Today, we are taking a massive leap forward by putting that power directly into your hands.&lt;/p&gt;
&lt;p&gt;We are thrilled to announce the official release of the &lt;strong&gt;VoxiShield DDoS Protection &amp;amp; Smart Firewall&lt;/strong&gt; management panel inside the VoxiHost dashboard! You are no longer restricted to default background filtering; you can now customize, monitor, and define your network security policies in real-time.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/4LvCVaFW-J-400.avif 400w, https://voxihost.pl/assets/images/generated/4LvCVaFW-J-800.avif 800w, https://voxihost.pl/assets/images/generated/4LvCVaFW-J-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/4LvCVaFW-J-400.webp 400w, https://voxihost.pl/assets/images/generated/4LvCVaFW-J-800.webp 800w, https://voxihost.pl/assets/images/generated/4LvCVaFW-J-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/4LvCVaFW-J-400.jpeg&quot; alt=&quot;VoxiShield Firewall Overview Dashboard in the VoxiHost dashboard&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;750&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/4LvCVaFW-J-400.jpeg 400w, https://voxihost.pl/assets/images/generated/4LvCVaFW-J-800.jpeg 800w, https://voxihost.pl/assets/images/generated/4LvCVaFW-J-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;the-two-layer-mitigation-pipeline&quot;&gt;The Two-Layer Mitigation Pipeline &lt;/h2&gt;
&lt;p&gt;Traditional firewalls operate directly on the server operating system, consuming precious CPU and RAM resources during a network attack. VoxiShield filters malicious traffic in a progressive, off-loaded pipeline before it ever reaches your virtual machine.&lt;/p&gt;
&lt;h3 id=&quot;layer-01-pletx-edge-volumetric-filtering&quot;&gt;Layer 01: PletX Edge (Volumetric Filtering) &lt;/h3&gt;
&lt;p&gt;All incoming global traffic first passes through the &lt;strong&gt;PletX Edge scrubbing network&lt;/strong&gt;. This layer is unmanaged and operates 100% automatically. It acts as a massive shield, soaking up volumetric DDoS floods (like DNS/NTP amplification or UDP floods) up to 4+ Tbit/s so that your server&#39;s bandwidth remains completely untouched.&lt;/p&gt;
&lt;h3 id=&quot;layer-02-core-firewall-dashboard-managed&quot;&gt;Layer 02: Core Firewall (Dashboard Managed) &lt;/h3&gt;
&lt;p&gt;Once volumetric threats are neutralized, traffic reaches our transparent &lt;strong&gt;Core Firewall&lt;/strong&gt;. This is the layer you control. Directly from the &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; dashboard, you can define custom traffic access rules, manage ports, configure rate limits, and block malicious traffic with sub-second propagation.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;powerful-firewall-features-at-your-fingertips&quot;&gt;Powerful Firewall Features at Your Fingertips &lt;/h2&gt;
&lt;p&gt;We designed VoxiShield to replace complex &lt;code&gt;iptables&lt;/code&gt; and &lt;code&gt;nftables&lt;/code&gt; commands with an intuitive, visual control center. You do not need to be a network administrator to secure your VPS.&lt;/p&gt;
&lt;h3 id=&quot;1-inbound-rules-and-rate-limiting&quot;&gt;1. Inbound Rules &amp;amp; Rate Limiting &lt;/h3&gt;
&lt;p&gt;Control exactly who and what can connect to your applications. With our Inbound Rules panel, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open specific ports or custom port ranges.&lt;/li&gt;
&lt;li&gt;Restrict protocols to TCP, UDP, or both.&lt;/li&gt;
&lt;li&gt;Define custom actions (Allow / Drop) for each rule.&lt;/li&gt;
&lt;li&gt;Apply &lt;strong&gt;precise packet-per-second (PPS) limits&lt;/strong&gt; to protect game servers and applications from connection floods.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/cVUKKiMhNW-400.avif 400w, https://voxihost.pl/assets/images/generated/cVUKKiMhNW-800.avif 800w, https://voxihost.pl/assets/images/generated/cVUKKiMhNW-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/cVUKKiMhNW-400.webp 400w, https://voxihost.pl/assets/images/generated/cVUKKiMhNW-800.webp 800w, https://voxihost.pl/assets/images/generated/cVUKKiMhNW-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/cVUKKiMhNW-400.jpeg&quot; alt=&quot;Configuring VoxiShield Inbound Rules and PPS limits in the VoxiHost dashboard&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;750&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/cVUKKiMhNW-400.jpeg 400w, https://voxihost.pl/assets/images/generated/cVUKKiMhNW-800.jpeg 800w, https://voxihost.pl/assets/images/generated/cVUKKiMhNW-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-egress-security-outbound-control&quot;&gt;2. Egress Security (Outbound Control) &lt;/h3&gt;
&lt;p&gt;Keep your server&#39;s IP address clean and reputable. Outbound traffic control allows you to monitor and limit egress data, preventing a compromised application from scanning the internet or joining botnets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default Port 25 (SMTP) Block&lt;/strong&gt; to prevent your VPS from sending spam emails.&lt;/li&gt;
&lt;li&gt;Outbound custom port whitelist controls to restrict egress traffic to verified services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-400.avif 400w, https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-800.avif 800w, https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-400.webp 400w, https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-800.webp 800w, https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-400.jpeg&quot; alt=&quot;Configuring VoxiShield Outbound Egress security filters in the VoxiHost dashboard&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;750&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-400.jpeg 400w, https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-800.jpeg 800w, https://voxihost.pl/assets/images/generated/kBnpTBZ5vs-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-block-analyzer&quot;&gt;3. Block Analyzer &lt;/h3&gt;
&lt;p&gt;Diagnosing network issues is now effortless. If a legitimate user or external service is having trouble connecting, you can instantly query their IP address in the &lt;strong&gt;Block Analyzer&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Verify if an IP is flagged by Global Inbound filters (such as GeoIP or ASN blocks).&lt;/li&gt;
&lt;li&gt;Check if the IP is temporarily rate-limited due to exceeding your PPS rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/wSTM-5yUC0-400.avif 400w, https://voxihost.pl/assets/images/generated/wSTM-5yUC0-800.avif 800w, https://voxihost.pl/assets/images/generated/wSTM-5yUC0-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/wSTM-5yUC0-400.webp 400w, https://voxihost.pl/assets/images/generated/wSTM-5yUC0-800.webp 800w, https://voxihost.pl/assets/images/generated/wSTM-5yUC0-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/wSTM-5yUC0-400.jpeg&quot; alt=&quot;Querying blocked IP addresses in the VoxiShield Block Analyzer tool&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;750&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/wSTM-5yUC0-400.jpeg 400w, https://voxihost.pl/assets/images/generated/wSTM-5yUC0-800.jpeg 800w, https://voxihost.pl/assets/images/generated/wSTM-5yUC0-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h3 id=&quot;4-global-inbound-filters&quot;&gt;4. Global Inbound Filters &lt;/h3&gt;
&lt;p&gt;Block whole vectors of malicious traffic before they even reach your server&#39;s network card:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GeoIP Country Filter&lt;/strong&gt;: Allow or block traffic from specific countries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ASN Network Filter&lt;/strong&gt;: Block entire hosting providers, VPN networks, or ISPs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Threat Shield Intelligence&lt;/strong&gt;: Automatically block known malicious botnets, scanners, and exploit sources updated daily.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-400.avif 400w, https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-800.avif 800w, https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-400.webp 400w, https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-800.webp 800w, https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-400.jpeg&quot; alt=&quot;Managing GeoIP and ASN Global Inbound filters in the VoxiHost dashboard&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;750&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-400.jpeg 400w, https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-800.jpeg 800w, https://voxihost.pl/assets/images/generated/VAZ3_oA8hd-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;dedicated-game-and-protocol-protection&quot;&gt;Dedicated Game &amp;amp; Protocol Protection &lt;/h2&gt;
&lt;p&gt;Different services require different filtering rules. A website running on HTTPS needs web-specific scrubbing, while a Minecraft or Counter-Strike server requires low-latency UDP filtering.&lt;/p&gt;
&lt;p&gt;VoxiShield includes dedicated, automatically deployed scrubbing templates tailored for the most popular games and protocols. These templates adapt in real-time to mitigate zero-day exploits and keep your latencies stable.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;special-launch-promotion-35-off&quot;&gt;Special Launch Promotion: -35% OFF &lt;/h2&gt;
&lt;p&gt;To celebrate the release of the VoxiShield management interface, we are offering an exclusive discount on all our VPS hosting services. Protect your next project with built-in enterprise security at an unbeatable price!&lt;/p&gt;
&lt;p&gt;Use promo code &lt;strong&gt;&lt;span&gt;VOXISHIELD&lt;/span&gt;&lt;/strong&gt; at checkout to receive &lt;strong&gt;35% OFF&lt;/strong&gt; your monthly billing cycle.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Promo Details:&lt;/strong&gt; This code is valid for all monthly plans until &lt;strong&gt;July 10, 2026&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps &lt;/h2&gt;
&lt;p&gt;With VoxiShield, enterprise-grade security is a standard, not a luxury. No surprise bills, no hidden bandwidth limits; only raw, high-performance protection that grows with your needs.&lt;/p&gt;
&lt;p&gt;Ready to secure your infrastructure? Deploy a new &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; or high-performance &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; today, and manage your network policies through the &lt;a href=&quot;https://voxihost.pl/shield/&quot;&gt;VoxiShield Smart Firewall&lt;/a&gt; interface inside the VoxiHost dashboard right away!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Install NVIDIA Drivers on Ubuntu and AnduinOS</title>
    <link href="https://voxihost.pl/guides/install-nvidia-drivers-ubuntu/" rel="alternate"/>
    <published>2026-06-30T00:00:00Z</published>
    <updated>2026-06-30T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/install-nvidia-drivers-ubuntu/</id>
    <summary type="text">Install proprietary NVIDIA drivers on Ubuntu-based systems, including Secure Boot module signing and manual installer methods.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;For optimal performance from an NVIDIA GPU on Linux, you must use the proprietary drivers. Although the open-source Nouveau driver suffices for basic display tasks, it lacks the optimizations necessary for gaming, GPU acceleration, and AI workloads on your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; workstation or server.&lt;/p&gt;
&lt;p&gt;This guide covers the three main installation methods for NVIDIA drivers on Ubuntu-based systems, starting with the recommended automated tools and ending with a detailed manual installation procedure.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; Ensure your system is up to date and you have a compatible NVIDIA GPU. Always back up your system before making major driver changes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-1-automatic-installation&quot;&gt;Step 1: Automatic Installation &lt;/h2&gt;
&lt;p&gt;The recommended approach is to let the system detect the hardware automatically and install the appropriate driver version:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo ubuntu-drivers install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot your system once the installation completes. This method is ideal for most setups since it manages system updates and DKMS (Dynamic Kernel Module Support) automatically.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-2-optional-ppa-installation&quot;&gt;Step 2: (Optional) PPA Installation &lt;/h2&gt;
&lt;p&gt;If your hardware requires a newer driver version than the default repositories provide (such as for recent graphics card architectures), use the official graphics drivers PPA:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can then query the available versions and install the required one:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ubuntu-drivers list
sudo apt install nvidia-driver-550 # Replace with the desired version
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-3-manual-installation-with-secure-boot&quot;&gt;Step 3: Manual Installation with Secure Boot &lt;/h2&gt;
&lt;p&gt;If you prefer the official manual &lt;code&gt;.run&lt;/code&gt; installer and have UEFI Secure Boot enabled, you must sign the kernel module before the system will load it.&lt;/p&gt;
&lt;h3 id=&quot;generate-a-signing-key&quot;&gt;Generate a Signing Key &lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/mok-keys &amp;amp;&amp;amp; cd ~/mok-keys
openssl req -new -newkey rsa:2048 -days 36500 -nodes -keyout MOK.key -out MOK.csr
openssl x509 -req -in MOK.csr -signkey MOK.key -out MOK.crt
openssl x509 -in MOK.crt -outform DER -out MOK.der
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;enroll-the-key&quot;&gt;Enroll the Key &lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo mokutil --import MOK.der
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Set a secure one-time password and reboot. During system boot, the blue MokManager utility will appear: choose &amp;quot;Enroll MOK&amp;quot;, confirm, and enter the password.&lt;/p&gt;
&lt;h3 id=&quot;run-the-installer&quot;&gt;Run the Installer &lt;/h3&gt;
&lt;p&gt;After boot, stop your display manager (if active) and launch the installer, passing the key paths as arguments:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ./NVIDIA-Linux-x86_64-xxx.xx.run --module-signing-secret-key=/home/your-user/mok-keys/MOK.key --module-signing-public-key=/home/your-user/mok-keys/MOK.crt
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Once the installation completes, verify the GPU status by running:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvidia-smi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you see a table with your GPU details, you are ready to go! For those running GPU-accelerated containers, don&#39;t forget to check out the &lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html&quot;&gt;NVIDIA Container Toolkit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Looking for a high-performance environment for your AI projects? Check out &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS plans&lt;/a&gt; with dedicated resources.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Find and Use the Fastest APT Mirror for Your Ubuntu Server</title>
    <link href="https://voxihost.pl/guides/fastest-apt-mirror-ubuntu/" rel="alternate"/>
    <published>2026-06-29T00:00:00Z</published>
    <updated>2026-06-29T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/fastest-apt-mirror-ubuntu/</id>
    <summary type="text">Speed up system updates and software installations by configuring Ubuntu to automatically find and use the fastest regional APT mirror.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;When deploying a new Ubuntu server, the default APT package manager configuration typically points to global mirrors. Depending on your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; server&#39;s physical location, this may cause slower download speeds during package installations and system updates.&lt;/p&gt;
&lt;p&gt;To maximize throughput, you should configure APT to use the fastest regional mirror. This guide provides a simple script that benchmarks mirror speeds, selects the lowest-latency option, and updates your configuration (supporting both the legacy &lt;code&gt;sources.list&lt;/code&gt; and modern &lt;code&gt;ubuntu.sources&lt;/code&gt; formats).&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-1-create-the-mirror-selection-script&quot;&gt;Step 1: Create the Mirror Selection Script &lt;/h2&gt;
&lt;p&gt;We will use a bash script that tests the response time of various global mirrors using &lt;code&gt;curl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Create a new file named &lt;code&gt;fastest-mirror.sh&lt;/code&gt; using your preferred text editor:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.avif 400w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-800.avif 800w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.webp 400w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-800.webp 800w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.jpeg&quot; alt=&quot;Process of creating the script&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;927&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.jpeg 400w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-800.jpeg 800w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano fastest-mirror.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Paste the following script into the file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

# Check current APT source format status
check_apt_format() {
    local old_format=false
    local new_format=false
    
    if [ -f &amp;quot;/etc/apt/sources.list&amp;quot; ]; then
        if grep -v &#39;^#&#39; /etc/apt/sources.list | grep -q &#39;[^[:space:]]&#39;; then
            old_format=true
        fi
    fi
    
    if [ -f &amp;quot;/etc/apt/sources.list.d/ubuntu.sources&amp;quot; ]; then
        if grep -v &#39;^#&#39; /etc/apt/sources.list.d/ubuntu.sources | grep -q &#39;[^[:space:]]&#39;; then
            new_format=true
        fi
    fi
    
    if $old_format &amp;amp;&amp;amp; $new_format; then
        echo &amp;quot;both&amp;quot;
    elif $old_format; then
        echo &amp;quot;old&amp;quot;
    elif $new_format; then
        echo &amp;quot;new&amp;quot;
    else
        echo &amp;quot;none&amp;quot;
    fi
}

# Find the fastest mirror
find_fastest_mirror() {
    echo &amp;quot;Testing mirror speeds...&amp;quot; &amp;gt;&amp;amp;2
    codename=$(lsb_release -cs)
    
    mirrors=(
        &amp;quot;http://archive.ubuntu.com/ubuntu/&amp;quot;
        &amp;quot;https://mirror.i3d.net/pub/ubuntu/&amp;quot;
        &amp;quot;https://mirroronet.pl/pub/mirrors/ubuntu/&amp;quot;
        &amp;quot;http://us.archive.ubuntu.com/ubuntu/&amp;quot;
        &amp;quot;http://uk.archive.ubuntu.com/ubuntu/&amp;quot;
        &amp;quot;http://de.archive.ubuntu.com/ubuntu/&amp;quot;
        &amp;quot;https://ftp.uni-stuttgart.de/ubuntu/&amp;quot;
        &amp;quot;https://mirror.ubuntu.ikoula.com/&amp;quot;
    )
    
    declare -A results
    
    for mirror in &amp;quot;${mirrors[@]}&amp;quot;; do
        echo &amp;quot;Testing $mirror ...&amp;quot; &amp;gt;&amp;amp;2
        response=&amp;quot;$(curl -o /dev/null -s -w &amp;quot;%{http_code} %{time_total}&#92;n&amp;quot; &#92;
                  --connect-timeout 2 --max-time 3 &amp;quot;${mirror}dists/${codename}/Release&amp;quot;)&amp;quot;
        
        http_code=$(echo &amp;quot;$response&amp;quot; | awk &#39;{print $1}&#39;)
        time_total=$(echo &amp;quot;$response&amp;quot; | awk &#39;{print $2}&#39;)
        
        if [ &amp;quot;$http_code&amp;quot; -eq 200 ]; then
            results[&amp;quot;$mirror&amp;quot;]=&amp;quot;$time_total&amp;quot;
        else
            results[&amp;quot;$mirror&amp;quot;]=&amp;quot;9999&amp;quot;
        fi
    done
    
    sorted_mirrors=&amp;quot;$(
        for url in &amp;quot;${!results[@]}&amp;quot;; do
            echo &amp;quot;$url ${results[$url]}&amp;quot;
        done | sort -k2 -n
    )&amp;quot;
    
    fastest_mirror=&amp;quot;$(echo &amp;quot;$sorted_mirrors&amp;quot; | head -n 1 | awk &#39;{print $1}&#39;)&amp;quot;
    
    if [[ &amp;quot;$fastest_mirror&amp;quot; == &amp;quot;&amp;quot; || &amp;quot;${results[$fastest_mirror]}&amp;quot; == &amp;quot;9999&amp;quot; ]]; then
        fastest_mirror=&amp;quot;http://archive.ubuntu.com/ubuntu/&amp;quot;
    fi
    
    echo &amp;quot;$fastest_mirror&amp;quot;
}

# Generate new format source list
generate_new_format() {
    local mirror=&amp;quot;$1&amp;quot;
    local codename=&amp;quot;$2&amp;quot;
    
    echo &amp;quot;Generating new format source list /etc/apt/sources.list.d/ubuntu.sources&amp;quot;
    
    sudo tee /etc/apt/sources.list.d/ubuntu.sources &amp;gt;/dev/null &amp;lt;&amp;lt;EOF
Types: deb
URIs: $mirror
Suites: $codename $codename-updates $codename-backports $codename-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
}

# Generate old format source list
generate_old_format() {
    local mirror=&amp;quot;$1&amp;quot;
    local codename=&amp;quot;$2&amp;quot;
    
    echo &amp;quot;Generating old format source list /etc/apt/sources.list&amp;quot;
    
    sudo tee /etc/apt/sources.list &amp;gt;/dev/null &amp;lt;&amp;lt;EOF
deb $mirror $codename main restricted universe multiverse
deb $mirror $codename-updates main restricted universe multiverse
deb $mirror $codename-backports main restricted universe multiverse
deb $mirror $codename-security main restricted universe multiverse
EOF
}

main() {
    sudo apt update
    sudo apt install -y curl lsb-release
    
    format=$(check_apt_format)
    codename=$(lsb_release -cs)
    
    fastest_mirror=$(find_fastest_mirror)
    echo &amp;quot;Fastest mirror found: $fastest_mirror&amp;quot;
    
    case &amp;quot;$format&amp;quot; in
        &amp;quot;old&amp;quot;|&amp;quot;none&amp;quot;)
            generate_old_format &amp;quot;$fastest_mirror&amp;quot; &amp;quot;$codename&amp;quot;
            ;;
        &amp;quot;new&amp;quot;|&amp;quot;both&amp;quot;)
            if [ &amp;quot;$format&amp;quot; == &amp;quot;both&amp;quot; ]; then
                sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
            fi
            generate_new_format &amp;quot;$fastest_mirror&amp;quot; &amp;quot;$codename&amp;quot;
            ;;
    esac
    
    sudo apt update
    echo &amp;quot;APT source optimization completed!&amp;quot;
}

main
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The mirror list in this script is focused on major European and US mirrors (ideal for &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; locations). You can easily add more regional URLs to the &lt;code&gt;mirrors&lt;/code&gt; array if your server is located elsewhere.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.avif 400w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-800.avif 800w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.webp 400w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-800.webp 800w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.jpeg&quot; alt=&quot;Terminal output showing the execution of the mirror selection script benchmarking latency&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;927&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/3EEwya8HKf-400.jpeg 400w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-800.jpeg 800w, https://voxihost.pl/assets/images/generated/3EEwya8HKf-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-2-make-the-script-executable&quot;&gt;Step 2: Make the Script Executable &lt;/h2&gt;
&lt;p&gt;Save and close the file, then grant the script execute permissions:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/SGB5F49x0P-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/SGB5F49x0P-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/SGB5F49x0P-400.jpeg&quot; alt=&quot;Process of making the script executable&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;56&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod +x fastest-mirror.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;step-3-run-the-script&quot;&gt;Step 3: Run the Script &lt;/h2&gt;
&lt;p&gt;Run the script to test the mirrors. It will install &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;lsb-release&lt;/code&gt; if necessary, analyze latencies, and write the new config in the appropriate format for your Ubuntu version.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/XI86qN9udQ-400.avif 400w, https://voxihost.pl/assets/images/generated/XI86qN9udQ-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/XI86qN9udQ-400.webp 400w, https://voxihost.pl/assets/images/generated/XI86qN9udQ-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/XI86qN9udQ-400.jpeg&quot; alt=&quot;Process of running the script&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;825&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/XI86qN9udQ-400.jpeg 400w, https://voxihost.pl/assets/images/generated/XI86qN9udQ-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./fastest-mirror.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see output similar to this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Testing mirror speeds...
Testing http://archive.ubuntu.com/ubuntu/ ...
Testing https://mirroronet.pl/pub/mirrors/ubuntu/ ...
Fastest mirror found: https://mirroronet.pl/pub/mirrors/ubuntu/
Generating new format source list /etc/apt/sources.list.d/ubuntu.sources
Hit:1 https://mirroronet.pl/pub/mirrors/ubuntu noble InRelease
...
APT source optimization completed!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Gry5l9haez-400.avif 400w, https://voxihost.pl/assets/images/generated/Gry5l9haez-800.avif 800w, https://voxihost.pl/assets/images/generated/Gry5l9haez-1531.avif 1531w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Gry5l9haez-400.webp 400w, https://voxihost.pl/assets/images/generated/Gry5l9haez-800.webp 800w, https://voxihost.pl/assets/images/generated/Gry5l9haez-1531.webp 1531w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/Gry5l9haez-400.jpeg&quot; alt=&quot;Displaying the sources.list.d/ubuntu.sources file&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1531&quot; height=&quot;177&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Gry5l9haez-400.jpeg 400w, https://voxihost.pl/assets/images/generated/Gry5l9haez-800.jpeg 800w, https://voxihost.pl/assets/images/generated/Gry5l9haez-1531.jpeg 1531w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Your server is now configured to fetch packages from the fastest available regional mirror, drastically reducing the time it takes to install software and apply security updates.&lt;/p&gt;
&lt;p&gt;Looking for high-performance hosting in Europe? Deploy a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; today and experience the speed of NVMe storage combined with optimal network routing.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>LiteSpeed vs Caddy: The Battle of Modern Web Servers</title>
    <link href="https://voxihost.pl/guides/litespeed-vs-caddy/" rel="alternate"/>
    <published>2026-06-23T00:00:00Z</published>
    <updated>2026-06-23T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/litespeed-vs-caddy/</id>
    <summary type="text">Compare LiteSpeed (OpenLiteSpeed) and Caddy. Learn how they differ in WordPress speed, config complexity, automatic SSL, and performance on your VPS.</summary>
    <category term="Comparisons"/>
    <content xml:lang="en" type="html">&lt;p&gt;While &lt;a href=&quot;https://voxihost.pl/guides/nginx-vs-apache/&quot;&gt;Nginx and Apache&lt;/a&gt; remain the most widely used web servers on the internet, two modern alternatives have gained massive popularity among developers, sysadmins, and bloggers: &lt;strong&gt;LiteSpeed&lt;/strong&gt; (specifically the open-source version, &lt;strong&gt;OpenLiteSpeed&lt;/strong&gt;) and &lt;strong&gt;Caddy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Both servers are designed to be faster and easier to manage than legacy systems. However, they target completely different use cases and development workflows.&lt;/p&gt;
&lt;p&gt;In this guide, we will compare OpenLiteSpeed and Caddy under the hood, analyze their configuration files, evaluate their performance (especially for WordPress), and help you decide which one to install on your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; server.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-what-is-openlitespeed&quot;&gt;1. What is OpenLiteSpeed? &lt;/h2&gt;
&lt;p&gt;OpenLiteSpeed (OLS) is the open-source edition of LiteSpeed Web Server Enterprise. It is designed to act as a drop-in high-performance replacement for Apache, sharing many configuration concepts while delivering event-driven speeds comparable to Nginx.&lt;/p&gt;
&lt;h3 id=&quot;ols-key-features&quot;&gt;OLS Key Features: &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apache Compatibility:&lt;/strong&gt; Understands Apache rewrite rules directly, meaning you don&#39;t need to rebuild complex configuration files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WebAdmin GUI:&lt;/strong&gt; Features a built-in web-based console where you can manage virtual hosts, listeners, SSL, and security settings visually.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LSCache Engine:&lt;/strong&gt; LiteSpeed&#39;s proprietary, built-in page caching module. It is widely considered the fastest server-level cache for WordPress, Magento, and XenForo.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-what-is-caddy&quot;&gt;2. What is Caddy? &lt;/h2&gt;
&lt;p&gt;Caddy is a modern, open-source web server written in Go. Its main selling point is simplicity and security by default. It was the first web server to obtain and renew SSL/TLS certificates automatically from Let&#39;s Encrypt and ZeroSSL without requiring external tools like Certbot.&lt;/p&gt;
&lt;h3 id=&quot;caddy-key-features&quot;&gt;Caddy Key Features: &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic SSL:&lt;/strong&gt; Out of the box, Caddy manages the entire lifecycle of SSL certificates for all configured domains automatically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Caddyfile:&lt;/strong&gt; Caddy uses a human-readable configuration file that is incredibly short and easy to understand.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Written in Go:&lt;/strong&gt; Inherits memory safety and compiled performance from the Go runtime, eliminating common buffer overflow vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-400.avif 400w, https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-800.avif 800w, https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-400.webp 400w, https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-800.webp 800w, https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-400.jpeg&quot; alt=&quot;Architectural comparison between OpenLiteSpeed (WordPress optimization) and Caddy (reverse proxy)&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;805&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-400.jpeg 400w, https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-800.jpeg 800w, https://voxihost.pl/assets/images/generated/2Qp6_z4DCm-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-configuration-comparison-webadmin-gui-vs-caddyfile&quot;&gt;3. Configuration Comparison: WebAdmin GUI vs Caddyfile &lt;/h2&gt;
&lt;p&gt;Configuring these two servers represents two entirely different philosophies.&lt;/p&gt;
&lt;h3 id=&quot;configuring-openlitespeed&quot;&gt;Configuring OpenLiteSpeed &lt;/h3&gt;
&lt;p&gt;OLS configurations are traditionally managed via the &lt;strong&gt;WebAdmin GUI&lt;/strong&gt; (listening on port &lt;code&gt;7080&lt;/code&gt;). While convenient for people who prefer clicking buttons over editing text files, it can make automation (like Ansible or Docker setups) slightly more complex since configuration changes are saved to separate XML/conf files.&lt;/p&gt;
&lt;p&gt;If you want to configure redirects or rewrites, you can write Apache-style rules directly in the Virtual Host control panel.&lt;/p&gt;
&lt;h3 id=&quot;configuring-caddy&quot;&gt;Configuring Caddy &lt;/h3&gt;
&lt;p&gt;Caddy uses a single, centralized text file called the &lt;strong&gt;Caddyfile&lt;/strong&gt;. It is incredibly clean. For example, to host a reverse proxy with automated SSL for &lt;code&gt;example.com&lt;/code&gt;, your entire Caddyfile is just:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;example.com {
    reverse_proxy localhost:3000
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Caddy automatically detects the domain, contacts Let&#39;s Encrypt, completes the HTTP challenge, provisions the certificate, and configures an automatic HTTP to HTTPS redirect. No additional lines of configuration are needed.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-performance-and-wordpress-hosting&quot;&gt;4. Performance &amp;amp; WordPress Hosting &lt;/h2&gt;
&lt;p&gt;Performance varies drastically depending on whether you are hosting static sites, modern APIs, or PHP applications like WordPress.&lt;/p&gt;
&lt;h3 id=&quot;wordpress-performance-openlitespeed-is-king&quot;&gt;WordPress Performance: OpenLiteSpeed is King &lt;/h3&gt;
&lt;p&gt;If your primary goal is to host a WordPress website, &lt;strong&gt;OpenLiteSpeed paired with the LSCache plugin is the absolute winner&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;LSCache communicates directly with the OLS server core, allowing it to bypass PHP execution entirely for cached pages. It supports advanced optimizations like CSS/JS minification, database cleaning, and instant cache purging when a post is updated. WordPress benchmarks show LiteSpeed handling thousands of concurrent requests with sub-millisecond response times.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WordPress Caching Tip:&lt;/strong&gt; When using OpenLiteSpeed, avoid using standard PHP-based caching plugins like WP Rocket or W3 Total Cache. The &lt;strong&gt;LSCache&lt;/strong&gt; plugin is designed specifically to interface directly with the server core, which yields much higher performance and uses fewer CPU resources.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;reverse-proxy-and-static-sites-caddy-wins-on-simplicity&quot;&gt;Reverse Proxy &amp;amp; Static Sites: Caddy Wins on Simplicity &lt;/h3&gt;
&lt;p&gt;If you are deploying a Node.js API, a Go microservice, or a static website (React, Hugo, Vue), &lt;strong&gt;Caddy is the superior choice&lt;/strong&gt;. It acts as an incredibly lightweight, zero-maintenance reverse proxy. You don&#39;t have to worry about renewing certificates or writing complex redirection blocks.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;5-summary-comparison-matrix&quot;&gt;5. Summary Comparison Matrix &lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Feature&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;OpenLiteSpeed&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Caddy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Language&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;C++&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Go (Memory safe)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Primary Admin Interface&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Web GUI (Port 7080)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Text file (Caddyfile)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Automatic SSL&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Yes (via Certbot/Acme scripts)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Yes (Natively out-of-the-box)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Apache Rewrite Rules&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Yes (Native support)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;No (Requires translation)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Best Use Case&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;PHP/WordPress hosting&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Reverse Proxy, Go/Node.js, SPAs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Caching Engine&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;LSCache (Highly advanced)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Requires third-party plugins/headers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion-which-one-fits-your-vps&quot;&gt;Conclusion: Which One Fits Your VPS? &lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;strong&gt;OpenLiteSpeed&lt;/strong&gt; if you are hosting a WordPress blog or e-commerce shop and want the absolute fastest load times using LiteSpeed Cache. It runs beautifully on our &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; plans where SSD NVMe speeds amplify page loading performance.&lt;/li&gt;
&lt;li&gt;Install &lt;strong&gt;Caddy&lt;/strong&gt; if you are a developer looking for a simple, modern web server with automated SSL that you can set up in 10 seconds to reverse-proxy your custom apps on a &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both servers are fully compatible with &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; networks and work seamlessly behind our &lt;a href=&quot;https://voxihost.pl/shield/&quot;&gt;Shield DDoS protection&lt;/a&gt; to keep your web services secure and fast.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Docker vs Podman: Container Engines Comparison for Linux Systems</title>
    <link href="https://voxihost.pl/guides/docker-vs-podman/" rel="alternate"/>
    <published>2026-06-22T00:00:00Z</published>
    <updated>2026-06-22T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/docker-vs-podman/</id>
    <summary type="text">Compare Docker and Podman container engines. Learn key structural differences, the security of rootless containers, and Docker Compose compatibility.</summary>
    <category term="Comparisons"/>
    <content xml:lang="en" type="html">&lt;p&gt;Containerization has completely changed how developers build, ship, and run software. For a long time, the name &lt;strong&gt;Docker&lt;/strong&gt; was synonymous with container technology. However, Red Hat introduced &lt;strong&gt;Podman&lt;/strong&gt; (Pod Manager) as a direct alternative, designed to fix some of Docker&#39;s fundamental architectural and security issues.&lt;/p&gt;
&lt;p&gt;If you are setting up a new virtual private server, you might wonder: should you stick with the industry-standard Docker, or is it time to switch to the security-focused Podman?&lt;/p&gt;
&lt;p&gt;In this guide, we will break down the structural differences, security configurations (rootless containers), Docker Compose compatibility, and help you select the ideal engine for your &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; server.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;1-the-core-architecture-daemon-vs-daemonless&quot;&gt;1. The Core Architecture: Daemon vs Daemonless &lt;/h2&gt;
&lt;p&gt;The most significant difference between Docker and Podman is how they manage container processes under the hood.&lt;/p&gt;
&lt;h3 id=&quot;docker-daemon-based-architecture&quot;&gt;Docker: Daemon-Based Architecture &lt;/h3&gt;
&lt;p&gt;Docker relies on a central background service (daemon) called &lt;code&gt;dockerd&lt;/code&gt;.&lt;br /&gt;
When you run a command like &lt;code&gt;docker run&lt;/code&gt;, the Docker CLI client talks to the &lt;code&gt;dockerd&lt;/code&gt; daemon via a REST API, and the daemon executes the request.&lt;/p&gt;
&lt;p&gt;This means that if the Docker daemon crashes or needs to be restarted, &lt;strong&gt;all running containers on your server are temporarily affected or restarted&lt;/strong&gt; unless live-restore is explicitly enabled. Furthermore, by default, the standard Docker daemon must run with &lt;code&gt;root&lt;/code&gt; privileges, although since version 20.10, it can be run in rootless mode with additional configuration.&lt;/p&gt;
&lt;h3 id=&quot;podman-daemonless-architecture&quot;&gt;Podman: Daemonless Architecture &lt;/h3&gt;
&lt;p&gt;Podman does not use a background daemon.&lt;br /&gt;
When you run a command like &lt;code&gt;podman run&lt;/code&gt;, Podman directly calls standard Linux system features (using the OCI container runtime like &lt;code&gt;runc&lt;/code&gt; or &lt;code&gt;crun&lt;/code&gt;) to launch and monitor the container.&lt;/p&gt;
&lt;p&gt;This is known as a &lt;strong&gt;daemonless&lt;/strong&gt; architecture. Each container runs as an independent child process of the user who started it. If Podman itself is updated or closed, the containers continue to run uninterrupted.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/YtPn0S-HcG-400.avif 400w, https://voxihost.pl/assets/images/generated/YtPn0S-HcG-800.avif 800w, https://voxihost.pl/assets/images/generated/YtPn0S-HcG-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/YtPn0S-HcG-400.webp 400w, https://voxihost.pl/assets/images/generated/YtPn0S-HcG-800.webp 800w, https://voxihost.pl/assets/images/generated/YtPn0S-HcG-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/YtPn0S-HcG-400.jpeg&quot; alt=&quot;Architectural comparison of Docker daemon-based model vs Podman daemonless model&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;763&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/YtPn0S-HcG-400.jpeg 400w, https://voxihost.pl/assets/images/generated/YtPn0S-HcG-800.jpeg 800w, https://voxihost.pl/assets/images/generated/YtPn0S-HcG-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;2-security-the-power-of-rootless-containers&quot;&gt;2. Security: The Power of Rootless Containers &lt;/h2&gt;
&lt;p&gt;Security is where Podman shines brightest. Because Docker runs as a root-level daemon, anyone with access to the Docker socket effectively has root access to the entire host operating system. If an attacker escapes a Docker container, they immediately gain control over the host.&lt;/p&gt;
&lt;p&gt;Podman was built from the ground up to support &lt;strong&gt;rootless containers&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rootless:&lt;/strong&gt; Podman can run, build, and manage containers without requiring root privileges or sudo access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Namespaces:&lt;/strong&gt; It utilizes Linux user namespaces to map the root user inside the container to a regular non-root user on the host VPS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If a rootless Podman container is compromised or an attacker manages to break out of it, they are still isolated inside a standard, unprivileged user account on the host VPS, preventing them from accessing system files or other users&#39; data.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Security Note (Docker Rootless Support):&lt;/strong&gt; It is worth noting that since version 20.10, Docker officially supports rootless mode, and it is available &amp;quot;out of the box&amp;quot; on Ubuntu and Debian. However, setting it up still requires post-installation configuration (such as setting up user-level systemd files and &lt;code&gt;slirp4netns&lt;/code&gt; network drivers), whereas Podman is built with rootless operation as its primary, zero-configuration default.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;3-docker-compose-and-cli-compatibility&quot;&gt;3. Docker Compose &amp;amp; CLI Compatibility &lt;/h2&gt;
&lt;p&gt;When Podman was created, the developers wanted to make transition as painless as possible. Podman is a drop-in replacement for the Docker CLI.&lt;/p&gt;
&lt;p&gt;Almost all commands are identical. You can even set up an alias in your shell:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias docker=podman
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;what-about-docker-compose&quot;&gt;What about Docker Compose? &lt;/h3&gt;
&lt;p&gt;Historically, Podman lacked support for &lt;code&gt;docker-compose.yml&lt;/code&gt; files because Docker Compose relies heavily on communicating with the Docker daemon socket (&lt;code&gt;/var/run/docker.sock&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;To address this, Podman now provides:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Podman Compose:&lt;/strong&gt; A python-based implementation of the compose specification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Podman Socket Service:&lt;/strong&gt; A systemd service that emulates the Docker socket (&lt;code&gt;podman.socket&lt;/code&gt;), allowing you to use the official Docker Compose binary directly.&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# Enable the Podman socket for compatibility
systemctl --user enable --now podman.socket
export DOCKER_HOST=&amp;quot;unix://$XDG_RUNTIME_DIR/podman/podman.sock&amp;quot;
docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Compatibility Tip:&lt;/strong&gt; While Podman&#39;s emulation socket works well for standard multi-container environments, complex setups (like Traefik or Portainer) that require direct, read-write access to &lt;code&gt;/var/run/docker.sock&lt;/code&gt; to dynamically read container metadata are still easier to manage and run on native Docker.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;4-systemd-integration&quot;&gt;4. Systemd Integration &lt;/h2&gt;
&lt;p&gt;Because Podman doesn&#39;t have a central daemon to restart containers after a server reboot (like Docker&#39;s &lt;code&gt;restart: always&lt;/code&gt;), it delegates process management to the host operating system&#39;s native init system: &lt;strong&gt;Systemd&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Podman can automatically generate systemd service files for your containers:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;podman generate systemd --name my-web-app --files
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This lets you manage container lifecycles just like any other Linux service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;systemctl --user enable --now container-my-web-app.service
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;5-performance-in-practice-benchmarks&quot;&gt;5. Performance in Practice: Benchmarks &lt;/h2&gt;
&lt;p&gt;To move beyond theoretical differences, we ran a series of performance benchmarks on a &lt;strong&gt;VoxiHost Premium VPS&lt;/strong&gt; (2 vCPU, 4 GB RAM, Ubuntu 24.04 LTS). We compared Docker Engine v26.1.0 with Podman v4.9.4 running in rootless mode. The results below are averaged across three independent test runs.&lt;/p&gt;
&lt;h3 id=&quot;test-results-matrix&quot;&gt;Test Results Matrix &lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Metric / Test&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Docker&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Podman (Rootless)&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Winner&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Image Pull Time&lt;/strong&gt; (&lt;code&gt;postgres:16&lt;/code&gt; - approx. 450 MB)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;12.4 s&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;11.2 s&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Podman&lt;/strong&gt; (Slight edge)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Image Build Time&lt;/strong&gt; (Node.js App + NPM install)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;48.2 s&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;53.6 s&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt; (Faster BuildKit caching)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Memory Footprint (Idle)&lt;/strong&gt; (No containers running)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;~75 MB&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;~25 MB&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Podman&lt;/strong&gt; (No background daemon)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Memory Footprint (50 Nginx containers)&lt;/strong&gt; (Idle)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;~320 MB&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;~460 MB&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Docker&lt;/strong&gt; (Lower overhead per container)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;key-takeaways&quot;&gt;Key Takeaways: &lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Idle Resource Usage:&lt;/strong&gt; Podman is the clear winner when no containers are active. Because there is no background daemon running continuously, it consumes virtually zero system resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Overhead at Scale:&lt;/strong&gt; When launching 50 idle containers, Docker is more memory-efficient. In rootless mode, Podman spins up separate helper processes (&lt;code&gt;conmon&lt;/code&gt; for monitoring and &lt;code&gt;slirp4netns&lt;/code&gt; for user-space networking) for each container. At scale, this network and monitoring overhead scales linearly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build Speed:&lt;/strong&gt; Docker&#39;s BuildKit engine remains the fastest for building images due to its highly optimized concurrent staging and aggressive caching. Podman (which uses &lt;code&gt;buildah&lt;/code&gt; under the hood) is slightly slower but builds images safely inside user space without requiring root privileges.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;6-summary-feature-matrix&quot;&gt;6. Summary Feature Matrix &lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Feature&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Docker&lt;/th&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Podman&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Daemon-based (&lt;code&gt;dockerd&lt;/code&gt;)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Daemonless (direct OCI execution)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Root Privileges&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Required for daemon&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Optional (Fully rootless by default)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Pods Support&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;No (requires Kubernetes)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Yes (can group containers into Pods)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Native support&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Supported via socket emulation / podman-compose&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Systemd Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Separate daemon configuration&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Native systemd service generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Security Level&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;Moderate (Requires hardening)&lt;/td&gt;
&lt;td style=&quot;text-align:left&quot;&gt;High (Default rootless isolation)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion-which-engine-to-choose&quot;&gt;Conclusion: Which Engine to Choose? &lt;/h2&gt;
&lt;h3 id=&quot;choose-docker-if&quot;&gt;Choose Docker if: &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You use complex Docker Compose files with third-party tools that require direct access to &lt;code&gt;/var/run/docker.sock&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You are deploying large-scale orchestration environments (like Kubernetes) where standard Docker integrations are pre-configured.&lt;/li&gt;
&lt;li&gt;You want the widest community troubleshooting support.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;choose-podman-if&quot;&gt;Choose Podman if: &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Security is your top priority, and you want to run containers in a multi-tenant environment without granting root access.&lt;/li&gt;
&lt;li&gt;You are running isolated applications, web servers, or databases on a &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;You want clean, native integration with systemd services for automated startup and process monitoring.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both runtimes are fully compatible with &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS&lt;/a&gt; and &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; hosting configurations from &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Set Up a TeamSpeak 3 Server on Ubuntu &amp; Debian</title>
    <link href="https://voxihost.pl/guides/setup-teamspeak-3-server-ubuntu-debian/" rel="alternate"/>
    <published>2026-06-16T00:00:00Z</published>
    <updated>2026-06-16T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/setup-teamspeak-3-server-ubuntu-debian/</id>
    <summary type="text">A complete step-by-step guide to installing, configuring, and securing a TeamSpeak 3 voice server on your Ubuntu or Debian VPS.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;p&gt;TeamSpeak 3 remains one of the most reliable, low-latency, and resource-efficient voice communication platforms for gamers and communities. Self-hosting your own TeamSpeak server gives you ultimate privacy, full control over permissions, and zero reliance on third-party voice chat providers.&lt;/p&gt;
&lt;p&gt;In this guide, you will learn how to properly install and secure a TeamSpeak 3 server on your Ubuntu or Debian VPS.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; Before starting, ensure you have &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;a VPS running Ubuntu or Debian&lt;/a&gt; with SSH access and a user account with &lt;code&gt;sudo&lt;/code&gt; privileges.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;step-1-update-the-system&quot;&gt;Step 1: Update the System &lt;/h2&gt;
&lt;p&gt;First, ensure your package index is updated and install the necessary utilities (&lt;code&gt;wget&lt;/code&gt; for downloading and &lt;code&gt;bzip2&lt;/code&gt; for extracting the archive):&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/uFpVpBObEg-400.avif 400w, https://voxihost.pl/assets/images/generated/uFpVpBObEg-800.avif 800w, https://voxihost.pl/assets/images/generated/uFpVpBObEg-1391.avif 1391w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/uFpVpBObEg-400.webp 400w, https://voxihost.pl/assets/images/generated/uFpVpBObEg-800.webp 800w, https://voxihost.pl/assets/images/generated/uFpVpBObEg-1391.webp 1391w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/uFpVpBObEg-400.jpeg&quot; alt=&quot;Updating packages and installing wget and bzip2 on Ubuntu&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1391&quot; height=&quot;348&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/uFpVpBObEg-400.jpeg 400w, https://voxihost.pl/assets/images/generated/uFpVpBObEg-800.jpeg 800w, https://voxihost.pl/assets/images/generated/uFpVpBObEg-1391.jpeg 1391w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
sudo apt install wget bzip2 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-2-create-a-dedicated-user&quot;&gt;Step 2: Create a Dedicated User &lt;/h2&gt;
&lt;p&gt;Running any public-facing service as the &lt;code&gt;root&lt;/code&gt; user is a major security risk. Let&#39;s create a dedicated system user specifically for TeamSpeak:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-400.avif 400w, https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-577.avif 577w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-400.webp 400w, https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-577.webp 577w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-400.jpeg&quot; alt=&quot;Creating the teamspeak system user&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;577&quot; height=&quot;55&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-400.jpeg 400w, https://voxihost.pl/assets/images/generated/Vkp8H_x2eR-577.jpeg 577w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo adduser --disabled-password --gecos &amp;quot;&amp;quot; teamspeak
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, switch to this new user to perform the installation:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo su - teamspeak
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-3-download-and-extract-teamspeak-3&quot;&gt;Step 3: Download and Extract TeamSpeak 3 &lt;/h2&gt;
&lt;p&gt;Fetch the latest TeamSpeak 3 server files. You can always find the newest version on the &lt;a href=&quot;https://teamspeak.com/en/downloads/#server&quot;&gt;official TeamSpeak downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/hJYATVp0Oq-400.avif 400w, https://voxihost.pl/assets/images/generated/hJYATVp0Oq-800.avif 800w, https://voxihost.pl/assets/images/generated/hJYATVp0Oq-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/hJYATVp0Oq-400.webp 400w, https://voxihost.pl/assets/images/generated/hJYATVp0Oq-800.webp 800w, https://voxihost.pl/assets/images/generated/hJYATVp0Oq-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/hJYATVp0Oq-400.jpeg&quot; alt=&quot;Downloading TeamSpeak 3 server archive&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;200&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/hJYATVp0Oq-400.jpeg 400w, https://voxihost.pl/assets/images/generated/hJYATVp0Oq-800.jpeg 800w, https://voxihost.pl/assets/images/generated/hJYATVp0Oq-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://files.teamspeak-services.com/releases/server/3.13.8/teamspeak3-server_linux_amd64-3.13.8.tar.bz2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Extract the downloaded archive and move the files into the home directory for cleaner organization:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar xvf teamspeak3-server_linux_amd64-3.13.8.tar.bz2
mv teamspeak3-server_linux_amd64/* .
rm -rf teamspeak3-server_linux_amd64 teamspeak3-server_linux_amd64-3.13.8.tar.bz2
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-4-accept-the-license-agreement&quot;&gt;Step 4: Accept the License Agreement &lt;/h2&gt;
&lt;p&gt;TeamSpeak requires you to accept their End User License Agreement (EULA) before the server will start. You can do this by creating an empty file named &lt;code&gt;.ts3server_license_accepted&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/t1gupWe6QH-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/t1gupWe6QH-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/t1gupWe6QH-400.jpeg&quot; alt=&quot;Accepting the TeamSpeak 3 EULA&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;41&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;touch .ts3server_license_accepted
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-5-first-run-and-privilege-key&quot;&gt;Step 5: First Run and Privilege Key &lt;/h2&gt;
&lt;p&gt;Now, start the server manually for the first time. &lt;strong&gt;This step is critical&lt;/strong&gt; because the server will display your &lt;code&gt;ServerAdmin&lt;/code&gt; privilege key, which you need to claim admin rights in your TeamSpeak client.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/C6JlB5-91I-400.avif 400w, https://voxihost.pl/assets/images/generated/C6JlB5-91I-553.avif 553w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/C6JlB5-91I-400.webp 400w, https://voxihost.pl/assets/images/generated/C6JlB5-91I-553.webp 553w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/C6JlB5-91I-400.jpeg&quot; alt=&quot;Starting TS3 to capture the privilege key&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;553&quot; height=&quot;341&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/C6JlB5-91I-400.jpeg 400w, https://voxihost.pl/assets/images/generated/C6JlB5-91I-553.jpeg 553w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./ts3server_startscript.sh start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will see output containing your &lt;strong&gt;Privilege Key&lt;/strong&gt; and &lt;strong&gt;ServerQuery Admin Credentials&lt;/strong&gt;. Copy these details and save them somewhere safe!&lt;/p&gt;
&lt;p&gt;Once you have saved the key, stop the server so we can configure it to run as a background service:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./ts3server_startscript.sh stop
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-6-configure-a-systemd-service&quot;&gt;Step 6: Configure a Systemd Service &lt;/h2&gt;
&lt;p&gt;To ensure your TeamSpeak server starts automatically if your VPS reboots, we need to create a systemd service. First, exit back to your sudo user:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;exit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create a new service file:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/wR-ZjzOECW-400.avif 400w, https://voxihost.pl/assets/images/generated/wR-ZjzOECW-800.avif 800w, https://voxihost.pl/assets/images/generated/wR-ZjzOECW-1028.avif 1028w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/wR-ZjzOECW-400.webp 400w, https://voxihost.pl/assets/images/generated/wR-ZjzOECW-800.webp 800w, https://voxihost.pl/assets/images/generated/wR-ZjzOECW-1028.webp 1028w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/wR-ZjzOECW-400.jpeg&quot; alt=&quot;Creating the teamspeak.service file&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1028&quot; height=&quot;296&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/wR-ZjzOECW-400.jpeg 400w, https://voxihost.pl/assets/images/generated/wR-ZjzOECW-800.jpeg 800w, https://voxihost.pl/assets/images/generated/wR-ZjzOECW-1028.jpeg 1028w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nano /etc/systemd/system/teamspeak.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Paste the following configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=TeamSpeak 3 Server
After=network.target

[Service]
WorkingDirectory=/home/teamspeak
User=teamspeak
Group=teamspeak
Type=forking
ExecStart=/home/teamspeak/ts3server_startscript.sh start inifile=ts3server.ini
ExecStop=/home/teamspeak/ts3server_startscript.sh stop
PIDFile=/home/teamspeak/ts3server.pid
RestartSec=15
Restart=always

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save and exit (&lt;code&gt;CTRL + O&lt;/code&gt;, &lt;code&gt;ENTER&lt;/code&gt;, &lt;code&gt;CTRL + X&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Reload systemd and start your new service:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/vKZsoYoFSM-400.avif 400w, https://voxihost.pl/assets/images/generated/vKZsoYoFSM-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/vKZsoYoFSM-400.webp 400w, https://voxihost.pl/assets/images/generated/vKZsoYoFSM-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/vKZsoYoFSM-400.jpeg&quot; alt=&quot;Starting the TeamSpeak systemd service&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;74&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/vKZsoYoFSM-400.jpeg 400w, https://voxihost.pl/assets/images/generated/vKZsoYoFSM-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl daemon-reload
sudo systemctl enable teamspeak
sudo systemctl start teamspeak
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check the status to verify it is running perfectly:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl status teamspeak
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Congratulations! You have successfully installed and configured a TeamSpeak 3 server.&lt;/p&gt;
&lt;p&gt;To connect, open your TeamSpeak 3 Client, connect to your server&#39;s IP address, and paste the &lt;strong&gt;Privilege Key&lt;/strong&gt; you saved in Step 5 when prompted. You will instantly be granted Server Admin status.&lt;/p&gt;
&lt;h3 id=&quot;next-steps&quot;&gt;Next Steps &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;If you have a firewall enabled, ensure you open the correct ports. Check out our guide on &lt;a href=&quot;https://voxihost.pl/guides/configure-ufw-ubuntu-debian/&quot;&gt;how to configure UFW&lt;/a&gt;. TeamSpeak requires ports &lt;code&gt;9987/udp&lt;/code&gt; (Voice), &lt;code&gt;10011/tcp&lt;/code&gt; (ServerQuery), and &lt;code&gt;30033/tcp&lt;/code&gt; (File Transfer).&lt;/li&gt;
&lt;li&gt;Looking for a cost-effective hosting option? Try our &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS options&lt;/a&gt;, or get ultimate reliability for large communities on a &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS&lt;/a&gt; backed by &lt;a href=&quot;https://voxihost.pl/shield/&quot;&gt;VoxiShield&lt;/a&gt; DDoS Protection.&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>How to Install Nextcloud on a VPS using Docker Compose</title>
    <link href="https://voxihost.pl/guides/install-nextcloud-vps-docker-compose/" rel="alternate"/>
    <published>2026-06-15T00:00:00Z</published>
    <updated>2026-06-15T00:00:00Z</updated>
    <id>https://voxihost.pl/guides/install-nextcloud-vps-docker-compose/</id>
    <summary type="text">Learn how to deploy Nextcloud on a Linux VPS using Docker Compose and MariaDB. Build your own private cloud storage without paying monthly fees for Google Drive or iCloud.</summary>
    <category term="Tutorials"/>
    <content xml:lang="en" type="html">&lt;h2 id=&quot;introduction&quot;&gt;Introduction &lt;/h2&gt;
&lt;p&gt;Tired of paying monthly fees for Google Drive, Dropbox, or iCloud? With a VPS, you can host your own private, secure cloud storage using &lt;strong&gt;Nextcloud&lt;/strong&gt;. Nextcloud is a powerful open-source platform that allows you to store files, sync contacts, and share documents with complete control over your data.&lt;/p&gt;
&lt;p&gt;In this guide, we will deploy Nextcloud using &lt;strong&gt;Docker Compose&lt;/strong&gt;, ensuring a clean, isolated, and easily manageable installation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; Before you start, you need a Linux VPS with SSH access, a user account with &lt;code&gt;sudo&lt;/code&gt; privileges, and Docker with Docker Compose already installed. If you haven&#39;t set up Docker Compose yet, check out our &lt;a href=&quot;https://voxihost.pl/guides/setup-docker-compose/&quot;&gt;Docker Compose setup guide&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;step-1-prerequisites&quot;&gt;Step 1: Prerequisites &lt;/h2&gt;
&lt;p&gt;Before starting, ensure your VPS has Docker and Docker Compose installed. If you haven&#39;t set them up yet, check out our previous guide on &lt;a href=&quot;https://voxihost.pl/guides/setup-docker-compose/&quot;&gt;how to set up Docker Compose&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Verify your installation:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/SfGVgKzWln-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/SfGVgKzWln-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/SfGVgKzWln-400.jpeg&quot; alt=&quot;Running docker compose version to verify installation&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;49&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;step-2-set-up-the-project&quot;&gt;Step 2: Set up the Project &lt;/h2&gt;
&lt;p&gt;We need a dedicated directory to store the Nextcloud configuration and persistent data.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/nextcloud-server
cd ~/nextcloud-server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, create the &lt;code&gt;docker-compose.yml&lt;/code&gt; file:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KRlDkc8yMa-400.avif 400w, https://voxihost.pl/assets/images/generated/KRlDkc8yMa-800.avif 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KRlDkc8yMa-400.webp 400w, https://voxihost.pl/assets/images/generated/KRlDkc8yMa-800.webp 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/KRlDkc8yMa-400.jpeg&quot; alt=&quot;Opening docker-compose.yml with nano editor&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;800&quot; height=&quot;422&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/KRlDkc8yMa-400.jpeg 400w, https://voxihost.pl/assets/images/generated/KRlDkc8yMa-800.jpeg 800w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Paste the following configuration. This stack includes the official Nextcloud image along with a MariaDB database for optimal performance.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;services:
  db:
    image: mariadb:latest
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secure_root_password
      - MYSQL_PASSWORD=secure_db_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    links:
      - db
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - MYSQL_PASSWORD=secure_db_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

volumes:
  db_data:
  nextcloud_data:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Make sure to change &lt;code&gt;secure_root_password&lt;/code&gt; and &lt;code&gt;secure_db_password&lt;/code&gt; to strong, unique passwords before saving.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Save and exit (&lt;code&gt;CTRL+X&lt;/code&gt;, then &lt;code&gt;Y&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&quot;step-3-deploy-nextcloud&quot;&gt;Step 3: Deploy Nextcloud &lt;/h2&gt;
&lt;p&gt;With our configuration file ready, it&#39;s time to spin up the containers. Run the following command in detached mode:&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/U5dI54lflv-400.avif 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/U5dI54lflv-400.webp 400w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/U5dI54lflv-400.jpeg&quot; alt=&quot;Running docker compose up -d to start the Nextcloud stack&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;400&quot; height=&quot;94&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Docker will download the necessary images and start the services. This might take a minute or two depending on your VPS internet speed.&lt;/p&gt;
&lt;p&gt;Once the containers are running, open your web browser and navigate to your VPS&#39;s IP address on port 8080:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;http://your_server_ip:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/2SC0LlmBOI-400.avif 400w, https://voxihost.pl/assets/images/generated/2SC0LlmBOI-687.avif 687w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/2SC0LlmBOI-400.webp 400w, https://voxihost.pl/assets/images/generated/2SC0LlmBOI-687.webp 687w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/2SC0LlmBOI-400.jpeg&quot; alt=&quot;The Nextcloud setup wizard in the browser&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;687&quot; height=&quot;688&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/2SC0LlmBOI-400.jpeg 400w, https://voxihost.pl/assets/images/generated/2SC0LlmBOI-687.jpeg 687w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;You will be greeted by the Nextcloud setup wizard. Create your admin account, and Nextcloud will automatically connect to the MariaDB database we configured in the &lt;code&gt;docker-compose.yml&lt;/code&gt; file.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Congratulations! You now have your own self-hosted Nextcloud instance running securely inside Docker containers on your VPS. Your files are stored privately on hardware you control, with no subscription fees or third-party access to your data.&lt;/p&gt;
&lt;p&gt;As a next step, we strongly recommend placing Nextcloud behind a custom domain with free HTTPS using &lt;a href=&quot;https://voxihost.pl/guides/setup-nginx-proxy-manager-vps/&quot;&gt;Nginx Proxy Manager&lt;/a&gt;, so your cloud is accessible from anywhere via a clean, encrypted URL.&lt;/p&gt;
&lt;p&gt;If you need a reliable server to host your self-managed cloud, check out our &lt;a href=&quot;https://voxihost.pl/vps/premium/&quot;&gt;Premium VPS plans&lt;/a&gt; or &lt;a href=&quot;https://voxihost.pl/vps/budget/&quot;&gt;Budget VPS options&lt;/a&gt;, which both come with fast NVMe SSD storage and high-bandwidth connectivity.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>June 13, 2026: VoxiHost DevBlog</title>
    <link href="https://voxihost.pl/blog/devblog-june-13-2026/" rel="alternate"/>
    <published>2026-06-13T00:00:00Z</published>
    <updated>2026-06-13T00:00:00Z</updated>
    <id>https://voxihost.pl/blog/devblog-june-13-2026/</id>
    <summary type="text">A major platform update! We are transitioning from vPLN to Credits, introducing native multi-currency support, a redesigned billing page, and a new &#39;What&#39;s New&#39; sidebar widget.</summary>
    <category term="Updates"/>
    <content xml:lang="en" type="html">&lt;p&gt;Our latest platform updates are live as of &lt;strong&gt;June 13, 2026&lt;/strong&gt; at &lt;strong&gt;&lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt;&lt;/strong&gt;. We are committed to making our cloud hosting services more accessible, global, and user-friendly. In this release, we have focused on a major overhaul of our currency and billing systems, along with handy dashboard refinements to keep you updated on all new platform features.&lt;/p&gt;
&lt;p&gt;From a complete rebranding of our platform currency to native multi-currency payment support, here is everything we’ve rolled out over the past few weeks.&lt;/p&gt;
&lt;h2 id=&quot;1-transition-to-credits-and-multi-currency-support&quot;&gt;1. Transition to Credits &amp;amp; Multi-Currency Support &lt;/h2&gt;
&lt;p&gt;To better serve our growing international user base, we are transitioning from vPLN to &lt;strong&gt;Credits&lt;/strong&gt;. This change lays the foundation for our global expansion, ensuring a consistent billing experience regardless of where you are hosting your servers.&lt;/p&gt;
&lt;p&gt;Along with this rebranding, we are proud to launch native &lt;strong&gt;multi-currency support&lt;/strong&gt;. You can now select your preferred billing currency from &lt;strong&gt;PLN, USD, or EUR&lt;/strong&gt;. By paying in your local currency, you can completely bypass bank conversion fees and enjoy a more transparent billing experience.&lt;/p&gt;
&lt;h2 id=&quot;2-user-friendly-credit-packages&quot;&gt;2. User-Friendly Credit Packages &lt;/h2&gt;
&lt;p&gt;Credits are pegged to PLN at a simple 1:1 ratio (&lt;strong&gt;1 Credit = 1 PLN&lt;/strong&gt;) to keep everything clear and straightforward. To buy credits, you can choose from our tailored packages, which are optimized to offer the best value for each currency.&lt;/p&gt;
&lt;p&gt;Here are the packages available for each currency (excluding any additional promotional bonuses):&lt;/p&gt;
&lt;h3 id=&quot;pln-packages&quot;&gt;PLN Packages &lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Price&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Base Credits&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Bonus Credits&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Total Credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;15.00 PLN&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;15.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;15.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;30.00 PLN&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;30.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;30.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;50.00 PLN&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;50.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;50.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;100.00 PLN&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;100.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;100.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;250.00 PLN&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;250.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;5.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;255.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;500.00 PLN&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;500.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;520.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;eur-packages&quot;&gt;EUR Packages &lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Price&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Base Credits&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Bonus Credits&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Total Credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;5.00 EUR&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;10.00 EUR&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;42.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;42.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;20.00 EUR&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;85.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;85.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;50.00 EUR&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;210.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;5.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;215.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;100.00 EUR&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;420.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;440.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;250.00 EUR&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;1050.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;50.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;1100.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;usd-packages&quot;&gt;USD Packages &lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&quot;text-align:left&quot;&gt;Price&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Base Credits&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Bonus Credits&lt;/th&gt;
&lt;th style=&quot;text-align:center&quot;&gt;Total Credits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;5.00 USD&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;10.00 USD&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;40.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;40.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;20.00 USD&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;80.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;80.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;50.00 USD&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;200.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;5.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;205.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;100.00 USD&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;400.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;20.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;420.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align:left&quot;&gt;250.00 USD&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;1000.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;50.00&lt;/td&gt;
&lt;td style=&quot;text-align:center&quot;&gt;1050.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;3-special-launch-promotion-code-credits&quot;&gt;3. Special Launch Promotion: Code &#39;CREDITS&#39; &lt;/h2&gt;
&lt;p&gt;To celebrate this milestone, we are launching a special promotion!&lt;/p&gt;
&lt;p&gt;Use the promo code &lt;strong&gt;&lt;code&gt;CREDITS&lt;/code&gt;&lt;/strong&gt; when ordering any monthly VPS plan to get a massive &lt;strong&gt;45% discount&lt;/strong&gt; on your first month.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-400.avif 400w, https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-800.avif 800w, https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-1080.avif 1080w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-400.webp 400w, https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-800.webp 800w, https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-1080.webp 1080w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-400.jpeg&quot; alt=&quot;VoxiHost launch promotion banner showcasing the CREDITS promo code for 45% discount&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1080&quot; height=&quot;1080&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-400.jpeg 400w, https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-800.jpeg 800w, https://voxihost.pl/assets/images/generated/tjkiF4u8ZI-1080.jpeg 1080w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Notice:&lt;/strong&gt; This promotion is time-limited and expires on &lt;strong&gt;June 15, 2026&lt;/strong&gt; at 23:59 CET. Don&#39;t miss out!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;4-rebuilt-and-simplified-billing-page&quot;&gt;4. Rebuilt &amp;amp; Simplified Billing Page &lt;/h2&gt;
&lt;p&gt;To accompany these changes, we have completely rebuilt our Billing page from the ground up. The new interface is clean, intuitive, and highly self-explanatory. You can easily switch between currencies, view your current credit balance, select your desired credit package, and complete payments seamlessly.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-400.avif 400w, https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-800.avif 800w, https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-1600.avif 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-400.webp 400w, https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-800.webp 800w, https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-1600.webp 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-400.jpeg&quot; alt=&quot;VoxiHost Dashboard showing the redesigned billing page with credit packages and currency selectors&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;1600&quot; height=&quot;710&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-400.jpeg 400w, https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-800.jpeg 800w, https://voxihost.pl/assets/images/generated/5YQ5I9LJyD-1600.jpeg 1600w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;5-stay-updated-what-s-new-sidebar-section&quot;&gt;5. Stay Updated: &#39;What’s New&#39; Sidebar Section &lt;/h2&gt;
&lt;p&gt;We are constantly rolling out updates, fixes, and features. To ensure you never miss a thing, we&#39;ve integrated a new &lt;strong&gt;&#39;What&#39;s New&#39;&lt;/strong&gt; widget directly into the dashboard sidebar.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/UIbbamkrVZ-244.avif 244w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://voxihost.pl/assets/images/generated/UIbbamkrVZ-244.webp 244w&quot; sizes=&quot;(max-width: 768px) 100vw, 800px&quot; /&gt;&lt;img src=&quot;https://voxihost.pl/assets/images/generated/UIbbamkrVZ-244.jpeg&quot; alt=&quot;VoxiHost Dashboard sidebar showing the new What&#39;s New section and changelog link&quot; onload=&quot;this.classList.remove(&#39;bg-zinc-900/50&#39;, &#39;animate-pulse&#39;)&quot; width=&quot;244&quot; height=&quot;247&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Whenever we deploy updates, you&#39;ll see a quick notification highlight inviting you to read our changelog. This makes it easier than ever to discover new tools and improvements we make to the platform.&lt;/p&gt;
&lt;h2 id=&quot;6-ui-and-mobile-layout-refinements&quot;&gt;6. UI &amp;amp; Mobile Layout Refinements &lt;/h2&gt;
&lt;p&gt;In addition to the new features, we have rolled out several minor user interface refinements and layout fixes to improve the dashboard experience across all devices.&lt;/p&gt;
&lt;h2 id=&quot;whats-next&quot;&gt;What&#39;s Next? &lt;/h2&gt;
&lt;p&gt;Rebranding and multi-currency billing are major steps forward, but we aren&#39;t stopping there. We have officially begun working on a &lt;strong&gt;Dashboard Firewall&lt;/strong&gt;, which will allow you to manage your network security policies directly from the &lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt; dashboard.&lt;/p&gt;
&lt;p&gt;Stay tuned for more updates, and as always, thank you for choosing &lt;strong&gt;&lt;span&gt;Voxi&lt;/span&gt;&lt;span&gt;Host&lt;/span&gt;&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ready to check out the new billing page?&lt;/strong&gt; Log in to your &lt;strong&gt;&lt;a href=&quot;https://dashboard.voxihost.pl/&quot;&gt;Dashboard&lt;/a&gt;&lt;/strong&gt; and check out your active instances today!&lt;/p&gt;
</content>
  </entry>
</feed>
