PHP Redis Form Veri Depolama ve Alma İşlemi

 PHP Redis Form Veri Depolama ve Alma İşlemi


Redis: GET, SET

<?php
try{
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->auth('mypassword');

if(isset($_POST['name'])){
$redis->set('name', $_POST['name']);
}
}
catch (Exception $e){
echo $e->getMessage();
}
?>
<html>
<head></head>
<body>
<strong>Basit Form</strong>
<br>
<form action="php_form_redis.php" method="post">
<input type="text" name="name">
<input type="submit" value="Kaydet">
</form>
<br>
<?php
echo 'redis database okunan değer:'. $redis->get('name');
?>
</body>
</html>

PHP Redis Son Kullanma Tarihi ve Kalıcılığı Yönetme

 PHP Redis Son Kullanma Tarihi ve Kalıcılığı Yönetme


Redis: EXPIRE, EXPIREAT, TTL, PERSIST

<?php
try{
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->auth('mypassword');

$key = "expire in 1 hour";
$redis->set($key, "test value");

$redis->expire($key, 3600); //silinme zamanı 1 saat olarak ayarlanır.

$redis->expireat($key, 1723043722); //silinme zamanı Unix Timestamp olarak ayarlanır.

print_r($redis->ttl($key)); //saniye cinsinden expire olmak için kalan süresini gösterir.

$redis->persist($key); //expire date üstündeki zamanı kaldırır ve kalıcı olarak key silinmeden durur.
}
catch (Exception $e){
echo $e->getMessage();
}
?>

PHP Redis Sıralı Küme "Array" Komutları

  PHP Redis Sıralı Küme "Array" KomutlarıSıralı Veri Yapıları için Güçlü İşlemler



Redis: ZADD, ZCARD, ZCOUNT, ZREM, ZRANGE, ZRANK, ZREVRANK, ZSCORE, ZRANGEBYSCORE

<?php
try{
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->auth('mypassword');

$key = "Languages12";
// zadd :sıralanmış bir kümeye bir veya birden fazla puan ekleyerek günceller.
$redis->zadd("sorted_set:{$key}",1,"PHP");
$redis->zadd("sorted_set:{$key}",2,"C#");
$redis->zadd("sorted_set:{$key}",3,"JAVA");

print_r($redis->zcard("sorted_set:{$key}")); //3 toplam kümede kaç eleman sayısını verir
echo "<br>";

print_r($redis->zcount("sorted_set:{$key}",1,2)); //2 toplam kaç küme index i var 0,1,2
echo "<br>";

$redis->zrem("sorted_set:Languages","JAVA");// belirtilen küme elmanıı kümeden kaldırır.
echo "<br>";

print_r($redis->zrange("sorted_set:{$key}",0,-1,"withscores"));//küme içindeki index ve değerleri gösterir.
echo "<br>";

print_r($redis->zrank("sorted_set:{$key}","C#")); //1 değerin kaçıncı indexe geldiğini söyler.
echo "<br>";
print_r($redis->zrange("sorted_set:{$key}",0,-1,"withscores")); // Puana göre artan şekilde sıralar.

print_r($redis->zrevrank("sorted_set:{$key}","C#")); //0 [0 based index] Bir oyuncunun puanı büyükten küçükten doğru sıralanınca rank değerini döndürür.
echo "<br>";

print_r($redis->zscore("sorted_set:{$key}","C#")); //2 Belirli bir oyuncunun puanını döndürür
echo "<br>";

print_r($redis->zrangebyscore("sorted_set:{$key}",1,2, array("withscores"=>true)));
}
catch (Exception $e){
echo $e->getMessage();
}
?>

PHP Redis Kümelerle "Array" Çalışma

 PHP  Redis Kümelerle "Array" Çalışma, Verimli Veri İşleme ve Küme İşlemleri



Redis: SADD, SADDARRAY, SMEMBERS, SREM, SISMEMBER, SISMEMBERS

