The public blog runs on the dedicated Lightsail instance at
https://blog.trivox.dpdns.org. It uses WordPress, the free Blocksy parent theme, the
repository's child theme, and two site-specific must-use plugins. No page
builder, starter-site importer, companion plugin, remote font, or paid theme is
required.
- WordPress:
/var/www/wordpress-staging - Public Nginx config:
/etc/nginx/sites-available/wordpress-production.conf - Loopback preview:
127.0.0.1:8080 - Static rollback config:
/etc/nginx/sites-available/static-blog.conf - Static rollback content:
/var/www/algorithm-blog - Backups:
/var/backups/algorithm-blog/<UTC timestamp>
The directory retains -staging in its name because the site was built and
verified there before the Nginx switch. The name does not affect runtime mode;
WP_ENVIRONMENT_TYPE is production.
HTTP requests and the former IP entry point redirect to the HTTPS hostname.
Browser administration is available only through HTTPS, and WordPress forces
secure administration cookies. XML-RPC, dotfiles, wp-config.php, installer
endpoints, and executable files under uploads are blocked. Login and comment
submission endpoints are rate-limited at Nginx; registration has an additional
nonce, honeypot, and per-IP application limit.
Let's Encrypt certificates are issued with the webroot
/var/www/letsencrypt; Certbot's systemd timer renews them automatically. The
deploy hook checks the Nginx configuration and reloads Nginx only after a
successful renewal. The Nginx HTTPS virtual host sends HSTS for this hostname
only, without includeSubDomains, so sibling services under
trivox.dpdns.org are not affected.
The public /account/ page provides login and direct password registration.
New accounts are always created as WordPress subscriber users: they can read
and comment, but cannot edit or publish posts. Comments require login and enter
moderation before appearing publicly. The original administrator is the only
account with publishing capability.
The server has no outbound transactional email service. Registration therefore lets users choose a password directly; forgotten passwords require a manual administrator reset until SMTP is configured.
WordPress core, themes, and plugins are owned by root. Browser-based file
editing and automatic code updates are disabled. Update through WP-CLI only
after taking a backup and checking the loopback preview. Keep one stock
WordPress theme as an emergency fallback.
Run a backup manually:
sudo /usr/local/sbin/algorithm-blog-backupThe systemd timer runs weekly at about 02:17 Asia/Shanghai (with up to five
minutes of randomized delay). Every backup contains a SQL dump, uploads, the
child theme, both must-use plugins, wp-config.php, both Nginx configs, and
checksums. Backup directories are root-only. They are not an off-server backup;
copy important snapshots to a separate storage account when the site begins
receiving irreplaceable content.
sudo /usr/local/sbin/algorithm-blog-verifyThis checks public pages, the feed and sitemap, and confirms that sensitive or executable paths return 404.
The rollback changes only Nginx's enabled default symlink. Point it back to
/etc/nginx/sites-available/static-blog.conf, run nginx -t, and reload Nginx.
Do not restart or delete WordPress, PHP, MariaDB, or the WordPress backup while
investigating. A web-server rollback does not roll back database content.