Įdiekite PHP programą naudodami „Docker-compose“.

PHP programas paprastai sudaro žiniatinklio serveris, reliacinė duomenų bazių sistema ir pats kalbos vertėjas. Šioje pamokoje mes išnaudosime visą PHP programų paketą naudodami docker. Tai yra nuodugni pamoka, kurioje mes ketiname kurti ir organizuoti konteinerius, skirtus Nginx (žiniatinklio serveriui), MySQL (duomenų bazių sistemai) ir PHP.

Šios pamokos sumetimais parašysime paprastą aplikaciją, kuri nuskaito miestų sąrašą iš duomenų bazės ir parodo jį tinklalapyje, tokiu būdu pademonstruosime pagrindinę, bet veikiančią PHP programą.

Šiame vadove daroma prielaida, kad jau įdiegėte „Docker-CE“ ir turite bent minimalias docker darbo žinias. Šiuo klausimu galite peržiūrėti šias pamokas:

Mūsų darbo aplinkos konfigūravimas

Realiai veikianti dokerių programa paprastai bus sudaryta iš kelių konteinerių. Jų valdymas rankiniu būdu gali būti gana nepatogus ir sudėtingas. Štai čia ir atsiranda dokeris-komponavimas. Tai padeda valdyti daugybę konteinerių naudojant paprastą yamlkonfigūracijos failą.

Įdiekite docker-compose.

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

Sukurkite aplanką, kuriame būtų visi reikalingi šio pavyzdžio failai, o tada cdį jį. Nuo šiol tai yra mūsų darbo katalogas ir kiekviena komanda bus vykdoma šiame aplanke ir kiekvienas kelias bus susijęs su ja. Šis aplankas vėliau gali būti nurodytas kaip WORKING_DIR.

mkdir ~/docker
cd ~/docker

Dabar sukurkite dar tris aplankus.

mkdir php nginx app

phpAplankas, kuriame statysime mūsų užsakymą PHP vaizdą, nginxaplankas laikys reikiamus failus mūsų užsakymą Nginx įvaizdžio ir appaplankas yra, kur mes bus išleisti kodą ir konfigūraciją mūsų imties taikymo.

PHP konteinerio konfigūravimas

Šiame pavyzdyje mes naudosime php-fpmprisijungti prie Nginx žiniatinklio serverio. Mes naudosime oficialų PHP bazinį vaizdą. Tačiau taip pat turime įdiegti ir įjungti kai kuriuos plėtinius, kad galėtume pasiekti duomenų bazę. Viduje phpaplanke sukurti failą pavadinimu Dockerfileir įdėti šiuos turinį į jį.

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

Atminkite, kad naudojame oficialaus PHP vaizdo Alpine versiją. Alpine yra labai mažas platinimas, skirtas konteineriams, suteikiant daug mažesnius plotus. Taip pat atkreipkite dėmesį į komandos naudojimą docker-php-ext-install, oficialus PHP vaizdas suteikia šią komandą, kad palengvintų PHP plėtinių diegimo ir konfigūravimo procesą.

Dabar sukurkime šį „Docker“ vaizdą, išleisdami šį (mūsų viduje WORKING_DIR):

docker build -t vultr-php php/

docker-compose.ymlfailą

Kaip jau minėta, docker-composeleidžia valdyti daugybę konteinerių naudojant paprastą konfigūracijos failą. Šis konfigūracijos failas paprastai vadinamas docker-compose.yml. Sukurkite šį failą appaplanke.

touch app/docker-compose.yml

Dabar į šį failą įdėkite šį turinį.

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

Mes paaiškinsime šią sintaksę. Pirma, atkreipkite dėmesį į pirmąją eilutę.

version: '2'

Tai nurodo docker-compose.ymlnaudojamo konfigūracijos failo versiją . Kitoje eilutėje nurodomos paslaugos arba, kitaip tariant, teikiami konteineriai.

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

Atminkite, kad kiekviena paslauga turi tam tikrą raktą servicesbloko viduje . Čia nurodytas pavadinimas vėliau bus naudojamas nuorodai į šį konkretų sudėtinį rodinį. Taip pat atkreipkite dėmesį, kad phpkonfigūracijos viduje apibrėžiame vaizdą, naudojamą konteineriui paleisti (tai vaizdas, kurį sukūrėme anksčiau). Taip pat apibrėžiame tūrio atvaizdavimą.

volumes:
  - ./:/app