<?php
try{
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->auth('mypassword');

$key = "Languages12";

$redis->sadd($key,'PHP');//atama işlemi
$redis->sAddArray($key,['C#','Ruby','Java']);
$redis->sadd($key,'PHP');// aynı değerden var ise bunu tekrar eklemicektir.
print_r($redis->smembers($key)); // Array ( [0] => Java [1] => PHP [2] => Array [3] => C#2 [4] => C# [5] => Ruby )
echo "<br>";

$redis->srem($key,'C#');// bir değeri kaldırmak için kullanılır
print_r($redis->smembers($key)); // Array ( [0] => Java [1] => PHP [2] => Ruby )
echo "<br>";

var_dump($redis->sismember($key,'C#')); // false
echo "<br>";

print_r($redis->smembers($key)); // Array ( [0] => Java [1] => PHP [2] => Ruby )
echo "<br>";
}
catch (Exception $e){
echo $e->getMessage();
}
?>

PHP Redis Hash Komutları

 PHP Redis Hash Komutları


Redis: HSET, HINCRBY, HMSET, HGETALL 

<?php
try{
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->auth('mypassword');

$key = "Ali Veli";

$redis->hSet($key,'age',35);//hash key'ine, key value ata
$redis->hSet($key,'country','Turkey');
$redis->hSet($key,'occupation','Software Engineer');
$redis->hSet($key,'deleted',0);

echo $redis->hget($key,'age'); //35
echo "<br>";

echo $redis->hget($key,'country'); //Turkey
echo "<br>";

$redis->del($key,'deleted'); //deleted olan key siler.

$redis->hincrBy($key,'age',10); //45 //integer değeri 10 arttır

//toplu atama
$redis->hmset($key,[
'age' => 35,
'country' => 'Turkey',
'occupation' => 'Software Engineer',
]);

$data = $redis->hGetAll($key);
print_r($data);
}
catch (Exception $e){
echo $e->getMessage();
}
?>

PHP Redis Listeleri Düzenleme

 PHP Redis Listeleri Düzenleme, Verimli Veri İşleme


Redis: DEL, RPUSH, LPUSH, LPOP, RPOP,LLEN, LRANGE

<?php
try{
$redis = new Redis();
$redis->connect('redis');
$redis->auth('mypassword');
$redis->incr("counter");
echo "counter :".$redis->get("counter")."<br>";
#if(fmod($redis->get("counter"),5) == 0){// eğer counter 5 tam bölünür ise languages sıfırla "sil"
$redis->del("languages");
# $redis->set("counter",0);
#}

$redis->rpush("languages","c#"); //[c#] listenin sağına "sonuna" olarak değer ekler
$redis->rpush("languages","PHP"); //[c#, PHP]

$redis->lpush("languages","Python"); //[Python, c#, PHP] listenin soluna "başına" olarak değer ekler
$redis->lpush("languages","Java"); //[Java, Python, c#, PHP]

echo $redis->lpop("languages"); // [Python, c#, PHP] listenin soluna "başında" olan değeri siler ve silinen değeri döner.
echo "<br>";

echo $redis->rpop("languages"); // [Python, c#] listenin sağına "sonuna" olan değeri siler ve silinen değeri döner.
echo "<br>";

echo $redis->llen("languages"); //2 listemizin içindeki değerlerin toplamını verir
echo "<br>";

print_r($redis->lrange("languages",0,-1));// tüm değerleri gösterir.
echo "<br>";

print_r($redis->lrange("languages",0,0));// ilk değeri gösterir
echo "<br>";
}
catch (Exception $e){
echo $e->getMessage();
}
?>

PHP Redis Artırma ve Azaltma

 PHP Redis Artırma ve Azaltma Komutları: Sayısal Değerleri Verimli Şekilde İşleme



Redis: COUNTER, INCR, DECR, INCRBY, DECRBY

