
As a disclaimer, I am NOT a web developer (As a profession), and the things I do/ have done could very likely make an actual web dev’s eyes roll, especially my explanations of things. So take whatever advice/ things I say with a pinch of salt.
What are we trying to do?

Your main goal is hosting a thing on a server somewhere that people can reliably get to and be served what you want to serve them.
As a game developer that started off as hosting a game instance that my players could reach (shout out to you if you played Farm Fatale)
Websites follow the same principle.
You want a machine somewhere running your thing on a fixed IP address.
(An IP address is the address of something running on a network. The internet is one big giant network and thus has public IPs. Everything has these, from games to websites to your router)
If you know how you can do this from home or somewhere else you physically control then this is the best place as you have full control of the hosting and hardware. Personal home internet providers though (without a lot of usually expensive exceptions) have rolling IPs so can be a bad fit for this purpose.
A good place to cheaply have a machine is in a cloud service, this is what I do.
What service you pick is up to you. You can go for a dedicated server service if you wish also, some providers can usually provide either for you, but naturally dedicated servers will be more expensive and can be a little overkill for a simple low traffic website.
Your task is sourcing what works for you and your needs. No place is perfect, and it can be wise to research the TOS of whoever will be hosting your site.
Digital Ocean are pretty good, being able to provide you with a droplet (a carved out little virtual space which runs your server code on their hardware) and a fixed IP, both things you need to run a reliably accessible internet thing.
Digital ocean will let you host your site for as little as $14/ month which is pretty good if you’re using the site to increase income through memberships or even something as simple as a more accessible artist pricing list.
Your .com, .art, .whatever

Before we get into the technical stuff or setting up your server it can be wise to claim your domain. This is your website address, your URL.
There’s various places that can provide you that service, I use GoDaddy.
This is an added cost to you but it isn’t much, like $25 a year. But this will be your name for yourself, and is required for people to not have to type in a bunch of numbers into the url instead of an actual site name and grants you and your visitors securities.
Your domain resolves your website’s address to your server’s IP address, like looking up a name in a phonebook.
The technical stuff and what I do

