Deployment guide

NamelessMC

Overview

NamelessMC is a free, open-source community website platform. It is a content management system with a built-in discussion forum, member registration and profiles, groups and a granular permission system, so a community gets a public site and a forum behind one login.

The SecureAnyCloud image ships NamelessMC 2.2.5, served by nginx and PHP 8.3 FPM on a hardened Ubuntu 24.04 LTS base that is patched at build time. A bundled local MariaDB server makes the appliance complete on its own. The in-game account integration that game server communities use is optional and is configured after launch. The appliance runs standalone, and nothing on the image depends on a game server.

The installation wizard is already closed. NamelessMC normally ships an installer whose first account becomes the site owner, which is a takeover risk on any image that exposes it. On this image the wizard was completed at build time over the loopback interface and permanently closed. nginx does not bind port 80 until the per-VM first boot has created your credentials.

What you get:

  • NamelessMC 2.2.5 served by nginx and PHP 8.3 FPM, managed by systemd
  • The Core, Forum, Members, Discord Integration and Cookie Consent modules, installed and enabled
  • A bundled MariaDB 10.11 server that holds the NamelessMC database, already migrated and ready. It listens only on the loopback interface (127.0.0.1:3306)
  • A unique administrator password and a unique database password for every VM, generated on first boot into a root-only file
  • No shipped default login: the installer is closed, and no known or blank credential authenticates
  • nginx held shut until first boot completes, so the site never serves a request before your credentials exist
  • MariaDB bound to 127.0.0.1 only, never exposed to the network
  • Friendly URLs, the upstream-recommended nginx rewrite and deny rules, and an unauthenticated /healthz endpoint for Azure Load Balancer health probes
  • nginx.service, php8.3-fpm.service and mariadb.service as enabled systemd units
  • 24/7 SecureAnyCloud support

Prerequisites

Before you deploy this image, you need:

  • An active Azure subscription
  • An SSH key pair
  • A VNet and subnet in the target region
  • A VM size of Standard_B2s (2 vCPU / 4 GiB RAM) as a starting point. Size up for larger or busier communities
  • NSG inbound rules that allow 22/tcp from your management network and 80/tcp for the site

NamelessMC serves plain HTTP on port 80. For production, terminate TLS in front of it with your own domain.

The bundled MariaDB is never exposed. It listens on 127.0.0.1 only, so port 3306 stays off the network.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for NamelessMC by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Then select Review + create, followed by Create.

Step 2 - Deploy from the Azure CLI

Accept the Marketplace terms once per subscription, then create the VM:

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:namelessmc-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name namelessmc \
  --image sac1647283583153:namelessmc-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open port 80 so visitors can reach the site:

az vm open-port --resource-group <your-rg> --name namelessmc --port 80

Step 3 - Confirm the services are running

SSH in as azureuser and confirm that nginx, PHP-FPM and MariaDB are all active. The namelessmc-firstboot unit reports active once it has finished its one-shot run.

MariaDB listens only on 127.0.0.1:3306, while nginx serves the site on port 80.

systemctl is-active nginx php8.3-fpm mariadb namelessmc-firstboot
ss -tlnp | grep -E ':80 |:3306 '

Step 4 - Retrieve your per-VM credentials

Every VM generates its own administrator password and database password on first boot and writes them to a root-only file. Nothing is shared between deployments, and nothing is recoverable from the published image. Print the file:

sudo cat /root/namelessmc-credentials.txt

Step 5 - Open your community site

Browse to http://<your-vm-public-ip>/. The public front page is what your visitors see before they sign in. It shows your site name, the navigation for Home, Forum and Members, the welcome announcement, and the Log In and Register buttons.

Step 6 - Sign in as the administrator

Click Log In. Sign in with the user admin (or the administrator email from the credentials file) and the password from /root/namelessmc-credentials.txt. Either identifier works, because this image sets the login method to email or username.

Step 7 - Use the forum

Choose Forum in the navigation. The forum index lists your categories and forums with their topic and post counts, and the most recent topic in each.

The site starts with one category, one forum and the NamelessMC welcome topic. You can post a reply immediately, then rename or replace the defaults from the Staff CP.

Step 8 - Open the Staff CP

Click the blue gear icon in the top right. NamelessMC protects the Staff CP with a second password prompt even when you are already signed in, so enter your administrator password again when it asks you to re-authenticate.

