Optimizing an Ubuntu server is a critical step for ensuring stability, security, and peak performance. Here is a general tutorial on how to best configure your server. ----- ### 1\. Update Your System Always start by ensuring your system is up to date with the latest security patches and software versions. ```bash sudo apt update sudo apt upgrade -y ``` ----- ### 2\. Security Securing your server is a top priority to prevent unauthorized access. * **Secure SSH:** Change the default SSH port (22) to a random, non-standard port. It's also highly recommended to disable root login and use key-based authentication instead of passwords. ```bash sudo nano /etc/ssh/sshd_config ``` Modify these lines: * `Port 22` to `Port ` * `PermitRootLogin yes` to `PermitRootLogin no` * `PasswordAuthentication yes` to `PasswordAuthentication no` * **Set Up a Firewall (UFW):** Enable the firewall and only open the ports you need for your services. ```bash sudo ufw allow ssh # or your new SSH port sudo ufw allow http sudo ufw allow https sudo ufw enable ``` ----- ### 3\. Performance Optimize your server's performance based on the services it will run. #### For a Web Server (LAMP/LEMP Stack) * **PHP OPcache:** This is one of the most important steps for PHP performance. Ensure it's enabled and configured to your site's needs. * **Web Server Fine-Tuning:** Optimize your web server (Nginx or Apache). For Nginx, you can adjust the number of worker processes. For Apache, you can tune `MaxRequestWorkers` and other settings. * **Database (MySQL/MariaDB):** Fine-tune database cache settings like `innodb_buffer_pool_size`. A good rule of thumb is to allocate 50-70% of your total RAM to this setting. #### General Server Performance * **Enable Zram:** Zram creates a compressed block device in RAM, which significantly improves the speed of swap space and reduces I/O load. ```bash sudo apt install zram-tools ``` * **Optimize `sysctl`:** Adjust kernel parameters for better network performance. This can tune the TCP stack for higher throughput. ```bash sudo nano /etc/sysctl.conf ``` Add the following lines for network optimization: ```ini net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_max_syn_backlog = 65536 ``` ----- ### 4\. Monitoring Monitor your server to identify bottlenecks. Tools like **`top`**, **`htop`**, **`nmon`**, or **Grafana** can help you keep an eye on CPU, memory, and I/O usage, allowing you to make further optimizations where needed.