Tai nurodo docker-composedabartinį katalogą ( ./) susieti /appsu konteinerio viduje esančiu katalogu. Paskutinėje eilutėje /apptalpyklos viduje esantis aplankas nustatomas kaip darbo katalogas, o tai reiškia, kad tai yra aplankas, iš kurio pagal nutylėjimą vykdomos visos būsimos sudėtinio rodinio komandos.

Dabar galime organizuoti savo konteinerius.

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

Norėdami įsitikinti, kad buvo vykdomas PHP konteineris, galite paleisti šią komandą:

docker ps

Kaip vykdyti komandas konteinerių viduje

Vis dar appaplanke galime paleisti bet kurią komandą apibrėžtame paslaugų konteineryje, naudodami docker-composekomandą.

docker-compose exec [service] [command]

Vietos [service]rezervavimo ženklas nurodo paslaugos raktą. Mūsų atveju tai buvo php. Paleiskite komandą konteinerio viduje, kad patikrintume savo PHP versiją.

docker-compose exec php php -v

Pamatysite tokią išvestį.

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 konteinerio konfigūravimas

Kaip ir PHP konteineryje, turime sukurti tinkintą žiniatinklio serverio vaizdą. Tačiau šiuo atveju tereikia pateikti savo konfigūraciją virtual host. Įsitikinkite, kad esate mūsų viduje WORKING_DIRir sukurti Dockerfileviduje nginxaplanką:

cd ~/docker
touch nginx/Dockerfile

Dabar įdėkite šį turinį Dockerfile:

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

Mes naudojame numatytąjį Nginx vaizdą, pagrįstą Alpine. Šiame „Docker“ faile tiesiog nukopijuojame konfigūracijos failą į programos sąranką. Prieš kurdami šį vaizdą, sukurkite konfigūracijos failą.

touch nginx/default.conf

Dabar užpildykite jį šiuo turiniu.

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;
    }
}

Atminkite, kad fastcgi_pass php:9000eilutėje mes nurodome PHP konteinerį jo pavadinimu konfigūracijos failo servicebloke docker-compose.yml. Viduje docker-composesukuria tinklą ir kiekvienai apibrėžtai paslaugai priskiria paslaugos pavadinimą kaip pagrindinio kompiuterio pavadinimą. Dabar galime sukurti „Nginx“ vaizdą.

docker build -t vultr-nginx nginx/

Atnaujinama docker-compose.yml

Dabar atnaujinkite app/docker-compose.ymlfailą.

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

Pridėjome tik naują paslaugą. Konfigūracija yra beveik tokia pati, išskyrus toliau nurodytus dalykus.

depends_on:
  - php
ports:
  - 80:80

Kai „Nginx“ konteineriui reikia, kad PHP paslauga būtų visiškai inicijuota, šį reikalavimą priverčiame depends_onpasirinkti. portsKonfigūracija raktas žemėlapiai šeimininko uosto konteinerių uostą, čia mes žemėlapį uostą 80priimančiojoje uosto 80į konteinerį.

Dabar sukurkite failą, pavadintą aplanko index.phpviduje, appir įdėkite į jį šiuos dalykus.

<?php phpinfo();

Įsitikinkite, kad prievadas 80pasiekiamas per užkardą, ir atlikite šiuos veiksmus.

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

Dar kartą patikrinkite, ar paslauga veikia.

docker ps

Atidarykite naršyklę ir pasiekite [vultr-instance-ip]. Savo Vultr egzemplioriaus IP adresą galite sužinoti vykdydami toliau nurodytus veiksmus.

hostname -I

Pamatysite PHP informacijos puslapį.

„MySQL“ konteinerio konfigūravimas

Oficialus MySQL vaizdas leidžia sukonfigūruoti konteinerį naudojant paprastus aplinkos kintamuosius. Tai galima padaryti naudojant environmentparinktį paslaugų bloko apibrėžime. Atnaujinkite ~/docker/app/docker-compose.ymlfailą į toliau pateiktą.

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:

Dabar mes apibrėžėme naują duomenų bazės paslaugą. Atkreipkite dėmesį į liniją dbdata:/var/lib/mysql. Taip sujungiamas kelias konteineryje /var/lib/mysqlį nuolatinį „Docker“ valdomą tomą, todėl duomenų bazės duomenys išlieka ir pašalinus konteinerį. Šis tomas turi būti apibrėžtas aukščiausio lygio bloke, kaip matote failo pabaigoje.

