Servis Konfigürasyonu¶
Bu kılavuz, Stackvo'da servisleri nasıl yapılandıracağınızı ve kullanacağınızı detaylı olarak göstermektedir. MySQL, PostgreSQL, MongoDB gibi veritabanlarından Redis, Memcached gibi cache sistemlerine, RabbitMQ, Kafka gibi message queue'lardan Elasticsearch, Kibana gibi arama ve indeksleme araçlarına kadar 14 servisin aktivasyonu, PHP'den bağlantısı, CLI erişimi ve management UI kullanımı açıklanmaktadır.
Servis Aktivasyonu¶
.env Dosyasında Aktivasyon¶
# .env dosyasını düzenle
nano .env
# Servisi aktif et
SERVICE_MYSQL_ENABLE=true
SERVICE_REDIS_ENABLE=true
SERVICE_RABBITMQ_ENABLE=true
# Konfigürasyonları üret
./stackvo.sh generate
# Servisleri başlat
./stackvo.sh up
Veritabanları¶
MySQL¶
Aktivasyon:
SERVICE_MYSQL_ENABLE=true
SERVICE_MYSQL_VERSION=8.0
SERVICE_MYSQL_ROOT_PASSWORD=root
SERVICE_MYSQL_DATABASE=stackvo
SERVICE_MYSQL_USER=stackvo
SERVICE_MYSQL_PASSWORD=stackvo
PHP'den Bağlantı:
CLI Erişimi:
# Container içinden
docker exec -it stackvo-mysql mysql -u root -proot
# Host'tan
mysql -h 127.0.0.1 -P 3306 -u stackvo -pstackvo stackvo
Management UI:
PostgreSQL¶
Aktivasyon:
SERVICE_POSTGRES_ENABLE=true
SERVICE_POSTGRES_VERSION=14
SERVICE_POSTGRES_PASSWORD=root
SERVICE_POSTGRES_DB=stackvo
SERVICE_POSTGRES_USER=stackvo
PHP'den Bağlantı:
CLI Erişimi:
# Container içinden
docker exec -it stackvo-postgres psql -U stackvo -d stackvo
# Host'tan
psql -h 127.0.0.1 -p 5433 -U stackvo -d stackvo
Management UI:
MongoDB¶
Aktivasyon:
SERVICE_MONGO_ENABLE=true
SERVICE_MONGO_VERSION=5.0
SERVICE_MONGO_INITDB_ROOT_USERNAME=root
SERVICE_MONGO_INITDB_ROOT_PASSWORD=root
PHP'den Bağlantı:
<?php
$client = new MongoDB\Client(
'mongodb://root:root@stackvo-mongo:27017/stackvo?authSource=admin'
);
$db = $client->stackvo;
CLI Erişimi:
# Container içinden
docker exec -it stackvo-mongo mongosh -u root -p root --authenticationDatabase admin
Management UI:
Cache Sistemleri¶
Redis¶
Aktivasyon:
PHP'den Kullanım:
<?php
$redis = new Redis();
$redis->connect('stackvo-redis', 6379);
// Set
$redis->set('key', 'value');
// Get
$value = $redis->get('key');
// Expire
$redis->setex('key', 3600, 'value');
Laravel ile:
// config/database.php
'redis' => [
'client' => 'phpredis',
'default' => [
'host' => 'stackvo-redis',
'password' => null,
'port' => 6379,
'database' => 0,
],
],
CLI Erişimi:
# Redis CLI
docker exec -it stackvo-redis redis-cli
# Komutlar
> SET key value
> GET key
> KEYS *
> FLUSHALL
Memcached¶
Aktivasyon:
PHP'den Kullanım:
<?php
$memcached = new Memcached();
$memcached->addServer('stackvo-memcached', 11211);
// Set
$memcached->set('key', 'value', 3600);
// Get
$value = $memcached->get('key');
Management UI:
Message Queues¶
RabbitMQ¶
Aktivasyon:
SERVICE_RABBITMQ_ENABLE=true
SERVICE_RABBITMQ_VERSION=3
SERVICE_RABBITMQ_DEFAULT_USER=admin
SERVICE_RABBITMQ_DEFAULT_PASS=admin
PHP'den Kullanım:
<?php
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$connection = new AMQPStreamConnection(
'stackvo-rabbitmq',
5672,
'admin',
'admin'
);
$channel = $connection->channel();
// Queue oluştur
$channel->queue_declare('hello', false, false, false, false);
// Mesaj gönder
$msg = new AMQPMessage('Hello World!');
$channel->basic_publish($msg, '', 'hello');
// Mesaj al
$callback = function ($msg) {
echo 'Received: ', $msg->body, "\n";
};
$channel->basic_consume('hello', '', false, true, false, false, $callback);
Management UI:
Kafka¶
Aktivasyon:
PHP'den Kullanım:
<?php
// rdkafka extension gerekli
$conf = new RdKafka\Conf();
$conf->set('metadata.broker.list', 'stackvo-kafka:9092');
// Producer
$producer = new RdKafka\Producer($conf);
$topic = $producer->newTopic('test');
$topic->produce(RD_KAFKA_PARTITION_UA, 0, 'Message payload');
$producer->flush(10000);
Management UI:
Arama ve İndeksleme¶
Elasticsearch¶
Aktivasyon:
PHP'den Kullanım:
<?php
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()
->setHosts(['stackvo-elasticsearch:9200'])
->build();
// Index oluştur
$client->indices()->create(['index' => 'my_index']);
// Document ekle
$client->index([
'index' => 'my_index',
'id' => '1',
'body' => ['title' => 'Test Document']
]);
// Arama
$results = $client->search([
'index' => 'my_index',
'body' => [
'query' => [
'match' => ['title' => 'test']
]
]
]);
Kibana¶
Aktivasyon:
Erişim:
Monitoring¶
Grafana¶
Aktivasyon:
SERVICE_GRAFANA_ENABLE=true
SERVICE_GRAFANA_VERSION=latest
SERVICE_GRAFANA_ADMIN_USER=admin
SERVICE_GRAFANA_ADMIN_PASSWORD=admin
Erişim:
Developer Tools¶
MailHog¶
Aktivasyon:
PHP Konfigürasyonu:
Erişim:
Blackfire¶
Aktivasyon:
SERVICE_BLACKFIRE_ENABLE=true
SERVICE_BLACKFIRE_VERSION=latest
SERVICE_BLACKFIRE_SERVER_ID=
SERVICE_BLACKFIRE_SERVER_TOKEN=
PHP Extension:
Servis Yönetimi¶
Servis Başlatma/Durdurma¶
# Belirli servisi başlat
docker compose -f generated/stackvo.yml \
-f generated/docker-compose.dynamic.yml \
up -d mysql
# Belirli servisi durdur
docker compose -f generated/stackvo.yml \
-f generated/docker-compose.dynamic.yml \
stop mysql
# Belirli servisi yeniden başlat
docker compose -f generated/stackvo.yml \
-f generated/docker-compose.dynamic.yml \
restart mysql
Servis Logları¶
# Servis loglarını izle
docker logs -f stackvo-mysql
docker logs -f stackvo-redis
docker logs -f stackvo-rabbitmq
Servis Durumu¶
# Çalışan servisleri listele
docker ps --filter "name=stackvo-"
# Belirli servis detayları
docker inspect stackvo-mysql
Troubleshooting¶
Servis Başlamıyor¶
# Logları kontrol et
docker logs stackvo-<service-name>
# Port çakışması kontrolü
docker ps --format "table {{.Names}}\t{{.Ports}}"
# Konfigürasyonu yeniden üret
./stackvo.sh generate
./stackvo.sh restart
Bağlantı Hatası¶
# Network kontrolü
docker network inspect stackvo-net
# Ping testi
docker exec stackvo-php ping stackvo-mysql
# Port testi
docker exec stackvo-php nc -zv stackvo-mysql 3306
Data Kaybı¶
# Volume'ları listele
docker volume ls | grep stackvo
# Volume backup
docker run --rm -v stackvo_mysql-data:/data -v $(pwd):/backup ubuntu tar czf /backup/mysql-backup.tar.gz /data
# Volume restore
docker run --rm -v stackvo_mysql-data:/data -v $(pwd):/backup ubuntu tar xzf /backup/mysql-backup.tar.gz -C /