<feed xmlns='http://www.w3.org/2005/Atom'>
<title>xmpp-prosody-ansible-deploy/files, 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-03T14:31:58Z</updated>
<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>Derive is_transport_server from transport count</title>
<updated>2026-01-02T13:24:33Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-02T13:24:33Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=32bada629f7b2371c91177af834769c9435f3229'/>
<id>urn:sha1:32bada629f7b2371c91177af834769c9435f3229</id>
<content type='text'>
I have two different kinds of servers - transport servers (which connect to
legacy networks and have s2s disabled) and non-transport servers (which are
XMPP-only and have s2s enabled).

I previously had an is_transport_server boolean defined for each host in the
inventory - however, this is duplicated information that can be derived from
the length of the transports value (which lists the legacy networks to
transport to).

Transport servers have a non-empty transports list, while non-transport servers
do not define the variable at all. So, handle this case in the playbook by
deriving an empty list if the value is not present.
</content>
</entry>
<entry>
<title>Enforce chat delegate prefix across all hosts</title>
<updated>2026-01-02T01:17:03Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-02T01:17:03Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=4daadd054bcaddff2ac9260b6cebcd31edc95da4'/>
<id>urn:sha1:4daadd054bcaddff2ac9260b6cebcd31edc95da4</id>
<content type='text'>
I use the playbook to deploy to three different domains. Before this commit,
some instances were deployed to the root domain (e.g. example.org) and others
were deployed to a subdomain (e.g. chat.example.org), so that other
services/hosts could easily live at the root.

I would now like to enforce that all instances live under the chat. subdomain.
There is no real benefit to having this difference in deployments, having more
consistency will make reasoning about the different instances easier and allow
me to delete some extra variables, and it will also allow me to deploy separate
services to the root domains in the future if needed.
</content>
</entry>
<entry>
<title>Change license to AGPL-3.0-or-later</title>
<updated>2026-01-02T00:20:13Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2026-01-02T00:20:13Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=66df8049eae4b3ec83467a81723b8b2d13f0b7ed'/>
<id>urn:sha1:66df8049eae4b3ec83467a81723b8b2d13f0b7ed</id>
<content type='text'>
When I first made this playbook, I was a little sceptical of -or-later
licenses. However, I've come around to the idea over time.
</content>
</entry>
<entry>
<title>Use explicitly defined admins from inventory</title>
<updated>2025-12-31T15:45:12Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2025-12-31T15:45:12Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=67f5e1375ab6203a6191d4f18ed5ecedd174b757'/>
<id>urn:sha1:67f5e1375ab6203a6191d4f18ed5ecedd174b757</id>
<content type='text'>
I used to have separate admin@ and abuse@ accounts for each virtual host. I
don't really need that separation, though, as I am the only admin, and no-one
has ever contacted them anyway. So, set all admin accounts to the account I
actually use and check every day anyway.
</content>
</entry>
<entry>
<title>Entitle transports to upload files</title>
<updated>2025-10-28T05:02:09Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2025-10-28T05:02:09Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=c00f152d8b4f83a100cd5bafb2c46694768fbe2e'/>
<id>urn:sha1:c00f152d8b4f83a100cd5bafb2c46694768fbe2e</id>
<content type='text'>
This is needed as the transports are by default treated as guests by prosody,
and therefore unable to upload files without explicit permission.
</content>
</entry>
<entry>
<title>Add separators in privileged_entities list</title>
<updated>2025-09-27T22:24:43Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2025-09-27T22:24:43Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=f09d9f004f270fa39b56d39daa03419a54828838'/>
<id>urn:sha1:f09d9f004f270fa39b56d39daa03419a54828838</id>
<content type='text'>
The template worked fine for singleton lists, but it fails when adding another
entry since there is no separator between the elements! Thankfully Lua has some
nice syntax allowing you to use a semicolon as a separator, which doesn't by
itself imply more than one element.
</content>
</entry>
<entry>
<title>Create privileged transport components</title>
<updated>2025-09-21T21:13:14Z</updated>
<author>
<name>Matthew Fennell</name>
<email>matthew@fennell.dev</email>
</author>
<published>2025-09-21T21:13:14Z</published>
<link rel='alternate' type='text/html' href='https://git.fennell.dev/xmpp-prosody-ansible-deploy/commit/?id=8342cee86a8195a898cfdff443156e53ad7ccbbe'/>
<id>urn:sha1:8342cee86a8195a898cfdff443156e53ad7ccbbe</id>
<content type='text'>
This commit allows transport servers to define the relevant components on the
XMPP server. Transports are configured by adding the following config to the
inventory's variables:

transports:
 - subdomain: a-example-legacy-network
   secret: a-long-randomly-generated-secret
 - subdomain: another-example-legacy-network
   secret: another-long-randomly-generated-secret

These are iterated over and a privileged component is created for each.
</content>
</entry>
</feed>