<?php
try{
$redis = new Redis();
$redis->connect('redis');
$redis->auth('mypassword');

$redis->set("counter",0);

$redis->incr("counter");//1 incr artırma komutu
$counter = $redis->get("counter");
echo "counter value: ".$counter."<br>";

$redis->incr("counter");//2 incr artırma komutu
$counter = $redis->get("counter");
echo "counter value: ".$counter."<br>";

$redis->decr("counter");//1 decr azaltma komutu
$counter = $redis->get("counter");
echo "counter value: ".$counter."<br>";

$redis->incrby("counter",15);//16 incrby artırmak istedğimiz değer kadar artırır komutu
$counter = $redis->get("counter");
echo "counter value: ".$counter."<br>";

$redis->incrby("counter",5);//21 incrby artırmak istedğimiz değer kadar artırır komutu
$counter = $redis->get("counter");
echo "counter value: ".$counter."<br>";

$redis->decrby("counter",10);//11 decrby azaltmak istedğimiz değeri kadar azaltır komutu
$counter = $redis->get("counter");
echo "counter value: ".$counter."<br>";
}
catch (Exception $e){
echo $e->getMessage();
}
?>

PHP Redis Veri Deploma, Veri Doğrulama

 PHP Redis Veri Deploma, Veri Doğrulama


Redis: SET, GET, EXISTS

<?php
try{
$redis = new Redis();
$redis->connect('redis', 6379);
$redis->auth('mypassword');

$redis->set("user_name", "ali_veli"); //atama işlemi

if($redis->exists('user_name')){ //böyle bir değer varmı
echo "get key user_name to value :" .$redis->get("user_name"); //getir
}
}
catch (Exception $e){
echo $e->getMessage();
}
?>

Docker PHP Redis


Docker PHP Redis Mysql Apache


 Docker üzerine Php ve Redis container tanımlamalarını yapıyoruz "docker-compose.yml"
 
 Projeyi github üzerinden indirip aşağıdaki kodu yazarak çalıştırabilirsiniz. Github Link

>    docker-compose up -d

docker-compose.yaml dosya içeriği:
    
container_name: webserver 
    burada dockerfile dosyamız içerisinde php:8.2.0-apache sürümünü çağrıyoruz ve php için         gerekli extension ları indiriyoruz.

- image: mysql:8.0 
    ilgili veritabanı sürümünü şifre ve port ayarlarını tanımlıyoruz.

- image: phpmyadmin/phpmyadmin 
    Veritabanı arayüz erişimi için phpmyadmin tanımlayıp mysql ayarlarını yapaıyoruz.

dockerfile: ./redis/Dockerfile
    Redis ile port şifre ayarlarını yapıyoruz.

Tüm containerları aynı ağda "bridge" ekliyoruz.



    

Docker Laravel Compose

 Docker Laravel Composer  Nginx PHP8 Postgresql pgAdmin


github üzerinde bulunan projemizi indiriyoruz.

https://github.com/hkmsmart/Docker-Laravel

projemizin ana klasörüne girip laravel'i src klasörünün içine kuruyoruz. 
"src klasöründe text.txt varsa siliniz"

>    composer create-project laravel/laravel src

daha sonra docker container 'ımızı ayağa kaldırıyoruz.

>    docker-compose up -d


docker container kurulup ayağa kalktıktan sonra localhost yazıp projemizi açabiliriz.


Ek Bilgiler:
DockerFile içinde php8.2 ve composer kurulumu için komutlar bulunmaktadır.
php laravel için kullanacağımız temel extension lar yine dockerfile içinde bulunmaktadır.

Nginx url yönlendirme komutlarıda default.conf dosyasında bulunmaktadır.


Docker PHP8 MYSQL8 PhpMyAdmin

 


Klasorler oluşması için text.txt dosyası eklenmiştir, containerı ayağa kaldırmadan önce siliniz.

Github üzerinden projeyi indiriyoruz ve docker compose ayağa kaldırıyoruz.

github linki :https://github.com/hkmsmart/Docker-PHP8-MYSQL8-PhpMyAdmin

>    docker-compose up -d

Docker SuiteCRM8 Compose

 Docker SuiteCRM8 Compose


Github üzerinden docker projemizi indiriyoruz.

