Docker-compose Kullanarak PHP Uygulaması Dağıtma

PHP uygulamaları genellikle bir web sunucusu, ilişkisel veritabanı sistemi ve dil yorumlayıcısının kendisinden oluşur. Bu derste, docker kullanarak tam bir PHP uygulama yığını kullanacağız. Bu, Nginx (web sunucusu), MySQL (veritabanı sistemi) ve PHP için kaplar oluşturacağımız ve düzenleyeceğimiz derinlemesine bir öğreticidir.

Bu öğretici uğruna, bir veritabanından şehirlerin listesini okuyan ve bir web sayfasında görüntüleyen basit bir uygulama yazacağız, bu şekilde temel, ancak çalışan bir PHP uygulaması göstereceğiz.

Bu kılavuzda, Docker-CE'nin önceden kurulu olduğu ve en azından asgari düzeyde docker bilgisi olduğu varsayılmaktadır. Bu konuda aşağıdaki eğiticileri inceleyebilirsiniz:

Çalışma ortamımızı yapılandırma

Gerçek bir docker tabanlı uygulama tipik olarak birkaç konteynırdan oluşur. Bunları manuel olarak yönetmek oldukça dağınık ve hantal olabilir. Docker-compose devreye giriyor. Basit bir yamlyapılandırma dosyası aracılığıyla birkaç kapsayıcıları yönetmenize yardımcı olur .

Docker-compose uygulamasını yükleyin.

curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Bu örneğin gerekli tüm dosyalarını tutmak için bir klasör oluşturun cd. Şu andan itibaren, bu bizim çalışma dizinimizdir ve her komut bu klasör içinde yürütülür ve her yola, ona göre başvurulur. Bu klasöre daha sonra olarak referans verilebilir WORKING_DIR.

mkdir ~/docker
cd ~/docker

Şimdi üç klasör daha oluşturun.

mkdir php nginx app

phpKlasör bizim özel PHP görüntüsünü inşa edecek nerede olduğu nginxklasörü bizim özel nginx görüntü için gerekli dosyaları yapacak ve appbizim örnek uygulamanın kaynak kodunu ve yapılandırmasını koyarak olacaktır nerede klasördür.

PHP kapsayıcısını yapılandırma

Bu örnekte, php-fpmNginx web sunucusuna bağlanmak için kullanacağız . Resmi PHP temel görüntüsünü kullanacağız. Ancak, veritabanına erişebilmemiz için bazı uzantıları da yüklememiz ve etkinleştirmemiz gerekir. phpKlasörün içinde bir dosya oluşturun Dockerfileve aşağıdaki içerikleri bu dosyaya yerleştirin.

FROM php:7.1-fpm-alpine3.4
RUN apk update --no-cache \
    && apk add --no-cache $PHPIZE_DEPS \
    && apk add --no-cache mysql-dev \
    && docker-php-ext-install pdo pdo_mysql

Resmi PHP görüntüsünün Alpine sürümünü kullandığımızı unutmayın. Alpine, çok daha küçük ayak izleri sağlayarak konteynerlere yönelik çok küçük bir dağıtımdır. Ayrıca, komutun kullanılmasına dikkat edin, docker-php-ext-installresmi PHP görüntüsü, PHP uzantılarını yükleme ve yapılandırma işlemini kolaylaştırmak için bu komutu sağlar.

Şimdi, bu Docker görüntüsünü aşağıdakileri (bizim içimizde WORKING_DIR) yayınlayarak oluşturalım :

docker build -t vultr-php php/

docker-compose.ymldosya

Daha önce de belirtildiği gibi, docker-composebir dizi kapsayıcıyı basit bir yapılandırma dosyası aracılığıyla yönetmenizi sağlar. Bu yapılandırma dosyası genellikle adlandırılır docker-compose.yml. Bu dosyayı appklasörün içinde oluşturun .

touch app/docker-compose.yml

Şimdi aşağıdaki içeriği bu dosyaya yerleştirin.

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app

Bu sözdizimini açıklayacağız. İlk olarak, ilk satırı not edin.

version: '2'

Bu, docker-compose.ymlkullanılan yapılandırma dosyasının sürümünü belirtir . Bir sonraki satır, sağlanacak hizmetleri veya başka bir deyişle kapsayıcıları belirtir.

services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app

