ℹ Language notice: Developer documentation on this page is currently maintained in Turkish. Code samples, HTTP headers and URLs are language-neutral; narrative sections will be translated to English. If you need help right now, email admin@teknikdanisman.net.

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?

System requirements

ComponentMinimumRecommended
OSUbuntu 22.04 / Debian 12 / RHEL 9Ubuntu 24.04 LTS
CPU2 vCPU4 vCPU (for 50+ users)
RAM4 GB8 GB
Disk20 GB SSD100 GB NVMe
PHP8.28.3 + FPM + OPcache
MySQL8.08.4 LTS
Web servernginx 1.20+ or Apache 2.4nginx 1.24+
TLSLet's Encrypt or enterprise CAWildcard 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)

1. System dependencies
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
2. Download code

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
3. config.local.php

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
4. Master DB
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
5. nginx vhost + TLS
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
6. Cron jobs

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
Detailed guide: The steps above are an overview. For self-host customers, we send a custom runbook during onboarding that includes setup + 30-day SLA + update procedure. Contact us for a pilot.

Licensing

Self-host model has two tiers:

Without a licence the installation runs in "evaluation mode" on startup (30 days, 5 users, banner warning).

Updates

SaaS vs Self-Host

FeatureSaaSSelf-Host
Setup time5 min~2 hours (initial setup)
UpdatesAutomaticManual (quarterly)
BackupOur DR runbookYour own backup policy
Data locationEU (Hetzner DE)Your server
Custom domainSubdomain (vakıf.teknikdanisman.net)Full control
SSO integrationMicrosoft Entra ID (PoC)Full OIDC/SAML, enterprise IdP
PricingUser/monthAnnual licence + support

Get a self-host quote →