Author: RunCloud Team

  • The Best 6 FTP Clients for Windows and Mac

    The Best 6 FTP Clients for Windows and Mac

    Choosing the right FTP client can make a big difference to your workflow. Whether you’re deploying a website, updating server files, or managing backups, the right tool saves time, keeps your data secure, and works seamlessly on your operating system.

    In this guide, we’ve reviewed the best FTP clients for Windows and Mac – from popular free tools to advanced, professional-grade options. You’ll see what each one offers, who it’s best for, and how it can fit into your workflow, so you can pick the one that meets your exact needs.

    Let’s get started!

    What is an FTP Client?

    An FTP (File Transfer Protocol) client is a software application that enables you to transfer files between your local computer and a remote web server. In the RunCloud context, an FTP client allows you to manage files on your RunCloud-powered servers securely and efficiently. Popular FTP clients include FileZilla, Cyberduck, and WinSCP.

    When working with RunCloud servers, SFTP (Secure File Transfer Protocol) is the recommended protocol. It provides encrypted file transfers, ensuring your data remains secure during transmission.

    Benefits of Using FTP Client

    Easy File Management

    Managing files across servers becomes easier with FTP clients, as most modern clients offer intuitive drag-and-drop interfaces for seamless uploads and downloads. These tools provide comprehensive file management capabilities, allowing you to handle multiple files and folders simultaneously while maintaining a familiar desktop-like interface.

    The visual organization system makes it simple to track, move, and organize files across different server locations, significantly reducing the time spent on file management tasks.

    Enhanced Security

    Modern FTP clients prioritize security through robust SFTP encryption, ensuring all file transfers remain protected from potential threats. Implementing SSH key authentication and password protection provides multiple layers of security, making unauthorized access virtually impossible.

    Efficient Workflow

    FTP clients streamline your development workflow by offering quick file editing capabilities and real-time synchronization between local and remote servers. With features like automatic retry for failed transfers and smart bookmarking systems, these tools ensure uninterrupted work progress even during connection issues.

    Developer-Friendly Features

    Developers benefit from specialized features such as integrated file permission management and built-in text editors that allow quick code modifications without switching applications. These tools often include features like syntax highlighting and code comparison, making them invaluable for development work.

    Cross-Platform Compatibility

    Modern FTP clients offer seamless operation across Windows, macOS, and Linux, ensuring consistent functionality regardless of your operating system. These applications maintain a uniform interface and feature set across platforms, reducing the learning curve when switching between different systems.

    The standardized protocols and universal compatibility make file transfers between different platforms smooth and reliable.

    Suggested read: How to Edit Files on Remote Servers with SSH and Nano

    Best 5 FTP Clients for Windows & Mac

    When managing your RunCloud server, choosing the right FTP client is crucial for efficient file management and secure transfers.

    Here’s a comprehensive review of the top 5 FTP clients that excel in both Windows and Mac environments.

    Note: While it is possible to deploy websites using an FTP client, modern developers using RunCloud might find the platform’s built-in file management and Git deployment features more efficient for their workflow. Consider exploring these alternatives for a more streamlined development process.

    1. FileZilla

    FileZilla is the go-to FTP client for developers worldwide as it offers a perfect balance of power and simplicity that makes it suitable for both beginners and professionals.

    FileZilla’s intuitive interface contains a dual-pane view that displays local and remote directories side by side, making file transfers as simple as drag-and-drop operations. It includes support for all major protocols (FTP, FTPS, and SFTP), powerful queue management, and the ability to handle files larger than 4GB, making it a versatile tool for any web development project.

    What truly sets FileZilla apart is its extensive quality-of-life features that streamline the development workflow. The Site Manager allows you to store connection details for multiple servers, complete with encryption preferences and login credentials. At the same time, the synchronized directory browsing feature ensures you’re always working with the correct files.

    FileZilla

    Advanced features such as configurable transfer speed limits, filename filters, and remote file editing capabilities also make it a comprehensive solution for server management. The application’s remote file search functionality and directory comparison tools are particularly valuable when managing large projects, helping developers quickly locate files and identify discrepancies between local and remote versions.

    Whether you’re using Windows, macOS, or Linux, FileZilla provides a consistent experience with support for multiple languages and excellent handling of different character encodings. The application’s ability to resume interrupted transfers, coupled with its support for various proxy configurations and network types, makes it especially valuable in environments with unstable connections or strict network policies.

    Ideal for: Both beginners and advanced users who need a reliable, feature-rich FTP client.

    Suggested read: FTP vs. SFTP – What’s The Difference & Why It Matters

    2. Cyberduck

    Cyberduck is a powerful file transfer solution that offers an exceptional range of protocol support, including FTP, SFTP, WebDAV, and various cloud storage services – all in a single, elegant interface.

    What makes it particularly valuable for website deployment is its seamless integration with both Mac and Windows operating systems, featuring native system capabilities such as Keychain support for secure credential management and Quick Look preview functionality.

    It contains an intuitive bookmark system and supports creating connection profiles for popular hosting providers, which makes it incredibly easy to manage multiple website deployments across different servers.

    One of Cyberduck’s most compelling features for web developers is its robust file editing capabilities and external editor integration. You can edit files directly on the server using your preferred code editor, eliminating the need for constant downloading and re-uploading of files during development.

    Cyberduck

    The application’s synchronization feature is particularly useful for website deployments. It allows you to compare and sync local and remote directories with a preview of changes before execution. This helps prevent accidental overwrites and ensures your production environment stays consistent with your development files.

    Cyberduck also offers advanced features like bandwidth throttling, file filtering, and support for large file transfers, making it ideal for managing website assets of any size.

    Additionally, its integration with content delivery networks (CDNs) such as Amazon CloudFront allows developers to optimize their website’s global performance directly from the interface.

    Whether you’re managing a small personal website or handling enterprise-level deployments, Cyberduck’s combination of a user-friendly interface and professional-grade features makes it an excellent choice for modern web development workflows.

    Ideal for: Mac users who prefer a native-feeling application with cloud storage integration.

    Suggested read: ​How to Use SFTP with FileZilla to Securely Transfer Files on RunCloud

    3. WinSCP

    WinSCP is one of the most reliable and comprehensive file transfer clients specifically designed for Windows users, with an impressive track record of over 226 million downloads. What makes WinSCP particularly powerful is its dual-interface capability, which offers both a graphical user interface and a command-line interface, making it adaptable to different user preferences.

    What truly sets WinSCP apart is its extensive automation and scripting capabilities, which are invaluable for developers handling repetitive deployment tasks. The integrated text editor allows for quick file modifications directly within the application, while its scripting support enables task automation through both the command-line interface and .NET assembly integration.

    WinSCP

    It contains built-in synchronization tools that make it easy to keep local and remote directories in sync. It also has strong security features, including support for various authentication methods and encryption protocols. Additionally, WinSCP’s portable version offers the flexibility to carry your configured environment on a USB drive, making it an excellent choice for developers who work across different Windows machines.

    Ideal for: Windows power users who need advanced automation and scripting capabilities.

    Suggested read: How to Edit Files on Remote Servers with SSH and Nano

    4. Transmit (Mac Only)

    Transmit is a premium Mac-exclusive FTP client known for its sleek interface and powerful features. It has earned a reputation for its user-friendly interface and robust feature set. It simplifies the process of transferring files between your computer and various servers, including FTP, SFTP, and cloud storage services such as Amazon S3, Dropbox, and Google Drive.

    Transmit’s intuitive dual-pane view provides a clear visual representation of your files, making them easy to navigate and manage. Additionally, its file sync feature allows you to synchronize files between different locations, including remote servers, local folders, or even between two local folders, ensuring that your files are always up-to-date.

    Transmit

    Transmit offers numerous enhancements that streamline your workflow. You can easily organize and access your frequently used servers through its server management system, eliminating the need to manually enter server addresses each time.

    Additionally, Transmit supports advanced features such as batch renaming, built-in key management, and the ability to view file information directly within the application, further simplifying your file management experience.

    Ideal for: Professional Mac users willing to invest in a premium tool for the best possible experience.

    Suggested read: How To Use SSH Keys with PuTTY on RunCloud

    5. Commander One (Mac Only)

    Commander One offers a streamlined solution for managing your files across different locations. Its dual-pane file manager allows you to manage files on cloud services and remote servers as if they were on your local device.

    Its user-friendly, dual-pane interface lets you see your local and remote files in a single window, making dragging and dropping files between your computer and server very easy.

    The integrated Connection Manager supports various protocols, including FTP, SFTP, and FTPS, meaning you can connect to virtually any server. It also allows for direct file editing on the server, so you can make quick changes without downloading, editing, and re-uploading your files. Additionally, it has features such as file encryption and secure password storage, using the macOS Keychain to keep your data secure.

    What makes Commander One a top choice is its ability to centralize your file management. In addition to connecting to FTP servers, you can integrate and manage multiple cloud storage accounts, including Amazon S3, Dropbox, and Google Drive. This means you can easily transfer files between different cloud services, or from a cloud service to your server.

    Ideal for: Mac-exclusive users who need a single, unified application to efficiently transfer files between diverse local and cloud storage services like Amazon S3, FTP, and Google Drive.

    6. Classic FTP (Windows Only)

    Classic FTP is a no-nonsense approach to file transfer which prioritizes simplicity and functionality over bells and whistles. It’s designed for users who want a straightforward way to upload and download files to their websites or servers without being bogged down by complex features.

    The interface is clean and intuitive, making it easy to navigate and manage your files. Classic FTP’s strength lies in its reliability. It offers a stable and consistent way to transfer files, whether you’re a seasoned web developer or a casual user.

    Classic FTP focuses on the essentials: uploading, downloading, and synchronizing files. It supports secure FTP (SSL) for added protection and works seamlessly with all popular FTP servers. While it might not have the extensive range of features offered by some other FTP clients, Classic FTP delivers on its promise of providing a reliable and simple way to manage your files. It’s a perfect choice for those who prefer a straightforward and efficient file transfer experience.

    Ideal for: Windows users who prefer a lightweight, straightforward FTP client.

    Suggested read: Why Authentication Using SSH Public Key is Better than Using Password & How Do They Work?

    7. Wush (Bonus)

    Wush provides a modern approach to file transfer. It replaces traditional methods in favor of a secure, peer-to-peer connection powered by WireGuard VPN. Unlike conventional FTP tools that rely on centralized servers for authentication and file transfer, Wush uses a decentralized system where each user establishes a direct, encrypted connection with the other. This eliminates the need for trusting third-party servers, ensuring the privacy and integrity of your data.

    Wush takes advantage of the speed and efficiency of WireGuard, a cutting-edge VPN protocol known for its reliability and fast performance. It also uses Tailscale’s DERP (Dynamically Encrypted Relay Protocol) to establish secure connections, even through restrictive networks. This combination of technologies allows Wush to deliver fast and reliable file transfers without compromising on security.

    Additionally, Wush overcomes the limitations of traditional file transfer tools by offering a flexible platform. It’s not just about sending files, but also about creating secure connections for other purposes like remote access and execution. With Wush, you can establish a secure shell connection to a remote machine, facilitating remote work or managing your server infrastructure. This versatility, combined with its secure and efficient operation, makes Wush a compelling alternative to traditional file transfer tools, especially for those seeking a more modern and secure approach.

    Ideal for: Technically advanced users who are looking to replace traditional FTP.

    Suggested read: 5 Ways to Fix the SSH Connection Refused Error [SOLVED]

    Which FTP Client Should You Choose?

    First and foremost, your choice of an FTP client should prioritize security. When working with web servers, especially in a professional environment, you’ll want a client that supports SFTP (Secure File Transfer Protocol) – this is non-negotiable.

    For beginners, we strongly recommend starting with FileZilla. It’s like the WordPress of FTP clients – popular, well-supported, and user-friendly. Its interface might seem busy initially, but you’ll quickly appreciate having all those features at your fingertips.

    However, if you’re using a Mac and prefer software that feels more native to your system, Cyberduck is an excellent choice. It integrates beautifully with macOS and offers a more streamlined interface. As you progress in your development journey, you might want to consider premium options such as Transmit (for Mac) or professional versions of other clients.

    For Windows users who plan to do more advanced server management, WinSCP deserves serious consideration. Its automation features will become invaluable as you grow in your development career and need to handle repetitive tasks efficiently.

    Suggested read: How to Use SSH Keys with PuTTY on RunCloud

    Final Thoughts

    We’ve looked at the best FTP clients and what makes them worth using. But if you’re on RunCloud, you can skip many of these tools entirely.

    With RunCloud’s built-in File Manager and Git deployment, you can manage files, push updates, and roll back changes – all from your browser. Atomic Deployment gives you zero-downtime releases, keeps a full history, and makes rollbacks instant, so you never have to rely on manual FTP transfers.

    If you want faster, safer, and more reliable deployments than any FTP client can offer, connect your Git repository to RunCloud and let it handle the rest.

    Manage your files the modern way – try RunCloud now.

    FAQs on FTP Clients

    Are FTP clients safe?

    FTP clients are safe when used with secure protocols such as SFTP or FTPS, which encrypt all data during transfer. However, traditional FTP without encryption is not secure and should be avoided for sensitive data or professional web development, as it transmits credentials and data in plain text.

    What are the disadvantages of FTP?

    Standard FTP lacks encryption, making it vulnerable to security breaches and man-in-the-middle attacks during file transfers. Additionally, FTP can be slower than modern cloud-based solutions and may face issues with firewalls, while also lacking advanced features like real-time collaboration and version control.

    How do I choose an FTP client?

    Choose an FTP client that supports secure protocols (SFTP/FTPS) and offers features matching your specific needs, such as automated transfers, scheduling, or remote editing. Consider factors like your operating system, budget, user interface preferences, and whether you need advanced features like synchronization or scripting capabilities.

    Is there a better alternative to FileZilla?

    For Mac users, Cyberduck and Transmit offer more polished interfaces and better integration with the operating system, while WinSCP provides more advanced features for Windows users. However, these alternatives often come with a price tag, whereas FileZilla remains a robust, free option that satisfies most users’ needs.

    What is the safest FTP protocol?

    SFTP (SSH File Transfer Protocol) is the safest protocol as it encrypts both authentication credentials and file transfers using SSH encryption, making it virtually impossible for attackers to intercept data. This protocol is the industry standard for secure file transfers and is strongly recommended for all professional web development work.

  • How to Reduce Cache Misses & Avoid Them: Proven Tips [FIXED]

    How to Reduce Cache Misses & Avoid Them: Proven Tips [FIXED]

    Have you ever clicked on a webpage and felt like you were waiting an eternity for it to load? Nobody likes a slow website; if you’ve been frustrated, you’re far from alone. Conservative estimates suggest the average person spends four months of their life sitting, waiting for websites to load!

    Caching is one of the easiest ways to speed up your website. However, a poorly implemented caching strategy can lead to “cache miss” warnings, worsening your website. Frequent cache misses can severely impact your site’s performance and reduce efficiency.

    Understanding the difference between a cache hit and a cache miss is the first step toward optimizing your site.

    This post will show you how to improve your cache hit rate, ensure better scalability, and reduce your website’s load times.

    Let’s get started!

    Cache Miss vs Cache Hit

    A cache hit is the ideal scenario. When the requested data is found in the cache, it can be delivered almost instantly. This results in faster page load times, reduced server load, and a better user experience.

    In contrast, a cache miss means the data was not found in the cache. This forces the server to generate the content from scratch, which consumes more time and resources. The fundamental difference lies in performance: cache hits speed up your website, while cache misses slow it down.

    We recommend reading this excellent resource on caching by PlanetScale to visualize the difference between the time taken by different storage devices to serve information.

    📖 Suggested Read: How To Use Redis Full-Page Caching To Speed Up WordPress

    Why Reducing Cache Misses Matters for Website Performance

    Reducing cache misses is essential for maintaining a fast and responsive website. Every cache miss introduces a delay, as the server must expend CPU cycles and memory to fetch data from the database and rebuild the requested page. This increased processing time directly translates to slower page load speeds, which can frustrate visitors and negatively impact your SEO rankings.

    By minimizing cache misses, you ensure more requests are served instantly from the cache, dramatically reducing server load, and speeding up your site for your users.

    How to Reduce Cache Misses [Proven Method]

    1. Increase Cache Lifespan and Expiry Time

    One of the most direct ways to reduce cache misses is to store cached data for a longer period. A longer Time-to-Live (TTL) or expiry time means that assets remain in the cache longer, increasing the probability of a cache hit for subsequent requests. This is especially effective for static content that doesn’t change often, such as images, CSS files, and blog posts.

    With RunCloud Hub, you can effortlessly configure the TTL for your cached content directly from the dashboard by modifying the “Cache Lifespan” value. This allows you to set an optimal cache duration, such as 30 days for static sites, ensuring your content remains cached longer to improve your hit rate.

    📖 Suggested Read: How To Use NGINX FastCGI Cache (RunCache) To Speed Up Your WordPress Performance

    2. Optimize Cache Replacement Policies

    A cache is nothing but data stored in your computer’s memory. As you use your application, the cached data grows naturally, eventually filling up your entire cache storage. When a cache becomes full, a replacement policy decides which items to discard to make room for new ones.

    An inefficient policy can evict frequently accessed data, leading to unnecessary cache misses. Common policies include Least Recently Used (LRU) and First-In, First-Out (FIFO), and choosing the right one depends on your application’s data access patterns.

    RunCloud uses highly optimized, server-level caching with NGINX FastCGI and Redis. These systems use advanced replacement policies to ensure that the most relevant and frequently accessed data is retained in the cache, minimizing misses without requiring manual configuration.

    📖 Suggested Read: What Is Managed WordPress Hosting & Do You Need It?

    3. Expand Cache Size and RAM

    A “capacity miss” occurs when the cache is too small to hold all the data your website needs. If your working data set is larger than your cache, the system will constantly evict and reload data, leading to poor performance. Increasing your server’s RAM allows for a larger cache size, providing more space to store frequently accessed assets and reducing the likelihood of capacity misses.

    In RunCloud Hub, you can easily configure this by modifying the “Cache Folder Size Limit” value in your RunCloud dashboard.

    📖 Suggested Read: WordPress Multisite vs. Multiple Sites – Which Is Better?

    4. Use Effective Caching Plugins and Tools

    The right tool can make all the difference in implementing an effective caching strategy. While many plugins exist, they often run at the application level, adding their processing overhead. A server-level caching solution is far more efficient as it handles requests before they even hit your application (e.g., WordPress), resulting in faster response times.

    This is where RunCloud Hub shines.

    RunCloud Hub offers a suite of caching technologies designed to significantly enhance your website’s speed and reliability. It empowers you with multiple server-side caching options and allows you to choose the best fit for your workload:

    • NGINX FastCGI/Proxy Page Caching: This method uses NGINX to store and serve static HTML pages directly from your server’s disk or memory. It bypasses the need to execute PHP or query the database for every request, dramatically reducing server load and response times.
    • Redis Full-Page Caching: This technique stores the entire page cache in your server’s memory and enables lightning-fast delivery for high-traffic and complex web applications.
    • Redis Object Cache: Ideal for dynamic websites with complex database queries. Redis Object Cache stores the results of these queries in memory, which minimizes the strain on your database and reduces PHP execution times, leading to a more responsive user experience.,

    To provide further optimization, RunCloud Hub allows you to select the storage location for your cache, balancing between performance and resource usage:

    • Disk: You can store your cache on the server’s disk at /var/cache/nginx-rc. This is a dependable option, particularly for servers with multiple sites.
    • RAMDisk: For maximum performance, you can use a RAMDisk, which stores the cache in the server’s RAM at /var/run. This offers the fastest possible access to cached content.

    📖 Suggested Read: Everything You Need To Know About WordPress Object Caching

    Wrapping Up: Common Causes of Cache Misses and How to Avoid Them

    In this article, we have discussed how to improve the performance of your website by optimizing your caching strategy. We also covered the most common causes of cache misses and how to fix them.

    RunCloud Hub is designed to solve these problems effortlessly.

    Its automated cache management and smart purging ensure the cache is cleared only when content is updated, preventing unnecessary misses.

    RunCloud Hub is much more than just a plugin – it’s your all-in-one dashboard for server-level caching, engineered to eliminate cache misses and deliver superior performance. By maximizing your cache hit rate, RunCloud Hub significantly reduces the number of database queries and the overall load on your server. This leads to blazing-fast page loads, an improved user experience, and a more stable, efficient server.

    With RunCloud Hub, you can stop worrying about complex cache configurations. It simplifies cache miss reduction and puts the full power of server-level caching at your fingertips.

    Ready to supercharge your website? Sign up for RunCloud Hub today.

    FAQs on Reducing Cache Misses & Cache Optimization

    What causes cache misses?

    A cache miss occurs when a system or application requests data from the cache but cannot find it. This can happen if the data was never stored in the cache, has been evicted to make space for newer data, or if its time-to-live has expired.

    How to improve cache hit rate?

    To improve your cache hit rate, you can increase the duration for which data is stored in the cache and enable caching for more resources on your website or application. It’s also recommended to use stable cache keys and prefetch resources before they are needed.

    What is a cache miss penalty?

    A cache miss penalty is the delay or extra time required to retrieve data from the main memory or a lower-level cache when it’s not found in the immediate cache. This retrieval process is slower than accessing data directly from the cache, and the penalty is typically measured in clock cycles. Frequent cache misses and their associated penalties can significantly slow down application performance.

    How many types of cache misses exist?

    There are primarily four main types of cache misses that can occur in a system. These include compulsory misses (also known as cold misses), capacity misses, conflict misses, and coherence misses.

    What is a CPU cache miss?

    A CPU cache miss happens when the processor attempts to read or write data and fails to find it in its local cache memory. This forces the CPU to fetch the data from the much slower main memory (RAM), causing a delay in processing known as a “stall”. Reducing CPU cache misses is essential for maximizing processor efficiency and overall system performance.

    How does cache memory work?

    Cache memory is a small, high-speed storage layer that temporarily stores frequently accessed data and programs close to the CPU. When the CPU needs data, it first checks this faster cache; if the data is present (a “cache hit”), it can be retrieved quickly. If the data isn’t there (a “cache miss”), the system fetches it from the slower main RAM and copies it to the cache for future access.

    What is cache coherence?

    Cache coherence refers to the consistency of shared data stored in multiple local caches within a multiprocessor system. It ensures that when one processor updates a piece of data, all other processors are aware of this change, preventing them from using outdated information. This uniformity is maintained through protocols that manage how caches communicate and coordinate with each other.

    How to calculate cache miss penalty?

    The cache miss penalty can be calculated by understanding the time it takes to access different levels of memory. It is the additional time required to fetch data from a lower-level memory (like RAM) compared to the time it would have taken to retrieve it from the cache. The average memory access time (AMAT) is a key metric calculated as AMAT = Hit Time + (Miss Rate x Miss Penalty).

    How to reduce cache misses in applications?

    To reduce cache misses in your applications, optimize data access patterns and localize data to improve retrieval speed. You can also leverage techniques like prefetching, where the system anticipates and fetches data before it’s explicitly requested. With RunCloud’s optimized server configurations, you can efficiently manage your application’s caching mechanisms to minimize these misses.

    How often should I clear or expire the cache to reduce misses?

    The ideal frequency for clearing or expiring your cache depends on how often your website’s content is updated. For static sites, a longer cache lifespan, such as 30 days, can improve your cache hit rate by reducing the need for the server to re-fetch content. If your content changes frequently, you should set a shorter expiration time to ensure users see the most current version.

    Can increasing RAM reduce cache misses?

    Increasing your server’s Random Access Memory (RAM) can help reduce certain cache misses. A larger RAM allows for a larger overall cache size, which can store more data and decrease the likelihood of capacity misses, where the cache is too small for the working data set.

  • How to Fix the “Warning: Remote Host Identification Has Changed” SSH Error

    How to Fix the “Warning: Remote Host Identification Has Changed” SSH Error

    The WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! error will stop you dead in your tracks. Despite looking like your server is under attack, this message usually means SSH is working correctly, it’s just spotted something different about your server and wants you to know.

    This security check matters, but it can be frustrating when you just need to get back to work. The key is knowing when the error signals a real problem versus routine server maintenance.

    This guide covers everything you need to know: what causes the warning, how to tell if it’s dangerous, and how to fix it without compromising your server’s security. You’ll be able to handle this error confidently, whether you’re managing one server or dozens.

    Quick Fix (If You Know Your Server is Safe)

    Already certain this error came from recent server changes? Remove the old host key with this command:

    ssh-keygen -R your-server-hostname

    Just swap your-server-hostname for your actual server address. But before you run this, make sure you understand what’s happening. Blindly removing host keys can leave you vulnerable to attacks.

    What Does This Error Mean?

    To understand the error, you need to know how SSH establishes trust. The first time you connect to a new server, it presents its “public host key”, which is a unique identifier for that server. Your SSH client asks you if you trust this key.

    When you type ‘yes’, your computer saves this key and its associated hostname/IP address in a file located at ~/.ssh/known_hosts. This file acts as your personal “phonebook” of trusted servers.

    From that point on, every time you connect, the server presents its key again. Your SSH client checks its known_hosts file and says, “Does the key this server is showing me match the key I saved for it last time?”

    The “Remote Host Identification Has Changed” error occurs when the answer is NO. The server is presenting a key your computer has never seen before.

    Remote Host Identification Has Changed

    Why Did the Host Key Change?

    More often than not, this error is caused by routine server administration, not a malicious attack. Here are the most common legitimate reasons:

    1. Server OS Reinstallation: If the server’s operating system (e.g., Ubuntu, CentOS) was reinstalled from scratch, the SSH service would have generated a new set of unique host keys. The old ones will have been wiped out with the old OS. This is the most frequent cause.
    2. Server Migration or Re-IP: The IP address you are connecting to may have been reassigned. For example, the old server 123.45.67.89 was decommissioned, and a brand new server was spun up and given the same IP address.
    3. Cloud/Virtualization Environments: In cloud environments like AWS, GCP, or Azure, virtual server instances can be terminated and replaced. The new instance will have a different host key, even if it has the same IP address or hostname.
    4. Load Balancers: If you connect to a hostname behind a load balancer, your connection might be routed to a different server in the pool from the one you connected to last time. You’ll see this error if the servers don’t share the same host key.
    5. Deliberate Key Regeneration: A system administrator may have intentionally regenerated the server’s SSH keys for security policy reasons.

    The Man-in-the-Middle (MITM) Attack

    Although this is usually a benign warning, the error’s primary purpose is to protect you from a Man-in-the-Middle (MITM) attack. Here’s how an MITM attack works in this context:

    1. You try to connect to your legitimate server.
    2. An attacker, positioned somewhere on the network between you and the server (e.g., on the same public Wi-Fi), intercepts your connection request.
    3. The attacker blocks your connection to the real server and instead presents their own fake SSH server to you.
    4. Your SSH client sees a new, unexpected host key and throws the “REMOTE HOST IDENTIFICATION HAS CHANGED” error.

    If you ignore this warning and proceed, you will send your password or other credentials directly to the attacker’s machine, completely compromising your account. This is why you must verify the cause before you implement any fix.

    How to Safely Fix the Error: The “Verify, Then Remove” Protocol

    Follow these steps to resolve the issue without compromising your security.

    Step 1: VERIFY the New Host Key

    This is the most important step. Do not proceed until you have confirmed the new key is legitimate.

    • If you are not the server administrator: Contact the person or team that is and ask them if the server’s host key was recently changed. They should be able to confirm if this is the case, and even provide you with the new key’s fingerprint.
    • If you are the server administrator: You must get the new key’s fingerprint directly from the server console.
      • Log in to the server using an alternative method (e.g., the web console provided by your cloud provider, like AWS EC2 Connect, GCP Console, or a direct KVM/IPMI connection in a data center).
      • Once logged in, run the following commands to display the fingerprints of the server’s host keys. A server usually has several key types (RSA, ECDSA, ED25519).
    # Run these on the remote server you're trying to connect TO (not on your personal laptop)
    ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
    ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
    ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

    Compare this fingerprint with the one your local SSH client shows you in the error message. If they match, you have successfully verified the new key is authentic.

    Step 2: REMOVE the Old Host Key from known_hosts

    Once you’ve verified the new key’s authenticity, you can safely remove the old, conflicting key from your local ~/.ssh/known_hosts file. The ssh-keygen command has a specific function for removing hosts.

    On your local machine (the one you are connecting from), run the following command, replacing your-server-hostname with the actual hostname or IP address from the error message:

    ssh-keygen -R your-server-hostname

    Open the file with your favorite text editor:

    nano ~/.ssh/known_hosts

    Go to the line number mentioned in the error and delete that entire line. The line will start with the hostname or IP address. Save the file and exit the editor.

    Step 3: Reconnect and Accept the New Key

    Now that the old key is gone, try your SSH connection again. You will be prompted to accept the new key as if you were connecting for the first time. Since you have already verified its fingerprint, you can confidently type ‘yes’.

    Conclusion

    In this post, we have seen that the “Warning: Remote host identification has changed” error is an important security mechanism that is doing its job. By following the steps in this article, you can confidently handle this common issue while ensuring your connections remain secure.

    Managing servers and deploying new web applications can be challenging, especially if you are unfamiliar with Linux and the command line.

    That’s why we built RunCloud.

    With RunCloud, you can deploy and manage your web applications, databases, and firewalls directly from an intuitive dashboard, completely sidestepping common issues like the “Remote Host Identification Has Changed” error.

    Sign up for RunCloud today and experience hassle-free web server management.

    FAQs About the SSH Host Key Warning

    What does “Warning: Remote host identification has changed” actually mean in simple terms?

    This means your computer’s security system no longer recognizes your server. The first time you connected, your laptop saved a unique “fingerprint” for that server. Now, the server shows a different fingerprint.
    With RunCloud, you rarely need to connect to your server with SSH to manage your web applications, databases, or firewall. The RunCloud dashboard provides a secure, visual interface for all these tasks so that you can sidestep this error completely.

    Is this error a virus, or am I being hacked?

    Probably not! While the warning is designed to protect you from a “man-in-the-middle” attack, the most common cause is a harmless server change. For instance, if your hosting provider reinstalled the operating system on your server, a new, perfectly safe fingerprint would have been created.

    How do I fix this error quickly? I’m in a hurry!

    If you’re sure the server is safe, the fastest fix is to tell your computer to forget the old fingerprint. You can do this by running a single command on your local machine (not the server):
    ssh-keygen -R your-server-ip-or-hostname   
    Replace your-server-ip-or-hostname with your server’s actual address. After you run this, you can connect again and be asked to approve the new fingerprint.

    Why would the server’s fingerprint change? I didn’t do anything!

    This is very common, especially in cloud hosting environments. Here are a few reasons it can happen:
    The server’s operating system was reinstalled or upgraded.
    You moved your site to a new server with the same IP address as the old one.
    Your cloud provider (like AWS, DigitalOcean, etc.) replaced the underlying virtual machine.

  • Solved: “Cannot Use Import Statement Outside a Module” Error

    Solved: “Cannot Use Import Statement Outside a Module” Error

    The “Cannot use import statement outside a module” error is a common stumbling block for web developers. Encountering this error can be frustrating, especially when you’re eager to implement modern JavaScript features in your web projects.

    In this post, we’ll understand the causes of this error, explore effective solutions, and demonstrate how to integrate JavaScript modules seamlessly into your web development workflow. We’ll also touch on how RunCloud’s platform simplifies server management and deployment, making your life easier.

    Let’s get started!

    Understanding the “Cannot Use Import Statement Outside a Module” Error

    The “Cannot use import statement outside a module” error is caused by a fundamental misunderstanding between two different JavaScript module systems: ES Modules (ESM) and CommonJS.

    1. ES Modules were introduced with ECMAScript 6 (ES2015), and they are the modern standard for modularizing JavaScript code. They use import and export statements to share code between files.
    2. CommonJS is an older system predominantly used in Node.js environments. It uses require() and module exports for the same purpose.

    The conflict occurs when you try to use an import statement in a file that the JavaScript environment interprets as a CommonJS module. This is a frequent issue in Node.js projects and can also appear in web browsers if the script is not correctly identified as a module.

    How to Fix the “Cannot Use Import Statement Outside a Module” Error

    Here are the most effective solutions for resolving this error in both Node.js and browser environments:

    For Node.js Environments

    Method 1: Modify package.json File

    The most straightforward way to resolve this error in a Node.js project is to explicitly tell Node.js to treat your JavaScript files as ES Modules. You can do this by adding a single line to your package.json file:

    {
      "type": "module"
    }

    This configuration instructs Node.js to interpret all .js files in your project as ES Modules, allowing you to use import and export statements without any issues. If you need to use CommonJS for specific files, you can rename them with a .cjs extension.

    Method 2: Change File Extension to .mjs

    An alternative to modifying your package.json is to use the .mjs file extension for your modules. Node.js will automatically recognize any file ending in .mjs as an ES Module, even in projects that default to CommonJS. This approach is particularly useful when you have a mix of ES Modules and CommonJS files in the same project.

    Method 3: Use Babel to Compile Your Code

    If you’re working with an older version of Node.js that doesn’t fully support ES Modules, or you need to maintain compatibility with older environments, Babel is an excellent tool. Babel can transpile your modern JavaScript code, including import statements, into a version compatible with older systems.

    To set this up, you’ll need to install the necessary Babel packages:

    npm install --save-dev @babel/core @babel/preset-env babel-jest

    Then, configure Babel to transpile your modules by creating a babel.config.js file:

    module.exports = {
      presets: [['@babel/preset-env', {targets: {node: 'current'}}]],
    };

    This configuration will ensure that your import statements are correctly transformed into require() calls compatible with CommonJS. If you want step-by-step instructions for this process, we recommend reading How to Set Up Babel in Node.js by freeCodeCamp.

    Suggested read: Best web development tools for developers

    For Web Browser Environments

    When using ES Modules in a web browser, you must explicitly tell the browser that your script is a module. This can be done by adding the type=”module” attribute to your <script> tag in your HTML file:

    <script type="module" src="your-script.js"></script>

    By including this attribute, the browser will correctly interpret your import and export statements, preventing the “Cannot use import statement outside a module” error. It’s important to note that modules are deferred by default, executing after the HTML document has been parsed.

    For larger projects, managing multiple script tags and dependencies can become complex. This is where module bundlers like Webpack, Rollup, or Parcel come in. These tools analyze your project’s dependencies and bundle them into a single, optimized file that can be easily included in your HTML.

    cannot use import statement outside a module

    Module bundlers not only resolve the “Cannot use import statement outside a module” error but also offer additional benefits such as code minification, tree shaking (removing unused code), and transpilation for older browsers. If you’re building a modern web application, using a module bundler is a best practice that can significantly improve your development workflow and application performance.

    Best Practices for Using JavaScript Modules

    To avoid this error and write cleaner, more maintainable code, consider these best practices:

    • Be Consistent: Stick to one module system within your project. ES modules are the recommended choice if you’re starting a new project.
    • Clear and Explicit Imports: Always place your import statements at the top of your files. This makes it easier to see a file’s dependencies at a glance.
    • Organize Your Modules: Structure your project with a clear folder hierarchy for your modules. This improves code organization and makes it easier to find and reuse code.
    • Dynamic Imports for Performance: For large modules that are not immediately needed, consider using dynamic import() to load them on demand. This can improve your application’s initial load time.

    How RunCloud Enhances Your Development Workflow

    At RunCloud, we understand the importance of a seamless development experience. Our platform provides a robust and reliable hosting environment perfect for modern web applications.

    Our platform simplifies server management, allowing you to focus on what you do best: writing code. Whether you’re building a complex single-page application or a server-side rendered website, RunCloud provides the tools and support you need to deploy and manage your projects with ease.

    RunCloud is a powerful platform designed to simplify the complexities of web development and server management. It allows you to deploy and manage your web applications easily.

    • Effortless Server Setup: RunCloud enables you to deploy and manage your PHP applications on servers.
    • Easy Deployment: Deploy your websites to a server using a simplified workflow.
    • Simplified SSL Certificate Management: Easily install and manage SSL/TLS certificates to secure your websites with just a few clicks.
    • Enhanced Security: Benefit from the security features RunCloud offers, including automated updates and firewall integration.
    • Automated Backups: Set up automated backups to safeguard your data and website files.
    • Monitoring and Alerting: Monitor your server’s performance and receive alerts to stay informed about potential issues.
    • One-Click Application Deployment: RunCloud simplifies the deployment of popular web applications.

    By using RunCloud, you can focus on writing code and building your web applications without getting bogged down with server configurations and management.

    Conclusion

    The “Cannot use import statement outside a module” error is a common problem, but it’s easy to overcome with a clear understanding of JavaScript modules and the right configuration. By following the solutions and best practices outlined in this guide, you can ensure that your projects are set up for success.

    After building your website, you will need a place to host it, and that’s where RunCloud comes in. With RunCloud, you can spend less time managing your infrastructure and more time building amazing applications.

    Ready to take your web development to the next level? Sign up for RunCloud today and experience the benefits of a modern, streamlined hosting platform.

  • How to Get Your Website Indexed by Search Engines in 2026: A Complete Guide

    How to Get Your Website Indexed by Search Engines in 2026: A Complete Guide

    You’ve launched your new website. Now you’re hearing a flood of new terms: SEO, index, sitemap, crawlers. These are all important buzzwords in digital marketing, but they often boil down to one critical question:

    How do you get your website indexed by Google so people can find it?

    If you’re asking that question, you are in exactly the right place.

    Getting your website to appear in search results on Google and Bing is called “indexing”. In simple terms, it’s how search engines discover your web pages and add them to their massive database, making them available to searchers.

    While it’s true that search engines will eventually find your site on their own, passively waiting is a slow and uncertain process. By actively submitting your website and ensuring it’s properly prepared, you can dramatically speed up the process and improve your overall visibility from day one.

    This guide will walk you through every step to officially introduce your site to the world’s largest search engines.

    Let’s get started!

    Phase 1: Preparing Your Site for Crawlers

    Before you even think about submitting your site, you should first ensure it’s technically sound and “crawler-friendly”. Follow the steps below to make sure your site is ready to be indexed.

    1. Set a Preferred URL with Canonical Tags

    Canonicalization is selecting a single, “master” URL for a page that might be accessible through multiple addresses. For example, the following URLs could all show the exact same homepage:

    • http://example.com
    • https://example.com
    • https://www.example.com

    A canonical tag tells search engines to treat all pages as one page, which helps prevent duplicate content issues. To implement this, ensure every page on your site contains a canonical tag.

    If you are coding your site, then you would need to do this on your own by adding the <link rel="canonical" href="URL-of-the-page-itself"> tag in the HTML head, but most modern content management systems (CMS) handle this automatically.

    2. Create a robots.txt file

    A robots.txt file is a simple text file in your website’s root directory (e.g., example.com/robots.txt). It provides instructions to search engine crawlers and tells them which sections of your site they should not visit. You can use this file to hide certain website sections, such as private admin pages or user shopping carts.

    When you create this file, it is also recommended to include a line pointing to your XML sitemap, as this helps search engines efficiently discover all the important pages you want them to index.

    User-agent: *
    Disallow: /admin/
    Disallow: /cart/
    Sitemap: https://www.yourdomain.com/sitemap.xml

    📖 Suggested read: How to Edit robots.txt in WordPress (With & Without Plugin) 

    3. Control AI Bot Access

    With the rise of AI models trained on public web data, you may want to control whether companies can use your content for training. You can specify rules for these AI bots in your robots.txt file by adding directives that target their specific user-agents.

    For example, to block Google’s AI models from using your content, you can add a rule for Google-Extended, and to block OpenAI’s models, you can use ChatGPT-User.

    Add the following rules to your robots.txt file to disallow access for these common AI crawlers:

    # Block Google's AI model training
    User-agent: Google-Extended
    Disallow: /
    # Block OpenAI's AI model training
    User-agent: ChatGPT-User
    Disallow: /

    This instructs these specific bots not to crawl any part of your website, opting your content out of their data collection for model training.

    To learn more about editing your robots.txt file, read our full-length article on How to Edit robots.txt in WordPress (With & Without Plugin).

    4. Create XML Sitemap

    A sitemap is an XML file that lists all the important pages, videos, and images on your site and when they were last updated. A good sitemap makes it easy for search engines to find and understand your content.

    Most CMS platforms have plugins or built-in tools for this (e.g., Yoast SEO, Rank Math, or Squarespace’s native feature). Once your sitemap is ready, you can host it on your web server and ensure it is accessible via your robots.txt file.

    5. Add Structured Data (Schema Markup)

    Structured data, or Schema markup, is a standardized code format you add to your website to help search engines understand your content on a deeper level. While basic HTML elements like headings and lists give your page visual organization, structured data explicitly defines your content.

    For example, telling Google that a string of numbers is a phone number or that a piece of text is the name of a product allows search engines to better interpret your pages and qualify your site for “rich snippets”, which are enhanced, more detailed listings in search results.

    Depending on your site’s content, you can implement various Schema markup types. Some of the most common and beneficial types include:

    • Organization: Defines your business name, logo, address, and contact information.
    • Article: Specifies the headline, author, publication date, and featured image for blog posts or news stories.
    • Product: This section provides a product’s name, image, brand, price, and availability, often including review ratings.
    • FAQPage: Marks up a list of questions and answers, making them eligible to appear directly in search results.

    After adding the markup to your pages, you should use a tool like Google’s Rich Results Test to validate the code and confirm that it has been implemented correctly.

    6. Optimize On-Page Elements

    Optimizing your content’s core on-page elements is an important step in preparing it for search engines. Crawlers analyze these elements first to understand a page’s topic and structure, and they directly influence how your content is displayed in search results.

    To properly structure each page, you should focus on several key components. Each serves a distinct purpose in communicating what your page is about on search engine results pages and social media platforms.

    • SEO Title (<title> tag): This is your page’s main, clickable headline that appears in search results and at the top of a browser tab.
    • Meta Description: The short summary appears under the title in search results. It doesn’t directly impact ranking, but it is an advertisement to convince users to click on your link.
    • Headings (H1, H2, H3): These tags structure your content for readers and signal the information hierarchy to crawlers. An H1 tag is typically used for the page’s main title, with H2s and H3s for subtopics.
    • Open Graph (OG) Tags: These tags control how your content’s title, description, and preview image appear when shared on social media platforms like Facebook, LinkedIn, or X (formerly Twitter).

    Phase 2: Notifying Search Engines

    After preparing your website, it is time to announce its presence to the search engines. This step lets you communicate directly with search engines to ensure they can efficiently find, crawl, and index your content.

    1. Register with Webmaster Tools

    Registering your site with Webmaster Tools is the most important step in this phase. These tools provide direct communication with the major search engines, invaluable data on how search engines see your site, alerts you to critical errors, and tools to manage your site’s appearance in search results.

    • Google Search Console: This is arguably the most important tool for monitoring and managing your site’s presence in Google Search. It offers detailed performance reports, indexing status, and mobile usability feedback.
    • Bing Webmaster Tools: This is the equivalent platform for the Microsoft Bing search engine. It’s important to note that Bing also powers search results for other popular engines like DuckDuckGo and Yahoo, so registering here expands your reach beyond just the Bing ecosystem.

    2. Verify Site Ownership

    Before you can access any of this sensitive data, search engines need to confirm that you are the website’s legitimate owner or authorized manager. During the setup process, each tool will guide you through a verification procedure.

    There are several common methods to accomplish this, and you only need to choose one: you might be asked to upload a special HTML file to your server, add a unique meta tag to the code of your homepage, or verify your ownership directly through your domain name provider’s settings.

    3. Submit Your Sitemap

    After verifying ownership, your next step is to submit your sitemap. The process is straightforward in both Google Search Console and Bing Webmaster Tools.

    • You must locate the “Sitemaps” section within the tool’s interface.
    • Once there, you simply paste the full URL of your sitemap file into the submission field and click the “Submit” button.

    After receiving your sitemap, the search engine adds your URLs to its crawling queue. This doesn’t mean your site will be indexed instantly, but it ensures that the search engine’s crawlers, or bots, are aware of your pages and will schedule a visit to discover and evaluate your content for inclusion in their search results.

    Phase 3: Monitoring & Ongoing Updates

    While you only need to submit your website to search engines once, achieving and maintaining visibility in the search engines is an ongoing process that requires continuous monitoring and updating.

    The process of crawling and indexing is not instantaneous. After you submit your site, it can take a few days to several weeks for search engines to fully process your pages and begin showing them in search results.

    Additionally, submitting a sitemap or requesting indexing does not guarantee inclusion. Search engine systems are designed to prioritize high-quality, relevant, and useful content, and they will ultimately make the final decision on what to index.

    After indexing the site, you can check your site’s progress using the tools available.

    • The URL Inspection Tool in Google Search Console is your best friend for examining individual pages. You can enter any URL from your site to receive a detailed report on its current indexing status, see if it is mobile-friendly, and identify any specific issues preventing it from being shown on Google.
    • Use the Index Coverage Report in Google Search Console for a high-level overview. This report gives you a complete picture of your site, showing which pages are successfully indexed, which have warnings that may affect their performance, and which have been excluded from the index entirely, along with the specific reasons for each status.

    Phase 4: Advanced & Real-Time Indexing

    In addition to the standard sitemap submission, there are more advanced, real-time methods for notifying search engines of changes on your site. These protocols are designed for speed, allowing you to alert search engines the moment content is published, updated, or removed.

    IndexNow Protocol

    The IndexNow protocol is a simple, open-source initiative that allows website owners to instantly notify multiple search engines whenever site content is created, updated, or deleted.

    Instead of waiting for search engine crawlers to discover a change, you can proactively “ping” them, dramatically speeding up the discovery process.

    This protocol is supported by a growing list of major search engines, including Microsoft Bing, Yandex, Naver, Seznam, and Yep. While Google does not natively participate in IndexNow, it has confirmed that it is monitoring these signals to assess the protocol’s utility. The primary benefit of using IndexNow is the acceleration of content discovery on supporting search engines. Your latest updates appear in search results much faster, resulting in more relevant traffic and fresher content for users.

    Implementation is often straightforward, as many modern Content Management Systems (CMS) and Content Delivery Networks (CDNs) have integrated IndexNow via plugins or built-in features. It can also be implemented directly via a simple API key for more custom setups. You can find more details and resources at the official IndexNow website and Bing’s IndexNow portal.

    Google’s Indexing API

    Google offers its proprietary system for real-time notifications called the Indexing API. However, you should note that this API has a very strict and narrow use case, and using it for other purposes is against Google’s guidelines. The Indexing API is designed exclusively for two specific types of time-sensitive content:

    • JobPosting: Pages containing structured data for job listings.
    • BroadcastEvent: Pages with structured data for livestream videos.

    Using the Indexing API is essential for websites that feature this kind of short-lived content. It lets you directly notify Google when a job has been filled or a livestream has ended, ensuring the information remains fresh and accurate in search results.

    Implementing Google’s Indexing API is a more technical process intended for developers. It requires setting up a Google Cloud project, creating a specific service account, and managing access tokens to make API calls. The complete technical documentation and instructions are in Google’s official developer guide.

    TL;DR: How to Index Websites Instantly

    FeatureSitemap SubmissionURL Inspection ToolIndexNow ProtocolGoogle Indexing API
    Use CaseInitial site submission; bulk updatesRequesting re-index for 1-2 important URLsInstantly notify multiple engines of any changeInstantly notify Google of job/livestream changes
    Supported ByAll major search enginesGoogleBing, Yandex, etc.Google only
    Content TypeAll content typesAll content typesAll content typesJobs & Livestreams ONLY
    SpeedSlow (Days to weeks)Medium (Hours to days)InstantInstant

    Final Thoughts

    This post explains how to actively notify search engines of your site’s existence using standard and advanced methods. Following these steps gives your site the best possible start to being discovered by Google, Bing, and the audiences they serve.

    However, getting indexed is only part of running a successful website.

    Your server’s ongoing performance, speed, and security are critical in search engine rankings and user experience.

    Managing these technical elements can be a constant hassle, pulling your focus away from what you do best: creating great content and growing your business.

    To speed things up and eliminate the burden of complex server administration, consider using RunCloud. You shouldn’t have to be a server expert to run a fast, secure website. RunCloud simplifies the entire process, providing you with a powerful and intuitive dashboard to deploy, manage, and monitor your cloud servers without ever needing to touch the command line.

    Ready to take the complexity out of server management? Sign up for RunCloud today.

    Frequently Asked Questions about Website Indexing

    Why isn’t my website showing up on Google after I submitted my sitemap?

    Submitting a sitemap informs Google that your site exists, but doesn’t guarantee immediate indexing. Indexing can be delayed if Google’s systems determine your site’s quality is low or technical issues prevent its crawlers from accessing your content. Use the URL Inspection Tool in Google Search Console to check for specific page errors.

    How long does it take for a new website to be indexed?

    The timeline for indexing a new website can vary widely, from a few days to several weeks. Factors like your site’s authority, technical health, and content quality all affect how quickly search engines crawl and index your pages.

    What does “Discovered – currently not indexed” mean in Google Search Console?

    This status means Google knows your page exists but has chosen not to crawl and index it yet. This often happens when Google’s systems feel that crawling the URL might overload your server or that the content is not of high enough quality to warrant indexing at this time. Improving your overall site quality and internal linking can help resolve this over time.

    What’s the difference between blocking a page in robots.txt and using a noindex tag?

    Blocking a page in robots.txt prevents search engine crawlers from visiting or seeing the page’s content. A noindex meta tag allows crawlers to visit the page but explicitly instructs them not to include it in their search results index. Use noindex for pages you want Google to know about but keep private, and robots.txt for sections you want crawlers to ignore completely.

    Do I need to resubmit my sitemap whenever I add a new page?

    No, you do not need to manually resubmit your sitemap for every change. Modern sitemap tools automatically update a “last modified” date, and search engines will re-check your sitemap periodically to find new and updated URLs. Manually submitting is generally only necessary for the initial setup or after a major site overhaul.

    Is it worth using IndexNow if Google doesn’t officially support it?

    Yes, it is still highly recommended that most sites use the IndexNow protocol. It provides instant indexing benefits on major search engines like Bing and Yandex, which can drive significant traffic. Since implementation is often as simple as a plugin, the small effort provides a large benefit across the web, even if Google is not yet a direct participant.

    Can I use the Google Indexing API for my blog posts or e-commerce products?

    You should not use the Google Indexing API for standard content like blog posts or product pages. The API is strictly for time-sensitive JobPosting and BroadcastEvent (livestream) content. Misusing the API for other content types is against Google’s guidelines and can result in your access being revoked.

  • How to Check Your Ubuntu Version (Using the Command Line and Gui)

    How to Check Your Ubuntu Version (Using the Command Line and Gui)

    Whether installing new software, following an online tutorial, or troubleshooting an issue, one of the first questions you’ll face is, “What version of Ubuntu are you running?” Your operating system details are necessary for managing your system’s health and functionality.

    The version number of your operating system determines which applications and Personal Package Archives (PPAs) you can safely install, as many are built for specific releases. It also informs you about your system’s support lifecycle. For example, knowing you are on a Long-Term Support (LTS) version confirms that you will receive critical security updates for several years.

    Additionally, countless online guides tailor their instructions to a particular version, such as 22.04 or 24.04, so using the correct one prevents errors. Finally, when you ask for help on a forum or file a bug report, providing your version number is the first and most critical step toward getting a fast and accurate solution from the community.

    In this quick guide, we will show you two simple methods for finding your Ubuntu version: the graphical and command-line methods.

    Let’s get started!

    Method 1: The Graphical (GUI) Way

    If you prefer clicking over typing, Ubuntu’s graphical user interface (GUI) provides a straightforward path to find your system’s information. This method is ideal for desktop users and requires no command-line knowledge.

    Follow these simple steps:

    1. Open the Activities Overview. To do so, click the Activities button at the top-left corner of your screen. Alternatively, press your keyboard’s Super (Windows) key to open the same view.
    2. Find the Settings Application. Once the overview is open, begin typing the word Settings. An icon for the Settings application will appear in the search results. Click on this icon to launch the program.
    3. Navigate to the About Section. The Settings window will open. In the navigation panel on the left-hand side, scroll to the bottom and click on the About tab.

    This will open a screen dedicated to your system’s details. Look for the OS Name line. This line displays your Ubuntu version number and its release type, for example, Ubuntu 24.04 LTS.

    If you are using RunCloud to manage your servers, then you can also see this information in the server dashboard summary section:

    Suggested read: How to Check OS version in Linux

    Method 2: The Command-Line (CLI) Way

    The terminal offers the fastest way to get system information if you are a server administrator, developer, or anyone who prefers working with text-based commands. The Command-Line Interface (CLI), or terminal, is a powerful tool that allows you to communicate directly with your computer.

    Even if you are not a server administrator, we recommend you try this out. These commands are simple, safe, and incredibly useful.

    To begin, open your terminal. The quickest way to do this on a desktop is by pressing the keyboard shortcut Ctrl+Alt+T.

    Option A: The Best All-Around Command (lsb_release)

    This is the standard and most recommended command for checking your Ubuntu version. lsb_release stands for Linux Standard Base, a standardized way for Linux systems to report their identity. Using this command ensures you get clear, well-formatted information.

    In your terminal, type the following command and press Enter:

    lsb_release -a

    Your screen will display an output similar to this. Let’s break down what each line means:

    • Distributor ID: This simply confirms that your operating system is Ubuntu.
    • Description: This is the most important line for most users. It provides the full, human-readable version name, such as Ubuntu 24.04 LTS. The “LTS” signifies a Long-Term Support release, guaranteeing five-year security updates.
    • Release: This shows you just the version number (24.04), which can be useful for scripts or when a guide asks only for the number.
    • Codename: Every Ubuntu version has a unique, alliterative codename (such as “Noble Numbat” or “Jammy Jellyfish”).

    The Codename is more than just a name. You will often use it when adding new software sources, known as PPAs (Personal Package Archives), to your system. The codename ensures you download the correct package built specifically for your version of Ubuntu.

    Option B: Checking the /etc/os-release file

    This alternative method is wonderfully simple and works on nearly all modern Linux systems, not just Ubuntu. Instead of running a specific program, this command directly reads and displays the contents of a system configuration file.

    Type the following command into your terminal and press Enter:

    cat /etc/os-release

    The cat command is a classic utility used to display the contents of files. Here, you are asking it to show you what’s inside the os-release file located in the /etc directory.

    While that looks like a lot of information, you only need to focus on one line. The PRETTY_NAME variable gives you exactly what you need in a clean, easy-to-read format: “Ubuntu 24.04 LTS”.

    Bonus Tip: Checking Your System Architecture (32-bit or 64-bit)

    Knowing your Ubuntu version is important, but sometimes it’s only half the story. When you visit a software download page, you will often see different files listed for the version and the architecture. This refers to the type of processor your computer uses. Installing software built for the wrong architecture will simply not work, so it’s an essential piece of information to have.

    Thankfully, finding your system’s architecture is as easy as finding its version. In your terminal, run the following command:

    uname -m

    On most modern desktop and laptop computers, the command will almost always output: x86_64. This indicates you are running a 64-bit system. You will often see this referred to as amd64 in software package names.

    However, you might encounter a different output, especially on cloud servers or single-board computers like the Raspberry Pi. For example, we see a different result when we run this command on our cloud server managed by RunCloud:

    An output of aarch64 (or sometimes arm64) indicates that the server uses an ARM-based processor. Many people and cloud providers now choose ARM because these processors are designed to be extremely power-efficient. This efficiency means they consume less electricity to perform their tasks, directly translating into lower operational and hosting costs.

    So, if you’re using a modern, cost-effective cloud server, don’t be surprised to find it’s running on an ARM architecture.

    Combining your version (24.04 LTS) with your architecture (x86_64 or aarch64) gives you all the information you need to download the correct software package every time.

    If you are a RunCloud user, you can get this information directly from your server dashboard summary:

    Ubuntu Version Reference Cheat Sheet

    What you want to knowThe command to use
    Full Version Detailslsb_release -a
    Human-Readable Versioncat /etc/os-release
    System Architectureuname -m

    Final Thoughts

    Whether you prefer the visual approach of clicking through the Settings panel or the speed of typing a quick command in the terminal, you can now instantly find both your Ubuntu version and system architecture.

    Knowing your system’s details is the first step to becoming a more confident and capable Ubuntu user.

    Do you have a favorite method or a useful tip we didn’t cover? Let us know in the comments below!

    If you manage one or more servers, there’s an even easier way. Constantly logging in to a terminal just to check basic stats can be time-consuming. RunCloud allows you to directly check the Ubuntu version of your server from the RunCloud dashboard, alongside other critical server health information. RunCloud makes it incredibly easy to manage your Linux servers by providing a clean, powerful interface for tasks that would otherwise require complex command-line work.

    Ready to take the complexity out of managing your Linux servers?

    Sign up for RunCloud today and see how effortless server management can be.

  • How to Fix the “Safari Can’t Establish a Secure Connection to the Server” Error

    How to Fix the “Safari Can’t Establish a Secure Connection to the Server” Error

    Have you ever tried to open your bank, favorite store, or work portal – only to be stopped by this message?

    “Safari Can’t Establish a Secure Connection to the Server.”

    It’s frustrating, vague, and can block you completely – on a Mac, iPhone, or iPad.

    But what does this error mean?

    This guide explains what’s happening behind the scenes when Safari shows this message and gives you a step-by-step checklist to fix it. Whether the problem lies with your device or the website’s server, you’ll leave with a clear path to restore access.

    Let’s start by understanding why this error happens in the first place.

    What Causes the “Safari Can’t Establish a Secure Connection to the Server” Error?

    When you visit a website on your browser, your computer encrypts the data so no one else on your network can read it. This encryption is done using a TLS/SSL handshake. If any part of this process fails, Safari will terminate the connection and display this error to protect you from potentially insecure communication.

    The causes can range from a simple misconfiguration on your device to a serious problem with the website’s server.

    In this article, we will proceed with troubleshooting in a logical order, from the most common and simplest fixes to more advanced, system-level solutions.

    Let’s get started!

    Common Fixes to Solve the Secure Connection Error

    If you encounter the “Can’t Establish a Secure Connection to the Server” error, you should begin your troubleshooting process with these steps. The following solutions are entirely safe and non-destructive to your data and will successfully resolve the “secure connection” error in most situations.

    1. Verify the Website Address and Reload the Page

    The most straightforward fix is often to check the website’s domain name. Carefully check the URL in Safari’s address bar for any typos. A single misspelled character in a website’s domain name can direct your browser to an entirely different server or a server that does not possess a valid security certificate for the address you intended to visit, immediately triggering this security error.

    If the web address is correct, the next step is to perform a “force reload” of the page. You can accomplish this by pressing the Cmd + R key combination on your keyboard or by clicking the reload icon in the address bar. This action instructs Safari to discard any temporary data stored for the page and request a completely fresh copy from the server. This can resolve transient network hiccups or minor glitches that may have interrupted the initial connection.

    safari can't establish a secure connection

    2. Check and Correct Your System’s Date & Time

    An incorrect date or time setting on your computer or mobile device is the most frequent culprit behind this connection error. Secure browsing depends on accurate system time.

    Secure websites use SSL/TLS certificates that are only valid for a specific period, which includes a defined start date and an expiration date. If your device’s clock is set to a date and time outside this valid range, Safari will correctly determine that the website’s certificate is invalid. As a security precaution to protect your information, Safari will refuse to establish the connection.

    To resolve this, you should configure your device to automatically set its date and time using Apple’s reliable network time servers.

    How to Fix on macOS (Ventura & later):

    1. Navigate to the Apple menu in the top-left corner of your screen and select System Settings.
    1. Click General in the sidebar, then choose the Date & Time option on the right.
    1. Ensure the toggle switch next to “Set time and date automatically” is in the ‘on’ position.
    1. Make sure the server is set to time.apple.com or another reliable source.

    How to Fix on iOS / iPadOS:

    1. Open the Settings application from your Home Screen.
    2. Tap on General, and then select Date & Time.
    3. Verify that the toggle for “Set Automatically” is enabled, which allows your device to sync its time with the cellular or Wi-Fi network.

    3. Test the Issue Using a Private Window

    To determine whether the connection error is caused by your browser’s stored data or extensions, you should try opening the website in a private Window. A Private Window creates a temporary, isolated browsing session that acts as a “clean slate.” Safari doesn’t use your browsing history, cookies, or cached data in a Private Window.

    Additionally, it disables all third-party browser extensions you may have installed, such as ad blockers, security tools, or shopping assistants. Creating this clean environment allows you to test whether one of these components interferes with the secure connection process.

    To perform this test, follow these instructions:

    1. With Safari open, go to the File menu at the top of your screen and select New Private Window. Alternatively, you can use the keyboard shortcut Shift + Cmd + N.
    2. A new, dark-themed Safari window will appear, indicating you’re in Private Browsing mode.
    3. In the address bar of this new private window, type or paste the website URL that was previously failing and press Enter.

    Now, carefully observe the result, as it will tell you exactly where to look for the problem:

    • If the website loads successfully in the Private Window: This confirms the problem is within your Safari profile. It confirms that the issue lies within your regular Safari profile and is caused by corrupted website data (cache or cookies) or an interfering browser extension. You should now proceed directly to Step 4 to clean up this data.
    • If the error message appears again in the Private Window: This tells you that the problem is unrelated to your browser’s data or extensions. The cause is deeper, likely related to your device’s network settings, system-wide configurations, or an issue on the website’s server. In this case, you can skip the next step and move on to Network-Level Troubleshooting.

    4. Clear Corrupted Website Data (Cache & Cookies)

    If your test in Step 3 was successful, this step usually resolves it. Over time, the data that Safari stores to make websites load faster (the cache) and remember your login sessions (cookies) can become corrupted or “stale.” This outdated information can conflict with a website’s server when it tries to establish a new, secure connection.

    We will first try a targeted approach, which is highly recommended as it will not log you out of other websites.

    How to Clear Data for a Single Site (Recommended Method):

    This removes data just for the affected site, leaving your data for all other sites untouched.

    1. Open Safari and click on Safari in the menu bar at the top of the screen, then select Settings (or Preferences on older macOS versions).
    1. In the Settings window, navigate to the Privacy tab. This section controls how Safari handles website tracking and stored data.
    1. Click the button labeled Manage Website Data…. This will open a new window showing all the websites that have stored data on your computer.
    2. In the search bar in the corner of this window, type the name of the website causing the error (e.g., “example.com”).
    1. Select the website from the list and click the Remove button.
    2. Click Done. To ensure the changes take full effect, quit Safari (Cmd + Q) and reopen it. Now, try accessing the website again.

    How to Clear All Browser History and Data (Use if the Targeted Method Fails):

    If removing the data for the specific site did not work, you can take a more drastic step. This action will remove your browsing history and sign you out of all websites you are currently logged into.

    1. In the Safari menu bar, click History, then select Clear History… from the bottom.
    2. A small dialog box will appear. Click the dropdown menu next to “Clear” and select all history.
    1. Click the Clear History button to confirm. This action comprehensively removes all history, cookies, and cached data from Safari.
    2. After the process is complete, try visiting the website one more time.

    Network-Level Troubleshooting

    If the fixes mentioned above didn’t work, the problem may lie in your network configuration or filtering software. Follow these steps to continue the troubleshooting process

    5. Disable VPN, Antivirus, or Firewall Software

    If you are using any third-party security and network software that intercepts your network traffic to scan it. Then this “man-in-the-middle” position can sometimes interfere with the delicate TLS handshake.

    1. Temporarily disable active VPN clients, antivirus programs (like Norton, Avast, McAfee), or third-party firewalls.
    2. Quit and restart Safari completely.
    3. Try visiting the site again.

    These network security applications install their own “root certificates” to decrypt and inspect your traffic. If their software is outdated or misconfigured, it can break the connection to legitimate sites. If disabling one of them fixes the issue, you need to update that software or adjust its “SSL/TLS Inspection” settings.

    6. Change Your DNS Servers

    A Domain Name System (DNS) server is like the Internet’s phonebook. A slow, unreliable, or misconfigured DNS server can cause connection failures. These DNS issues can sometimes lead to routing problems or timeouts before the secure connection is established.

    Most ISPs use their own DNS server to analyze and predict network traffic patterns, but these servers are sometimes poorly maintained, making them unreliable. If you use a custom DNS server, consider switching to a public DNS server such as Google DNS, Cloudflare, or Quad9, which are fast, reliable, and highly secure.

    How to Change DNS on macOS:

    1. Go to Apple menu > System Settings > Wi-Fi.
    2. Click the Details… button next to your active network connection.
    3. Select the DNS tab from the sidebar.
    1. Click the + button and add the following servers:
      • 8.8.8.8 (Google)
      • 1.1.1.1 (Cloudflare)
      • 9.9.9.9 (Quad9)
    2. Click OK.

    How to Change DNS on iOS / iPadOS:

    1. Go to Settings > Wi-Fi.
    2. Tap the i (info) icon next to your network.
    1. Scroll down and tap Configure DNS.
    1. Select Manual, then Add Server to enter 8.8.8.8 and 1.1.1.1. Remove any old entries.
    2. Tap Save.

    Advanced System-Level Solutions

    Please proceed with the following steps, fully understanding that they involve changes to your core operating system.

    7. Update macOS and Safari to the Latest Version

    One of the most useful steps to resolve secure connection errors is to ensure your entire operating system is up-to-date. A modern, secure website server may refuse to communicate with a browser that uses older, deprecated security protocols (like early versions of TLS), because older protocols are now blocked for security reasons. Updating your OS is the only way to ensure Safari can “speak” this language’s latest and most secure version.

    Newer operating systems also include the latest version of the Apple Trust Store. It is a verified list of all the global organizations (Certificate Authorities) trusted to issue legitimate SSL/TLS security certificates. If a website is using a certificate from a newer authority that isn’t on your outdated list, Safari will be unable to verify its authenticity and will block the connection.

    Therefore, when you perform a software update, you not only get security patches and new features but also refresh Safari’s core components and directory of trusted entities.

    To check for and install updates on your Mac:

    1. Navigate to the Apple menu in the top-left corner of your screen and select System Settings.
    2. Click on General in the sidebar, and then choose Software Update.
    3. Your Mac will automatically check for available updates. If one is found, follow the on-screen prompts to download and install it.

    To update your iPhone or iPad:

    1. Open the Settings app, go to General, and tap on Software Update.
    2. Your device will check for and allow you to install any pending updates.

    8. Inspect Keychain Access for Problematic Certificates (For Advanced Users)

    Warning: This is a highly advanced troubleshooting step and should only be attempted if you are comfortable navigating core system utilities.

    Your Mac’s Keychain Access is a secure digital vault that stores all your passwords, private keys, and security certificates. Occasionally, a manually installed, expired, or corrupted certificate within this vault can create a conflict that blocks a secure connection to a specific website. This is particularly common if you have previously installed a “self-signed certificate” for a local development server or a corporate network, as these can sometimes interfere with public web traffic.

    Keychain Access is the heart of your Mac’s security. Deleting the wrong certificate (especially a “root” certificate) can cause widespread connection failures across multiple applications and websites. Therefore, you should only proceed if you strongly believe a specific certificate is the cause.

    To carefully inspect and remove a rogue certificate:

    1. Open Spotlight Search by pressing Cmd + Space, Keychain Access, and Enter.
    2. Once the application is open, focus on the “Keychains” panel at the top left. Select the System keychain, which contains certificates that affect all users on the Mac.
    3. In the bottom-left “Category” panel, click on Certificates to filter the main window’s view.
    4. You will now see a list of all system-level certificates. Carefully scan this list for any entries related to the website you are having trouble with. Pay close attention to any certificates marked with a red ‘X’ icon, as this is a clear visual sign that macOS considers them expired or untrusted.
    5. If, and only if, you locate a certificate that you are confident is the source of the problem (e.g., an expired certificate for that specific domain), you can attempt to remove it. Right-click on the certificate and select Delete.
    6. Enter your admin password to confirm the change. After deleting it, quit and restart Safari to see if the issue is resolved.

    Check A Different Website

    If you have tried everything above and the error persists on only one specific website, the problem is likely on the server’s end. This can be due to any of the following reasons:

    • Expired SSL Certificate: This is the most common server-side cause. The website owner forgot to renew their certificate.
    • Insecure Protocol Support: The server might be using an old, insecure version of TLS (like TLS 1.0 or 1.1), which Safari now blocks by default.
    • Certificate Name Mismatch: The certificate was issued for www.example.com, but the server is shop.example.com.
    • Incomplete Certificate Chain: The server isn’t providing the necessary intermediate certificates for Safari to establish trust.

    How to Verify a Server-Side Problem:

    You can use a third-party SSL checker tool to verify if the problem persists on the server itself. Go to a site like SSL Labs’ SSL Test or Security Headers and enter the hostname of the website you can’t access (e.g., www.example.com). The tool will run a deep analysis of the server’s configuration. It will give you a grade (A+ to F) and point out specific errors like expired certificates or weak protocol support.

    If the test reveals a problem, your only recourse is to contact the website’s administrator and inform them of the issue.

    Final Thoughts

    This guide covered the main causes behind the “Safari Can’t Establish a Secure Connection to the Server” error. By following the steps outlined above, you should be well-equipped to identify and resolve the issue from your end. For most users, these solutions will restore secure access to the websites you need.

    However, if you are a website owner or server administrator who has landed here while scratching your head over this error on your own domain, you know firsthand that hosting a secure server is no easy task. Even small mistakes can cause downtime and frustrate users, directly impacting your credibility and business. This is precisely why RunCloud has built solutions to eliminate these complexities.

    RunCloud provides a powerful server management panel that works with any cloud provider you choose, such as DigitalOcean, AWS, or Google Cloud. Its platform features a fully automatic SSL integration that deploys and renews Let’s Encrypt certificates without any manual intervention, ensuring you never have to worry about an expired certificate again.

    Additionally, its integrated DNS manager simplifies the once-complex task of pointing your domains correctly, preventing the configuration errors that often lead to secure connection failures.

    Prevent Errors Like This with RunCloud

    If you’re managing your own server or building websites for clients, errors like “Safari Can’t Establish a Secure Connection” are more than just frustrating – they’re a sign that something’s misconfigured. In many cases, these issues are caused by expired SSL certificates, DNS errors, or mismanaged server settings.

    RunCloud makes all of this easier.

    • Automatic SSL: RunCloud issues and renews Let’s Encrypt certificates automatically – no manual setup, no downtime, no security warnings.
    • Integrated DNS Manager: Configure domains properly with built-in tools that reduce errors and streamline deployment.
    • User-friendly interface: Manage everything through a clean, modern panel – no need to log in to the terminal just to tweak settings or fix issues.
    • Works with any cloud provider: Use RunCloud with DigitalOcean, AWS, Google Cloud, and more.

    If you’re tired of manually fixing preventable problems – or worried your users might be seeing connection errors without your knowledge – it’s time to take server management seriously.

    Get started with RunCloud – and keep your websites fast, secure, and always available.

  • How to Easily Fix Leverage Browser Caching Warning in WordPress

    How to Easily Fix Leverage Browser Caching Warning in WordPress

    Are you staring at that stubborn “Leverage Browser Caching” warning in your Google PageSpeed Insights report? You’re not alone. It’s one of the most common performance recommendations, and it often sounds far more complicated than it is.

    In this guide, we will explain browser caching from a server-level perspective and show you how to fix the leverage browser caching warning in WordPress by setting the correct Cache-Control and Expires headers.

    By the end of this article, in addition to fixing the “Leverage Browser Caching” warning in WordPress, you will see noticeable speed improvements in your website.

    Let’s get started!

    What is the “Leverage Browser Caching” Warning in WordPress?

    When someone visits your site for the first time, their browser has to download all the website’s assets, such as your logo, stylesheets (CSS), and scripts (JavaScript). Browser caching is a set of instructions that your server can send along with these files that says, “These files can be stored on your computer for a while. You don’t need to download them again on your next visit.”

    When these instructions are missing, the browser has to re-download all those files on every page load, making the site feel much slower for returning visitors.

    📖 Suggested read: LiteSpeed Cache WordPress Plugin Configuration Tutorial

    Why Does Google PageSpeed Insights Show The “Leverage Browser Caching” Warning?

    Google PageSpeed Insights shows the “Leverage Browser Caching” warning because adding proper caching controls speeds up the website for repeat users. When Google recommends a website to its users in search results, Google’s goal is to provide the best experience for its users, and that includes sending them to sites that load quickly.

    The warning is triggered for two main reasons:

    1. Slows Down Repeat Visits: Without caching, returning visitors have the same slow, “first-time” loading experience every time they visit. Fixing this makes the site feel almost instantaneous for them, which greatly boosts user experience.
    2. Wastes Resources: Forcing the browser to re-download the duplicate files repeatedly uses unnecessary bandwidth (both for the user and your server) and increases your server’s workload.

    📖 Suggested read: How to Use Redis Full-Page Caching to Speed Up WordPress

    How to Fix the “Leverage Browser Caching” Warning in WordPress

    You can easily fix the “Leverage Browser Caching” warning by adding specific rules, known as caching headers, to your server’s configuration. In this section, we’ll explore the primary methods to implement this on your server.

    ⚠️ But before we go any further, here is a note of warning!

    We understand that editing server configuration files or even .htaccess can feel intimidating. What if you make a mistake?

    This is where RunCloud provides a layer of confidence with automated backups. Before implementing any of the caching rules discussed in this guide, you can take a one-click, on-demand backup of your entire web application’s files. If anything goes wrong, you’ll be able to quickly and easily restore your entire website to its previous state in seconds.

    #1 – Setting Cache-Control Headers

    The Cache-Control header is the most powerful way to manage browser caching. It gives the browser precise instructions on how to handle a file. The max-age directive in this header tells the browser how many seconds it takes to keep a file cached before asking for it again.

    For example, a max-age of 31536000 tells the browser to store the file for one year. You can also specify directives such as public, meaning the file can be cached by any cache (like a browser or a CDN), or private for user-specific data.

    On a RunCloud server using an NGINX + Apache2 hybrid or OpenLiteSpeed stack, you can add these rules to your .htaccess file. For a pure NGINX stack, you would use the “NGINX Config” editor in your RunCloud dashboard. A typical rule looks like this for your .htaccess file, targeting different file types with appropriate expiration times:

    <IfModule mod_headers.c>
      <filesMatch "\.(ico|jpeg|jpg|png|gif|svg|webp)$">
        Header set Cache-Control "max-age=31536000, public"
      </filesMatch>
      <filesMatch "\.(css)$">
        Header set Cache-Control "max-age=2592000, public"
      </filesMatch>
      <filesMatch "\.(js)$">
        Header set Cache-Control "max-age=2592000, public"
      </filesMatch>
    </IfModule>

    📖 Suggested read: The Best WordPress Caching Plugins To Speed Up Your Site (2025)

    #2 – Using Expires Headers to Set Expiration Dates for Static Assets

    The Expires header is an older, simpler method for enabling browser caching. Instead of specifying a duration in the same way Cache-Control does, the Expires header sets a specific future date and time when the cached file should be considered “stale”.

    While Cache-Control is the modern standard, and it will override the Expires header if both are present, including Expires headers is still good practice for compatibility with older proxy servers and browsers.

    Adding expiration headers is very straightforward, especially in the .htaccess file found on RunCloud’s Apache2 or OpenLiteSpeed stacks. The mod_expires module allows you to set human-readable expiration times, making configuration easy.

    For example, you can specify “access plus 1 year” for images and “access plus 1 month” for CSS and JavaScript files. This tells the browser to calculate the expiration date based on when the user first accessed the file.

    Here is a simple and effective ruleset to add to your .htaccess file:

    <IfModule mod_expires.c>
      ExpiresActive On
      ExpiresByType image/jpeg "access plus 1 year"
      ExpiresByType image/png "access plus 1 year"
      ExpiresByType image/gif "access plus 1 year"
      ExpiresByType image/webp "access plus 1 year"
      ExpiresByType text/css "access plus 1 month"
      ExpiresByType application/javascript "access plus 1 month"
    </IfModule>

    📖 Suggested read: Everything You Need to Know About WordPress Object Caching

    #3 – Fixing “Leverage Browser Caching” Warning for Third-Party Scripts and Resources

    One of the most common frustrations for site owners is seeing a caching warning for scripts that aren’t even hosted on their own server. This frequently happens with resources such as Google Analytics, Google Fonts, or Facebook Pixel. You can’t control their caching headers because these files are located on Google’s or Facebook’s servers. This is why PageSpeed Insights will still flag them, even if your server is perfectly configured.

    While you technically can’t “fix” the headers on their servers, the only workaround is to host these scripts locally on your server. For example, you could download the Google Fonts files and serve them directly from your domain.

    However, the biggest downside to this approach is maintenance. When Google updates its Analytics script or adds new font characters, your local copy will become outdated, and you are responsible for manually updating it.

    For most users, the performance gain from caching these small third-party scripts locally is not worth the maintenance and potential security risks of running outdated code. Also, hosting third-party content on your own servers might break copyright laws in some jurisdictions. The best practice is often to correctly configure caching for all your assets and accept the warning for these third-party services.

    📖 Suggested read: Which is Better: Redis Full-Page Cache or NGINX FastCGI Caching?

    Best WordPress Plugins to Fix the “Leverage Browser Caching” Warning

    For many users, manually editing server configuration files can be daunting. Thankfully, the WordPress ecosystem has many powerful plugins that can automatically configure these settings with just a few clicks.

    #1 – How Litespeed Cache Solves Browser Caching Issues

    If your WordPress site runs on a RunCloud server with the OpenLiteSpeed (OLS) stack, you can quickly configure the LiteSpeed Cache for WordPress (LSCache).

    Unlike other caching plugins, LSCache is not a third-party plugin that provides basic caching solutions. It is a server-level solution that integrates directly with the OpenLiteSpeed web server. This deep integration allows it to manage caching with incredible efficiency.

    📖 Suggested read: How to Easily Optimize Your WordPress Website With RunCloud Hub

    When you install and activate the LSCache plugin, you can navigate to the LiteSpeed Cache > Cache > Browser tab in your WordPress dashboard. You’ll find a simple toggle switch for “Browser Cache” here. Turning this on will automatically add the optimal Cache-Control and Expires rules to your .htaccess file.

    This configuration also sets long cache lifetimes for your static assets, instantly solving the “Leverage Browser Caching” warning for all files hosted on your server. Additionally, this plugin is “talking” directly to the OLS server, and it can create highly optimized rules and work seamlessly with its other powerful features, like full-page caching and ESI.

    If you want step-by-step instructions for this, we recommend reading our thorough article covering the LiteSpeed Cache WordPress plugin configuration.

    #2 – Using RunCloud Hub to Manage Browser Caching Automatically

    If your site is running on the NGINX stack, then you can use RunCloud’s highly optimized page cache solution called RunCache. When you install the RunCloud Hub on your WordPress site, RunCloud automatically applies an advanced NGINX configuration that serves your site with incredible speed. This default configuration already includes best-practice rules for browser caching.        

    This means that for most users, RunCache automatically solves the browser caching warning without you needing to do anything extra. It’s configured to tell browsers to cache static assets like images, CSS, and JS for a long period.

    We recommend reading the following documentation posts if you want to learn more about RunCloud Hub:

    Wrapping Up

    The “Leverage Browser Caching” warning is a direct signal that you’re sacrificing site speed and user experience. You should fix this warning as soon as you see it, as this improvement directly impacts user satisfaction, reduces bounce rates, and sends positive signals to search engines like Google, which heavily favor fast, responsive websites as part of their Core Web Vitals initiative.

    And with a platform like RunCloud, you can move beyond basic plugin solutions to implement a far superior, server-level caching strategy.

    A typical WordPress caching plugin operates within the WordPress environment. WordPress and its underlying PHP code must first be loaded into memory for a cache to be built or served. While this is better than nothing, it still consumes server resources including memory and PHP workers.

    RunCloud Hub allows you to configure RunCache, its native NGINX FastCGI cache. This server-level cache intercepts requests before they even reach WordPress. It serves a pre-made, static HTML version of your page directly from the web server’s memory. This method is dramatically faster and more efficient, bypassing the resource-intensive process of loading PHP and the WordPress application.

    RunCloud provides a powerful, intuitive Hub with server-level performance tools like RunCache at your fingertips.

    Deploy your first lightning-fast, securely managed WordPress site with RunCloud today.

    FAQs on Fixing Browser Caching Warnings in WordPress

    How do I enable browser caching?

    Enabling browser caching requires adding specific instructions (headers) to your server’s configuration. These headers tell a visitor’s browser which files to store and for how long.
    With a Plugin: The easiest method for most WordPress users is to use a caching plugin like RunCloud Hub (RunCloud’s native NGINX page cache), W3 Total Cache, or WP Rocket. These plugins automatically add the necessary rules for you.
    Manually: For Apache or OpenLiteSpeed stacks, you can add caching rules directly to your .htaccess file. For NGINX-only stacks, you must add these rules to your NGINX location configuration file via the RunCloud dashboard.

    How do I set cache expiration?

    While both Cache-Control and Expires headers can be used to control how long a browser stores your files, we recommend using Cache-Control with the max-age directive, as it is the modern standard.
    The max-age value is set in seconds. For files that change frequently (like CSS or JavaScript), a shorter cache time is best. For static files that rarely change (like images, fonts, or videos), you should use a long cache time.
    Here are some common max-age values to use:
    1 Hour: max-age=3600
    1 Day: max-age=86400
    1 Week: max-age=604800
    1 Month: max-age=2592000
    1 Year: max-age=31536000
    For example, to cache a logo image for one year, you would set the header: Cache-Control: max-age=31536000.

    How to cache static files?

    To cache static files, you target them by their file extension. The most common static files to cache are:
    Images: .jpg, .jpeg, .png, .gif, .svg, .webp, .ico
    Stylesheets: .css
    JavaScript: .js
    Fonts: .woff, .woff2, .ttf, .eot
    You can create a block in your .htaccess or NGINX config file that applies caching headers specifically to these file types.

    How to fix caching issues?

    Caching issues, like seeing old content, usually stem from one of three places:
    Server Cache: Your server might be serving a cached page version. Use your plugin’s “Clear Cache” button or purge the cache via RunCloud Hub plugin.
    Browser Cache: Your browser has an old version stored. Perform a hard refresh (Ctrl+Shift+R or Cmd+Shift+R) or completely clear your browser’s cache.
    CDN Cache: If you use a CDN such as Cloudflare, you may need to purge its cache through the CDN provider’s dashboard.

    How do I clear the browser cache?

    Clearing your browser cache forces it to download the newest versions of all files from your website.
    Keyboard Shortcut: The quickest way is to press Ctrl+Shift+Delete (on Windows/Linux) or Cmd+Shift+Delete (on Mac). This opens a dialog to clear browsing data.
    Hard Refresh: To bypass the cache for a single page load, use Ctrl+F5 or hold Shift while clicking the reload button.

    How do I disable caching temporarily?

    You can temporarily disable caching in your browser’s Developer Tools for development or debugging.
    Press F12 (or right-click and “Inspect”) to open Developer Tools.
    Go to the “Network” tab.
    Check the box labeled “Disable cache”.
    The browser will not use its cache for that tab as long as the Developer Tools window is open.

    How do I cache third-party scripts?

    You cannot directly control the cache headers for scripts hosted on third-party servers (like Google Analytics, Facebook Pixel, or Google Fonts). Their servers determine the cache policy. This is a common reason why performance tools still show a “leverage browser caching” warning. Hosting those scripts on your own server is the only way to fix this. However, you are responsible for manually updating them, which can be a maintenance and security risk. For most users, it is safe to ignore caching warnings related to these major third-party scripts.

  • How to Install New Relic Monitoring on RunCloud

    How to Install New Relic Monitoring on RunCloud

    What if you could spot and fix critical errors in your PHP application before your users even notice?

    If you manage a PHP application on a RunCloud server, integrating a powerful monitoring tool is the fastest way to identify performance bottlenecks and eliminate bugs. New Relic provides an all-in-one solution for both server and application monitoring that offers a single dashboard to view resource usage, analyze logs, and track application health.

    In this step-by-step guide, we will show you exactly how to integrate New Relic with your server to begin monitoring your PHP applications, so you can spend less time debugging and more time building.

    Let’s dive right in!

    Steps to Integrate New Relic on Ubuntu Servers to Monitor PHP Applications

    In this section, we will provide step-by-step instructions for RunCloud users to manage and monitor their server infrastructure, logs, and data using New Relic.

    Prerequisite: Sign Up For a New Relic Account

    Before we can install New Relic on your server, you’ll need to create a New Relic account. Don’t worry about any paid plans, the free plan is perfectly sufficient for the purposes of this tutorial.

    Step 1: Select Monitoring Method

    After logging in to your New Relic account and selecting “Integrations & Agents” > “Data source”, you will be prompted to choose your data collection method. To monitor your RunCloud servers, select the “On a host (tar archive)” button. This is a generic installation that is highly compatible with various server setups.

    New Relic Dashboad

    Step 2: Enter Your Credentials

    You will need to provide your New Relic license key and user key. These keys link the monitoring agent to your account. Enter the required keys in the respective fields to proceed. If you don’t have the keys, click the “Create a new key” button.

    Suggested read: How to monitor web app and CPU Usage

    Step 3: Check Prerequisites

    Before installation, verify your server’s installed PHP version, as New Relic supports multiple versions. Run the provided command to check your PHP installation and ensure compatibility. RunCloud servers support multiple PHP versions, and you can find the location of your PHP installation by reading the PHP Cheat Sheet.

    Step 4: Download the Tar Distribution

    Run the provided command in your SSH terminal to find the appropriate tar archive for your server’s operating system. The file should be named something like newrelic-php5-11.10.0.24-linux.tar.gz.

    Enter the file’s name in the provided textbox, which will automatically generate a curl command that you can execute on your server to download the file.

    Step 5: Install the PHP Agent

    Once the download is complete, execute the provided command on the next page to perform the following steps:

    1. Decompress the downloaded tar archive.
    2. Change the directory to the newly created folder.
    3. Run the installation script with your New Relic credentials.

    Step 6: Configure the PHP Agent

    To properly link your application with New Relic, you must configure the agent:

    1. Name your application: Use the same name as your web application. This allows New Relic to automatically find the correct php-fpm process.
    2. Configure the agent: Run the provided newrelic-install script with your application name. This command will configure all PHP apps on your host to report to a single APM entity unless you configure them separately.

    Step 7: Restart Your Application

    You must restart your web server services for the configuration changes to take effect.

    1. Restart your services: Use the appropriate command for your server setup, for instance, systemctl restart php82rc-fpm for PHP 8.2 FPM.
    2. Send data to New Relic: To manually initialize the agent and ensure it starts sending data, run the command php -r 'phpinfo(INFO_GENERAL);'.

    Step 8: Optional – Connect Logs and Infrastructure

    You can connect infrastructure metrics and logs to get a comprehensive view of your server. Run the provided curl command to install the necessary components. If you have already performed this step for another web application on the same server, you can skip it.

    Step 9: Test the Connection

    After completing the installation and configuration, test the connection to verify that your agents are reporting correctly to New Relic. The status for the PHP agent should show “Successful,” which indicates that the agent is installed correctly.

    Reviewing New Relic Dashboard

    And that’s it – you’re all set! Your New Relic account will now be collecting data and monitoring your server. You should be able to see your server metrics, along with any additional monitors that you have installed in the New Relic dashboard.

    If you have a general purpose web application then you can track its metrics in the “APM & Services” section. There you can see error rates, logs and set alerts to notify you in case of a failure.

    If you are running a website then you can take advantage of “Browser” monitoring functionality, which tracks your website’s Core Web Vitals.

    And then, once you’ve successfully logged in – run the installation command provided in New Relic’s dashboard which will look something like this:

    After Action Report

    Using a server monitoring platform such as New Relic will allow you to quickly identify and resolve issues that affect your website’s performance. You can set up real-time monitoring and alerts to proactively assess potential problems that can cause downtime.

    Integrating New Relic with RunCloud can provide you with invaluable insights into your server’s performance and help you optimize it for better speed and reliability. By following the above steps you can easily set up New Relic to monitor your server’s metrics, including CPU usage, memory consumption, and network traffic.

    Not a fan of managing your own servers?

    This is exactly why we built RunCloud.

    Painless server configuration that automates all of this so you don’t need to spend hours figuring it out – get started with RunCloud today & get up and running in minutes.

    Have any other questions, or already using New Relic to monitor your web applications? Let us know & join the conversation by leaving a comment below. 💬

    New Relic and RunCloud FAQs

    How do I restart the correct PHP-FPM service on my RunCloud server?

    On a RunCloud server, PHP-FPM services are named according to their version, such as php82rc-fpm for PHP 8.2. To restart the correct service, use the command sudo systemctl restart phpXXrc-fpm, replacing XX with your specific PHP version number.

    Where can I find my New Relic license and user keys?

    Your New Relic license and user keys are provided during the guided installation process within your New Relic account. You can also find your license key under ‘API keys’ in your account settings.

    Do I need to connect infrastructure and logs if I only want to monitor my application’s performance?

    While not strictly required for application performance monitoring (APM), connecting your infrastructure and logs is highly recommended. Correlating your application’s performance with server metrics like CPU usage and memory provides a more complete picture, which helps in diagnosing issues more effectively.

    How can I confirm that the New Relic agent installation was successful?

    After completing all the installation steps, you can use the “Test connection” feature in the New Relic setup guide. The PHP agent’s “Successful” status confirms that it is properly configured and will report data to your account.

    Why should I use New Relic to monitor my RunCloud server?

    New Relic provides powerful performance monitoring and observability for your applications and server infrastructure. Integrating it with your RunCloud-managed server lets you gain deep insights into your PHP application’s performance, track down errors, and monitor server health to ensure optimal operation.

  • How to Migrate Your Server with (Near) Zero Downtime

    How to Migrate Your Server with (Near) Zero Downtime

    Server migration doesn’t have to be stressful. Whether you’re upgrading hardware, switching providers, or changing location, the process should be strategic, not risky.

    Server migrations are necessary for any growing application to move to more powerful hardware, a better network, or a more strategic geographic location. However, this migration often requires some downtime to move things over successfully.

    At RunCloud, we believe migrating your entire infrastructure shouldn’t be a gamble. It should be a strategic, controlled, and predictable process.

    In this guide, we’ll provide you with step-by-step instructions for moving your servers with minimal, and in many cases, virtually zero, user-facing downtime.

    Let’s get started!

    Phase 1: Preparing For Server Migration

    You might already know this, but the key to a successful migration is 90% preparation. Rushing this phase is the single most common cause of failure. Follow the steps below to start the migration process:

    Configure DNS TTL

    Your Domain Name System (DNS) records are the internet’s address book. When users type your-app.com, DNS tells their browser which server IP to connect to. Most computers store this information for an extended period to avoid making the same requests repeatedly. This isn’t a problem as these records are seldom updated. However, you will need to update these records when migration starts.

    Therefore, at least one week before your planned migration, you must lower the Time-To-Live (TTL) value on your relevant DNS records (typically the ‘A’ record for your domain and subdomains). The TTL tells resolvers how long to remember the IP address before asking for it again. A standard TTL might be 24 hours; you want it as low as possible for a migration.

    Set your TTL to the lowest value your provider allows. On platforms like Cloudflare, the minimum is 2 minutes (120 seconds). This ensures that when you finally “flip the switch,” the global change will propagate with incredible speed, minimizing the window where some users might still be directed to the old server.

    For more information, we recommend reading our blog post, “How to Speed Up DNS Propagation”.

    Exception for Cloudflare Proxy Users: It is important to note that if you are using Cloudflare’s orange-cloud proxy service (not the “DNS Only” grey-cloud mode), this step is unnecessary. Because all traffic is already routed through Cloudflare’s network, they control the IP change internally. When you update the IP in your Cloudflare dashboard, the change is virtually instantaneous for your users.

    Create New Server Environment

    Before you can move your data, you must build an identical environment on the new server. This can sometimes take significant effort as manually installing NGINX/Apache, multiple PHP versions, Redis, Supervisor, and editing configurations can be challenging.

    This is precisely where RunCloud transforms a multi-day headache into a few clicks.

    1. Provision Your New Server: Get a fresh server from your favorite provider (DigitalOcean, AWS, Vultr, etc.).
    2. Connect to RunCloud: Instead of SSH’ing in and running complex setup scripts, you simply connect your new server to your RunCloud account. RunCloud automatically installs and configures a highly optimized server stack (your choice of NGINX or OpenLiteSpeed, MariaDB, multiple PHP versions, Redis, Memcached, and more).

    If you want step-by-step instructions for this process, refer to our help documentation article that outlines the getting-started process. Once the core server is ready, you will need to recreate the application-specific environments on the server.

    If you have several web applications, manually creating each one, along with their specific PHP versions, system users, databases, and cron jobs, is tedious and prone to human error.

    Using RunCloud, you can compile a complete list of your web applications, database names, and cron jobs. You can then loop through that list and execute API calls to replicate the entire structure on your new server.

    If you want to learn more, refer to our official documentation, where we explore how to automate and build web applications with the RunCloud API.

    Phase 2: Copying Files and Databases to the New Server

    After creating a replica of your environment on the new server, it’s time to move the actual data.

    Syncing Web Application Files with rsync

    We have already written an in-depth article that explains 3 Free Ways To Migrate WordPress From Shared Hosting To Cloud Server, but if you are in a hurry, then you can use rsync, which is a powerful and versatile command-line utility designed for efficiently synchronizing files and directories between two locations.

    Initial Sync: You will perform an initial, comprehensive sync of your web application files from the old server (Server A) to the new one (Server B). A typical command looks like this:

    rsync -avz /old/path/ user@new-server-ip:/home/runcloud/webapps/my-app/

    Let’s understand the different options in the above command:

    • -a (archive mode): This option creates an archive of the source.
    • -v (verbose): This flag tells rsync to give you detailed output. As it runs, it will list every file being transferred, which is extremely helpful for monitoring progress and diagnosing issues. You might remove this flag for a cron job to keep logs clean.
    • -z (compress): This instructs rsync to compress the file data before sending it across the network. The destination server then uncompresses it. This significantly reduces network bandwidth usage and can dramatically speed up the transfer, especially for text-based files like code (PHP, HTML, CSS, JS).
    • --delete (optional): This option is useful for creating a perfect mirror. It tells rsync to delete any file from the destination directory if that file does not exist in the source directory. This is essential for a clean migration, as it removes old temporary files, logs, or user-uploaded content that has since been deleted from the live site.

    ⚠️ Word of Caution: Use the –delete flag with care. Always double-check that your source and destination paths are correct. If you accidentally reverse them, this flag would wipe out your source directory!

    • The destination path: user@new-server-ip:/home/runcloud/webapps/my-app/ specifies where the files should be sent. It’s composed of these parts:
      • user: The username on the new server that has permission to write to the destination directory.
      • new-server-ip: The IP address (or a resolvable hostname) of the new server you are migrating to.
      • The colon (:) is the separator that divides the remote user/host information from the file path on that remote machine.
      • /home/runcloud/webapps/my-app/: This is the absolute path on the destination server where the files will be placed.

    If your web application has frequent file uploads or changes, it is possible that its data will change by the time the migration is finished. In this case, you can set up a cron job on your old server to run this rsync command incrementally (e.g., every 5 or 10 minutes). rsync is incredibly efficient and will only transfer the files that have changed, keeping the new server’s content almost perfectly in sync with the old one.

    Database Migration

    This is the most sensitive part of the migration. A mistake here can lead to data loss. The goal is to get a live, real-time copy of the database running on the new server before the final cutover. The strategy you choose will depend entirely on the size of your database and how frequently it is updated.

    Method 1: The Classic Dump and Import (For Simple Sites)

    The simplest way is often the best for websites with minimal data or where content and user activity are infrequent. You can use the built-in mysqldump command to export your entire database into a single .sql file. You can then run the provided command on the new server to import this data.

    This method is very useful if you have minimal data. To transfer the exported file, you can even use rsync to make a fast and reliable copy. This approach is perfectly acceptable when the risk of new data being written between the time you export and import the database on the new server is very low.

    Method 2: Live Replication for Active, High-Traffic Sites

    If you are running a busy e-commerce store or an active community forum, then the classic dump-and-import method might not be suitable. The database might get updated several times in the window it takes to move the SQL dump to the new server and restore it. This gap will inevitably lead to lost transactions and customer data.

    A word of extreme caution: while you might be tempted to rsync your raw MySQL/MariaDB data directory, this is extremely dangerous for a live database and will almost certainly lead to corruption. Copying the core database files while the service is running will result in an inconsistent, broken state on the destination server.

    The recommended method to migrate the database is by establishing Master-Slave (or Primary-Replica) Replication. This process creates a live, continuously updating mirror of your database on the new server. Here’s how it works conceptually:

    1. Setup: Configure your old database server (Server A) as the “Master” and your new database server (Server B) as the “Slave”.
    2. Initial Data Dump: You’ll take a consistent snapshot of the master database that captures the precise replication position from the server’s binary log.
    3. Start Replicating: After importing this initial dump onto the slave server, you instruct it to connect to the master and begin replicating from the captured position. From this point forward, any change made to the database on Server A (new users, blog posts, sales orders) is automatically and instantly copied to the database on Server B.
    Master slave configuration for database migration

    This leaves you with a live, read-only, up-to-the-second copy of your production data on the new server.

    The complete, step-by-step process of setting up database replication is a detailed technical procedure and is out of scope for this article. However, we strongly recommend you read:

    Database Migration for AWS Users

    If your servers are within the AWS ecosystem, you can consider using the AWS Database Migration Service (DMS). It acts as an intermediary that connects to your source and destination databases. DMS handles the initial load and then captures ongoing changes (Change Data Capture – CDC) to keep the two in continuous sync.

    Migrating Custom Configurations

    After migrating the files, you need to check:

    • If you have added a custom NGINX include file to handle special redirects.
    • If you modified your php.ini file to increase memory limits or execution times for a demanding script

    These small, often-overlooked configuration files are the unique DNA of your server’s behavior; they are vital and must be moved to the new server to ensure your applications function correctly after the migration.

    This is where the benefit of a standardized environment provided by RunCloud becomes incredibly clear.

    On a manually configured server, these critical files can be scattered across numerous directories, making finding and backing them up a tedious and error-prone scavenger hunt.

    RunCloud eliminates this chaos by providing a user-friendly GUI-based dashboard for all your custom configurations. This standardization makes your custom files easy to locate, backup, and copy to the identical path on your new server, guaranteeing a consistent environment and ensuring that the nuanced rules that make your application work perfectly are never left behind.

    You can refer to the following documentation articles to quickly configure your new server environment and set custom configurations:

    1. Changing PHP Memory Limit
    2. Enable or Disable PHP Functions
    3. Set NGINX Reverse Proxy
    4. Configure CORS on NGINX
    5. How to Configure NGINX Log Rotation

    RunCloud empowers you with the flexibility to manage your server through either our intuitive graphical dashboard for individual tasks or our powerful API for mass automation.

    For example, changing a single site’s PHP version is a simple click in the dashboard, while using the API allows you to programmatically update the PHP version for all your applications at once, ensuring you always have the most efficient tool for the job.

    Phase 3: Flipping the Migration Switch for a Seamless Cutover

    If you have followed all the steps, the final switch should be simple and controlled if everything has been set up properly. Once you are ready to migrate, follow the steps below:

    1. Initiate Maintenance Mode (Optional, But Recommended): Briefly put your application on the old server in “maintenance mode”. This prevents new data from being written in the final minutes before the switch, ensuring 100% data integrity. Read our article on How to Temporarily Disable Your Web App or Show a Maintenance Page to learn more.
    2. Perform a Final Sync: Run your rsync command one last time to catch any last-second file changes.
    3. Promote the New Database: If replication is used, this is the most important step. You will stop the replication process and promote your “Slave” database on Server B to be the new “Master”. It is now the primary, writable database.
    4. Update Application Configurations: Point your application’s configuration file to the new server to use the local database (localhost). At this point, you will ensure that the applications on the new server can use the new database to make requests.
    5. The DNS Switch: Finally, you will need to go to your DNS provider (e.g., Cloudflare) and change the IP address in your ‘A’ record from the old server’s IP to the new server’s IP. After the DNS records are updated, your new website should be automatically visible to your visitors, as the new site’s maintenance mode was never enabled.
    6. Verify: Thanks to your low TTL, the change should occur within minutes. Start testing your domain. Check that it resolves to the new IP and that the application is fully functional.
    7. Decommission: Do not shut down the old server immediately! Leave it running for 24-48 hours as a safety net. Once you are confident that the new server is stable and handling all traffic, you can safely power down and delete the old server.

    After Action Report

    This article explains why server migration is a complex dance of DNS, environment replication, data synchronization, and precise timing. While the process requires careful planning, the right tools can eliminate most of the manual labor and risk.

    RunCloud is designed to make this process easier.

    We automate the most complex and error-prone aspects of server setup and configuration so that you can focus on your code. Here’s how:

    • We provide a powerful API that allows you to script the recreation of your entire application infrastructure.
    • We offer a stable, secure, and predictable environment in which you can confidently perform the sensitive data synchronization steps.
    • We make it easy to test changes by creating a WordPress staging environment with a single click.

    Want to make migrations less painful? Try RunCloud for easier, automated server management.

    Frequently Asked Questions (FAQ) for Server Migration

    Is a zero-downtime server migration possible?

    While achieving zero downtime is technically challenging, a “near-zero” downtime migration is achievable with proper planning. By synchronizing files and databases in real-time before the final DNS switch and using a very low DNS TTL, the cutover period can be reduced to just a few minutes.

    Why should I lower my DNS TTL before a server migration?

    Lowering your DNS Time-To-Live (TTL) value a week before migration is an important preparatory step. A low TTL, such as 2 minutes, tells web browsers and resolvers to check for your server’s IP address more frequently, ensuring that when you finally point your domain to the new server, the change spreads across the internet rapidly.

    How can I move a live MySQL database with minimal downtime?

    The safest and most effective method for moving a live MySQL or MariaDB database is establishing master-slave (or primary-replica) replication. This technique creates a perfect, real-time, synchronized copy of your database on the new server while the old one remains active. This allows you to instantly switch to a fully up-to-date database on migration day, preventing data loss.

    What is the safest way to copy website files to a new server?

    The industry-standard tool for safely copying website files is rsync, a command-line utility that efficiently synchronizes directories. For a minimal downtime migration, you should perform an initial full sync and then set up a cron job to run rsync incrementally. This ensures that any last-minute file changes on the old server are automatically copied to the new server right up until the final cutover.

    How does RunCloud make server migration easier?

    RunCloud dramatically simplifies server migrations by automating the most tedious and error-prone step: setting up the new server. Instead of manually installing and configuring NGINX, PHP, and databases, RunCloud provides an optimized, secure server that can be installed in minutes. Furthermore, its powerful API allows you to programmatically recreate all your web applications and cron jobs, saving dozens of hours of manual work.

    Do I need to change my DNS TTL if I use Cloudflare’s proxy (orange cloud)?

    No, you do not need to manually lower your DNS TTL if you use Cloudflare’s proxy service (the “orange cloud”). Because all your traffic is routed through Cloudflare’s network, they handle the IP address switch internally. When you update the IP in your Cloudflare dashboard, their system propagates the change to your users almost instantaneously.