My site personally is a weird one.
It’s a sort of frankenstein’s monster of my own code HTML/ JS/ CSS that then has wordpress inside it like animal cells have a mitochondria.
Anything on this site which is barnyardbulge.com/members is accessing that wordpress part, that is where it is hosted in my site/server.
You don’t have to do this, just I was hosting my own made stuff before I knew I wanted memberships (because Patreon/ Subscribestar were becoming unreliable) so sort of inserted it along side my own existing stuff.
WordPress is a pretty powerful Content Management System” that quite a vast amount of the internet uses. It allows you to not have to worry about all the nitty gritty code stuff and work with an interface where you can just drag and drop things and create pages, as well as use tons of addons people have created over the many years for all sorts including stores and memberships.
WordPress themselves have a hosting service but this is NOT what we will be using for our own site due to their hosting TOS, but lucky for us their wordpress package is a completely separate and free thing that you can use and host on your own server.
The overview
What I recommend and personally use and what components you’re going to need:
Server Host – This can be your own thing, Digital Ocean or whatever other place you can host your site. The machine itself.
Domain Registrar – I use GoDaddy, but this is where you get a domain name for your website.
Ubuntu – The operating system of your server. Very widely used for servers.
NGINX – This is what runs the web server. It’s what takes in a connection and says “I know what to do with this” and does the expected things with it.
MariaDB – The database that is going to hold all the data for your website.
WordPress – This is the site itself. It saves you from having to write all your own html etc. It’s a whole system which you can use to produce your site and do cool things like shop, memberships, etc.
Certbot Let’sEncrypt – This will certify your website and allow encoded https like all modern sites use. (Else you and your visitors will get “Your connection is not secure” warnings)
The flow of what you will be doing
1 – You will first claim your website domain name.
2 – Once you have that we will set up your server, ensuring it’s running Ubuntu.
3 – We will access the server remotely and then add the packages we’re going to need to run the website.
4 – We’re going set up your domain’s DNS so that your domain name points to the server that will be running your website.
5 – We’re going to create a MariaDB database which will be storing all your site’s data.
6 – We’re going to download and install wordpress and configure it.
7 – We’re going to configure NGINX to use wordpress
8 – We will get the site certified with Let’sEncrypt to give you https
9 – Then you will set up and create your wordpress website
This will put you in the position of having your own website ready to go and do what you want with.
Getting started
Now to start rolling your sleeves up.
If you picked to use Digital Ocean I will help you to set things up a bit with their service, but a lot of this will apply to anywhere you’re hosting once we’re past the server set up.
– In DO (Digital Ocean) you want to create a droplet.
– Choose your region, ultimately doesn’t matter but I like it to be where I am.
– Choose your image, Ubuntu 24.04 LTS or whatever is relevant to you today, this is your server’s “operating system/ version” Ubuntu is a form of Linux and very widely (almost exclusively Linux) used for server applications.
– Choose a basic droplet with at least 2GB of RAM
– Select SSH Key for authentication. This will be your key to get into the server
– Name your droplet
Okay, now for our first ever bit of CLI (Command Line Interface) if you’ve not done it before.
You need to create the key that is going to be used for accessing your server.
Open up a terminal, you do this on windows by searching cmd for Command Prompt and you can right click that and run as admin.
You’ll wanna type:ssh-keygen -t ed25519
You can use all the defaults
You can display it with:type %USERPROFILE%\.ssh\id_ed25519.pub
Copy the public key and put it in your Digital Ocean’s Add SSH form.
Don’t share your private key, that’s how you have access to your server and it’s now stored in your PC’s ssh directory (users/you/.ssh)
– Create the droplet
Once you have the droplet with your SSH key you now have something to run your website and the ability to access it.
Keep note of it’s IPv4 address.
Accessing your server from your machine:
You can use the web console on the DO site or you can use the command terminal on your PC by entering:ssh root@YOURIPADDRESS
where YOURIPADDRESS is the IPv4 address of the DO droplet or where ever else you have chosen to host.
It should automatically use that key you created and assigned to the server because it looks in that .ssh folder.
Another way you can access your server’s files is by using Filezilla which is very useful for drag and dropping files and folders straight from your PC onto the server. Just look up how to access server via SSH with Filezilla.
Once you’re in on your server on your PC (via command terminal) we can start setting up your domain to point to your new server.
At your domain registrar (GoDaddy if you used same as me) you want to create a DNS record:
| Type | Hostname | Value |
|---|---|---|
| A | @ | YOURIPADDRESS |
| CNAME | www | @ |
This basically is that entry in the phonebook. When you enter your site’s address into chrome or whatever it goes to look in here, sees this entry and knows that’s the IP address it’s supposed to connect you to.
Don’t go around sharing your domain or anything just yet before your site it set up.
Apply it, it can sometimes take a few minutes to fully apply.
You can check if it’s working by using this command in your command terminal:nslookup yoursite.com
It should return something like:
Server: yoursite.com
Address: YOURIPADDRESS
Now lets start adding all this stuff to our server to run the website
These are commands that should be run from inside your server (remember the ssh root@YOURIPADDRESS)
You can also quickly access your server CLI on Digital Ocean by clicking your droplet and then clicking the Web Console button.sudo apt update
sudo apt upgrade -y
Will ensure your Ubuntu is fully up to date before we begin.
Now copy and paste this whole block:sudo apt install -y \
nginx \
mariadb-server \
php8.3-fpm \
php8.3-cli \
php8.3-mysql \
php8.3-curl \
php8.3-gd \
php8.3-mbstring \
php8.3-xml \
php8.3-zip \
php8.3-intl \
php8.3-imagick \
curl \
unzip
NGINX will be the web server, what takes inputs from your visitors and serves them back what they should get.
MariaDB is the database, what is stored on your site (users, content, etc)
PHP is the language that WordPress runs on.
Once that’s done you can start running them.sudo systemctl enable --now nginx mariadb php8.3-fpm
And check they’re running with:sudo systemctl is-active nginx mariadb php8.3-fpm
You should get 3 lines of “active”.
I highly recommend looking up what things like “sudo” and the other commands/ characters mean to help you understand a bit what you’re doing on the server.
Now let’s create that WordPress database since things are running.
Make a random password for the database by usingopenssl rand -hex 24
Copy it somewhere, you’ll need this in the next steps.
Now open MariaDB withsudo mariadb
Now you want to run these lines one at a time:CREATE DATABASE wordpress
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
That’s the database created, now the user to use the database (which will be WP).CREATE USER 'wpuser'@'localhost'
IDENTIFIED BY 'YOURGENERATEDPASSWORDFROMBEFORE';
Be sure to replace the YOURGENERATEDPASSWORDFROMBEFORE with your password you generated.
Then grant access to the user to the database:GRANT ALL PRIVILEGES ON wordpress.*
TO 'wpuser'@'localhost';
Then just enter:EXIT;
To exit MariaDB. And now you have a fancy database ready for wordpress to use.
Now download and configure wordpress now that everything is set up for itcd /tmp
curl -fLO https://wordpress.org/latest.tar.gz
This will download the latest wordpress package to your server’s temporary directory.
TAR files are basically ZIP files for Linux, now extract it:tar -xzf latest.tar.gz
Now make the directory on your server where this will go:sudo mkdir -p /var/www/website/public
Copy the wordpress you extracted to there with:sudo cp -a wordpress/. /var/www/website/public/
Give the webserver access to it with:sudo chown -R www-data:www-data /var/www/website/public
And then ensure the right file permissions
sudo find /var/www/website/public -type d -exec chmod 755 {} \;
sudo find /var/www/website/public -type f -exec chmod 644 {} \;
Now that wordpress is installed onto the server where you want it it’s time to configure it.
Create the config file:sudo cp /var/www/website/public/wp-config-sample.php /var/www/website/public/wp-config.php
(All one line)
Open the file for editting using nano (think of it like notepad)sudo nano /var/www/website/public/wp-config.php
Look for the database configuration section and replace these values:define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'YOUR_GENERATED_PASSWORD' );
define( 'DB_HOST', 'localhost' );
Remember to set the YOUR_GENERATED_PASSWORD to that password you generated earlier.
Leave the rest unchanged.
WP uses secrets and salts to protect authorisation cookies. Think of it like an enigma machine that is used to scramble then descramble data so hackers can’t grab it from your users.
You can generate one by going here: https://api.wordpress.org/secret-key/1.1/salt/
Copy that and replace the placeholder lines in the wp-config that you have open in nano.
For extra security add:define( 'DISALLOW_FILE_EDIT', true );
Just before “/* That’s all, stop editing! */”
This prevents injection of malicious stuff if some asshole manages to get into your admin account.
Just like that you should be set and configured, just press CTRL+O to save it then CTRL+X to exit.
You can now protect that file by editting it’s permissions:sudo chown root:www-data /var/www/website/public/wp-config.php
sudo chmod 640 /var/www/website/public/wp-config.php
Alright you’ve gotten this far. We’re actually nearly done in terms of getting ready to start up the site.
We now need to configure NGINX to be able to serve wordpress
Create the configuration file:sudo nano /etc/nginx/sites-available/yoursite.com
(Set yoursite.com to your website)
Paste this in there:server {
listen 80;
server_name yoursite.com www.yoursite.com;
root /var/www/website/public;
index index.php index.html;
client_max_body_size 64M;
# WordPress page routing
location / {
try_files $uri $uri/ /index.php?$args;
}
# Protect the configuration file
location = /wp-config.php {
deny all;
}
# Prevent PHP execution in uploaded files
location ~* ^/wp-content/uploads/.*\.php$ {
deny all;
}
# Send PHP requests to PHP-FPM
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
# Block access to hidden files
location ~ /\.(?!well-known) {
deny all;
}
}
Save by using CTRL+O and exit with CTRL+X
Now NGINX basically knows where to look when it’s getting it’s requests.
Now you want to runsudo ln -s /etc/nginx/sites-available/yoursite.com /etc/nginx/sites-enabled/
(All one line, remeber your site name)
This creates a symbolic link telling NGINX to activate and start serving what’s been configured.
NGINX has a two folder configuration system of sites-available (which is configuration for all the sites it’s configured for) and sites-enabled (which is what it’s currently running)
You can see this folders in Filezilla if you want by going to /etc/nginx/
Running the above command creates a sort of shortcut from your available to your enabled.
NGINX comes with a “default” site which can be removed with:sudo rm -f /etc/nginx/sites-enabled/default
If you want but not 100% necessary.
To test that the config for NGINX is all valid you can run:sudo nginx -t
If it passed then you’re all set. You can reload NGINX with:sudo systemctl reload nginx
And there we go, all configured and set up!
If you enter http://yoursite.com then it should give you the wordpress installation screen for your website :O
BUT DON’T ENTER ANYTHING JUST YET!
You should really have HTTPS for your site so let’s do that
Without HTTPS you’ll get something like “Your connection to this site in insecure” warnings when trying to access your site.
Lucky for you it’s entirely free to get a HTTPS cert from LetsEncrypt and all done in the CLI
Before we do anything make sure www.yoursite.com and yoursite.com go somewhere.
Now lets use snap to get certbot to get our HTTPS cert from LetsEncrypt, enter:sudo apt install -y snapd
To install snap.
Then:sudo snap install --classic certbot
To use snap to install the certbot.
Maker sure the certbot command is available with:sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
Then use it to request your certificatesudo certbot --nginx -d yoursite.com -d www.yoursite.com --redirect
(One line, make sure to replace with your site address)
Go through it’s prompts to make sure you’re all registered. It’ll then request a certificate for you and now you should be able to go to your site and it use HTTPS and have no more warnings, nice and clean and official.
You can also always test with:sudo certbot renew --dry-run
Now let’s finish installing WordPress
Go to your site and do your set up, following all the instructions.
Once you’re done with that you can go to https://yoursite.com/wp-admin/ to access your admin board.
WOOHOO YOU DID IT!
๐ You have a site of your very own! ๐