suitecrm8 versionumuzu aşağıdaki adresten indiriyoruz.

-    https://suitecrm.com/download/

Suitecrm projemizi docker projemiz içinde bulunan www klasörünün içine kopyalıyoruz.

kopyalama işlemi bittikten sonra docker-compose.yml klasörümüzü terminalde açıyoruz ve container ayağa kaldırıyoruz.

>    docker-compose up -d


contanier ayağa kalktıktan sonra localhost ile projemizin kurulumunu gerçekleştirebiliriz.

-    http://localhost/public/install.php

kurulum sayfasına geçip kurulumunuzu yapabilirsiniz.


Notlar:

suitecrm8 için gerekli php kütüphaneleri  "extension" dockerfile içinde indirilmektedir.

suitecrm8 için gerekli dosya yetkileri "permissions" dockerfile içinde tanımlanmıştır.

php.ini içinde bulunan gerekli kütüphaneler "extension" açılmıştır.



Docker PHP8 Xdebug PhpStorm


 Docker PHP8 MYSQL8 PhpMyAdmin Phpstorm


Github üzerinden projeyi indiriyoruz ve docker compose ayağa kaldırıyoruz.

github linki :https://github.com/hkmsmart/Docker-PHP8-XDEBUG


>    docker-compose up -d


İndirdikten sonra docker projemizin içinde bulunan www klasörünü phpstorm ile açalım.

Üst menüden edit configurations tıklayıp ilk önce docker-compose.yml dosyamızı ekliyoruz.

daha sonra phpxdebug ayarlarımızı ve server yolumuzu tanımlıyoruz.

En son bölümde xdebug için php.ini ye eklediğimiz tanımlar ve dockerfile da xdebug indirmemiz için gerekli kodlar bulunmaktadır. Bunları yapmanıza gerek yoktur. Github projesinde hazırdır. Sadece phpstorm tanımlamalarını yapınız.


1)    Phpstorm edit configurations 













2)    Docker Compose tanımlıyoruz














3)    Tekrardan edit configurations açıp Xdebug ekliyoruz. 

server için 3.1 alt resimdeki gibi localhost olarak tanımlıyoruz.













3.1)     Dosya yolu tanımı ve Server tanımı




Dockerfile xdebug indirmek için tanım kodu:

RUN pecl install xdebug-3.3.2 && docker-php-ext-enable xdebug


Php.ini Tanımları

[XDebug]

zend_extension = xdebug.so

xdebug.profiler_append = 0

xdebug.profiler_enable = 0

xdebug.remote_enable = 1

xdebug.remote_handler = "dbgp"

xdebug.remote_host = "127.0.0.1"

xdebug.idekey = "PHPSTORM"

xdebug.mode=develop,debug

xdebug.start_with_request=yes

xdebug.discover_client_host=0

xdebug.client_host=host.docker.internal

Docker Redis Ve RabbitMQ

Docker üzerine redis ve rabbitmq kurarak portlarını ve volumeslarını ayarlayarak çalıştıracağız.
projeyi github üzerinden indirip aşağıdaki kodu yazarak çalıştırabilirsiniz.


>    docker-compose up -d


docker-compose.yaml dosya içeriği:

version  - Bu, Docker Compose dosya biçiminin sürümüdür. 3.7 sürümünü kullanıyoruz.

services  - Bu, kapsayıcıların listesini ve ayarlarını tanımladığımız bölümdür. Bizim durumumuzda, bir hizmet tanımlıyoruz 

redis  - Bu, hizmetimizin adıdır.

rabbitmq  - Bu, hizmetimizin adıdır.

image  - Bu, kapsayıcımızı oluşturmak için kullanacağımız Redis ve Rabbitmq görüntüsünün adıdır.

restart  - Bu, Docker'a, durması veya arızalanması durumunda servis kapsayıcısını yeniden başlatmasını söyleyen bir ayardır.

ports  - Bu, kapsayıcının hangi bağlantı noktalarının ana sistemde erişilebilir olması gerektiğini tanımlayan bir ayardır. 

