WordPress on serverplus in 10 minutes
You can get a WordPress site running on a serverplus VPS in literally 10 minutes. Below are two paths: via Docker Compose (the fastest and cleanest) and the classic LEMP stack (nginx + PHP + MariaDB) if you want to do everything "by hand". Plus a domain, free SSL and basic protection.
What you will need
- A serverplus VPS: to start, 1–2 vCPU, 2 GB RAM and 20+ GB of disk are enough. Disk type —
ssd-universal(a good balance for the site and the database). - OS: Ubuntu 24.04 LTS (or 22.04 LTS) — the recommended option.
- A domain (preferably) — to enable HTTPS. You will need access to the domain's DNS.
- SSH access to the server (via a key).
WordPress requirements (current). PHP 8.3+, MariaDB 10.6+ or MySQL 8.0+, HTTPS. Both methods below already account for these versions.
Method 1 — Docker Compose (fast and clean)
WordPress and the database come up with two files and a single command. Nothing "litters" the system, and it is easy to move and update.
1. Install Docker
# official Docker install script curl -fsSL https://get.docker.com | sudo sh # check sudo docker version
2. Create the project
mkdir -p ~/wordpress && cd ~/wordpress
Create a .env file with passwords (replace with your own, strong ones):
MYSQL_ROOT_PASSWORD=change_me_root MYSQL_DATABASE=wordpress MYSQL_USER=wp_user MYSQL_PASSWORD=change_me_strong
Create docker-compose.yml:
services: db: image: mariadb:11 restart: always environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - db_data:/var/lib/mysql wordpress: image: wordpress:php8.3-apache restart: always depends_on: - db ports: - "80:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: ${MYSQL_DATABASE} WORDPRESS_DB_USER: ${MYSQL_USER} WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD} volumes: - wp_data:/var/www/html volumes: db_data: wp_data:
3. Start it
sudo docker compose up -d # container status sudo docker compose ps
Open http://your_server_IP in a browser — you will see the WordPress setup wizard. Done; next is the "First login" section.
Firewall. Open the needed ports:
sudo ufw allow OpenSSH,sudo ufw allow 80,sudo ufw allow 443, thensudo ufw enable.
Method 2 — Classic LEMP (nginx + PHP + MariaDB)
If you prefer to install the components directly into the system. Commands are for Ubuntu 24.04.
1. Packages
sudo apt update sudo apt install -y nginx mariadb-server \ php-fpm php-mysql php-gd php-xml php-mbstring php-curl php-zip
2. Database
sudo mysql_secure_installation # set the root password, answer Y to the questions sudo mysqlCREATE DATABASE wordpress CHARACTER SET utf8mb4; CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'change_me_strong'; GRANT ALL ON wordpress.* TO 'wp_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
3. WordPress files
cd /tmp && curl -O https://wordpress.org/latest.tar.gz tar xzf latest.tar.gz sudo cp -r wordpress /var/www/mysite sudo chown -R www-data:www-data /var/www/mysite
4. nginx site
Create /etc/nginx/sites-available/mysite (replace the domain and PHP-FPM version if needed):
server { listen 80; server_name example.com www.example.com; root /var/www/mysite; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; } }sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
Then open the site by domain/IP and go through the setup wizard.
Domain and DNS
For the site to open by domain and for HTTPS to work, point the domain at the server's IP:
- A record
@→ your VPS IP. - A record
www→ the same IP (or a CNAME to the main domain).
A DNS update can take from a few minutes to a couple of hours. Check: dig +short example.com.
Free SSL (HTTPS) in a minute
Once the domain points at the server, enable HTTPS with a Let’s Encrypt certificate via certbot.
For LEMP (nginx)
sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d example.com -d www.example.com
Certbot will write HTTPS into the nginx config itself and set up auto-renewal.
For the Docker method. The easiest is to add a reverse proxy with automatic TLS in front of WordPress (for example Caddy or Nginx Proxy Manager) — it issues and renews the certificate itself. Or install certbot on the host and proxy to the container's port.
First login and basic setup
- Open the site → WordPress wizard: choose the language, set the site name, the admin login (not
admin!) and a strong password. - Go to
/wp-admin→ "Settings" → set the correct site address (withhttps://). - Delete demo content and unnecessary themes/plugins, install the theme you need.
- Configure "Permalinks" (pretty URLs) in "Settings → Permalinks".
Basic protection
- Do not use the login
adminand come up with a long password; enable two-factor authentication with a plugin. - Update everything: the WordPress core, themes and plugins — most hacks go through outdated plugins.
- Install plugins only from trusted sources and remove unused ones.
- Firewall and SSH: outward — only 80/443 and SSH; log in over SSH by key, not by password.
- Backups: keep backups separate from the server (a snapshot + upload to serverplus S3 object storage).
- HTTPS is mandatory — it is both security and a plus for SEO.
Updates and backups
Docker method — updating images:
cd ~/wordpress sudo docker compose pull sudo docker compose up -d
Backup (Docker): save the volumes with files and a dump of the database:
# database dump sudo docker compose exec db \ sh -c 'mariadb-dump -u root -p"$MYSQL_ROOT_PASSWORD" wordpress' > wp-db.sql
The files (the wp-content directory with themes/plugins/uploads) and the database dump are all you need to restore. Keep them in S3 or on a separate server.
FAQ
Which method should I choose — Docker or LEMP?
For a quick and tidy start — Docker Compose: easier to install, update and move. Choose LEMP if you need full control over the configuration or are more used to it.
Is a minimal VPS enough?
For a small site/blog — yes: 1–2 vCPU and 2 GB RAM. For load and many plugins add RAM and take ssd-universal or nvme-fast for the database.
Can I do without a domain?
For testing — yes, by IP. But a real site needs a domain: without it you cannot issue SSL, and HTTPS is mandatory today.
How do I speed up the site?
A caching plugin, image optimization, a fresh PHP version (8.3+) and an ssd-universal/nvme-fast disk for the database. For traffic — a CDN.
The site does not open after installation.
Check the firewall (80/443 open), that the containers/services are running (docker compose ps or systemctl status nginx php8.3-fpm), and that DNS points to the right IP.