Her hizmetin servicesblok içinde belirli bir anahtarı olduğunu unutmayın . Burada belirtilen ad, daha sonra bu özel kapsayı referans almak için kullanılacaktır. Ayrıca, phpyapılandırma içinde, kapsayıcıyı çalıştırmak için kullanılan görüntüyü tanımladığımızı unutmayın (bu daha önce oluşturduğumuz görüntüdür). Ayrıca bir hacim eşlemesi tanımlarız.

volumes:
  - ./:/app

Bu docker-compose, geçerli dizini ( ./) /appkabın içindeki dizine eşlemenizi söyler . Son satır /app, kapsayıcı içindeki klasörü çalışma dizini olarak ayarlar ; bu, kapsayıcı içindeki gelecekteki tüm komutların varsayılan olarak yürütüldüğü klasör olduğu anlamına gelir.

Artık konteynırlarımızı düzenleyebiliriz.

cd ~/docker/app
docker-compose up -d

PHP kapsayıcısının yürütüldüğünden emin olmak için aşağıdaki komutu çalıştırabilirsiniz:

docker ps

Kapsayıcıların içindeki komutlar nasıl çalıştırılır

Hala appklasörün içindeyken, komutun yardımıyla tanımlı bir hizmet konteynerinin içindeki herhangi bir komutu çalıştırabiliriz docker-compose.

docker-compose exec [service] [command]

Yer [service]tutucu, hizmet anahtarını ifade eder. Bizim durumumuzda, bu oldu php. PHP sürümümüzü kontrol etmek için kap içinde bir komut çalıştıralım.

docker-compose exec php php -v

Aşağıdaki çıktıyı göreceksiniz.