Prieš rengdami naują konfigūraciją, atsisiųskite pavyzdinę MySQL duomenų bazę. Oficialus MySQL dokumentacija pateikiama keletas pavyzdžių duomenų bazes. Naudosime gerai žinomą pasaulio duomenų bazę. Šioje duomenų bazėje pateikiamas šalių ir miestų sąrašas. Norėdami atsisiųsti šį pavyzdį, mūsų programos aplanke atlikite šiuos veiksmus.

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

Dabar suorganizuokime savo konteinerius.

docker-compose up -d

Kaip jau galbūt pastebėjote, docker-compose upkomanda paleidžia tik tuos konteinerius, kurie dar nepaleisti. Ji patikrina, ar jūsų docker-compose.ymlfailas skiriasi nuo dabartinės veikiančių sudėtinių rodinių konfigūracijos.

Dar kartą patikrinkite, ar buvo paleistas MySQL konteineris.

docker ps

Dabar užpildykite pasaulio duomenų bazę.

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

Galite patikrinti, ar duomenų bazė buvo užpildyta, pasirinkdami duomenis tiesiai iš duomenų bazės. Pirmiausia pasiekite „MySQL“ raginimą konteinerio viduje.

docker-compose exec mysql mysql -uroot -proot world

„MySQL“ raginime paleiskite šiuos veiksmus.

select * from city limit 10;

Pamatysite miestų sąrašą. Dabar uždarykite MySQL raginimą.

mysql> exit

Mūsų programos kūrimas

Dabar, kai visi reikalingi konteineriai yra sukurti ir veikia, galime sutelkti dėmesį į programos pavyzdį. Atnaujinkite app/index.phpfailą į toliau pateiktą.

<?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>

Jei prisijungsite [vultr-instance-ip]prie interneto naršyklės, pamatysite daugiausiai gyventojų turinčių pasaulio miestų sąrašą. Sveikiname, įdiegėte visiškai veikiančią PHP programą naudodami docker.

Išvada

Šioje pamokoje žingsnis po žingsnio parodžiau, kaip sukonfigūruoti visiškai veikiančią PHP programą. Sukūrėme pasirinktinius PHP ir Nginx vaizdus ir sukonfigūravome docker-compose, kad sutvarkytume mūsų konteinerius. Nepaisant to, kad ši sąranka yra labai paprasta ir paprasta, ji atspindi realų scenarijų.

Šiame vadove sukūrėme ir pažymėjome savo vaizdus vietoje. Kad sąranka būtų lankstesnė, šiuos vaizdus galite perkelti į doko registrą . Galite persikelti į oficialų dokų registrą arba net nustatyti savo dokų registrą. Bet kokiu atveju tai leis jums sukurti vaizdus viename pagrindiniame kompiuteryje ir naudoti juos kitame.

Norėdami sužinoti daugiau apie naudojimą docker-compose, turėtumėte žiūrėti oficialią dokumentaciją .

Atsižvelgiant į taikomosios programos reikalavimus ir naudojamą PHP sistemą, galbūt norėsite pridėti daugiau plėtinių. Tai galima lengvai padaryti pakeitus Dockerfilenaudojamą kuriant mūsų pasirinktinį PHP vaizdą. Tačiau kai kuriems plėtiniams reikia papildomų priklausomybių, kad jie būtų įdiegti konteineryje. Turėtumėte peržiūrėti plėtinių sąrašą oficialioje PHP dokumentacijoje, kad peržiūrėtumėte pagrindinius kiekvieno plėtinio reikalavimus.


Štai kaip patikrinti „Hyper-V“ konteinerius „Windows 10 Insider“.

Štai kaip patikrinti „Hyper-V“ konteinerius „Windows 10 Insider“.

„Microsoft“ naujame tinklaraščio įraše paaiškino, kaip „Windows Insiders“ gali išbandyti „Hyper-V“ konteinerius „Windows 10“ – tai naujas virtualizacijos sprendimas, leidžiantis programoms veikti nepažeidžiant likusios operacinės sistemos.

Kaip įdiegti „Harbor“ „CentOS 7“.

Kaip įdiegti „Harbor“ „CentOS 7“.

„Harbour“ yra atvirojo kodo įmonės klasės registro serveris, kuriame saugomi ir platinami „Docker“ vaizdai. Harbour išplečia atvirojo kodo Docker Distribution b

Įdiekite Rancher OS per iPXE

Įdiekite Rancher OS per iPXE

Rancher OS yra labai lengvas Linux platinimas, sukurtas aplink Docker. Pati OS sveria apie 20 MB. Ši mokymo programa padės jums pradėti dirbti

