<feed xmlns='http://www.w3.org/2005/Atom'>
<title>xmpp-prosody-ansible-deploy, branch master</title>
<subtitle>Ansible playbook that deploys prosody to a server.
</subtitle>
<id>https://git.fennell.dev/xmpp-prosody-ansible-deploy/atom?h=master</id>
<link rel='self' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/'/>
<updated>2026-01-14T23:11:39Z</updated>
<entry>
<title>Ensure all authorized_keys are copied to host</title>
<updated>2026-01-14T23:11:39Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-14T23:11:39Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=546a3bb370a8394d133228236a835a0b606ae8a8'/>
<id>urn:sha1:546a3bb370a8394d133228236a835a0b606ae8a8</id>
<content type='text'>
I have two keys, one for interactive access, and one for automated jobs. On
migration to the new host, I added the interactive key via the VPS provider's
form, but neglected to add the key for automated jobs. This led to the backup
jobs failing.

Therefore, define keys in the inventory that should be copied to the host, and
ensure they are installed to root. The subsequent step then copies these to the
admin account.

There is one problem with this approach: ssh remains open to root. Although
privilege escalation from admin is possible, I would like to take steps to
reduce root access where possible.

However, the playbook currently has to work both on first run when
bootstrapping the box, as well as subsequent runs. On the first run, the
playbook only has access to root and must create the admin account. However,
once the admin account has been created, the playbook should never again
interact with root.

Therefore, in the near future, I'd like to introduce a "bootstrap" action to
the playbook, that should only be run on the first deploy to the host, and
disable ssh access to root once finished. Subsequent runs should only interact
via admin.
</content>
</entry>
<entry>
<title>Create directory for notes</title>
<updated>2026-01-11T15:05:36Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-11T15:05:36Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=71dff47fe74bd888feb957ee545ba9bdad6fb076'/>
<id>urn:sha1:71dff47fe74bd888feb957ee545ba9bdad6fb076</id>
<content type='text'>
I initially had a single notes.md file with just the changes that I needed.
But, I want to expand this to also include some runbooks and ad-hoc scripts,
that are too tied to my specific installation to be in the public repository.
</content>
</entry>
<entry>
<title>Use more precise wording in prosody database step</title>
<updated>2026-01-10T15:45:03Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-10T15:45:03Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=4cdb662d1ee723d3190d29d65732a1877d628fbf'/>
<id>urn:sha1:4cdb662d1ee723d3190d29d65732a1877d628fbf</id>
<content type='text'>
Technically, the database is only being created and not fully set up.
</content>
</entry>
<entry>
<title>Ensure rsync is installed to xmpp servers</title>
<updated>2026-01-10T15:41:57Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-10T15:41:57Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=f0c3a3056f317aa1065fbf23668a245b62b55165'/>
<id>urn:sha1:f0c3a3056f317aa1065fbf23668a245b62b55165</id>
<content type='text'>
This enables delta backups, reducing bandwidth sent off the server.
</content>
</entry>
<entry>
<title>Tag all DNS steps</title>
<updated>2026-01-10T15:39:31Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-10T15:39:31Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=f3a0496912c4ceb9d2032946bb0e31525f50a613'/>
<id>urn:sha1:f3a0496912c4ceb9d2032946bb0e31525f50a613</id>
<content type='text'>
There are some cases where I do not want to run DNS-related steps. For
instance, when setting up a new server, which should replace an existing one,
it is necessary to skip the DNS steps until the server has been fully migrated
and I am ready to switch the hot/cold sides.

Therefore, tag all DNS steps. This allows them to be skipped during ansible
playbook execution using --skip-tags dns.
</content>
</entry>
<entry>
<title>Enable invites_register_web module</title>
<updated>2026-01-03T14:31:58Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-03T14:31:58Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=fa86d5476e8714e74a526046d86f0a2d6096293b'/>
<id>urn:sha1:fa86d5476e8714e74a526046d86f0a2d6096293b</id>
<content type='text'>
This allows users who are registering using the invite webpage to register an
account directly online, in case their desired client is not listed.

I doubt this will ever be used, but without this module, the register manually
link is broken in the invite page, and on the off chance it is used, I want to
provide a good experience.
</content>
</entry>
<entry>
<title>Serve invite pages under virtual host</title>
<updated>2026-01-03T14:27:07Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-03T14:27:07Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=5aebdf5c72549adc87189021fd996269558e0543'/>
<id>urn:sha1:5aebdf5c72549adc87189021fd996269558e0543</id>
<content type='text'>
While ensuring that all hosts are deployed to the chat subdomain, I applied the
same logic to the invite pages too.

However, this broke invites as prosody's HTTP module has a check which ensures
that the page being served is on the same domain as the virtual host, meaning
that invite pages hosted under the chat subdomain would receive a 404.

So, serve invite pages from the domain itself (which is the default config in
prosody). To do this, we must direct such requests from nginx too.
</content>
</entry>
<entry>
<title>Reset invite token expiry to default of seven days</title>
<updated>2026-01-02T14:31:17Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-02T14:31:17Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=770db24aeec0d85cae8c0357c5a13468e8478cac'/>
<id>urn:sha1:770db24aeec0d85cae8c0357c5a13468e8478cac</id>
<content type='text'>
A year is a little excessive.
</content>
</entry>
<entry>
<title>Replace deSEC with Mythic Beasts as DNS provider</title>
<updated>2026-01-02T13:40:03Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-02T13:40:03Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=ffd87ae6c33513fd3e187e924efdad9a8fa0f7b3'/>
<id>urn:sha1:ffd87ae6c33513fd3e187e924efdad9a8fa0f7b3</id>
<content type='text'>
I have now moved all servers' nameservers to Mythic Beasts. Replace the old
deSEC requests to ones to Mythic Beasts.
</content>
</entry>
<entry>
<title>Store stdout as DANE hash instead of full command</title>
<updated>2026-01-02T13:38:09Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-02T13:38:09Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=d9305b275096db83180f4306a0f962fd0785b823'/>
<id>urn:sha1:d9305b275096db83180f4306a0f962fd0785b823</id>
<content type='text'>
I only want to store the actual hash in dane_hash and not a full python object
corresponding to the execution of the command.
</content>
</entry>
</feed>
