We generally have an exchange of emails via our (self hosted and open source) RT ticketing system to work out what clients need and then generate an invoice via our (self hosted and open source) InvoicePlane invoicing system and setup services as required, if there is a time component to the work we record the time spent via our (self hosted and open source) Kimai time tracking site — we often do the website migration for clients as this is very quick and easy for us to do, especially if we have SSH access to the existing servers. Email migrating can tricky and time consuming so we suggest that clients use Thunderbird to connect to their existing and new IMAP accounts and drag and drop IMAP folders between them to migrate email.
For email there is a control panel via Mailcow for creating mailboxes and aliases etc and there is a SOGo webmail interface for people who don’t want to, or can’t, use a local MUA.
For web hosting the servers are configured via YAML files like this example (development server) one:
So we add clients to a YAML file like this for each server where we list the domains and sub-domains to generate the Apache VirtualHosts and we list the MariaDB databases and optionally automatic CMS installs (WordPress, Drupal, Nextcloud etc etc), then we either apply the updates via GitLab CI and GitLab Docker containers we also build via GitLab CI which contain Ansible or we run Ansible locally to update the severs.
Clients on shared web hosting then have phpMyAdmin as the MySQL control panel and SSH / SFTP / SSHFS access to the file system and also the option to use all the command line tools we have installed, git, composer, drush, wp-cli etc etc — there isn’t a web hosting based control panel, the only open source one we would consider is ISPConfig and we have hosted this in the past but found it too annoying, we would rather be in full control of servers — we take great care to ensure that there is no way for one client to access another client (PHP and SSH run in read-only bind mounted chroots that are totally separate from the main server OS)
Some clients have their own virtual servers that are also provisioned in the same manner as our shared hosting servers, so they have their own git repos on git.coop and are able to add and remove accounts and sites.
For domain names we are Nominet and Janet members so can directly order .uk
, .ac.uk
, .co.uk
etc domains for clients. For non-UK domains we use our Gandi reseller account (we do have a domains.coop reseller account also but we are trying to close it down as the interface is so terrible). We have multiple DNS servers across Europe that are all provisioned using Ansible, and for some clients they have their own git.coop
repos for their own Bind9 zonefile and they can update them as they wish, these are then checked and the servers updated, but there is no web interface to this other than the GitLab IDE, for most clients we manually edit their zonefiles for them as this is technically beyond their ability.
We have spend some time in the past looking at configuring ERPNext as a tool to integrate all our different systems (ticketing, invoicing, time keeping) and the provisioning of services with the view of also using this to offer clients an integrated control panel but we found that we don’t have the capacity to set this up ourselves at the moment — I’m flat out automating everything I do via Ansible and GitLab CI but our workers who do the invoicing do not have the skills to automate away their own jobs and I don’t have the time to take this on as well as everything else I do, so there is a lot of manual creating and issuing and chasing of invoices etc.
Our servers hosting all of this are located in Sheffield datacentre we have access to and we own all the hardware and the fileservers are running FreeBSD and ZFS and the front facing servers are running Debian and Xen — we are determined to own and provision the whole stack and not to be dependent on a capitalist provider of cloud services for our infrastructure, this is very important to us.