I run a number of services to make my work easier when providing services as a developer. Some of these are just for myself (like mail) but others are used by my clients who do not want to maintain their own development infrastructure. The services are:
- Code repositories
- Project tracker
- Test server
- Logging and monitoring
- System backups
- Other things
Mail is my main communication with many clients. I have ran my own mail server for the last 6 years. It is based on Debian's standard Postfix installation. Last 3 years I have been using WebMail as the webmail frontend. I do not recommend running your own mail server as there are lots of additional software needed and many pitfalls making your mail possibly get stuck in receipient's spam folders.
Git is currently the most popular code version control system. Such system holds source code and other files that need to be tracked for changes in time, often together with a project tracker. A central code repository makes distribution of code to server easier. I host central git repositories through Gitolite.
I use Redmine issue tracker for managing projects. It is a generic project tracker with built-in time tracking, multiproject support, multiteam support, repository viewer and lots of other useful features. I have used it since 2010 and have not seen anything better despite having used almost all popular trackers.
A new project gets its first deployment as soon as possible. This is how I work. There is a huge communication boost with the client when all work can be deployed immediately for quick feedback. The test server runs at my home. The server has a second role as NAS to keep larger files and my desktop backups.
Logging and monitoring
Monitoring makes sure that all deployments are up and that there are no upcoming issues such as expiring domains and expiring SSL certificates. Logging records the application activity and sends it to a central location. Error logs are monitored for new errors. The monitoring system sends mail alerts when something is down, soon to expire or runs with errors. I'm using a setup based on rsyslog and it is described here in more detail. The system uses a custom frontend to browse the logs and implement alerts.
The backup system makes file and database backups of every important deployment. This has saved us in couple of times when files have been accidentally modified or removed from production or when the whole environment has been destroyed. It is rare to happen but it is better to prepare. The backup system is a collection of bash scripts and I have described it here and here. I usually run backups for free during development and later in the maintenance phase for a fee.
Besides the important stuff above and the client systems I also run:
- My tech blog.
- The "watcher". This periodically monitors a number of online forums and Facebook groups to get possible job leads. I have made interesting contacts through it but the actual jobs have come from the other channels so far.
- My company homepage. Promoting it some time ago worked well but it tends to bring potential clients with too big projects. So this has been kept quite minimal for now.
- An instance of feeds. I read lots of blogs and they are my main source of tech news.
- An instance of an online accounting software.
The infrastructure is currently running on 3 separate machines:
- A Linode VPS instance (mail, code repositories, project tracker - important stuff).
- A Amazon EC2 instance (backups)
- Home server (test server, logging and monitoring)
The servers run Debian or a Debian-based distro. The current setup costs me about 100-200 EUR per month to run (without considering maintenance time). So far I think it's been worth it. It has been built over the last 6 years but might still get some changes in the future.