Skip to content

Latest commit

 

History

History
86 lines (65 loc) · 3.54 KB

File metadata and controls

86 lines (65 loc) · 3.54 KB

WordPress deployment

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.

Layout

  • 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.

HTTPS and security boundary

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.

Accounts and comments

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.

Updates

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.

Backup

Run a backup manually:

sudo /usr/local/sbin/algorithm-blog-backup

The 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.

Verify

sudo /usr/local/sbin/algorithm-blog-verify

This checks public pages, the feed and sitemap, and confirms that sensitive or executable paths return 404.

Roll back to the static site

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.