Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?
Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist
Es gibt viele Möglichkeiten, den Prozess des Einrichtens und Konfigurierens einer Box zu automatisieren. Wenn unser gesamtes System zu diesem Zeitpunkt nur aus einer einzigen Box besteht, ist die Einrichtung einer vollständigen SCM-Infrastruktur (Software Configuration Management) aus irgendeinem Grund zu viel des Guten. Shell-Skripte sind eine Option, aber wir könnten auch eine abgespeckte Version von SCM verwenden, die in einigen der verfügbaren Tools verfügbar ist. Chef ist eine der beliebtesten Optionen und "Chef-Solo" ist der eigenständige Konfigurationsmodus von Chef, in dem kein zusätzlicher Knoten als "Chef-Server" erforderlich ist. Alles, was es braucht, ist eine URL oder ein Pfad zu einem Tarball-Paket, das Kochbücher für Köche enthält. Im Vergleich zu Shell-Skripten ist diese Art von Ansatz sofort deklarativer und effizienter und bietet auch eine gute Einführung für den Einstieg in SCMs oder IaC-Prozesse (Infrastructure as Code).
Die 'Rezepte' in einem 'Kochbuch' des Küchenchefs haben ein rubinbasiertes DSL, das 'Ressourcen' beschreibt, die sich in einem bestimmten Zustand auf einem Knoten befinden. Fahren wir mit einer exemplarischen Vorgehensweise fort, um einige Chef-Konzepte kennenzulernen, die auch für Chef-Solo gelten. Unser Ziel ist es, einen Ubuntu-Knoten einzurichten, auf dem eine Python / Django-Web-App mit Gunicorn und NGINX ausgeführt wird.
Hinweis: ChefDK muss nicht unbedingt auf unserer "Chef Workstation" (unserem Computer) installiert sein. Mit diesem Befehl können wir jedoch die Befehle "chef generate" verwenden, um mit einer Verzeichnisstruktur zum Erstellen von Kochbüchern, Rezepten und mehr zu beginnen. In diesem Artikel wird davon ausgegangen, dass ChefDK auf unserer Workstation installiert ist. Befehle wurden mit der Version 4.7.26-1 von ChefDK ausgeführt.
(Ab diesem Zeitpunkt muss alles, sofern nicht anders angegeben, auf unserer Maschine ausgeführt werden, die auch als "Chef Workstation" bezeichnet wird.)
Kochbücher in chef sind wiederverwendbare Einheiten, die alles enthalten, was zur Unterstützung eines Konfigurationsszenarios erforderlich ist. Kochbücher können mehrere "Rezepte" enthalten, und "Rezepte" bestehen hauptsächlich aus Ressourcenmustern. default.rb
ist das Standardrezept, das ausgeführt wird, wenn auf das Kochbuch in einer Ausführungsliste verwiesen wird . Verschiedene Rezepte ermöglichen die Trennung von Bedenken. In diesem Tutorial fügen wir jedoch alle Ressourcendeklarationen in einer Hauptrezeptdatei hinzu, nämlich der default.rb
.
Erstellen Sie einen Ordner mit dem Namen "my-chef-project" und erstellen Sie darin einen Ordner mit dem Namen "cookbooks". Von ./my-chef-project/cookbooks/
, laufen Sie:
$ chef generate cookbook my-cookbook
Unsere Verzeichnisstruktur sieht nun folgendermaßen aus:
.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb
Der erste Schritt zum Einrichten unseres Knotens besteht darin, zu ermitteln, welche Pakete von unserer App benötigt werden. Unser Knoten ist Ubuntu, daher können wir uns auf den APT-Paketmanager verlassen, um die Abhängigkeiten zu erfassen. Die Installation der von der Betriebssystemdistribution bereitgestellten Pakete ist dann ein Kinderspiel:
apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'
Diese sind ziemlich selbsterklärend. In der ersten Zeile wird das apt-Repository aktualisiert, und in den folgenden Zeilen werden diese Pakete installiert.
Hinweis: Die Pakete nach 'nginx' werden benötigt, um einige der Python-Abhängigkeiten über pip zu kompilieren. Diese können je nach den in angegebenen Python / Django-Projektabhängigkeiten unterschiedlich sein
requirements.txt
. Sie können eine Versuchs- und Fehlermethode verwenden, um diese Pakete zu ermitteln, die Sie in Ihr Kochbuch aufnehmen müssen.sudo pip install -r requirements.txt
Führen Sie dazu auf einem frisch instanziierten Ubuntu-Computer ein Handbuch durch (Hinweis: Dies installiert Pakete systemweit!), Um festzustellen, ob es erfolgreich ausgeführt wird. Wenn nicht, sollte der stderr Ihnen Hinweise geben, welche Pakete fehlen.
Sobald wir die erforderlichen Pakete hinzugefügt haben, müssen wir einen nicht privilegierten Linux-Benutzer erstellen, dem der Anwendungsquellcode gehört.
user 'bob' do
uid 1212
gid 'users'
home '/home/bob'
shell '/bin/bash'
password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end
Beachten Sie, dass das Kennwort ein unter Linux verwendetes Schatten-Hash-Format ist. Es kann mit OpenSSL abgeleitet werden:
$ openssl passwd -1 -salt alilbitof mypassword
Nehmen wir nun den Quellcode der Django-Anwendung in unser Kochbuch auf. Platzieren Sie den Quellcode in ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/
Erstellen Sie das ./my-chef-project/cookbooks/my-cookbook/files/default
Verzeichnis, falls es nicht vorhanden ist.
Die Anweisung zum Kopieren dieser Dateien an einen Remotestandort auf unserem Knoten wird mithilfe der Ressource remote_directory beschrieben :
remote_directory '/home/bob/myapp' do
source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
owner 'bob'
group 'users'
mode '0755'
action :create
end
Um die Python-Pakete in zu installieren requirements.txt
, können wir die Ausführungsressource verwenden , um einen beliebigen Befehl auszuführen . In diesem Fall müssen wir den Befehl pip install darüber ausführen:
execute 'install python dependencies' do
command 'pip3 install -r requirements.txt'
cwd '/home/bob/myapp'
end
Hinweis: Beachten Sie, dass dies als Root-Benutzer ausgeführt wird und die Python-Bibliotheken systemweit installiert werden. Wenn unser Knoten ausschließlich diese eine einzelne Python-App ausführen soll, ist dies kein großes Problem. Trotzdem ist es eine bessere Option, die Dinge sauber und vernünftig zu halten, ein Community-Kochbuch zu finden und zu verwenden, das Python-Installationen oder 'virtuelle Umgebungen' verwaltet. (oder schreiben Sie zumindest eine Reihe von Ausführungsblöcken , um dies zu replizieren). Durch die Verwendung von virtualenvs in Python wird sichergestellt, dass pythonbasierte Systemtools oder andere Python-Projekte nicht betroffen sind
Jetzt ist es Zeit, den Gunicorn WSGI HTTP Server mit NGINX als Reverse Proxy vorzubereiten. Nginx wird auch verwendet, um alle statischen Assets von Django zu verwalten.
Um Gunicorn als Dienst unter Ubuntu zu nutzen, kann Systemd verwendet werden. Die Ressource systemd_unit ist seit Version 12.11 in Chef enthalten.
systemd_unit 'gunicorn.service' do
content({
Unit: {
Description: 'Django on Gunicorn',
After: 'network.target',
},
Service: {
ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
User: 'bob',
Group: 'www-data',
WorkingDirectory: '/home/bob/myapp'
Restart: 'always',
},
Install: {
WantedBy: 'multi-user.target',
}
})
action [:create, :enable, :start]
end
Jetzt müssen wir diesem Gunicorn-Server eine Standard-NGINX-Proxy-Konfiguration hinzufügen, wie unten gezeigt. Dieses Snippet kann hineingehen ./my-cookbook/templates/nginx.conf.erb
. Erstellen Sie das Vorlagenverzeichnis, falls es nicht vorhanden ist.
Hinweis: Die Vorlagen von Chef unterstützen eingebettete Ruby-Dateien, die Variablen, Ruby-Ausdrücke und Anweisungen enthalten können. Obwohl diese Datei die Erweiterung 'erb' hat, haben wir keine der Ruby-Anweisungen oder -Ausdrücke verwendet. Der Einfachheit halber haben wir hier nur eine Nicht-HTTPS-Nginx-Konfiguration (sanfte Erinnerung; bitte tun Sie dies nicht in der Produktion!)
server {
listen 80;
server_name http://example.com/;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/bob/myapp/myapp/static;
}
location / {
include proxy_params;
proxy_pass http://localhost:8080/;
}
}
Hinweis: Es gibt auch eine Alternative und eine bessere Konfiguration, bei der beispielsweise der Gunicorn-Server anstelle einer TCP-Loopback-Verbindung an einen Unix-Domain-Socket gebunden ist. Es lohnt sich, dies aus Leistungsgründen zu untersuchen.
Verwenden Sie die Vorlagenressource von Chef, um diese Konfiguration in einen Site-fähigen Ordner auf dem Knoten zu kopieren .
template '/etc/nginx/sites-available/example.com.conf' do
source 'nginx.conf.erb'
owner 'root'
group 'root'
mode '0744'
end
Das Aktivieren von Konfigurationen auf nginx erfolgt normalerweise durch Erstellen eines Symlinks, der auf die Konfiguration sites-available
im sites-enabled
Ordner von nginx verweist . Symlinks können in Kochbüchern mit der folgenden Link- Ressource deklariert werden:
link '/etc/nginx/sites-enabled/example.com.conf' do
to '/etc/nginx/sites-available/example.com.conf'
end
und um den Standard-Konfigurationssymlink zu löschen:
link '/etc/nginx/sites-enabled/default' do
action :delete
end
Und schließlich, um den Nginx-Service zu starten:
service 'nginx' do
action :enable
action :start
end
Run-Listen in Chef sind eine geordnete Liste von Rollen oder Rezepten in einem Kochbuch, die nacheinander auf dem Knoten ausgeführt werden. Wir haben ein Kochbuch "my-cookbook" und das "Standard" -Rezept, das wir auf der Ubuntu-Box ausführen müssen, daher sollte die Datei runlist.json in unserem Projektverzeichnis ( ./my-chef-project/runlist.json
) folgendermaßen aussehen:
{
"run_list": [
"recipe[my-cookbook::default]"
]
}
Unser Kochbuch für Chef Solo ist servierfertig. Es ist Zeit, eine Ubuntu 18.04-Maschine bereitzustellen und ChefDK darauf zu installieren:
$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'
Möchten Sie zurück zu unserer Chef - Workstation zu tun, alles , was wir brauchen , ist setzt die Kochbücher Ordner in einem Tarball, Transfer dass Tarball zusammen mit der runlist.json
an den entfernten Knoten wir oben bereitgestellt und führen Sie den Koch-Solo - Befehl ein :
(Der folgende Befehl muss innerhalb des Knotens oder des 'Chef-Clients' und nicht der Chef-Workstation ausgeführt werden.)
$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept
Oder hier ist ein Einzeiler ( ./my-chef-project/
Wird von CWD auf der Chef Workstation ausgeführt):
tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'
Das ist es! Beobachten Sie, wie die Standardausgabe mit Chef-Aktivitäten gefüllt wird, die versuchen, Ihren Knoten auf das zu konvergieren, was Sie in den Kochbüchern angegeben haben. Chef-Solo installiert alle Edelsteine, die für alle Kochbücher erforderlich sind. Wenn der Befehl chef-solo erfolgreich ist, wird eine funktionierende Django-Anwendung hinter nginx auf der Ubuntu-Box ausgeführt. Navigieren Sie zur Domäne / IP, um sie zu testen.
Hinweis: Denken Sie daran, dass Sie in Django möglicherweise diese Domain / IP in der
ALLOWED_HOSTS
Liste in festlegen müssensettings.py
.
Wenn wir den Inhalt unseres Projektverzeichnisses ändern (Rezepte, Vorlagen oder den Quellcode der Anwendung usw.), führen Sie einfach den obigen Einzeiler aus dem Projektverzeichnis aus.
Tipp: Wenn das Kochbuch mit git versioniert ist (wie es sollte), ist es eine gute Empfehlung, Git-Hooks zu setzen, um diesen Einzeiler auszuführen.
Wenn Sie sich den letzten Befehl von chef-solo genau ansehen, beachten Sie, dass der Befehl --recipe-url
eine URL annehmen soll. Dies bedeutet, dass Sie einen Workflow haben können, in dem ein CI Ihren Chef-Solo-Tarball erstellt, ihn irgendwo hochlädt und Ihren Knoten so konfiguriert, dass er regelmäßig daraus gezogen wird.
Tipp: Verwenden Sie Curl, um den geänderten Tarball regelmäßig als Cronjob zu ziehen.
curl -z $file
berücksichtigtIf-Modified-Since
Header und lädt den Teerball nur herunter, wenn die Remote-Datei seit dem Zeitstempel auf dem vorhandenen lokalen geändert wurde$file
.
Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist
ReactOS, ein quelloffenes und kostenloses Betriebssystem, ist hier mit der neuesten Version. Kann es den Anforderungen moderner Windows-Benutzer genügen und Microsoft zu Fall bringen? Lassen Sie uns mehr über dieses alte, aber neuere Betriebssystem erfahren.
Whatsapp hat endlich die Desktop-App für Mac- und Windows-Benutzer auf den Markt gebracht. Jetzt können Sie ganz einfach von Windows oder Mac auf WhatsApp zugreifen. Verfügbar für Windows 8+ und Mac OS 10.9+
Lesen Sie dies, um zu erfahren, wie Künstliche Intelligenz bei kleinen Unternehmen beliebt wird und wie sie die Wahrscheinlichkeit erhöht, sie wachsen zu lassen und ihren Konkurrenten einen Vorsprung zu verschaffen.
Vor kurzem hat Apple macOS Catalina 10.15.4 als Ergänzungsupdate veröffentlicht, um Probleme zu beheben, aber es scheint, dass das Update mehr Probleme verursacht, die zum Bricking von Mac-Computern führen. Lesen Sie diesen Artikel, um mehr zu erfahren
13 Tools zur kommerziellen Datenextraktion von Big Data
Unser Computer speichert alle Daten in einer organisierten Weise, die als Journaling-Dateisystem bekannt ist. Es ist eine effiziente Methode, die es dem Computer ermöglicht, Dateien zu suchen und anzuzeigen, sobald Sie auf die Suche klicken.https://wethegeek.com/?p=94116&preview=true
Da sich die Wissenschaft schnell weiterentwickelt und einen Großteil unserer Bemühungen übernimmt, steigt auch das Risiko, uns einer unerklärlichen Singularität auszusetzen. Lesen Sie, was Singularität für uns bedeuten könnte.
Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1
KI im Gesundheitswesen hat in den letzten Jahrzehnten große Fortschritte gemacht. Somit wächst die Zukunft der KI im Gesundheitswesen immer noch von Tag zu Tag.