Administration Tool for TAK Server on Raspberry Pi 5
⚠️ Disclaimer: This software is not affiliated with, endorsed by, or connected to the TAK Product Center, U.S. Department of Defense, or any government agency. "TAK", "ATAK", "WinTAK", and "iTAK" are products of the U.S. Government.
- Overview
- Prerequisites
- Hardware Setup
- Software Installation
- TAK Server Download
- Initial Configuration
- HTTPS Setup (Recommended)
- Certificate Management
- Client Configuration
- Advanced Features
- Maintenance & Operations
- Troubleshooting
- Security Best Practices
CoT Server Admin is a web-based administration interface that simplifies the deployment and management of TAK Server on Raspberry Pi 5. It provides:
- Zero command-line configuration after initial setup
- Web-based dashboard for monitoring and control
- Certificate management with one-click generation
- Connection profiles with QR codes for easy client setup
- Backup and restore functionality
- Audit logging for security compliance
- Session security with rate limiting and lockouts
┌─────────────────────────────────────────────────────────────┐
│ Your Network │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────────────────────┐ │
│ │ TAK Clients │ │ Raspberry Pi 5 │ │
│ │ │ │ ┌────────────────────────┐ │ │
│ │ • ATAK │────▶│ │ TAK Server │ │ │
│ │ • WinTAK │ │ │ (Port 8089/8443) │ │ │
│ │ • iTAK │ │ └────────────────────────┘ │ │
│ │ │ │ ┌────────────────────────┐ │ │
│ └──────────────┘ │ │ CoT Server Admin │ │ │
│ │ │ (Port 5000/443) │ │ │
│ ┌──────────────┐ │ └────────────────────────┘ │ │
│ │ Admin │────▶│ ┌────────────────────────┐ │ │
│ │ Browser │ │ │ PostgreSQL │ │ │
│ └──────────────┘ │ │ (Database) │ │ │
│ │ └────────────────────────┘ │ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
| Component | Minimum | Recommended |
|---|---|---|
| Raspberry Pi | Pi 5 (4GB) | Pi 5 (8GB or 16GB) |
| Storage | 32GB microSD | 64GB+ microSD (Class 10/A2) |
| Power Supply | Official 27W USB-C | Official 27W USB-C |
| Network | Ethernet or WiFi | Gigabit Ethernet |
| Cooling | Passive heatsink | Active cooling case |
- Operating System: Raspberry Pi OS (64-bit) - Bookworm or later
- Internet Access: Required for initial setup and package downloads
- TAK.gov Account: Required to download TAK Server software
| Port | Protocol | Purpose |
|---|---|---|
| 22 | TCP | SSH access (optional) |
| 5000 | TCP | CoT Server Admin (HTTP) |
| 443 | TCP | CoT Server Admin (HTTPS) |
| 8089 | TCP | TAK Server (SSL client connections) |
| 8443 | TCP | TAK Server (Web interface) |
| 8446 | TCP | TAK Server (Federation) |
- Basic familiarity with Raspberry Pi
- Ability to connect via SSH or use terminal
- Basic networking knowledge (IP addresses, ports)
-
Flash Raspberry Pi OS
- Download Raspberry Pi Imager from raspberrypi.com - Select "Raspberry Pi OS (64-bit)" - Click the gear icon for advanced options: ✓ Set hostname: tak-server ✓ Enable SSH (use password authentication) ✓ Set username: pi ✓ Set password: [your secure password] ✓ Configure WiFi (if not using Ethernet) ✓ Set locale settings - Flash to microSD card -
Initial Boot
- Insert microSD card into Raspberry Pi - Connect Ethernet cable (recommended) - Connect power supply - Wait 2-3 minutes for first boot -
Find Your Pi's IP Address
# Option 1: Check your router's connected devices # Option 2: If you have a display connected hostname -I # Option 3: Network scan (from another computer) # Linux/Mac: arp -a | grep raspberry # or nmap -sn 192.168.1.0/24
# From your computer
ssh pi@YOUR_PI_IP
# Example:
ssh pi@192.168.1.100# Update package lists and upgrade
sudo apt update && sudo apt upgrade -y
# Reboot if kernel was updated
sudo rebootOption A: Direct Download (if Pi has internet)
# SSH into your Pi
ssh pi@YOUR_PI_IP
# Create directory and download
mkdir -p ~/cot-server-admin
cd ~/cot-server-admin
# Transfer the zip file (from your computer)
# Exit SSH first, then:
scp CoT_Server_Admin_v1.5.zip pi@YOUR_PI_IP:~/cot-server-admin/Option B: Transfer from your computer
# From your computer (not the Pi)
scp CoT_Server_Admin_v1.5.zip pi@YOUR_PI_IP:~/
# Then SSH in and extract
ssh pi@YOUR_PI_IP
cd ~
unzip CoT_Server_Admin_v1.5.zip -d cot-server-admin
cd cot-server-admincd ~/cot-server-admin
ls -la
# You should see:
# - cot_server_admin.py
# - deploy_tak_server.sh
# - install_cot_server_admin.sh
# - install_all.sh
# - setup_https.sh
# - Various .html template files
# - README.mdOption A: Complete Installation (Recommended)
# Make scripts executable
chmod +x *.sh
# Run complete installation
sudo ./install_all.shThis will:
- Install all dependencies (Java, PostgreSQL, Python, etc.)
- Configure the database
- Set up TAK Server directory structure
- Install CoT Server Admin web interface
- Configure firewall rules
- Start all services
Option B: Step-by-Step Installation
# Step 1: Deploy TAK Server infrastructure
chmod +x *.sh
sudo ./deploy_tak_server.sh
# Step 2: Install web admin interface
sudo ./install_cot_server_admin.sh# Check services are running
sudo systemctl status cot-server-admin
sudo systemctl status postgresql
# Get your Pi's IP address
hostname -I
# View generated credentials
sudo cat /opt/tak/.credentialsExpected Output:
TAK Server Credentials
======================
Generated: 2025-02-02 10:30:45
Database Password: xK9#mP2$vL5nQ8wR
Certificate Password: bH7@jN4*cF6yT3zA
Web Admin Password: mW5&pR8!qS2xV9eK
IMPORTANT: Store these credentials securely!
- Visit https://tak.gov
- Click "Register" or "Create Account"
- Fill out the registration form
- Verify your email address
- Wait for account approval (may take 1-3 business days)
- Log into https://tak.gov
- Navigate to "Products" → "TAK Server"
- Download the latest version (e.g.,
takserver-docker-5.2-RELEASE-27.zip) - Note: Download the Docker version for easier setup
# From your computer
scp takserver-docker-5.2-RELEASE-27.zip pi@YOUR_PI_IP:~/
# SSH into Pi
ssh pi@YOUR_PI_IP
# Extract TAK Server
cd ~
unzip takserver-docker-5.2-RELEASE-27.zip
# Move to correct location
sudo mkdir -p /opt/tak
sudo mv takserver-docker-5.2-RELEASE-27 /opt/tak/
sudo chown -R root:root /opt/tak/takserver-docker-5.2-RELEASE-27The deployment script has prepared everything. Start TAK Server:
# Via command line
sudo systemctl start takserver
# Check status
sudo systemctl status takserverOr use the web interface (see next section).
-
Open a web browser on your computer
-
Navigate to:
http://YOUR_PI_IP:5000- Example:
http://192.168.1.100:5000
- Example:
-
Login with:
- Username:
admin - Password: Found in
/opt/tak/.credentials(Web Admin Password)
- Username:
After logging in, you'll see the Dashboard with:
┌─────────────────────────────────────────────────────────────┐
│ 🛰️ CoT Server Admin │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ TAK Server │ │ Database │ │ Web Admin │ │
│ │ ● Active │ │ ● Active │ │ ● Active │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ System Information │
│ ├─ CPU: 12% │
│ ├─ Memory: 1.2GB / 8GB │
│ ├─ Disk: 8.5GB / 64GB │
│ └─ Uptime: 2 days, 3 hours │
│ │
│ Quick Actions │
│ [Start TAK] [Stop TAK] [Restart TAK] [View Logs] │
│ │
└─────────────────────────────────────────────────────────────┘
- Click "Configuration" in the sidebar
- Review and adjust key settings:
| Setting | Default | Description |
|---|---|---|
| Server Name | tak-server | Displayed to clients |
| SSL Port | 8089 | Client connection port |
| Web Port | 8443 | Web UI port |
| Max Connections | 100 | Maximum concurrent clients |
| Federation Port | 8446 | For multi-server setups |
- Click "Save Configuration"
- Restart TAK Server when prompted
IMPORTANT: Change the default admin password immediately!
- Click "Users" in the sidebar
- Click on the admin user
- Click "Change Password"
- Enter a strong new password
- Click "Update"
- Encrypts all traffic between your browser and the admin interface
- Prevents credential interception on the network
- Required for some browser features
# SSH into your Pi
ssh pi@YOUR_PI_IP
# Run the HTTPS setup script
cd ~/cot-server-admin
sudo ./setup_https.shThe script will prompt you:
HTTPS Setup Options:
1. Self-signed certificate (quick, works immediately)
2. Let's Encrypt certificate (requires domain name)
Enter choice [1-2]:
Option 1: Self-Signed (Recommended for local networks)
- Works immediately
- Browser will show security warning (can be bypassed)
- Good for testing and internal use
Option 2: Let's Encrypt (For public access)
- Requires a domain name pointing to your Pi
- Requires ports 80 and 443 open to the internet
- Certificates auto-renew
# Run verification script
sudo ./verify_https.shExpected Output:
HTTPS Verification Results
==========================
✅ Nginx is running
✅ SSL certificate is valid
✅ HTTPS redirect is working
✅ CoT Server Admin is accessible
Access your server at:
https://192.168.1.100
- Open browser to:
https://YOUR_PI_IP - If using self-signed certificate:
- Click "Advanced" → "Proceed to site"
- This is safe for your own server
TAK uses mutual TLS authentication:
- Server Certificate: Identifies the TAK Server
- Client Certificates: Identifies each TAK client (ATAK, WinTAK, etc.)
- CA Certificate: Signs all certificates (trust anchor)
- In CoT Server Admin, click "Certificates"
- Click "Generate New Certificate"
- Fill in the form:
Common Name: john_doe Organization: My Team Validity (days): 365 - Click "Generate"
- Download the
.p12file
| File | Purpose | Used By |
|---|---|---|
username.p12 |
Client certificate bundle | ATAK, WinTAK, iTAK |
truststore.p12 |
CA certificate (trust) | TAK clients |
server.crt |
Server's public certificate | Reference only |
For multiple team members:
- Click "Certificates" → "Bulk Generate"
- Enter names (one per line):
john_doe jane_smith team_lead operator_1 operator_2 - Click "Generate All"
- Download the ZIP file containing all certificates
If a device is lost or compromised:
- Click "Certificates"
- Find the certificate in the list
- Click the "Revoke" button
- Confirm the revocation
- The CRL (Certificate Revocation List) is automatically updated
- In CoT Server Admin, click "Connection Profiles"
- Select "ATAK" from the dropdown
- Enter the user's certificate name
- Click "Generate Profile"
- Scan the QR code with ATAK:
- Open ATAK → Menu → Settings → Network Preferences
- Tap "Import" → "Scan QR Code"
-
Transfer files to Android device:
username.p12(client certificate)truststore.p12(server trust)
-
Import into ATAK:
ATAK → Menu → Settings → Network Preferences → Manage Server Connections → Add Description: My TAK Server Address: YOUR_PI_IP Port: 8089 Protocol: SSL → Advanced → Certificates → Import Client Certificate: username.p12 → Import CA Certificate: truststore.p12 → Enter certificate password -
Connect:
- Toggle the connection ON
- Green indicator = connected
-
Download certificate files:
username.p12truststore.p12
-
Import certificates into Windows:
Double-click username.p12 → Store Location: Current User → Enter password from CoT Server Admin → Place in "Personal" store Repeat for truststore.p12 → Place in "Trusted Root Certification Authorities" -
Configure WinTAK:
WinTAK → Settings → Network → Server Connections → Add Name: My TAK Server Address: YOUR_PI_IP Port: 8089 Protocol: TLS → Select client certificate → Select CA certificate -
Connect and verify
-
Transfer certificate files via:
- AirDrop
- Email attachment
- iCloud Drive
-
Install certificates:
- Tap the
.p12file - Follow prompts to install profile
- Enter certificate password
- Tap the
-
Configure iTAK:
iTAK → Settings → Servers → Add Server Host: YOUR_PI_IP Port: 8089 Protocol: SSL Select installed certificates
| Problem | Solution |
|---|---|
| "Connection refused" | Check TAK Server is running, port 8089 is open |
| "Certificate error" | Verify certificate password, check expiration |
| "Untrusted certificate" | Import truststore.p12 on client |
| "Authentication failed" | Certificate may be revoked, regenerate |
Data packages distribute files (maps, overlays, configs) to TAK clients.
Upload a Data Package:
- Click "Data Packages"
- Drag and drop a
.zipor.dpkfile - Or click "Browse" to select file
- Package appears in the list
Distribute to Clients:
- Clients automatically sync data packages when connected
- Or manually push via "Send to Clients"
Create a Backup:
- Click "Backups"
- Click "Create Backup"
- Select what to include:
- ✓ Certificates
- ✓ Configuration
- ✓ Database
- ✓ Data Packages
- Click "Create"
- Download the backup
.zipfile
Restore from Backup:
- Click "Backups"
- Click "Upload Backup"
- Select your backup file
- Click "Restore"
- Confirm the restore operation
All administrative actions are logged for security compliance.
View Audit Logs:
- Click "Audit Log"
- Filter by:
- Date range
- Action type (login, certificate, config change)
- User
- Severity level
Export Logs:
- Set your filters
- Click "Export"
- Download JSON file for analysis
View Active Sessions:
- Click "Security"
- See all logged-in admin sessions
- Terminate suspicious sessions if needed
Security Settings:
| Setting | Default | Description |
|---|---|---|
| Session Timeout | 30 min | Auto-logout after inactivity |
| Max Login Attempts | 5 | Before account lockout |
| Lockout Duration | 15 min | Time until unlock |
| Max Concurrent Sessions | 3 | Per user |
For connecting multiple TAK Servers:
- Click "Configuration"
- Enable "Federation"
- Configure federation settings:
- Federation Port: 8446
- Federation Name: unique identifier
- Exchange federation certificates between servers
Via Web Interface:
- Dashboard → Quick Actions → Start/Stop/Restart
Via Command Line:
# TAK Server
sudo systemctl start takserver
sudo systemctl stop takserver
sudo systemctl restart takserver
sudo systemctl status takserver
# CoT Server Admin
sudo systemctl start cot-server-admin
sudo systemctl stop cot-server-admin
sudo systemctl restart cot-server-admin
sudo systemctl status cot-server-admin
# PostgreSQL Database
sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl status postgresql| Log | Location | Command |
|---|---|---|
| TAK Server | Journal | journalctl -u takserver -f |
| CoT Admin | Journal | journalctl -u cot-server-admin -f |
| Nginx | /var/log/nginx/ |
tail -f /var/log/nginx/error.log |
| Audit | /opt/tak/audit.log |
tail -f /opt/tak/audit.log |
Update CoT Server Admin:
# Backup current installation
sudo cp -r /opt/cot-server-admin /opt/cot-server-admin.bak
# Transfer new files
scp CoT_Server_Admin_v1.6.zip pi@YOUR_PI_IP:~/
# Extract and update
ssh pi@YOUR_PI_IP
cd ~
unzip CoT_Server_Admin_v1.6.zip -d cot-server-admin-new
sudo cp cot-server-admin-new/*.py /opt/cot-server-admin/
sudo cp cot-server-admin-new/*.html /opt/cot-server-admin/templates/
# Restart service
sudo systemctl restart cot-server-adminUpdate TAK Server:
- Download new version from TAK.gov
- Create backup via web interface
- Stop TAK Server
- Extract new version
- Restore configuration
- Start TAK Server
# Check disk usage
df -h
# Find large files
du -sh /opt/tak/*
# Clean old backups (keep last 5)
ls -t /opt/tak/backups/*.zip | tail -n +6 | xargs rm -f
# Clean old logs
sudo journalctl --vacuum-time=7d# Check if service is running
sudo systemctl status cot-server-admin
# Check for errors
sudo journalctl -u cot-server-admin -n 50
# Restart service
sudo systemctl restart cot-server-admin
# Check port is listening
sudo netstat -tlnp | grep 5000# Check status
sudo systemctl status takserver
# View detailed logs
sudo journalctl -u takserver -n 100
# Common issues:
# - Java not installed: sudo apt install default-jdk
# - Port already in use: sudo lsof -i :8089
# - Database not running: sudo systemctl start postgresql# Check certificate directory permissions
ls -la /opt/tak/certs/
# Verify OpenSSL is installed
openssl version
# Check disk space
df -h /opt/tak/-
Verify TAK Server is running:
sudo systemctl status takserver
-
Check firewall:
sudo ufw status # Should show 8089 ALLOW -
Test port from another machine:
nc -zv YOUR_PI_IP 8089
-
Verify certificate validity:
- Check expiration date in web interface
- Ensure certificate isn't revoked
# SSH into Pi
ssh pi@YOUR_PI_IP
# Stop the service
sudo systemctl stop cot-server-admin
# Reset password (creates new random password)
cd /opt/cot-server-admin
sudo python3 -c "
from cot_server_admin import generate_password_hash
import secrets
new_pass = secrets.token_urlsafe(12)
print(f'New admin password: {new_pass}')
# Update in database or users file
"
# Restart service
sudo systemctl start cot-server-admin# WARNING: This removes all data!
# Stop services
sudo systemctl stop cot-server-admin
sudo systemctl stop takserver
# Remove data (keeps configuration)
sudo rm -rf /opt/tak/certs/clients/*
sudo rm -rf /opt/tak/backups/*
sudo rm -f /opt/tak/audit.log
# Reset database
sudo -u postgres psql -c "DROP DATABASE IF EXISTS tak;"
sudo -u postgres psql -c "CREATE DATABASE tak;"
# Restart
sudo systemctl start takserver
sudo systemctl start cot-server-admin- Use HTTPS for admin interface (see Section 7)
- Firewall rules - only open necessary ports:
sudo ufw default deny incoming sudo ufw allow ssh sudo ufw allow 443/tcp # HTTPS admin sudo ufw allow 8089/tcp # TAK clients sudo ufw enable
- VPN access - consider placing admin interface behind VPN
- Regular updates:
sudo apt update && sudo apt upgrade -y
- Strong passwords - minimum 12 characters with complexity
- Change default credentials immediately after installation
- Review active sessions regularly
- Enable account lockout (enabled by default)
- Monitor audit logs for suspicious activity
- Short validity periods - 90-365 days recommended
- Unique certificates per user/device
- Immediate revocation when devices are lost/compromised
- Secure storage of CA private key
- Regular CRL updates (automatic with CoT Server Admin)
- Encrypt backups before storing off-device
- Regular backup schedule - daily or weekly
- Test restores periodically
- Store backups off-site (not just on the Pi)
- Secure transfer - use SFTP or encrypted channels
- Secure location for Raspberry Pi
- Disable unused ports (USB, HDMI if not needed)
- SD card encryption (optional, impacts performance)
- Access logging at physical location
| Service | URL |
|---|---|
| Admin (HTTP) | http://YOUR_PI_IP:5000 |
| Admin (HTTPS) | https://YOUR_PI_IP |
| TAK Server | https://YOUR_PI_IP:8443 |
| Service | Username | Password Location |
|---|---|---|
| CoT Admin | admin | /opt/tak/.credentials |
| Database | tak | /opt/tak/.credentials |
# View credentials
sudo cat /opt/tak/.credentials
# Service status
sudo systemctl status cot-server-admin takserver postgresql
# View logs
sudo journalctl -u cot-server-admin -f
sudo journalctl -u takserver -f
# Restart services
sudo systemctl restart cot-server-admin takserver| Purpose | Path |
|---|---|
| CoT Admin | /opt/cot-server-admin/ |
| TAK Server | /opt/tak/ |
| Certificates | /opt/tak/certs/ |
| Backups | /opt/tak/backups/ |
| Audit Log | /opt/tak/audit.log |
| Credentials | /opt/tak/.credentials |
- TAK.gov: https://tak.gov
- TAK Documentation: Available after TAK.gov login
- TAK Community Discord: Links available on TAK.gov
- GitHub: [Your repository URL]
- Issues: [Your issues URL]
- License: Apache 2.0
Document Version: 1.5.0
Last Updated: February 2025
Compatible With: CoT Server Admin v1.5, TAK Server 5.x
This documentation is provided for the CoT Server Admin project, an independent open-source tool. It is not affiliated with or endorsed by the TAK Product Center or U.S. Government.