Deploying Snikket
Introduction
Snikket is a modern, user-friendly messaging platform built on the XMPP protocol. It packages the battle-tested Prosody XMPP server with beautiful mobile and web apps, making self-hosted instant messaging accessible to everyone—not just system administrators.
Unlike proprietary messaging apps that lock you into a single service, Snikket uses the federated XMPP standard, meaning you can communicate with users on other XMPP servers. Combined with end-to-end encryption via OMEMO, Snikket provides secure, private messaging under your control.
Key features of Snikket include:
- User-Friendly: Designed for real people, not just developers
- End-to-End Encryption: OMEMO encryption for secure conversations
- Beautiful Apps: Native iOS, Android, and web applications
- Federation: Communicate with any XMPP server worldwide
- Voice and Video Calls: Built-in audio and video calling
- Group Chats: Private group conversations with admin controls
- File Sharing: Share photos, videos, and files securely
- Message Sync: Seamless experience across all your devices
- Invitation System: Easy user onboarding with invitation links
- Admin Portal: Simple web-based administration
- Push Notifications: Reliable notifications on mobile devices
- Open Source: Based on Prosody XMPP server
- Standards-Based: Full XMPP compliance for interoperability
This guide walks through deploying Snikket on Klutch.sh using Docker.
Why Deploy Snikket on Klutch.sh
Deploying Snikket on Klutch.sh provides several advantages:
Complete Control: Own your messaging infrastructure and data.
Simplified Setup: Klutch.sh handles deployment complexity.
HTTPS by Default: Automatic SSL certificates for secure connections.
Persistent Storage: Your messages and files survive restarts.
Custom Domains: Use your own domain for professional messaging.
Always Available: 24/7 uptime for real-time communication.
Prerequisites
Before deploying Snikket on Klutch.sh, ensure you have:
- A Klutch.sh account
- A GitHub account with a repository for your configuration
- A custom domain with full DNS control
- Basic familiarity with Docker and DNS configuration
Important DNS Requirements
Snikket requires specific DNS records for proper operation. You’ll need to configure:
- A record for your main domain
- SRV records for XMPP service discovery
- Additional records for federation (optional)
Deploying Snikket on Klutch.sh
Create a GitHub Repository
Create a new GitHub repository for your Snikket deployment configuration.
Create Your Dockerfile
Create a Dockerfile:
FROM snikket/snikket-server:stable
ENV SNIKKET_DOMAIN=${SNIKKET_DOMAIN}ENV SNIKKET_ADMIN_EMAIL=${SNIKKET_ADMIN_EMAIL}ENV SNIKKET_TWEAK_TURNSERVER=0
EXPOSE 80EXPOSE 443EXPOSE 5222EXPOSE 5269EXPOSE 5280EXPOSE 5281
VOLUME /snikket
CMD ["/start.sh"]Push Your Repository to GitHub
Commit and push your Dockerfile.
Configure DNS Records
Set up the required DNS records for your domain:
| Type | Name | Value |
|---|---|---|
| A | @ | Your server IP |
| A | * | Your server IP |
| SRV | _xmpp-client._tcp | 0 5 5222 your-domain.com |
| SRV | _xmpp-server._tcp | 0 5 5269 your-domain.com |
Create a New Project on Klutch.sh
Navigate to the Klutch.sh dashboard and create a new project.
Create a New App
Create a new app and connect your GitHub repository.
Configure Environment Variables
Add the following environment variables:
| Variable | Value |
|---|---|
SNIKKET_DOMAIN | Your domain (e.g., chat.example.com) |
SNIKKET_ADMIN_EMAIL | Admin email address |
Configure Port Settings
Snikket requires multiple ports:
| Port | Purpose |
|---|---|
| 80 | HTTP (redirects to HTTPS) |
| 443 | HTTPS (web portal) |
| 5222 | Client connections (XMPP) |
| 5269 | Server-to-server (XMPP federation) |
Configure HTTP port 443 for the web interface.
Attach Persistent Storage
Add a persistent volume:
| Mount Path | Recommended Size | Purpose |
|---|---|---|
/snikket | 10 GB+ | All Snikket data |
Deploy Your Application
Click Deploy to start the build process.
Access Admin Portal
Once deployed, access the web portal at your domain to complete setup.
Create First User
Use the admin portal to create invitation links for users.
Setting Up Users
Snikket uses an invitation-based system:
- Access the admin portal at your Snikket domain
- Log in with your admin credentials
- Create invitation links for new users
- Share links with users to invite them
- Users download the Snikket app and use the link to register
Snikket Apps
Users can access Snikket through:
- Snikket iOS App: Available on the App Store
- Snikket Android App: Available on Google Play and F-Droid
- Web Portal: Browser-based access at your domain
Federation with Other XMPP Servers
Snikket can communicate with other XMPP servers:
- Ensure SRV records are properly configured
- Server-to-server connections use port 5269
- Users can message contacts on any XMPP server using full JID (user@domain.com)
Additional Resources
- Snikket Official Website
- Snikket Quick Start Guide
- Snikket GitHub Organization
- Prosody XMPP Server
- Klutch.sh Persistent Volumes
- Klutch.sh Deployments
Conclusion
Deploying Snikket on Klutch.sh gives you a modern, secure messaging platform that you control. With beautiful native apps, end-to-end encryption, and XMPP federation, Snikket offers the features of commercial messengers while keeping your data private.
Whether for family, friends, or your organization, Snikket provides the privacy and control that centralized messaging services cannot offer.