volumes  - Bu, ana sistemdeki hangi dizinlerin kapsayıcı içinde erişilebilir olması gerektiğini tanımlayan bir ayardır. 

environment  - Bu kapsayıcısı için ortam değişkenlerini tanımlamamızı sağlayan bir ayardır. 

Docker Apache Virtual Host

 Docker Apache Virtual Host Yapımı

Docker virtual host tanımalama yapıyoruz.

ilk önce local bilgisayarımızda hosts dosyasına çağırmak istedğimiz sanal alan adlarımızı tanımlıyoruz.
Burda dikkat etmek gereken durum docker içinde değil local bilgisayarımızda tanımlamamız gerekiyor.

windows için hosts dosya adresi: "c:\Windows\System32\Drivers\etc\hosts"
macos için hosts dosya adresi :"/etc/hosts" veya "/private/etc/hosts" 
ubuntu için hosts dosya adresi :"/etc/hosts"

hosts tanımlanacak domainler:
127.0.0.1 site.prod
127.0.0.1 site.test

Dockerfile 'ımızın içinde php:8.2.0-apache image kendimize göre özelleştirdik.

site.prod.conf ve site.test.conf adında iki tane config dosyası oluşturuyoruz. config dosyalarımızda apache içerisinde bakacağı klasörleri belirtiyoruz.
Bunlar container ayağa kalkerken otomatik olarak kopyalanacaktır. Kopyalama işlemi Dockerfile içinde yapılmaktadır. 

docker-compose.yml dosyamızın içinde volumes oluşturarak local pc de bulunan www klasörünü container içine kopyalıyoruz. buradaki klasörler config de tanımladığımız klasörlerdir.

githubdan indirdiğimiz proje klasörünün içinde terminali açarak aşağıdaki komutu çalıştırıyoruz ve container ayağa kaldırıyoruz.

>    docker-compose up -d

daha sonra tanımış olduğumuz site.test "var/www/html/test" ve site.prod "var/www/html/prod"  adreslerine erişmek istedğimizde ilgili klasörün altındaki projeler açılacaktır.

url de açarken http:// isteği ile açılmasına dikkat edin.


github linki:    https://github.com/hkmsmart/Docker-Apache2-Php-Virtual-Host

Docker HealthCheck

Docker HealthCheck 



docker üzerinde çalışan bir container veya container içerisindeki çalışan uygulamanın sağlıklı bir şekilde çalışıp çalışmadığını kontrol edebilmek için kullanılır.

healthy http status code      200-300
unHealthy http status         400-500

Http status codes
100-199 bilgilendirme
200-299 başarılı sonuç
300-399 yönlendirme
400-499 istemci hatası
500-599 sunucu hatası

HealthCheck parametreleri:
--health-cmd "curl -f http://localhost || exit 1" => curl gidicek http üzerinde çalışan kontainer kendi üzerinde istek yapıcak, exit 1 gelen http koduna göre cıkıcak

--health-interval 5s => her 5 saniyede bir localhostu çağırsın.

--health-timeout 3s => 3 saniye içinde cevap vermezse bu işlemi sonlandırıcak.

--health-retries 3 => hata alırsam kaç kere deniyyim 

--health-start-period 6s => contanier ayağa kalktıktan sonra 6 saniye sonra istek atmaya başlasın

kullanım örneği:

>    docker run -d -p 80:80 --name c_nginx --health-cmd "curl -f http://localhost || exit 1" --health-interval 5s --health-timeout 3s --health-retries 3 --health-start-period 6s nginx


daha sonra docker ps yaparak çalışan container'larımızı listelediğimizde status kısmında çalışma zamanı ve healthcheck durumu yazdığını görürüz "STATUS Up 8 seconds (healthy)"

>    docker ps


Dockerfile ile kullanımı

dockerfile dosya içeriği:

FROM nginx:latest
RUN apt-get update &&apt-get install -y curl
HEALTHCHECK --interval=3s --timeout=3s CMD curl -f http://localhost || exit 1
EXPOSE 80


