Building a VPS with WordPress on a LEMP Stack
This guide shows how to cost-effectively host small WordPress sites using a self-managed VPS and a LEMP stack, achieving performance comparable to managed WordPress hosting. While managed services like WP Engine offer convenience, they can be expensive (starting around $30/month). This approach offers a viable alternative for users comfortable with basic server administration.
Key Benefits:
- Affordable WordPress hosting.
- Performance matching managed hosting solutions.
- Control over your server environment.
Setting up Your DigitalOcean VPS:
This tutorial uses DigitalOcean, but Linode, Vultr, and others are equally suitable. The steps are largely the same regardless of provider.
-
Create a DigitalOcean account at https://www.php.cn/link/1be9573be51135cd5be1e191f44e09f8.
-
Create a Droplet (VPS) using these recommended settings:
- Hostname: A descriptive name (e.g., your company name).
- Image: Ubuntu 14.04 x64 (default).
- Size: The $5/month option (512 MB RAM, 1 CPU, 20 GB SSD, 1000 GB transfer) is a good starting point.
- Region: Choose a region close to your target audience.
- Backups: Enable this for data protection.
-
Note the IP address and root password (sent via email).
Accessing Your VPS via SSH:
-
Windows: Use PuTTY. Enter the IP address, select SSH, and connect. Accept the security alert. Log in as
root
using the emailed password. -
macOS: Use Terminal. Execute
ssh root@<ip_address></ip_address>
. Accept the server key and enter your password.
Change the root password immediately for enhanced security.
Installing and Configuring the LEMP Stack:
- Update the package manager:
sudo apt-get update
- Install the LEMP stack:
sudo apt-get install nginx mysql-server php5-fpm php5-mysql php5-curl php5-gd php5-cgi
- Configure MySQL: Set a strong root password, remove anonymous users, disallow remote root login, remove the test database, and reload privilege tables using
sudo mysql_install_db
,sudo mysql_secure_installation
. Create a dedicated WordPress database and user (e.g.,wordpress
database,wordpress
user) with a strong password. The commandmysql -u root -p
will allow you to interact with the mysql command line. - Configure PHP: Edit
/etc/php5/fpm/php.ini
and setcgi.fix_pathinfo=0
. - Configure nginx: Replace the default nginx configuration (
/etc/nginx/sites-available/default
) with a configuration tailored for WordPress, ensuring you replacedomain.com
with your actual domain name. The provided configuration includes gzip compression and caching for static assets. - Create a non-root user for WordPress (
sudo adduser wordpress
) and add it to thewww-data
group (sudo usermod -a -G wordpress www-data
). Change the PHP-FPM user towordpress
in/etc/php5/fpm/pool.d/www.conf
. - Restart the server:
reboot
Installing WordPress:
- Download and install WordPress using
cd /usr/share/nginx; wget http://wordpress.org/latest.tar.gz; tar xfz latest.tar.gz; mv wordpress/* ./; rm latest.tar.gz; rmdir wordpress
. - Set appropriate file permissions:
sudo chmod g w /usr/share/nginx -R; sudo chown -R wordpress:www-data /usr/share/nginx
- Access the WordPress installation via your browser using the server's IP address. Complete the installation process.
Post-Installation: Regularly update WordPress, themes, and plugins. Use strong passwords, security plugins, backups, and performance monitoring for optimal security and performance. Multiple WordPress sites can be hosted on a single VPS using nginx virtual hosts. The FAQ section addresses common questions about security, optimization, and troubleshooting.
The above is the detailed content of Building a VPS with WordPress on a LEMP Stack. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Blogs are the ideal platform for people to express their opinions, opinions and opinions online. Many newbies are eager to build their own website but are hesitant to worry about technical barriers or cost issues. However, as the platform continues to evolve to meet the capabilities and needs of beginners, it is now starting to become easier than ever. This article will guide you step by step how to build a WordPress blog, from theme selection to using plugins to improve security and performance, helping you create your own website easily. Choose a blog topic and direction Before purchasing a domain name or registering a host, it is best to identify the topics you plan to cover. Personal websites can revolve around travel, cooking, product reviews, music or any hobby that sparks your interests. Focusing on areas you are truly interested in can encourage continuous writing

WordPress is easy for beginners to get started. 1. After logging into the background, the user interface is intuitive and the simple dashboard provides all the necessary function links. 2. Basic operations include creating and editing content. The WYSIWYG editor simplifies content creation. 3. Beginners can expand website functions through plug-ins and themes, and the learning curve exists but can be mastered through practice.

Do you want to know how to display child categories on the parent category archive page? When you customize a classification archive page, you may need to do this to make it more useful to your visitors. In this article, we will show you how to easily display child categories on the parent category archive page. Why do subcategories appear on parent category archive page? By displaying all child categories on the parent category archive page, you can make them less generic and more useful to visitors. For example, if you run a WordPress blog about books and have a taxonomy called "Theme", you can add sub-taxonomy such as "novel", "non-fiction" so that your readers can

Recently, we showed you how to create a personalized experience for users by allowing users to save their favorite posts in a personalized library. You can take personalized results to another level by using their names in some places (i.e., welcome screens). Fortunately, WordPress makes it very easy to get information about logged in users. In this article, we will show you how to retrieve information related to the currently logged in user. We will use the get_currentuserinfo(); function. This can be used anywhere in the theme (header, footer, sidebar, page template, etc.). In order for it to work, the user must be logged in. So we need to use

There are four ways to adjust the WordPress article list: use theme options, use plugins (such as Post Types Order, WP Post List, Boxy Stuff), use code (add settings in the functions.php file), or modify the WordPress database directly.

In the past, we have shared how to use the PostExpirator plugin to expire posts in WordPress. Well, when creating the activity list website, we found this plugin to be very useful. We can easily delete expired activity lists. Secondly, thanks to this plugin, it is also very easy to sort posts by post expiration date. In this article, we will show you how to sort posts by post expiration date in WordPress. Updated code to reflect changes in the plugin to change the custom field name. Thanks Tajim for letting us know in the comments. In our specific project, we use events as custom post types. Now

One of our users asked other websites how to display the number of queries and page loading time in the footer. You often see this in the footer of your website, and it may display something like: "64 queries in 1.248 seconds". In this article, we will show you how to display the number of queries and page loading time in WordPress. Just paste the following code anywhere you like in the theme file (e.g. footer.php). queriesin

Can learn WordPress within three days. 1. Master basic knowledge, such as themes, plug-ins, etc. 2. Understand the core functions, including installation and working principles. 3. Learn basic and advanced usage through examples. 4. Understand debugging techniques and performance optimization suggestions.