„CoreOS“ sistemoje nustatykite savo „Docker“ registrą

„CoreOS“ sistemoje nustatykite savo „Docker“ registrą

Visi žinome ir mėgstame „Docker“ – platformą, leidžiančią kurti, valdyti ir platinti programų konteinerius keliuose įrenginiuose. „Docker Inc.“ teikia paslaugą t

„Docker-compose“ diegimas „CoreOS“.

„Docker-compose“ diegimas „CoreOS“.

Šiame straipsnyje paaiškinama, kaip „CoreOS“ įdiegti docker-compose. „CoreOS“ aplankas /usr/ yra nekintamas, todėl standartinis /usr/local/bin kelias nepasiekiamas.

Įdiekite „Rancher“ „CentOS 7“.

Įdiekite „Rancher“ „CentOS 7“.

Naudojate kitą sistemą? Įvadas Rancher yra atvirojo kodo platforma, skirta konteineriams paleisti ir privačių konteinerių paslaugai kurti. Rancher yra bazė

Įdiekite Docker CE Ubuntu 18.04

Įdiekite Docker CE Ubuntu 18.04

Įvadas „Docker“ yra programa, leidžianti diegti programas, kurios vykdomos kaip konteineriai. Jis buvo parašytas populiaria Go programavimo kalba

Sukurkite Docker Swarm Alpine Linux 3.9.0

Sukurkite Docker Swarm Alpine Linux 3.9.0

Įvadas Šiame vadove bus parodyta, kaip sukurti ir konfigūruoti Docker būrį naudojant kelis Alpine Linux 3.9.0 serverius ir Portainer. Prašome žinoti, kad

Įdiekite PHP programą naudodami „Docker-compose“.

Įdiekite PHP programą naudodami „Docker-compose“.

PHP programas paprastai sudaro žiniatinklio serveris, reliacinė duomenų bazių sistema ir pats kalbos vertėjas. Šioje pamokoje mes naudosime svertą

Apkrovos balansas su Docker

Apkrovos balansas su Docker

Kai naudojate žiniatinklio programą, paprastai norite maksimaliai išnaudoti savo išteklius, nereikės konvertuoti programinės įrangos į kelių gijų o

Įdiekite Node.js programą naudodami „Docker“.

Įdiekite Node.js programą naudodami „Docker“.

Šiame straipsnyje bus parodyta, kaip įdiegti „Node“ programą „Docker“ konteineryje. Pastaba: Šioje pamokoje daroma prielaida, kad įdiegėte ir perskaitėte „Docker“.

„Docker CE“ diegimas „CentOS 7“.

„Docker CE“ diegimas „CentOS 7“.

Docker konteinerio technologija leidžia paleisti programas konkrečioje ir izoliuotoje aplinkoje. „Docker Community Edition“ (CE) yra naujas „fre“ pavadinimas

Įdiekite „Kubernetes“ naudodami „Kubeadm“ „CentOS 7“.

Įdiekite „Kubernetes“ naudodami „Kubeadm“ „CentOS 7“.

Apžvalga Šis straipsnis skirtas padėti jums greitai sukurti ir paleisti Kubernetes klasterį su kubeadm. Šiame vadove bus naudojami du serveriai

„Docker“ diegimas „CentOS 7“.

„Docker“ diegimas „CentOS 7“.

Naudojate kitą sistemą? „Docker“ yra programa, leidžianti įdiegti programinę įrangą virtualiuose konteineriuose. Tai buvo parašyta Go programoje

„Docker CE“ diegimas „Debian 9“.

„Docker CE“ diegimas „Debian 9“.

Naudojate kitą sistemą? Įvadas Docker yra programa, leidžianti įdiegti programinę įrangą virtualiuose konteineriuose. Tai buvo parašyta G

Pradėkite naudotis „SQL Server 2017“ (MS-SQL) „CentOS 7“ su „Docker“.

Pradėkite naudotis „SQL Server 2017“ (MS-SQL) „CentOS 7“ su „Docker“.

Būtinos sąlygos Docker engine 1.8+. Mažiausiai 4 GB vietos diske. Mažiausiai 4 GB RAM. 1 veiksmas. Įdiekite Docker Norėdami įdiegti SQL-Server, Docker mus

Sticky Session with Docker Swarm (CE) Debian 9

Sticky Session with Docker Swarm (CE) Debian 9

Naudojate kitą sistemą? Įvadas Docker Swarm paverčia jūsų atskirus serverius kompiuterių grupe; palengvinantis mastelio keitimą, didelis prieinamumas ir