Maintaining your site
It’s up to you now to learn how wordpress works and push that artistic flare of yours. I’m excited to see what you do! There’s plenty of resources if you need help with WP but you can always ask me and I can let you know what I do.
Your website is basically your pet now. You have to maintain it and take care of it.sudo apt update && sudo apt upgrade
Semi regularly to keep your server up to date.
Make sure you are keeping backups. With Digital Ocean you can do this automatically for a little bit more a month.
If wordpress wont accept large enough files (We artists have big files for our wonderful subscribers) you can edit the PHP config to allow bigger files:sudo nano /etc/php/8.3/fpm/php.ini
Nano in to your PHP config.
Then find and set these values:upload_max_filesize = 32M
post_max_size = 40M
memory_limit = 256M
(Or whatever you need)
Do your save and exit thing, then run this to restart PHP:sudo systemctl restart php8.3-fpm
I suggest reading up on your new pet and what they’re made of
Documentation for all these things are available if you search for them:
Ubuntu 24.04 LTS
NGINX
WordPress
MariaDB
Let’s Encrypt + Certbot
Your server may sometime for whatever reason forget to do a cert renewal, which is something that can blindside you and cause panic/ confusion. (been here)
Ensure that cert renewal is running with if your website starts giving http security warningssystemctl list-timers --all | grep -i certbot
If you get nothing back then it’s not running, use:sudo systemctl enable --now snap.certbot.renew.timer
To get it to run.
(sudo systemctl enable --now certbot.timer if you didn’t use snap)
Then run a lil trial to ensure it’s workingsudo certbot renew --dry-run
You shouldn’t ever have this problem but things happen.
Ensuring your NGINX config is valid is also important to prevent headaches if you change any NGINX configuration stuff:
sudo nginx -t
You should generally always run it before restarting NGINX to ensure it’s a valid configuration.
Remember to follow data protection laws! Keep your users’ data safe! You should also have a privacy policy so that your users know what they are giving and what you are storing when they use your site.
Getting what you need out of your site
You now have wordpress at your disposal and all of it’s plugins etc.
You can search for and add plugins and you can learn some PHP etc and write your own as well!
You can even write plugins for plugins if you wish.
For my memberships I use PMPro (Paid Memberships Pro). Which is free if you don’t need any of their extra add on plugins. (And you can write your own anyway if you know/ learn PHP hehehehe)
I recommend also getting the CodeSnippets plugin which lets you just shove little bits of PHP or other code onto your website.
Having something to disable the user bar at the top for anyone that isn’t an admin is the first bit of fiddling I’d do for sure.
Search it up an you should be able to work it out. You got this far! ๐
Remember you don’t have to use WordPress, you can look up how to do other things. But getting a server running something like NGINX is most of the way, you just tell it what to serve your visitors. You could have it serve a cool ass 3D Unity website if you wanted.
Be sure to give me a nudge when you manage to get things working! We can add each other to our webrings! We’re better together, and we can share traffic.
And don’t be afraid to reach out if something’s gotten messed up or you’re stuck.
Also people that know what they’re doing and have found a mistake in what I’ve put here you can reach out too.
I’ll probably add to this as I think of new things and get into specifics beyond just getting your website up and running.
Thank you for reading, I hope this is helpful to you.