docker file bulundugu dosya klasörüne giderek cmd aşağıdaki kodu çalıştırarak image oluşturuyoruz ve daha sonra run komutu ile ayağa kaldırıyoruz


>    docker build -t nginx:1 .

>    docker run -d -p 80:80 --name c_nginx nginx:1


docker-compose.yml  ile kullanımı

version: '3.1'
services:
s_nginx:
container_name: c_nginx
image: nginx:latest
ports:
- 80:80
healthcheck:
test: ["CMD","curl","-f","http://localhost"]
interval: 5s
timeout: 10s
retries: 3
start_period:
10s


container'ımızı ayağa kaldırmak için docker-compose.yml dosyamızınız bulunduğu klasörü cmd açarak aşağıdaki kodu çalıştırıyoruz.

>    docker-compose up -d

Docker Portainer

 Docker Portainer

 Portainer, konteynerleri, servisleri, ağları ve depoları yönetmek için kullanılır. Kendiside bir container olarak kurulumunu yaptığımızda container içinden dış taraftaki docker engine erişerek işlemlerimizi gerçekleştirebiliriz. web tarayıcısında çalışır ve birden fazla Docker bağlantısını destekler. Ara yüz olduğu için kullanımı basittir, container ayağa kaldırdıktan sonra inceleyebilirsiniz.

docker-compose.yml üzerinden kurulumu,
9000 portundan bize yönetmemiz için bir web portal ekranı sunar ilk açılışta kullanıcı adı ve şifremizi oluşturuyoruz.
/var/run/docker.sock:/var/run/docker.sock    container içinden dış docker engine erişmek için kullanıyoruz.

dosya içeriği:
version: '3.1'
services:
  s_portainer:
    container_name: c_portainer
    image: portainer/portainer-ce
    ports:
      - 9000:9000
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - C:\docker-containers\docker_portainer\data:/data

containerı ayağa kaldırmak için dosyanın bulundugu dizine komut satırından giderek aşağıdaki kodu çalıştırıyoruz.

>    docker-compose up -d

Docker Swarm Stack

Docker Swarm, Stack

Docker tarafından sunulan bir konteyner yönetim ve orkestrasyon aracıdır. Swarm, birden fazla Docker konteynerını yönetmek ve düzenlemek için kullanılır. Swarm, Docker konteynerlarına yüksek kullanılabilirlik, yük dengeleme, çoğaltma ve yeniden başlatma yetenekleri ekler.
Swarm master ve worker adı verilen makinelerin oluşturduğu bir ağdır "cluster"
raft consensus group ,internal distributed state store :masterların birbirine bağlı olduğu anlık makine durumlarını gösteren saklayan yapı.

docker swarm enable etmek için aşağıdaki komutu kullanıyoruz. ip döner.


>    docker swarm init

master nodu belirmek için aşağıdaki kodu kulanıyoruz.

-- listen-addr     node gelen istekleri dinlemek için


>    docker swarm init --advertise-addr ip_adresi -- listen-addr ip_adresi


yeni bir master node belirtmek istediğimizde container'a bağlanıp aşağıdaki kodu çalıştırıyoruz.


>    docker swarm join-token manager


yeni bir bir worker eklemek istiyorsak aşaıdaki kodu çalıştırıcağız.


>    docker swarm join-token worker


swarm altında docker containerları görmek için artık service komutuyla ayağa kaldıracağız.

replicas 1 : birden fazla kurmasını istiyorsak .

>    docker service create --name s_nginx --replicas 1 nginx

veya 

>    docker service create --name s_nginx -p 80:80 --replicas 3 nginx


altındaki çalışan container durumunu gösterir.


>    docker service ps s_nginx


eşitlik algoritması oldugu için 2. makine varsa  2. makinede kuracaktır.


>docker service scale s_nginx=2


servisleri kaldırmak için kullanılır.


>    docker service rm s_nginx


 node ile ilgili bilgilerini görmek için kullanılır


>    docker node


worker olan bir node manager olarak güncellemek için aşağıdaki kodu kullanılır.


