Polish guide.md for absolute beginners (iteration 2)
- Add "What You're Building" intro step explaining WordPress and what users will end up with, plus a pre-flight checklist - Add Debian 12 to supported OS choices - Fix broken Porkbun registrar link - Explain terminal concepts: cd, ~, dig +short - Break down intimidating password reset command with worked example - Add "Going Further" step with next ideas (offsite backups, contact forms, SEO, CDN, learning resources) - Add "what does success look like" description after first visit - Clarify SSH reconnection instructions in maintenance section - Add dig fallback for systems without dig installed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
90
guide.md
90
guide.md
@@ -7,6 +7,29 @@ time: 45 minutes
|
|||||||
prerequisites: A credit card for VPS hosting ($3.50-6/month), A domain name ($1-12/year)
|
prerequisites: A credit card for VPS hosting ($3.50-6/month), A domain name ($1-12/year)
|
||||||
---
|
---
|
||||||
|
|
||||||
|
[step: What You're Building]
|
||||||
|
|
||||||
|
By the end of this guide, you'll have a **fully working website** that:
|
||||||
|
|
||||||
|
- Lives on a server **you** control (not Squarespace, Wix, or WordPress.com)
|
||||||
|
- Has a **free SSL certificate** (the padlock icon that means your site is secure)
|
||||||
|
- Runs [WordPress](https://wordpress.org/) — the same software that powers over 40% of all websites on the internet
|
||||||
|
- Includes **automatic backups**, a **security firewall**, and optional **age verification**
|
||||||
|
- **Costs only $3.50-6/month** for hosting (plus ~$10/year for a domain name)
|
||||||
|
|
||||||
|
[WordPress](https://wordpress.org/) is a free, open-source website builder. You manage your site through a visual dashboard in your browser — adding pages, uploading images, writing posts, and changing the design. No coding required.
|
||||||
|
|
||||||
|
WebsiteBox packages WordPress with all the security, backups, and server configuration already done for you. You just answer a few questions and your site is live.
|
||||||
|
|
||||||
|
**What you'll need before starting:**
|
||||||
|
|
||||||
|
- A **credit or debit card** to rent a server ($3.50-6/month)
|
||||||
|
- A **domain name** — the address for your website (e.g., `myportfolio.com`). If you don't have one yet, you'll buy one in Step 2 (~$1-12/year).
|
||||||
|
- About **45 minutes** of time
|
||||||
|
- A **computer** with internet access (Mac, Windows, or Linux — any will work)
|
||||||
|
|
||||||
|
That's it. No technical background needed. This guide walks you through every single step.
|
||||||
|
|
||||||
[step: Get a Server]
|
[step: Get a Server]
|
||||||
|
|
||||||
Before you can have a website, you need somewhere for it to live. That "somewhere" is a **server** — a computer in a data center that stays on 24/7 so your website is always available to visitors.
|
Before you can have a website, you need somewhere for it to live. That "somewhere" is a **server** — a computer in a data center that stays on 24/7 so your website is always available to visitors.
|
||||||
@@ -25,9 +48,9 @@ All three providers are reliable and will work well. If you're unsure, **BuyVM**
|
|||||||
|
|
||||||
When signing up, you'll be asked to configure your server. Choose these options:
|
When signing up, you'll be asked to configure your server. Choose these options:
|
||||||
|
|
||||||
- **Operating system:** Ubuntu 22.04 or Ubuntu 24.04 (these are versions of Linux, the operating system your server will run — either one works fine)
|
- **Operating system:** Ubuntu 22.04, Ubuntu 24.04, or Debian 12 (these are versions of [Linux](https://en.wikipedia.org/wiki/Linux), the operating system your server will run — any of them work fine, but Ubuntu 22.04 is the most widely documented if you ever need to search for help)
|
||||||
- **Plan size:** At least 1 GB RAM, 2 GB recommended (this is the server's memory — more means better performance)
|
- **Plan size:** At least 1 GB RAM, 2 GB recommended (RAM is the server's working memory — more means better performance when multiple visitors are on your site at once)
|
||||||
- **Server location:** Pick whichever city is geographically closest to where most of your visitors will be
|
- **Server location:** Pick whichever city is geographically closest to where most of your visitors will be (this makes your site load faster for them)
|
||||||
|
|
||||||
After your server is created (usually takes 30-60 seconds), the provider will show you two critical pieces of information:
|
After your server is created (usually takes 30-60 seconds), the provider will show you two critical pieces of information:
|
||||||
|
|
||||||
@@ -249,7 +272,7 @@ This is done by adding a **DNS record** — specifically an **"A record"** — i
|
|||||||
|
|
||||||
**How to do it:**
|
**How to do it:**
|
||||||
|
|
||||||
1. Log in to the website where you bought your domain ([Porkbun](https://porkbun.com/account/domainsSpe498), [Namecheap](https://ap.www.namecheap.com/domains/list/), [Cloudflare](https://dash.cloudflare.com/), etc.)
|
1. Log in to the website where you bought your domain ([Porkbun](https://porkbun.com/), [Namecheap](https://www.namecheap.com/), [Cloudflare](https://dash.cloudflare.com/), etc.)
|
||||||
2. Find your domain and look for **DNS settings**, **DNS records**, or **Manage DNS** — it's usually in the domain's settings page
|
2. Find your domain and look for **DNS settings**, **DNS records**, or **Manage DNS** — it's usually in the domain's settings page
|
||||||
3. Look for an existing A record, or click **Add record** / **Add new record**
|
3. Look for an existing A record, or click **Add record** / **Add new record**
|
||||||
4. Fill in these values:
|
4. Fill in these values:
|
||||||
@@ -271,7 +294,11 @@ Go back to your server terminal (reconnect with `ssh root@YOUR_SERVER_IP` if you
|
|||||||
dig yourdomain.com +short
|
dig yourdomain.com +short
|
||||||
[/code]
|
[/code]
|
||||||
|
|
||||||
Replace `yourdomain.com` with your actual domain. If it shows your server's IP address, you're ready to proceed. If it shows nothing or a different IP, wait a few more minutes and try again.
|
Replace `yourdomain.com` with your actual domain. The `dig` command looks up where a domain points, and `+short` gives you just the IP address without extra technical details.
|
||||||
|
|
||||||
|
- **If it shows your server's IP address** (e.g., `203.0.113.45`) — DNS is ready. Proceed to the next step.
|
||||||
|
- **If it shows nothing, or a different IP address** — DNS hasn't propagated yet. Wait 5-10 more minutes and try again.
|
||||||
|
- **If you see `dig: command not found`** — try `nslookup yourdomain.com` instead, or use the online tool below.
|
||||||
|
|
||||||
[terminal]
|
[terminal]
|
||||||
$ dig myportfolio.art +short
|
$ dig myportfolio.art +short
|
||||||
@@ -291,7 +318,9 @@ cd ~/websitebox
|
|||||||
docker compose up -d
|
docker compose up -d
|
||||||
[/code]
|
[/code]
|
||||||
|
|
||||||
The first command (`cd ~/websitebox`) navigates to the WebsiteBox project folder. The second command (`docker compose up -d`) starts your entire website in the background. The `-d` flag means "detached" — your site keeps running even after you close the terminal.
|
Here's what each part means:
|
||||||
|
- `cd ~/websitebox` — `cd` means "change directory" (like opening a folder). The `~` symbol is a shortcut for your home folder. So this navigates to the WebsiteBox project folder.
|
||||||
|
- `docker compose up -d` — This tells [Docker](https://www.docker.com/) to start all the services that make up your website. The `-d` flag means "detached" — your site keeps running in the background even after you close the terminal window.
|
||||||
|
|
||||||
Here's what happens automatically behind the scenes:
|
Here's what happens automatically behind the scenes:
|
||||||
|
|
||||||
@@ -327,16 +356,20 @@ You should see `[OK]` next to each service.
|
|||||||
|
|
||||||
[step: Visit Your Site]
|
[step: Visit Your Site]
|
||||||
|
|
||||||
Open your web browser (Chrome, Firefox, Safari, etc.) and go to your domain:
|
Open your web browser (Chrome, Firefox, Safari — any browser works) and go to your domain:
|
||||||
|
|
||||||
- **Your website:** `https://yourdomain.com`
|
- **Your website:** `https://yourdomain.com`
|
||||||
- **Admin dashboard:** `https://yourdomain.com/wp-admin`
|
- **Admin dashboard:** `https://yourdomain.com/wp-admin`
|
||||||
|
|
||||||
Replace `yourdomain.com` with your actual domain name.
|
Replace `yourdomain.com` with your actual domain name (e.g., `https://myportfolio.art`).
|
||||||
|
|
||||||
When you visit `/wp-admin`, you'll see the WordPress login page. Enter the **admin username** and **password** you chose during the setup wizard.
|
**What you should see:**
|
||||||
|
|
||||||
If you enabled the **age verification gate**, visitors will see an age confirmation screen before any content. This is working as intended. As the site admin, you'll see it too — just confirm your age to proceed. You can customize the gate's appearance and settings later inside WordPress.
|
When you visit your domain, you'll see a clean, minimal website with your site title. It won't have much content yet — that's expected. You'll add content in the next step.
|
||||||
|
|
||||||
|
If you enabled the **age verification gate**, you'll see an age confirmation screen first. This is working as intended. Confirm your age to proceed to the site. You can customize the gate's appearance and wording later inside WordPress under **Settings > Age Gate**.
|
||||||
|
|
||||||
|
When you visit `/wp-admin`, you'll see the WordPress login page — a simple form asking for a username and password. Enter the **admin username** and **password** you chose during the setup wizard, and you'll land on the WordPress Dashboard — your site's control center.
|
||||||
|
|
||||||
[callout:tip]
|
[callout:tip]
|
||||||
**Bookmark these two URLs:**
|
**Bookmark these two URLs:**
|
||||||
@@ -402,7 +435,7 @@ One of the best things about WebsiteBox is that it takes care of itself. Once yo
|
|||||||
- **Restarts after server reboots** — if your VPS provider reboots the server for maintenance, your site comes back online automatically
|
- **Restarts after server reboots** — if your VPS provider reboots the server for maintenance, your site comes back online automatically
|
||||||
- **Backs up your data** on a regular schedule via [UpdraftPlus](https://updraftplus.com/)
|
- **Backs up your data** on a regular schedule via [UpdraftPlus](https://updraftplus.com/)
|
||||||
|
|
||||||
That said, there are a few simple maintenance tasks worth doing occasionally. All of them require SSHing into your server (Step 3) and running a short command.
|
That said, there are a few simple maintenance tasks worth doing occasionally. All of them require connecting to your server via SSH (same process as Step 3 — open your terminal and run `ssh root@YOUR_SERVER_IP`) and running a short command.
|
||||||
|
|
||||||
**Check that everything is running smoothly:**
|
**Check that everything is running smoothly:**
|
||||||
|
|
||||||
@@ -489,20 +522,28 @@ docker compose restart
|
|||||||
|
|
||||||
**You forgot your WordPress admin password:**
|
**You forgot your WordPress admin password:**
|
||||||
|
|
||||||
No problem — you can reset it from the server. Replace `YOUR_USERNAME` with your actual admin username and `NEW_PASSWORD` with your new desired password:
|
No problem — you can reset it directly from the server terminal. The command is long but straightforward. Just replace two things:
|
||||||
|
- `YOUR_USERNAME` — your WordPress admin username (the one you chose during setup)
|
||||||
|
- `NEW_PASSWORD` — whatever you want your new password to be
|
||||||
|
|
||||||
[code:bash]
|
[code:bash]
|
||||||
cd ~/websitebox
|
cd ~/websitebox
|
||||||
docker compose exec wordpress su -s /bin/sh -c "wp user update YOUR_USERNAME --user_pass='NEW_PASSWORD' --path=/var/www/html" www-data
|
docker compose exec wordpress su -s /bin/sh -c "wp user update YOUR_USERNAME --user_pass='NEW_PASSWORD' --path=/var/www/html" www-data
|
||||||
[/code]
|
[/code]
|
||||||
|
|
||||||
For example, if your username is `janedoe` and you want the password `MyNewSecurePass123`:
|
**Worked example:** If your username is `janedoe` and you want to change your password to `MyNewSecurePass123`, the command would look like this:
|
||||||
|
|
||||||
[code:bash]
|
[code:bash]
|
||||||
cd ~/websitebox
|
cd ~/websitebox
|
||||||
docker compose exec wordpress su -s /bin/sh -c "wp user update janedoe --user_pass='MyNewSecurePass123' --path=/var/www/html" www-data
|
docker compose exec wordpress su -s /bin/sh -c "wp user update janedoe --user_pass='MyNewSecurePass123' --path=/var/www/html" www-data
|
||||||
[/code]
|
[/code]
|
||||||
|
|
||||||
|
After running the command, you can immediately log in at `https://yourdomain.com/wp-admin` with the new password.
|
||||||
|
|
||||||
|
[callout:tip]
|
||||||
|
This command looks complicated, but you don't need to understand how it works — just copy it, swap in your username and new password, and paste it into the terminal. The command reaches inside the WordPress container and uses [WP-CLI](https://wp-cli.org/) (a WordPress command-line tool) to update your password.
|
||||||
|
[/callout]
|
||||||
|
|
||||||
**"Permission denied" when running Docker commands:**
|
**"Permission denied" when running Docker commands:**
|
||||||
|
|
||||||
This means your user account doesn't have permission to use Docker. Fix it by running:
|
This means your user account doesn't have permission to use Docker. Fix it by running:
|
||||||
@@ -557,3 +598,26 @@ The "nuclear option" above **permanently deletes all your website content**. Onl
|
|||||||
[callout:tip]
|
[callout:tip]
|
||||||
If you're stuck and the solutions above don't help, check the full [Troubleshooting guide](docs/TROUBLESHOOTING.md) in the WebsiteBox repository for more detailed solutions covering upload limits, database connections, SSL renewal, and more.
|
If you're stuck and the solutions above don't help, check the full [Troubleshooting guide](docs/TROUBLESHOOTING.md) in the WebsiteBox repository for more detailed solutions covering upload limits, database connections, SSL renewal, and more.
|
||||||
[/callout]
|
[/callout]
|
||||||
|
|
||||||
|
[step: Going Further]
|
||||||
|
|
||||||
|
Congratulations — you have a live, secure, self-hosted website. Here are some ideas for what to do next:
|
||||||
|
|
||||||
|
**Set up offsite backups:**
|
||||||
|
Your site is already backing up to your server, but if your server's disk fails, those backups go with it. For extra safety, configure [UpdraftPlus](https://updraftplus.com/) to also send backups to a cloud storage service. Go to **Settings > UpdraftPlus Backups** in your WordPress admin, click the **Settings** tab, and choose a remote storage option like [Backblaze B2](https://www.backblaze.com/b2/cloud-storage.html) (free up to 10 GB) or [Google Drive](https://drive.google.com/).
|
||||||
|
|
||||||
|
**Add a contact form:**
|
||||||
|
Most websites need a way for visitors to reach you. Install the **Contact Form 7** or **WPForms Lite** plugin from **Plugins > Add New**, create a form, and add it to a "Contact" page.
|
||||||
|
|
||||||
|
**Improve search engine visibility:**
|
||||||
|
When you're ready for search engines to find your site, go to **Settings > Reading** and uncheck "Discourage search engines from indexing this site." Install [Yoast SEO](https://yoast.com/wordpress/plugins/seo/) for more control over how your site appears in Google results.
|
||||||
|
|
||||||
|
**Put a CDN in front of your site:**
|
||||||
|
A CDN (Content Delivery Network) caches your images and pages on servers around the world, making your site load faster for visitors far from your server. [Cloudflare](https://www.cloudflare.com/) offers a free plan — you just change your domain's nameservers to Cloudflare's.
|
||||||
|
|
||||||
|
**Learn more about WordPress:**
|
||||||
|
[WordPress.org's documentation](https://wordpress.org/documentation/) and [WPBeginner](https://www.wpbeginner.com/) are excellent free resources for learning how to get the most out of your site.
|
||||||
|
|
||||||
|
[callout:tip]
|
||||||
|
You now own your website infrastructure. Unlike hosted platforms, nobody can take your site down for content policy reasons, raise your prices unexpectedly, or lock you into their ecosystem. Your data lives on your server, and you can move it anywhere.
|
||||||
|
[/callout]
|
||||||
|
|||||||
Reference in New Issue
Block a user