Self-Host
If you want your data to stay on your own servers, you can install Teknik Danışman on-premise or in your own private cloud. Suited for KVKK privacy, air-gapped environments (banking/defence) and highly regulated sectors.
Who is it for?
- Banking, insurance, public sector — data must not leave the organisation
- Defence, healthcare, legal — sensitive information classification in place
- 50+ person IT teams — want to enforce their own DR/backup policy
- Large holdings using off-cloud data centres
System requirements
| Component | Minimum | Recommended |
|---|---|---|
| OS | Ubuntu 22.04 / Debian 12 / RHEL 9 | Ubuntu 24.04 LTS |
| CPU | 2 vCPU | 4 vCPU (for 50+ users) |
| RAM | 4 GB | 8 GB |
| Disk | 20 GB SSD | 100 GB NVMe |
| PHP | 8.2 | 8.3 + FPM + OPcache |
| MySQL | 8.0 | 8.4 LTS |
| Web server | nginx 1.20+ or Apache 2.4 | nginx 1.24+ |
| TLS | Let's Encrypt or enterprise CA | Wildcard certificate (for multi-tenant) |
Deployment options
Single-node
nginx + PHP-FPM + MySQL on a single server. 50-200 users.
Simplest — our reference setup also follows this pattern.
HA cluster
nginx LB + 2+ app servers + MySQL master/replica.
For 500+ users. Session: Redis or DB.
Docker Compose
Dev/test environment with a single docker-compose.yml.
Roadmap: Q3 2026.
Kubernetes (Helm)
Multi-replica deployment via Helm chart.
Roadmap: 2027.
Quick setup (single-node)
apt update && apt install -y nginx mysql-server \
php8.3-fpm php8.3-mysql php8.3-curl php8.3-mbstring \
php8.3-xml php8.3-gd php8.3-zip php8.3-intl \
certbot python3-certbot-nginx
You receive a licensed tarball + a one-time license_key. Extract to /var/www/teknikdanisman.
cd /var/www && tar -xzf teknikdanisman-vX.Y.Z.tar.gz
chown -R www-data:www-data teknikdanisman
Master DB credentials, GROQ_API_KEY (for AI Assistant, optional), license_key.
<?php
define('MASTER_DB_HOST', 'localhost');
define('MASTER_DB_NAME', 'td_master');
define('MASTER_DB_USER', 'tdpanel');
define('MASTER_DB_PASS', '...');
define('LICENSE_KEY', 'td-onprem-...');
define('GROQ_API_KEY', ''); // opsiyonel
define('APP_ENCRYPTION_KEY', '...'); // openssl rand -hex 32
mysql -e "CREATE DATABASE td_master CHARACTER SET utf8mb4"
mysql -e "GRANT ALL ON td_master.* TO 'tdpanel'@'localhost' IDENTIFIED BY '...'"
mysql -e "GRANT CREATE, DROP ON *.* TO 'tdpanel'@'localhost'" # for tenant DBs
cd /var/www/teknikdanisman && php init_master.php
cp deploy/nginx.conf /etc/nginx/sites-available/teknikdanisman
ln -s ../sites-available/teknikdanisman /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
certbot --nginx -d panel.firma.local
Named notification, backup and webhook delivery crons to www-data crontab:
*/15 * * * * cd /var/www/teknikdanisman && php cron/send_alerts.php
30 9 * * * cd /var/www/teknikdanisman && php cron/trial_warnings.php
*/5 * * * * cd /var/www/teknikdanisman && php cron/pdks_pull_runner.php
* * * * * cd /var/www/teknikdanisman && php cron/webhook_dispatch.php
0 3 * * * bash /var/www/teknikdanisman/ops/teknikdanisman_backup.sh
Licensing
Self-host model has two tiers:
- Annual licence — per-user count (50 / 200 / 500+). Each installation validates itself via
license_key. - Support + updates — optional SLA package (8x5 standard, 24x7 enterprise).
Without a licence the installation runs in "evaluation mode" on startup (30 days, 5 users, banner warning).
Updates
- Quarterly release cadence — new feature + bug fix bundle
- Interim release for critical security fixes (48 hours for CVSS 7+)
- Zero-downtime schema upgrade via migration runner (
php migrate.php up) - Changelog: /changelog.php — description of all patches
SaaS vs Self-Host
| Feature | SaaS | Self-Host |
|---|---|---|
| Setup time | 5 min | ~2 hours (initial setup) |
| Updates | Automatic | Manual (quarterly) |
| Backup | Our DR runbook | Your own backup policy |
| Data location | EU (Hetzner DE) | Your server |
| Custom domain | Subdomain (vakıf.teknikdanisman.net) | Full control |
| SSO integration | Microsoft Entra ID (PoC) | Full OIDC/SAML, enterprise IdP |
| Pricing | User/month | Annual licence + support |