>    docker node promote node_ismi


node durdurup başlatmak ve sonlandırmak istediğimizde kulnacağımız komutlar.

active    aktifleştirir

pause    durdurur

drain    sonlandırır

>    docker node update avability pause node_ismi


Docker Stack

Docker stack aslında docker swarm’ın production tarafında daha yönetilebilir bir şekilde işlemesi için ,bir konfigürasyon dosyası üzerinden kurgulandığı ve yönetildiği bir yapıdır. Ya da başka bir tanımlama ile docker compose dosyası ile docker swarmın tek elden yönetilmesini sağlamaktır.

yml dosyasında deploy için parametreler girilmiştir.

yml dosyamızı kaydettikten sonra, dosyamızın bulundugu dizine giderek aşağıdaki komutu çalıştırıyoruz ve stack servislerimiz ayağa kalkıyor.

>    docker stack deploy -c docker-compose.yml s_wordpress


docker-compose.yml dosya içeriği:

version: '3.1'
services:
s_wordpress:
image: wordpress
ports:
- 80:80
environment:
WORDPRESS_DB_HOST: s_db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: 12345
WORDPRESS_DB_NAME: wordpress_db
volumes:
- C:\docker_stack_wordpress\wordpress_data:/var/www/html

restart: always

deploy:
replicas: 1 # 2 ikitane replicae oluştur
restart_policy: #yeniden başlatma kuralı
max_attempts: 3 # 3 kere dene max
condition: on-failure # hata oldugunda dene
placement:
constraints:
- node.role == manager
s_db:
image: mysql:5.7
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_USER: root
MYSQL_PASSWORD: 12345
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- C:\docker_stack_wordpress\mysql_data:/var/lib/mysql
ports:
- 3307:3306

deploy:
replicas: 1
restart_policy: #yeniden başlatma kuralı
condition: on-failure # hata oldugunda dene
placement:
constraints:
- node.role == manager

Docker Secret

 Docker Secret


Docker üzerinde kullanılan hassas bilgilerin saklanabilmesi ve yönetilebilmesi için geliştirilmiş docker özelliğidir. Parolalar sunucu veri tabanı bilgileri saklanması için kullanılır.
Secret oluşturduğumuzda container ayağa kalkarken memory "hafıza" de saklanan bir bilgi otomatik olarak geliyor. Sabit bir klasöre hedeflenmiş oluyor.

secret'lerı listelemek için kullanılan kod

>    docker secret ls 

secret oluşturma
echo nun tırnak içinde bulunan veri bizim şifreleyeceğimiz değerdir.
sec_test şifrelediğimiz değerin anahtarıdır.

>    echo "secret test icerik" | docker secret create sec_test -

örnek olarak bir container ayağa kaldıralım ve içine secret keyimizi de ekleyelim.

>    docker service create -d -p 80:80 --name s_nginx --secret sec_test

oluşturduğumuz container içine exec yaparak giriyoruz.

>    docker exec -ti  s_nginx 

daha sonra container işletim sistemimizin içinde verdiğimiz secret key bulunduğu klasörde görebiliriz.

>    cat /run/secrets/sec_test

docker-compose.yml dosyamızdan da aşağıdaki şekilde şifreyi farklı bir klasörden çekerek de kullanabiliriz.

secrets:
  sec_db_pass:
    external: true
    file: C:\docker\db_pass.txt


Serialize ve Unserialize PHP

Serialize ve Unserialize  PHP

serialize — bir array  verisinin saklanabilir olarak string'e çevirip verir.

unserialize — serialize olmuş bir değeri tekrar eski array türüne çevirmek için kullanılır.

<?php
$data = serialize(array("Red", "Green", "Blue"));

echo $data . "<br>";
#a:3:{i:0;s:3:"Red";i:1;s:5:"Green";i:2;s:4:"Blue";}
$test = unserialize($data);
var_dump($test);
#array(3) { [0]=> string(3) "Red" [1]=> string(5) "Green"
# [2]=> string(4) "Blue" }
?>