The dashboard shows your user, topic and post counters and an activity chart. The full administration menu runs down the left:Configuration, Communications, Integrations, Layout, Modules, Custom Pages, Groups, User Management, Security, Update, and the Forum settings.

Step 9 - Manage groups and permissions

Open Groups in the Staff CP. NamelessMC ships with Admin, Moderator, Member and Unconfirmed Member, each with a staff flag and its own permission set. Select a group to edit its permissions, or use New Group to add your own.

Use groups to decide who can read, post, moderate and administer.

Step 10 - Verify the security posture

Confirm three things on your own VM:

  1. The installation wizard is permanently closed, so nobody can claim your site by reaching an installer.
  2. The administrator created at first boot is the only account that can sign in.
  3. The per-VM password works through the real sign-in form, and a blank password and the common weak guesses are all rejected.

The first command checks the installer. The second runs the credential round trip:

curl -s http://127.0.0.1/install.php | grep -o 'already been installed'
sudo bash /usr/local/sbin/namelessmc-cred-roundtrip.sh

Step 11 - Verify the stack and the first boot gate

Confirm the NamelessMC version and the health endpoint, then look at the gate that keeps the site shut until your credentials exist.

nginx.service carries a ConditionPathExists on the first-boot sentinel, so on a fresh boot systemd skips nginx entirely. The first-boot service creates your credentials, writes the sentinel and only then starts nginx:

curl -sI http://127.0.0.1/healthz | head -1
grep -h ConditionPathExists /etc/systemd/system/nginx.service.d/*.conf; ls -l /var/lib/sac/data/

Optional - connect a game server

The NamelessMC game server integration is optional, and nothing on this image requires it. To enable it, open the Staff CP, choose Integrations and configure the integration you want. Then install the matching plugin on your game server and point it at your site.

Nothing on this appliance depends on a game server, so you can run the site as a general-purpose community forum and add the integration later, or never.

Where your data lives

The NamelessMC application tree is at /var/www/namelessmc, owned by www-data. Its configuration, including the database credentials and your site host, is at /var/www/namelessmc/core/config.php. Uploads (avatars, banners, images) live under /var/www/namelessmc/uploads, and the application cache under /var/www/namelessmc/cache. The MariaDB database nameless holds every user, group, permission, forum, topic and post, in its default datadir at /var/lib/mysql.

To back up the site, take a VM-level snapshot or a mysqldump of the nameless database. To count the registered users, run:

sudo mariadb --protocol=socket -uroot -N -e "SELECT COUNT(*) AS users FROM nameless.nl2_users"

Add your own domain and TLS

The appliance serves plain HTTP on port 80. For production, front it with your own domain and a TLS certificate.

Then tell NamelessMC its public address by setting hostname in /var/www/namelessmc/core/config.php. If you terminate TLS in front of the appliance, also set force_https to true. Clear the cache afterwards so the change takes effect:

sudo bash /usr/local/sbin/namelessmc-rebuild-module-cache.sh

You can terminate TLS with Azure Application Gateway, an nginx or Caddy reverse proxy, or a managed load balancer with a certificate for your domain.

Do not clear the cache by hand. NamelessMC stores its enabled module list in the on-disk cache, so emptying /var/www/namelessmc/cache on its own silently disables the Forum and Members modules. The helper above rebuilds that list from the database, so it is the supported way to clear the cache on this image.

Security notes

  • The installation wizard is permanently closed on this image, and install.php only ever renders an inert notice. Nobody can claim your site by reaching an installer.
  • nginx does not bind port 80 until the first-boot service has written your per-VM credentials, so the site never serves a request before it is yours.
  • The administrator password and the database password are unique per VM, and no known or blank credential authenticates. Keep /root/namelessmc-credentials.txt protected, and change the password from within NamelessMC if you share access.
  • The bundled MariaDB listens on 127.0.0.1 only and is never reachable from the network. Administer it over SSH with sudo mariadb.
  • NamelessMC serves plain HTTP on port 80. For anything beyond a trusted network, put it behind your own TLS-terminating reverse proxy or Azure Application Gateway with a certificate for your domain.
  • Restrict inbound 80/tcp in your NSG to the networks that need the site.

Support

SecureAnyCloud maintains this image and provides 24/7 support. If you need help deploying or operating NamelessMC on Azure, contact us at secureanycloud.com.

Deploy on Azure

Launch NamelessMC on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure