sovereign alternatives and similar software solutions
Based on the "Self-hosting Solutions" category.
Alternatively, view sovereign alternatives based on common mentions on social networks and blogs.
-
Paperless-ngx
A community-supported supercharged version of paperless: scan, index and archive all your physical documents -
Budibase
Budibase is an open-source low code platform that helps you build internal tools in minutes đ -
Open and cheap DIY IP-KVM based on Raspberry Pi
Open and inexpensive DIY IP-KVM based on Raspberry Pi -
Sandstorm
Sandstorm is a self-hostable web productivity suite. It's implemented as a security-hardened web app package manager. -
#<Sawyer::Resource:0x00007f938ce6e1d8>
Apache HertzBeat(incubating) is a real-time monitoring system with agentless, performance cluster, prometheus-compatible, custom monitoring and status page building capabilities. -
OpenMediaVault
openmediavault is the next generation network attached storage (NAS) solution based on Debian Linux. Thanks to the modular design of the framework it can be enhanced via plugins. openmediavault is primarily designed to be used in home environments or small home offices. -
FreeNAS
DISCONTINUED. TrueNAS CORE/Enterprise/SCALE Middleware Git Repository [Moved to: https://github.com/truenas/middleware] -
Ansible-NAS
Build a full-featured home server or NAS replacement with an Ubuntu box and this playbook. -
Yacht
A web interface for managing docker containers with an emphasis on templating to provide 1 click deployments. Think of it like a decentralized app store for servers that anyone can make packages for. -
1Backend
DISCONTINUED. Run your web apps easily with a complete platform that you can install on any server. Build composable microservices and lambdas. -
Jump
Jump is a self-hosted startpage and real-time status page for your server designed to be simple, stylish, fast and secure. -
xsrv
[mirror] Install and manage self-hosted services/applications, on your own server(s) - ansible collection and utilities -
#<Sawyer::Resource:0x00007fc98721c818>
OS-NVR is a lightweight extensible CCTV system. Mirror of Codeberg. -
Puffin
DISCONTINUED. lightweight webapp catalog based on containers, with user interface Ă la mobile app store -
FreedomBox
A community project to develop, design and promote personal servers running free software for private, personal, communications.
CodeRabbit: AI Code Reviews for Developers

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of sovereign or a related project?
README
Introduction
Sovereign is a set of Ansible playbooks that you can use to build and maintain your own personal cloud based entirely on open source software, so youâre in control.
If youâve never used Ansible before, you might find these playbooks useful to learn from, since they show off a fair bit of what the tool can do.
The original author's background and motivations might be of interest. tl;dr: frustrations with Google Apps and concerns about privacy and long-term support.
Sovereign offers useful cloud services while being reasonably secure and low-maintenance. Use it to set up your server, SSH in every couple weeks, but mostly forget about it.
Services Provided
What do you get if you point Sovereign at a server? All kinds of good stuff!
- IMAP over SSL via Dovecot, complete with full text search provided by Solr.
- POP3 over SSL, also via Dovecot
- SMTP over SSL via Postfix, including a nice set of DNSBLs to discard spam before it ever hits your filters.
- Virtual domains for your email, backed by PostgreSQL.
- Spam fighting via Rspamd.
- Mail server verification using DKIM and DMARC so the Internet knows your mailserver is legit.
- Secure on-disk storage for email and more via EncFS.
- Webmail via Roundcube.
- Mobile push notifications via Z-Push.
- Email client automatic configuration.
- Jabber/XMPP instant messaging via Prosody.
- An RSS Reader via Selfoss.
- CalDAV and CardDAV to keep your calendars and contacts in sync, via ownCloud.
- Your own private storage cloud via ownCloud.
- Your own VPN server via OpenVPN.
- An IRC bouncer via ZNC.
- Monit to keep everything running smoothly (and alert you when itâs not).
- collectd to collect system statistics.
- Web hosting (ex: for your blog) via Apache.
- Firewall management via Uncomplicated Firewall (ufw).
- Intrusion prevention via fail2ban and rootkit detection via rkhunter.
- SSH configuration preventing root login and insecure password authentication
- RFC6238 two-factor authentication compatible with Google Authenticator and various hardware tokens
- Nightly backups to Tarsnap.
- Git hosting via cgit and gitolite.
- Read-it-later via Wallabag
- A bunch of nice-to-have tools like mosh and htop that make life with a server a little easier.
Donât want one or more of the above services? Comment out the relevant role in site.yml
. Or get more granular and comment out the associated include:
directive in one of the playbooks.
Usage
What Youâll Need
- A VPS (or bare-metal server if you wanna ball hard). My VPS is hosted at Linode. Youâll probably want at least 512 MB of RAM between Apache, Solr, and PostgreSQL. Mine has 1024.
- 64-bit Debian 8.3 or an equivalent Linux distribution. (You can use whatever distro you want, but deviating from Debian will require more tweaks to the playbooks. See Ansibleâs different packaging modules.)
- A Tarsnap account with some credit in it. You could comment this out if you want to use a different backup service. Consider paying your hosting provider for backups or using an additional backup service for redundancy.
You do not need to acquire an SSL certificate. The SSL certificates you need will be obtained from Let's Encrypt automatically when you deploy your server.
Installation
On the remote server
The following steps are done on the remote server by ssh
ing into it and running these commands.
1. Install required packages e.g aptitude
is required on Debian
apt-get install sudo python
2. Get a Tarsnap machine key
If you havenât already, download and install Tarsnap, or use brew install tarsnap
if you use Homebrew.
Create a new machine key for your server:
tarsnap-keygen --keyfile roles/tarsnap/files/decrypted_tarsnap.key --user [email protected] --machine example.com
Download a copy of this key and keep it somewhere safe! There's no point having backups if you can't retrieve them when needed.
3. Prep the server
For goodness sake, change the root password:
passwd
Create a user account for Ansible to do its thing through:
useradd --create-home deploy
passwd deploy
Authorize your ssh key if you want passwordless ssh login (optional):
mkdir /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
nano /home/deploy/.ssh/authorized_keys
chmod 400 /home/deploy/.ssh/authorized_keys
chown deploy:deploy /home/deploy -R
echo 'deploy ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/deploy
Your new account will be automatically set up for passwordless sudo
. Or you can just add your deploy
user to the sudo group.
adduser deploy sudo
On your local machine
Ansible (the tool setting up your server) runs locally on your computer and sends commands to the remote server. Download this repository somewhere on your machine, either through Clone or Download > Download ZIP
above, wget
, or git
as below
git clone https://github.com/sovereign/sovereign.git
4. Configure your installation
Modify the settings in the group_vars/sovereign
folder to your liking. If you want to see how theyâre used in context, just search for the corresponding string.
All of the variables in group_vars/sovereign
must be set for sovereign to function.
For Git hosting, copy your public key into place:
cp ~/.ssh/id_rsa.pub roles/git/files/gitolite.pub
Finally, replace the host.example.net
in the file hosts
. If your SSH daemon listens on a non-standard port, add a colon and the port number after the IP address. In that case you also need to add your custom port to the task Set firewall rules for web traffic and SSH
in the file roles/common/tasks/ufw.yml
.
5. Set up DNS
If youâve just bought a new domain name, point it at Linodeâs DNS Manager or similar. Most VPS services (and even some domain registrars) offer a managed DNS service that you can use for this at no charge. If youâre using an existing domain thatâs already managed elsewhere, you can probably just modify a few records.
Create A
or CNAME
records which point to your server's IP address:
example.com
mail.example.com
www.example.com
(for Web hosting)autoconfig.example.com
(for email client automatic configuration)read.example.com
(for Wallabag)news.example.com
(for Selfoss)cloud.example.com
(for ownCloud)git.example.com
(for cgit)
6. Run the Ansible Playbooks
First, make sure youâve got Ansible 1.9.3+ installed.
To run the whole dang thing:
ansible-playbook -i ./hosts --ask-sudo-pass site.yml
If you chose to make a passwordless sudo deploy user, you can omit the --ask-sudo-pass
argument.
To run just one or more piece, use tags. I try to tag all my includes for easy isolated development. For example, to focus in on your firewall setup:
ansible-playbook -i ./hosts --tags=ufw site.yml
You might find that it fails at one point or another. This is probably because something needs to be done manually, usually because thereâs no good way of automating it. Fortunately, all the tasks are clearly named so you should be able to find out where it stopped. Iâve tried to add comments where manual intervention is necessary.
The dependencies
tag just installs dependencies, performing no other operations. The tasks associated with the dependencies
tag do not rely on the user-provided settings that live in group_vars/sovereign
. Running the playbook with the dependencies
tag is particularly convenient for working with Docker images.
7. Finish DNS set-up
Create an MX
record for example.com
which assigns mail.example.com
as the domainâs mail server.
To ensure your emails pass DKIM checks you need to add a txt
record. The name field will be default._domainkey.EXAMPLE.COM.
The value field contains the public key used by DKIM. The exact value needed can be found in the file /var/lib/rspamd/dkim/EXAMPLE.COM.default.txt
. It will look something like this:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKKAQfMwKVx+oJripQI+Ag4uTwYnsXKjgBGtl7Tk6UMTUwhMqnitqbR/ZQEZjcNolTkNDtyKZY2Z6LqvM4KsrITpiMbkV1eX6GKczT8Lws5KXn+6BHCKULGdireTAUr3Id7mtjLrbi/E3248Pq0Zs39hkDxsDcve12WccjafJVwIDAQAB
For DMARC you'll also need to add a txt
record. The name field should be _dmarc.EXAMPLE.COM
and the value should be v=DMARC1; p=none
. More info on DMARC can be found here.
Set up SPF and reverse DNS as per this post. Make sure to validate that itâs all working, for example, by sending an email to [email protected] and reviewing the report that will be emailed back to you.
8. Miscellaneous Configuration
Sign in to the ZNC web interface and set things up to your liking. It isnât exposed through the firewall, so you must first set up an SSH tunnel:
ssh [email protected] -L 6643:localhost:6643
Then proceed to http://localhost:6643 in your web browser.
Similarly, to access the server monitoring page, use another SSH tunnel:
ssh [email protected] -L 2812:localhost:2812
Again proceeding to http://localhost:2812 in your web browser.
Finally, sign into ownCloud with a new administrator account to set it
up. You should select PostgreSQL as the configuration backend. Use
owncloud
as the database user and the database name. For the
database password ansible has created a set of random passwords for
each service and stores them in your local folder secret
, use the
one in the file owncloud_db_password
.
How To Use Your New Personal Cloud
Weâre collecting known-good client setups on our wiki.
Troubleshooting
If you run into an errors, please check the wiki page. If the problem you encountered, is not listed, please go ahead and create an issue. If you already have a bugfix and/or workaround, just put them in the issue and the wiki page.
Reboots
You will need to manually enter the password for any encrypted volumes on reboot. This is not Sovereign-specific, but rather a function of how EncFS works. This will necessitate SSHing into your machine after reboot, or accessing it via a console interface if one is available to you. Once you're in, run this:
encfs /encrypted /decrypted --public
It is possible that some daemons may need to be restarted after you enter your password for the encrypted volume(s). Some services may stall out while looking for resources that will only be available once the /decrypted
volume is available and visible to daemon user accounts.
IRC
Ask questions and provide feedback in #sovereign
on Freenode.