Du „Docker“ grafinio valdymo įrankiai: „DockerUI“ ir „Shipyard“.

Du „Docker“ grafinio valdymo įrankiai: „DockerUI“ ir „Shipyard“.

Naudodami „Vultr Docker“ programą galite lengvai įdiegti „Docker“ savo „Vultr“ serverio egzemplioriuje. Tuo tarpu galite palengvinti „Docker“ valdymo užduotį

Įdiekite „Rancher Server“ „RancherOS“.

Įdiekite „Rancher Server“ „RancherOS“.

Apžvalga RancherOS yra neįtikėtinai lengva operacinė sistema (tik apie 60 MB), kuri naudoja sistemos Docker demoną kaip PID 0 sistemos paslaugoms vykdyti.

Darbo su Kubernetes pradžia CentOS 7

Darbo su Kubernetes pradžia CentOS 7

„Kubernetes“ yra „Google“ sukurta atvirojo kodo platforma, skirta tvarkyti konteinerines programas serverių grupėje. Jis remiasi dešimtmečiu ir

Mašinų augimas: AI pritaikymas realiame pasaulyje

Mašinų augimas: AI pritaikymas realiame pasaulyje

Dirbtinis intelektas nėra ateityje, jis čia, dabartyje Šiame tinklaraštyje Skaitykite, kaip dirbtinio intelekto programos paveikė įvairius sektorius.

DDOS atakos: trumpa apžvalga

DDOS atakos: trumpa apžvalga

Ar taip pat esate DDOS atakų auka ir esate sumišęs dėl prevencijos metodų? Perskaitykite šį straipsnį, kad išspręstumėte savo užklausas.

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Ar kada nors susimąstėte, kaip įsilaužėliai uždirba pinigų?

Galbūt girdėjote, kad įsilaužėliai uždirba daug pinigų, bet ar kada susimąstėte, kaip jie uždirba tokius pinigus? padiskutuokime.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Revoliuciniai „Google“ išradimai, kurie palengvins jūsų gyvenimą.

Ar norite pamatyti revoliucinius „Google“ išradimus ir kaip šie išradimai pakeitė kiekvieno žmogaus gyvenimą šiandien? Tada skaitykite tinklaraštį, kad pamatytumėte „Google“ išradimus.

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Penktadienio esminiai dalykai: kas atsitiko AI varomiems automobiliams?

Savavaledžių automobilių koncepcija, kuri išvažiuotų į kelius su dirbtinio intelekto pagalba, yra svajonė, kurią jau kurį laiką svajojame. Tačiau nepaisant kelių pažadų, jų niekur nematyti. Skaitykite šį tinklaraštį, kad sužinotumėte daugiau…

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Technologinis išskirtinumas: tolima žmogaus civilizacijos ateitis?

Kadangi mokslas sparčiai vystosi, perimdamas daug mūsų pastangų, taip pat didėja rizika, kad pateksime į nepaaiškinamą singuliarumą. Skaitykite, ką mums gali reikšti išskirtinumas.

Duomenų saugojimo raida – infografika

Duomenų saugojimo raida – infografika

Duomenų saugojimo metodai gali būti tobulinami nuo pat Duomenų gimimo. Šiame tinklaraštyje, remiantis infografika, aprašoma duomenų saugojimo raida.

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Didžiųjų duomenų atskaitos architektūros sluoksnių funkcijos

Skaitykite tinklaraštį, kad paprasčiausiai sužinotumėte apie skirtingus didžiųjų duomenų architektūros sluoksnius ir jų funkcijas.

6 nuostabūs išmaniųjų namų įrenginių privalumai

6 nuostabūs išmaniųjų namų įrenginių privalumai

Šiame skaitmeniniu būdu pagrįstame pasaulyje išmanieji namų įrenginiai tapo svarbia gyvenimo dalimi. Štai keletas nuostabių išmaniųjų namų įrenginių privalumų, kaip jie daro mūsų gyvenimą vertą gyventi ir paprastesnį.

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

„macOS Catalina 10.15.4“ priedo atnaujinimas kelia daugiau problemų, nei sprendžia

Neseniai „Apple“ išleido „macOS Catalina 10.15.4“ priedą, skirtą problemoms išspręsti, tačiau atrodo, kad dėl atnaujinimo kyla daugiau problemų, dėl kurių „Mac“ įrenginiai blokuojami. Norėdami sužinoti daugiau, perskaitykite šį straipsnį