If anyone is interested …
This blog is hosted on my home server, connected via ADSL link to MTS (formerly Stream) ISP. Unfortunately ISP blocks incoming connections on 80 and 8080 ports, so I have to use non-standard port 8079. IP address is dynamic, and yoush.homelinux.org is a DynDNS name.
Server naturally runs Debian GNU/Linux. However, WordPress engine is installed not from a debian package. This is done because IMO it is not practical to package all plugins and themes, and it is not acceptable to mix packaged and unpackaged components within same directory tree.
WordPress installation is managed via git. There are two repositories – production repository at /srv/wordpress from where it is served by the web server, and development one elsewhere. Web server has readonly access to /srv/wordpress – so nothing can be modified from outside (and also from WordPress administrative interface – which is IMO not that large cost for consistency and extended security).
In development repository, there are 3 branches – wordpress, upstream and site.
- wordpress branch is used to import unmodified versions of WordPress engine. To import a new version, development repository is switched to wordpress branch, then entire file tree is removed, then new tree is unpacked, then the change is committed.
- upstream branch is used to import (or remove) unmodified plugins and themes; also it gets merges from wordpress branch. To upgrade a plugin, development repository is switched to upstream branch, then old version is removed from wp-content/plugins/ directory, then archive with new version is unpackaged, then change is committed.
- site branch gets merges from upstream branch, and holds any local modifications needed. All changes for the site are done in this branch, and then pushed into production repository.
In case of something goes wrong, older commit could be checked out on the production repository – I’ve already done this several times.
Graphics and other files that are needed for my blog, are not imported into WordPress at all, but served as static content from a directory on the server.