Telepítse a Plesket a CentOS 7 rendszeren
Más rendszert használ? A Plesk egy szabadalmaztatott webtárhely-vezérlőpult, amely lehetővé teszi a felhasználók számára, hogy adminisztrálják személyes és/vagy ügyfeleik webhelyeit, adatbázisait
A Continuous Integration egy DevOps szoftverfejlesztési gyakorlat, amely lehetővé teszi a fejlesztők számára, hogy a módosított kódot naponta többször egyesítsék a megosztott tárolóba. Minden egyesítés után automatikus összeállításokat és teszteket hajtanak végre a kóddal kapcsolatos problémák észlelésére. Lehetővé teszi a fejlesztők számára, hogy gyorsan megtalálják és kijavítsák a hibákat a szoftver minőségének javítása és a szoftver folyamatos szállítása érdekében. A Concourse-ról nagyon egyszerű az ide-oda váltás, mivel az összes konfigurációt deklaratív fájlokban tartja, amelyek ellenőrizhetők a verziókezelésben. Webes felhasználói felületet is biztosít, amely interaktívan jeleníti meg a build információkat.
Feltétlenül cserélje le a tényleges Vultr nyilvános IP-címét és a tényleges domain nevét , 192.0.2.1
és minden előfordulását ci.example.com
.
Frissítse alaprendszerét a CentOS 7 frissítése útmutató segítségével . A rendszer frissítése után folytassa a PostgreSQL telepítésével.
A PostgreSQL egy objektumrelációs adatbázisrendszer. A Concourse a folyamat adatait egy PostgreSQL adatbázisban tárolja. Adja hozzá a PostgreSQL-tárat.
sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Telepítse a PostgreSQL adatbázis-kiszolgálót.
sudo yum -y install postgresql96-server postgresql96-contrib
Inicializálja az adatbázist.
sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb
initdb
létrehoz egy új PostgreSQL adatbázis-fürtöt, amely egyetlen kiszolgálópéldány által kezelt adatbázisok gyűjteménye. Szerkessze a pg_hba.conf
fájlt az MD5 alapú hitelesítés engedélyezéséhez.
sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf
Keresse meg a következő sorokat és módosítsa az értékeket peer
és ident
az METHOD
oszlop trust
és a md5
rendre.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
Frissítés után a konfigurációnak így kell kinéznie.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Indítsa el a PostgreSQL-kiszolgálót, és engedélyezze, hogy rendszerindításkor automatikusan elinduljon.
sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6
Módosítsa az alapértelmezett PostgreSQL-felhasználó jelszavát.
sudo passwd postgres
Bejelentkezés PostgreSQL felhasználóként:
sudo su - postgres
Hozzon létre egy új PostgreSQL-felhasználót a Concourse CI-hez.
createuser concourse
Megjegyzés : Az alapértelmezett PostgreSQL-felhasználó használható az adatbázis hitelesítésére, de ajánlatos egy dedikált felhasználót használni a Concourse-adatbázis hitelesítéséhez egy éles telepítésben.
A PostgreSQL parancsértelmezőt biztosít a lekérdezések futtatásához az adatbázisban. Váltson a PostgreSQL shellre a következő futtatásával:
psql
Állítson be jelszót az újonnan létrehozott Concourse adatbázis-felhasználó számára.
ALTER USER concourse WITH ENCRYPTED password 'DBPassword';
Fontos : Cserélje DBPassword
ki erős jelszóra. Jegyezze fel a jelszót, mert az oktatóprogram későbbi részében szükség lesz rá.
Hozzon létre egy új adatbázist a Concourse számára.
CREATE DATABASE concourse OWNER concourse;
Lépjen ki a psql
héjból.
\q
Váltás a sudo felhasználóra az aktuális postgres felhasználóról.
exit
Töltse le a Concourse végrehajtható fájl legújabb verzióját, és tárolja azt, /usr/bin
hogy közvetlenül végrehajtható legyen. A Concourse és Fly binárisok legújabb verziója a Concourse letöltési oldalán található . Nagyon gyakoriak az új kiadások. Cserélje ki az alábbi linket a legújabb verzióhoz tartozó új hivatkozásra.
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 -O /usr/bin/concourse
Hasonló módon töltse le a fly végrehajtható fájl legújabb verzióját, és tárolja a /usr/bin
.
sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 -O /usr/bin/fly
A Fly a parancssori interfész a Concourse CI ATC API-jához való csatlakozáshoz. A Fly több platformon is elérhető, például Linux, Windows és MacOS.
Rendeljen végrehajtási engedélyt a letöltött concourse
és fly
bináris fájlokhoz.
sudo chmod +x /usr/bin/concourse /usr/bin/fly
Ellenőrizze, hogy a Concourse és a Fly megfelelően működik-e a verziójuk ellenőrzésével.
concourse -version
fly -version
Az RSA kulcspárok lehetőséget biztosítanak a Konkurzus összetevői közötti kommunikáció titkosítására.
A Concourse működéséhez legalább három kulcspárt kell generálni. A munkamenet adatainak titkosításához hozzon létre egy session_signing_key
. Ezt a kulcsot a TSA az ATC-hez intézett kérések aláírására is használja. A TSA SSH-kiszolgáló biztosításához hozzon létre egy tsa_host_key
. Végül generáljon egy- worker_key
et minden dolgozóhoz.
Hozzon létre egy új könyvtárat a Concourse CI-vel kapcsolatos kulcsok és konfigurációk tárolására.
sudo mkdir /opt/concourse
Állítsa elő a szükséges kulcsokat.
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key
Engedélyezze a dolgozók nyilvános kulcsát a tartalmának a authorized_worker_keys
fájlba másolásával :
sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys
A Concourse két különálló összetevőt biztosít, amelyeket el kell indítani, a webet és a dolgozót. Indítsa el a Concours webet.
sudo concourse web \
--basic-auth-username admin \
--basic-auth-password StrongPass \
--session-signing-key /opt/concourse/session_signing_key \
--tsa-host-key /opt/concourse/tsa_host_key \
--tsa-authorized-keys /opt/concourse/authorized_worker_keys \
--postgres-user=concourse \
--postgres-password=DBPassword \
--postgres-database=concourse \
--external-url http://192.0.2.1:8080
basic-auth
Ha szükséges, módosítsa a felhasználónevét és jelszavát . Győződjön meg arról, hogy a kulcsfájlok elérési útja helyes, és győződjön meg arról, hogy a felhasználónév és a jelszó helyes értéke van megadva a PostgreSQL adatbázis konfigurációjában.
Megjegyzés : Az ATC az alapértelmezett portot 8080
, a TSA pedig a portot figyeli 2222
. Ha a hitelesítés nem kívánatos, --no-really-i-dont-want-any-auth
az alapvető hitelesítési beállítások eltávolítása után adja át a lehetőséget.
Once the web server is started, the following output should be displayed.
{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}
Stop the server for now, as a few more things still must be setup.
Start the Concourse CI Worker.
sudo concourse worker \
--work-dir /opt/concourse/worker \
--tsa-host 127.0.0.1 \
--tsa-public-key /opt/concourse/tsa_host_key.pub \
--tsa-worker-private-key /opt/concourse/worker_key
The above command will assume that the TSA is running on localhost and listening to the default port 2222
.
Though the Concourse web and worker can be started easily using the commands above, it is recommended to use Systemd to manage the server.
Using Systemd service for managing the application ensures that the application is automatically started on failures and at boot time. The Concourse server does not take data from any configuration file, but it can access the data from environment variables. Instead of setting global environment variables, create a new file to store the environment variables and then pass the variables to the Concourse CI using the Systemd service.
Create a new environment file for Concourse web.
sudo nano /opt/concourse/web.env
Populate the file.
CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse
CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080
Change the username and password of the BASIC_AUTH
if desired. Make sure that the path to the key files are correct and make sure that the correct value for username and password in the PostgreSQL database configuration is provided.
Similarly, create an environment file for the worker.
sudo nano /opt/concourse/worker.env
Populate the file.
CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1
As the environment files contain username and passwords, change its permissions so that it cannot be accessed by other users.
sudo chmod 600 /opt/concourse/*.env
Now create a new user for Concourse to run the web environment. This will ensure that the web server is running in an isolated environment.
sudo adduser --system concourse
Give the concourse user ownership over Concourse CI file's directory.
sudo chown -R concourse:concourse /opt/concourse
Create a new systemd service file for the Concourse web service.
sudo nano /etc/systemd/system/concourse-web.service
Populate the file.
[Unit]
Description=Concourse CI web server
After=postgresql-9.6.service
[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web
[Install]
WantedBy=multi-user.target
Save and close the file. Create a new service file for the Concourse worker service.
sudo nano /etc/systemd/system/concourse-worker.service
Populate the file.
[Unit]
Description=Concourse CI worker process
After=concourse-web.service
[Service]
Type=simple
User=root
Group=root
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker
[Install]
WantedBy=multi-user.target
The web and worker service can now be started directly by running:
sudo systemctl start concourse-web concourse-worker
To enable the worker and web process to automatically start at boot time, run:
sudo systemctl enable concourse-worker concourse-web
To check the status of services, run:
sudo systemctl status concourse-worker concourse-web
If the service is not started, or in the FAILED
state, remove the cache from the /tmp
directory.
sudo rm -rf /tmp/*
Restart the services.
sudo systemctl restart concourse-worker concourse-web
Notice that this time the services have started correctly. The output upon verifying the status of the services should be simil.
[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
Main PID: 3037 (concourse)
CGroup: /system.slice/concourse-worker.service
└─3037 /usr/bin/concourse worker
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}
...
● concourse-web.service - Concourse CI web server
Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
Main PID: 3036 (concourse)
CGroup: /system.slice/concourse-web.service
└─3036 /usr/bin/concourse web
Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.
Adjust your firewall to allow port 8080, on which ATS is running and port 2222, on which TSA is running.
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload
Once the server is started, the web interface of the Concourse CI can be accessed by going to http://192.0.2.1:8080
in any browser. Log in using the username and password provided in the environment file.
To connect to the server using Fly, run:
fly -t my-ci login -c http://192.0.2.1:8080
The above command is used for initial login to the server. -t
is used to provide a target name. replace my-ci
with any desired target name. The above command will log in to the default team main
. It will ask for the username and password provided in the environment file.
The output will look like the following.
[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'
username: admin
password:
target saved
The target login will be saved for a day. After that, it will expire.
To log out immediately.
fly -t my-ci logout
fly can be used to login to the server outside of the network, but only if the server has a public IP address and it is accessible from outside the network. The Windows or MacOS binary can be downloaded from the download site or from the web UI of the server.
Logins, and other information sent through the web UI to the Concourse server is not secured. The connection is not encrypted. An Nginx reverse proxy can be set up with a Let's Encrypt free SSL.
Install the Nginx web server and Certbot, which is the client application for the Let's Encrypt CA.
sudo yum -y install certbot-nginx nginx
Start and enable Nginx to automatically start at boot time:
sudo systemctl start nginx
sudo systemctl enable nginx
A tanúsítványok kérelmezése előtt a 80-as és 443-as portot, illetve a szabványos HTTP és HTTPS szolgáltatásokat engedélyezni kell a tűzfalon keresztül. A Certbot a tanúsítványok kiadása előtt ellenőrzi a tartományi jogosultságot.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
A 8080-as portot már nem kell átengedni a tűzfalon, mert a Concourse mostantól a szabványos HTTPS-porton fog futni. Távolítsa el a tűzfal bejegyzést a 8080-as port engedélyezéséhez.
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload
jegyzet
To obtain certificates from Let's Encrypt CA, the domain for which the certificates are to be generated must be pointed towards the server. If not, make the necessary changes to the DNS records of the domain and wait for the DNS to propagate before making the certificate request again. Certbot checks the domain authority before providing the certificates.
Hozza létre az SSL-tanúsítványokat.
sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com
A generált tanúsítványok valószínűleg a /etc/letsencrypt/live/ci.example.com/
könyvtárban lesznek tárolva . Az SSL-tanúsítvány a következőként lesz tárolva, fullchain.pem
a privát kulcs pedig mint privkey.pem
.
A Let's Encrypt tanúsítványok 90 napon belül lejárnak, ezért javasolt a tanúsítványok automatikus megújítása a cronjobs használatával. A Cron egy rendszerszolgáltatás, amelyet időszakos feladatok futtatására használnak.
Nyissa meg a cron feladatfájlt.
sudo crontab -e
Adja hozzá a következő sort a fájl végéhez.
30 5 * * 1 /usr/bin/certbot renew --quiet
A fenti cron-feladat minden hétfőn 5:30-kor indul. Ha a tanúsítvány lejár, az automatikusan megújul.
Hozzon létre egy új virtuális gazdagépet.
sudo nano /etc/nginx/conf.d/concourse-ssl.conf
Töltse fel a fájlt.
server {
listen 80;
server_name ci.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name ci.example.com;
ssl_certificate /etc/letsencrypt/live/ci.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ci.example.com/privkey.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/concourse.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
proxy_redirect http://localhost:8080 https://ci.example.com;
}
}
Megjegyzés : Cserélje ci.example.com
ki a tényleges tartományra.
Szerkessze a Concours Web számára létrehozott környezetfájlt.
sudo nano /opt/concourse/web.env
Módosítsa az értékét, CONCOURSE_EXTERNAL_URL
és adjon hozzá még két sort a fájl végéhez.
CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080
Mentse el a fájlt, és indítsa újra a Concourse Web, Worker és Nginx webszervert:
sudo systemctl restart concourse-worker concourse-web nginx
A böngészőbe és a böngészőből küldött összes adat mostantól SSL titkosítással védett.
Más rendszert használ? A Plesk egy szabadalmaztatott webtárhely-vezérlőpult, amely lehetővé teszi a felhasználók számára, hogy adminisztrálják személyes és/vagy ügyfeleik webhelyeit, adatbázisait
A Squid egy népszerű, ingyenes Linux-program, amely lehetővé teszi továbbítási webproxy létrehozását. Ebben az útmutatóban megtudhatja, hogyan telepítheti a Squid-et a CentOS rendszerre, hogy megfordítsa
Bevezetés A Lighttpd az Apache forkja, amely sokkal kevésbé erőforrás-igényes. Könnyű, innen kapta a nevét, és meglehetősen egyszerű a használata. Telepítés
A VULTR a közelmúltban változtatásokat hajtott végre a saját oldalukon, és most már mindennek jól kell működnie, ha a NetworkManager engedélyezve van. Ha szeretné letiltani
Az Icinga2 egy hatékony felügyeleti rendszer, és mester-kliens modellben használva helyettesítheti az NRPE-alapú felügyeleti ellenőrzések szükségességét. A mester-kliens
Más rendszert használ? Az Apache Cassandra egy ingyenes és nyílt forráskódú NoSQL adatbázis-kezelő rendszer, amelyet úgy terveztek, hogy biztosítsa a méretezhetőséget,
Más rendszert használ? A Microweber egy nyílt forráskódú drag and drop CMS és online bolt. A Microweber forráskódja a GitHubon található. Ez az útmutató megmutatja neked
Más rendszert használ? A Vanilla forum egy nyílt forráskódú, PHP-ben írt fórumalkalmazás. Ez egy teljesen testreszabható, könnyen használható, és támogatja a külsőt
Más rendszert használ? A Mattermost egy nyílt forráskódú, saját üzemeltetésű alternatívája a Slack SAAS üzenetküldő szolgáltatásnak. Más szóval, a Mattermost segítségével kb
Mire lesz szüksége Egy Vultr VPS legalább 1 GB RAM-mal. SSH hozzáférés (root/adminisztrátori jogosultságokkal). 1. lépés: A BungeeCord telepítése Először is
A Plesk vezérlőpult nagyon szép integrációt kínál a Lets Encrypt számára. A Lets Encrypt egyike az egyetlen SSL-szolgáltatónak, amely teljes tanúsítványt ad ki
A Lets Encrypt egy tanúsító hatóság, amely ingyenes SSL-tanúsítványokat biztosít. A cPanel ügyes integrációt épített ki, így Ön és ügyfele
Más rendszert használ? A Concrete5 egy nyílt forráskódú CMS, amely számos megkülönböztető és hasznos funkciót kínál, hogy segítse a szerkesztőket a tartalom egyszerű létrehozásában.
Más rendszert használ? A Review Board egy ingyenes és nyílt forráskódú eszköz a forráskód, a dokumentáció, a képek és még sok más áttekintésére. Ez egy web alapú szoftver
Ebből az útmutatóból megtudhatja, hogyan állíthat be HTTP-hitelesítést egy CentOS 7 rendszeren futó Nginx webszerverhez. Követelmények A kezdéshez szüksége lesz a következőre:
Más rendszert használ? A GoAccess egy nyílt forráskódú webnapló-elemző. Használhatja naplók valós idejű elemzésére akár a terminálon, akár a
A YOURLS (Your Own URL Shortener) egy nyílt forráskódú URL-rövidítő és adatelemző alkalmazás. Ebben a cikkben a telepítés folyamatával foglalkozunk
Más rendszert használ? Bevezetés Az ArangoDB egy nyílt forráskódú NoSQL adatbázis, amely rugalmas adatmodellt kínál dokumentumokhoz, grafikonokhoz és kulcsértékekhez. Ez
Bevezetés Az /etc/ könyvtár kritikus szerepet játszik a Linux rendszer működésében. Ennek az az oka, hogy szinte minden rendszerkonfiguráció
Sok rendszergazda nagy mennyiségű kiszolgálót kezel. Ha a fájlokhoz különböző szervereken keresztül kell hozzáférni, mindegyikbe külön-külön kell bejelentkezni kb
A mesterséges intelligencia nem a jövőben, hanem itt a jelenben. Ebben a blogban Olvassa el, hogyan hatott a mesterséges intelligencia alkalmazások különböző ágazatokra.
Ön is DDOS támadások áldozata, és tanácstalan a megelőzési módszereket illetően? Olvassa el ezt a cikket a kérdések megoldásához.
Talán hallottál már arról, hogy a hackerek sok pénzt keresnek, de elgondolkodtál már azon, hogyan kereshetnek ennyi pénzt? beszéljük meg.
Szeretné látni a Google forradalmi találmányait, és azt, hogy ezek a találmányok hogyan változtatták meg minden mai ember életét? Ezután olvassa el a blogot, és nézze meg a Google találmányait.
Az önvezető autók koncepciója, hogy mesterséges intelligencia segítségével kerüljenek az utakra, már egy ideje álmunk. De számos ígéret ellenére sehol sem látszanak. Olvassa el ezt a blogot, hogy többet megtudjon…
Ahogy a tudomány gyors ütemben fejlődik, átveszi erőfeszítéseink nagy részét, megnő annak a kockázata is, hogy alávetjük magunkat egy megmagyarázhatatlan szingularitásnak. Olvassa el, mit jelenthet számunkra a szingularitás.
Az adatok tárolási módjai az Adatok születése óta alakulhatnak. Ez a blog egy infografika alapján mutatja be az adattárolás fejlődését.
Olvassa el a blogot, hogy a legegyszerűbb módon ismerje meg a Big Data Architecture különböző rétegeit és azok funkcióit.
Ebben a digitálisan vezérelt világban az intelligens otthoni eszközök az élet döntő részévé váltak. Íme az intelligens otthoni eszközök néhány elképesztő előnye, hogyan teszik életünket érdemessé és egyszerűbbé.
Az Apple a közelmúltban kiadott egy kiegészítést a macOS Catalina 10.15.4-hez a problémák megoldására, de úgy tűnik, hogy a frissítés több problémát okoz, ami a Mac gépek blokkolásához vezet. További információért olvassa el ezt a cikket