PHP 7.1.14 (cli) (built: Feb  7 2018 00:40:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

Nginx kapsayıcısını yapılandırma

Tıpkı PHP konteyneri gibi, web sunucusu için özel bir resim oluşturmamız gerekiyor. Ancak bu durumda, bizim için bir yapılandırma sağlamalıyız virtual host. İçimizde bulunduğunuzdan ve klasörün içinde WORKING_DIRbir tane oluşturduğunuzdan emin olun :Dockerfilenginx

cd ~/docker
touch nginx/Dockerfile

Şimdi aşağıdaki içeriği buna ekleyin Dockerfile:

FROM nginx:1.13.8-alpine
COPY ./default.conf /etc/nginx/conf.d/default.conf

Alpine tabanlı varsayılan Nginx görüntüsünü kullanıyoruz. Bu Docker dosyasında bir yapılandırma dosyasını uygulama kurulumumuza kopyalarız. Bu resmi oluşturmadan önce bir yapılandırma dosyası oluşturun.

touch nginx/default.conf

Şimdi bu içerikle doldurun.

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /app;
    index index.php;

    #server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

fastcgi_pass php:9000Satırda, PHP kapsayıcısına yapılandırma dosyası servicebloğunun içindeki adıyla atıfta bulunduğumuzu unutmayın docker-compose.yml. Dahili olarak docker-composebir ağ oluşturur ve tanımlanan hizmetlerin her birine ana makine adı olarak hizmet adını atar. Şimdi Nginx görüntüsünü oluşturabiliriz.

docker build -t vultr-nginx nginx/

Güncelleniyor docker-compose.yml

Şimdi app/docker-compose.ymldosyayı güncelleyin .

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app
  web:
    image: vultr-nginx
    volumes:
      - ./:/app
    depends_on:
      - php
    ports:
      - 80:80

Yalnızca yeni bir hizmet ekledik. Yapılandırma aşağıdakiler dışında neredeyse aynıdır.

depends_on:
  - php
ports:
  - 80:80

Nginx konteynerinin tamamen başlatılması için PHP hizmetine ihtiyacı olduğunda, bu gereksinimi depends_onseçenekte zorlarız. portsYapılandırma anahtarı burada port map, bir konteyner limanına ev sahibi portu eşler 80noktasına konakta 80kapta.

Şimdi klasörün index.phpiçinde adlandırılan bir dosya oluşturun appve aşağıdakileri içine koyun.

<?php phpinfo();

Bağlantı noktasına 80güvenlik duvarınızdan erişilebilir olduğundan emin olun ve aşağıdakileri yürütün.

cd ~/docker/app
docker-compose up -d

Bir kez daha, servisin çalışıp çalışmadığını bir kez daha kontrol edin.

docker ps

Bir tarayıcı açın ve erişin [vultr-instance-ip]. Aşağıdakileri çalıştırarak Vultr örneği IP adresinizi öğrenebilirsiniz.

hostname -I

PHP bilgi sayfasını göreceksiniz.

MySQL kapsayıcısını yapılandırma

Resmi MySQL görüntüsü, kapsayıcıyı basit ortam değişkenleri aracılığıyla yapılandırmanıza olanak tanır. Bu environment, servis bloğu tanımının içindeki bir seçenekle yapılabilir . ~/docker/app/docker-compose.ymlDosyayı aşağıdaki şekilde güncelleyin .

version: '2'
services:
  php:
    image: vultr-php
    volumes:
      - ./:/app
    working_dir: /app
  web:
    image: vultr-nginx
    volumes:
      - ./:/app
    depends_on:
      - php
    ports:
      - 80:80
  mysql:
    image: mysql:5.7.21
    volumes:
      - ./:/app
      - dbdata:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=world
      - MYSQL_ROOT_PASSWORD=root
    working_dir: /app
volumes:
  dbdata:

Şimdi veritabanı için yeni bir hizmet tanımladık. Çizgiye dikkat edin dbdata:/var/lib/mysql. Bu, kaptaki yolu /var/lib/mysqlDocker tarafından yönetilen kalıcı bir birime bağlar, böylece kapsayıcı kaldırıldıktan sonra veritabanı verileri devam eder. Dosyanın sonunda görebileceğiniz gibi, bu birimin üst düzey bir blokta tanımlanması gerekir.

Yeni yapılandırmamızı düzenlemeden önce örnek bir MySQL veritabanı indirelim. Resmi MySQL belgelerine bazı örnek veritabanlarını sağlar. Tanınmış dünya veritabanını kullanacağız. Bu veritabanı, ülkelerin ve şehirlerin bir listesini sağlar. Bu örneği indirmek için uygulama klasörümüzde aşağıdakileri yürütün.

curl -L http://downloads.mysql.com/docs/world.sql.gz -o world.sql.gz
gunzip world.sql.gz

Şimdi konteynırlarımızı düzenleyelim.

docker-compose up -d

Daha önce fark etmiş olabileceğiniz gibi, docker-compose upkomut yalnızca henüz başlatılmamış kapları başlatır. docker-compose.ymlDosyanızla çalışan kapsayıcıların geçerli yapılandırması arasındaki farkları denetler .

Bir kez daha, MySQL konteynerinin başlatıldığını kontrol edin.

docker ps

Şimdi dünya veritabanını doldurun.

docker-compose exec -T mysql mysql -uroot -proot world < world.sql

Doğrudan veritabanından veri seçerek veritabanının doldurulduğunu doğrulayabilirsiniz. Önce kabın içindeki MySQL komut istemine erişin.

docker-compose exec mysql mysql -uroot -proot world

MySQL komut isteminde aşağıdakileri çalıştırın.

select * from city limit 10;

Şehirlerin bir listesini göreceksiniz. Şimdi MySQL komut isteminden çıkın.

mysql> exit

Uygulamamızı oluşturma

Artık tüm gerekli konteynerler çalışıyor ve çalışıyor, örnek uygulamamıza odaklanabiliriz. app/index.phpDosyayı aşağıdaki şekilde güncelleyin .

<?php

$pdo = new PDO('mysql:host=mysql;dbname=world;charset=utf8', 'root', 'root');

$stmt = $pdo->prepare("
    select city.Name, city.District, country.Name as Country, city.Population
    from city
    left join country on city.CountryCode = country.Code
    order by Population desc
    limit 10
");
$stmt->execute();
$cities = $stmt->fetchAll(PDO::FETCH_ASSOC);

?>

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Vultr Rocks!</title>
</head>
<body>
    <h2>Most Populous Cities In The World</h2>
    <table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Country</th>
            <th>District</th>
            <th>Population</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($cities as $city): ?>
            <tr>
                <td><?=$city['Name']?></td>
                <td><?=$city['Country']?></td>
                <td><?=$city['District']?></td>
                <td><?=number_format($city['Population'], 0)?></td>
            </tr>
        <?php endforeach ?>
    </tbody>
    </table>
</body>
</html>

[vultr-instance-ip]Bir web tarayıcısına erişirseniz , dünyanın en kalabalık şehirlerinin bir listesini görürsünüz. Tebrikler, docker kullanarak tamamen çalışan bir PHP uygulaması dağıttınız.

Sonuç

Bu derste, tam olarak çalışan bir PHP uygulamasını nasıl yapılandıracağımı adım adım gösterdim. PHP ve Nginx için özel görüntüler oluşturduk ve docker-compose'u konteynerlerimizi düzenlemek için yapılandırdık. Çok basit ve basit olmasına rağmen, bu kurulum gerçek bir yaşam senaryosunu yansıtır.

Bu kılavuzda, görüntülerimizi yerel olarak oluşturduk ve etiketledik. Daha esnek bir kurulum için, bu görüntüleri bir docker kayıt defterine gönderebilirsiniz . Resmi liman işçisi kayıt defterine geçebilir, hatta kendi liman işçisi kayıt defterinizi bile oluşturabilirsiniz. Her durumda, bu, görüntülerinizi bir ana bilgisayarda oluşturmanıza ve başka bir bilgisayarda kullanmanıza olanak tanır.

Ürününün daha ayrıntılı kullanımı docker-composeiçin resmi belgelere başvurmalısınız .

Uygulama gereksinimlerinize ve kullandığınız PHP çerçevesine bağlı olarak, daha fazla uzantı eklemek isteyebilirsiniz. Bu, Dockerfileözel PHP imajımızı oluşturmak için kullanılanı değiştirerek kolayca yapılabilir . Ancak, bazı uzantıların kapsayıcıya yüklenmesi için ek bağımlılıklara gereksinimi vardır. Her bir uzantının temel gereksinimlerini gözden geçirmek için PHP resmi belgelerindeki uzantı listesine başvurmalısınız .



Leave a Comment

KubOSM ile Kubernetesi CentOS 7de dağıtın

KubOSM ile Kubernetesi CentOS 7de dağıtın

Genel Bakış Bu makale, bir Kubernetes kümesini hemen kurup kubeadm ile çalıştırmanıza yardımcı olmak içindir. Bu kılavuz iki sunucuyu

Rancher OSyi iPXE üzerinden yükleme

Rancher OSyi iPXE üzerinden yükleme

Rancher OS, Docker etrafında inşa edilmiş çok hafif bir Linux dağıtımıdır. İşletim sisteminin kendisi yaklaşık 20 MB ağırlığında. Bu eğitici ile birlikte çalışmaya başlayacaksınız

Ubuntu 18.04e Docker CEyi yükleyin

Ubuntu 18.04e Docker CEyi yükleyin

Giriş Docker, kapsayıcı olarak çalıştırılan programları dağıtmamızı sağlayan bir uygulamadır. Popüler Go programlama dilinde yazılmıştır

Alpine Linux 3.9.0da bir Docker Sürüsü oluşturma

Alpine Linux 3.9.0da bir Docker Sürüsü oluşturma

Giriş Bu kılavuz, birden fazla Alpine Linux 3.9.0 sunucusu ve Portainer kullanarak bir Docker sürüsü oluşturmayı ve yapılandırmayı gösterecektir. Lütfen unutmayın

Dockerı CentOS 7ye yükleme

Dockerı CentOS 7ye yükleme

Farklı Bir Sistem mi Kullanıyorsunuz? Docker, sanal kapsayıcılara yazılım dağıtımına izin veren bir uygulamadır. Go programında yazıldı

CentOS 7 Üzerinde Liman Kurulumu

CentOS 7 Üzerinde Liman Kurulumu

Harbor, Docker görüntülerini depolayan ve dağıtan açık kaynaklı, kurumsal sınıf bir kayıt defteri sunucusudur. Liman, açık kaynaklı Docker Dağıtımını genişletiyor b

CoreOSa docker-compose kurulumu

CoreOSa docker-compose kurulumu

Bu makalede, docker-composeun CoreOSa nasıl yükleneceği açıklanmaktadır. CoreOSta / usr / klasörü değiştirilemez, bu nedenle standart / usr / local / bin yolu kullanılamaz.

Rancherı CentOS 7ye yükleyin

Rancherı CentOS 7ye yükleyin

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Rancher, konteynerleri çalıştırmak ve özel bir konteyner servisi oluşturmak için açık kaynaklı bir platformdur. Çiftlik temelidir

Rancherı Ubuntu 16.04e yükleyin

Rancherı Ubuntu 16.04e yükleyin

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Rancher, konteynerleri çalıştırmak ve özel bir konteyner servisi oluşturmak için açık kaynaklı bir platformdur. Çiftlik temelidir

Debian 9 Docker Swarm (CE) ile Yapışkan Oturum

Debian 9 Docker Swarm (CE) ile Yapışkan Oturum

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Docker Swarm, bireysel sunucularınızı bir bilgisayar kümesine dönüştürür; ölçeklendirme, yüksek kullanılabilirlik ve

İki Docker Grafik Yönetim Aracı: DockerUI ve Tersane

İki Docker Grafik Yönetim Aracı: DockerUI ve Tersane

Vultr Docker uygulamasının yardımıyla Dockerı Vultr sunucu örneğinize kolayca dağıtabilirsiniz. Bu arada, Docker yönetim görevini kolaylaştırabilirsiniz

CoreOSta Kendi Docker Kayıt Defterinizi Kurun

CoreOSta Kendi Docker Kayıt Defterinizi Kurun

Hepimiz uygulama kaplarını birden çok makineye oluşturmak, yönetmek ve dağıtmak için bir platform olan Dockerı biliyoruz ve seviyoruz. Docker Inc.

Ubuntu 16.04te Docker ile Sentry Kurulumu

Ubuntu 16.04te Docker ile Sentry Kurulumu

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Sentry, hata izleme için açık kaynaklı bir çözümdür. Nöbetçi istisnaları ve diğer yararlı mesajları izler

RancherOS üzerine Rancher Server kurun

RancherOS üzerine Rancher Server kurun

Genel Bakış RancherOS, sistem hizmetlerini çalıştırmak için bir Docker arka plan programı PID 0 olarak çalıştıran inanılmaz derecede hafif bir işletim sistemidir (yalnızca yaklaşık 60 MB).

CentOS 7de Docker Sürüsü (CE) ile Yapışkan Oturum

CentOS 7de Docker Sürüsü (CE) ile Yapışkan Oturum

Farklı Bir Sistem mi Kullanıyorsunuz? Giriş Docker Swarm, bireysel sunucularınızı bir bilgisayar kümesine dönüştürerek ölçeklendirmeyi, yüksek kullanılabilirliği ve

Docker Nasıl Kullanılır: İlk Docker Kapsayıcısını Oluşturma

Docker Nasıl Kullanılır: İlk Docker Kapsayıcısını Oluşturma

Bu eğitimde Dockerı kullanmaya başlamanın temelleri açıklanmaktadır. Dockerın kurulu olduğunu varsayıyorum. Bu öğreticideki adımlar,

Docker ile Yük Dengesi

Docker ile Yük Dengesi

Bir web uygulaması çalıştırırken, yazılımınızı çoklu iş parçacığını kullanmak için dönüştürmek zorunda kalmadan normalde kaynaklarınızdan en iyi şekilde yararlanmak istersiniz.

Docker ile CentOS 7de SQL Server 2017ye (MS-SQL) Başlarken

Docker ile CentOS 7de SQL Server 2017ye (MS-SQL) Başlarken

Önkoşullar Docker motoru 1.8+. Minimum 4GB disk alanı. Minimum 4GB RAM. Adım 1. Dockerı yükleyin SQL-Serverı yüklemek için Docker mus

Docker Kullanarak Bir Node.js Uygulaması Dağıtma

Docker Kullanarak Bir Node.js Uygulaması Dağıtma

Bu makalede, Düğüm uygulamanızı bir Docker kapsayıcısında nasıl dağıtacağınız gösterilecektir. Not: Bu eğiticide Dockerın yüklü ve okunmuş olduğu varsayılmaktadır

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp, uzaktan sağlık hizmetleri ve gelecek nesiller üzerindeki etkisi nedir? Pandemi durumunda iyi bir yer mi değil mi? Bir görünüm bulmak için blogu okuyun!

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Bilgisayar korsanlarının çok para kazandığını duymuş olabilirsiniz, ancak bu kadar parayı nasıl kazandıklarını hiç merak ettiniz mi? Hadi tartışalım.

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

Son zamanlarda Apple, sorunları gidermek için macOS Catalina 10.15.4'ü ek bir güncelleme yayınladı, ancak güncelleme, mac makinelerinde tuğla oluşmasına neden olan daha fazla soruna neden oluyor gibi görünüyor. Daha fazla bilgi edinmek için bu makaleyi okuyun