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: Q4 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
The package is encoded with ionCube; the free ionCube Loader (PHP 8.3 or 8.4) must be installed on the server.
You receive the encoded package, its SHA256 checksum and a license key bound to your server name. Verify the package and extract it to /var/www/teknikdanisman.
sha256sum -c teknikdanisman-onprem-*.tar.gz.sha256
cd /var/www && tar -xzf ~/teknikdanisman-onprem-*.tar.gz
chown -R www-data:www-data teknikdanisman
Copy the example file and fill it in: database credentials, panel address, encryption key, license key and (optional) AI keys.
cd /var/www/teknikdanisman && cp deploy/config.local.example.php config.local.php
# $MASTER_DB_PASS, APP_URL, APP_ENCRYPTION_KEY (openssl rand -hex 32),
# BACKUP_ZIP_PASSWORD, LICENSE_KEY ('TDL1....'), GEMINI_API_KEY / GROQ_API_KEY (opsiyonel)
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/teknikdanisman-common.conf /etc/nginx/snippets/
cp deploy/nginx.conf /etc/nginx/sites-available/teknikdanisman # panel.firma.com → sunucu adınız
ln -s ../sites-available/teknikdanisman /etc/nginx/sites-enabled/teknikdanisman
certbot certonly --webroot -w /var/www/teknikdanisman -d panel.firma.com
nginx -t && systemctl reload nginx
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 verifies its own license key: the signed key is bound to the server name, user and tenant counts and an expiry date. Verification is offline; your server never contacts us.
- Support + updates — optional SLA package (8x5 standard, 24x7 enterprise).
A time-limited license is issued for trials. Administrators are warned 30 days before expiry; a 30-day grace period follows. Without a license, after the grace period, or when opened under a server name not in the license, the panel closes; your data stays on your server and the panel reopens as soon as a new key is set. Releases published after your update period ends cannot be installed.
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, Germany) | 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 |