Das Stressen eines Linux-Servers kann hilfreich sein, um seine Leistungsfähigkeit und Stabilität zu überprüfen. Es gibt verschiedene Werkzeuge und Ansätze, um einen Debian-Server zu stressen.
Stress-Test-Werkzeuge installieren: Zuerst müssen wir einige Stress-Test-Werkzeuge installieren.
sudo apt update
sudo apt install stress
Das „stress“-Werkzeug wird verwendet, um den Server zu stressen.
CPU-Test durchführen: Wir können die CPU des Servers stressen, indem wir die Anzahl der CPU-Kerne auf komplette Auslastung erhöhen.
stress --cpu 4 # 4 steht für die Anzahl der CPU-Kerne; eventuell anpassen
Dies wird die CPU für eine bestimmte Anzahl von Threads voll auslasten. Mithilfe von top können wir in einer zweiten Konsole sehen, wie der Rechner komplett auf Anschlag fährt. Beenden wir den Test mit Ctrl+C, wenn wir fertig sind.
RAM-Test durchführen: Um den Arbeitsspeicher zu stressen, verwenden Sie den folgenden Befehl:
stress --vm 4 --vm-bytes 256M
Dies wird den Arbeitsspeicher mit 4 Threads stressen, wobei jeder 256 Megabyte RAM beansprucht.
I/O-Test durchführen: Um das Festplatten-I/O zu stressen, verwenden Sie:
stress --io 4
Dies wird das Festplatten-I/O mit 4 Threads stressen. Ändern wir die Thread-Anzahl nach Bedarf.
Temperatur und Ressourcen überwachen: Während des Stress-Tests sollten wir Temperatur und Ressourcennutzung überwachen, um sicherzustellen, dass der Server nicht überhitzt und keine kritischen Ressourcen erschöpft sind. Wir können Werkzeuge wie sensors oder top verwenden.
Beenden des Stress-Tests: Um den Stress-Test zu beenden, drücken wir Ctrl+C im Terminal.
Bitte beachten, dass das Stressen eines Servers potenziell seine Leistung beeinträchtigen kann und zu einer vorübergehenden Unzugänglichkeit führen kann. Führen wir solche Tests daher nicht auf Produktions- oder wichtigen Servern durch, sondern auf dedizierten Testsystemen (oder auf Servern, die erst noch zu Produktionsservern gemacht werden.)
Wer Symfony für ein bereits bestehendes Projekt nutzen will, steht vor dem Problem, dass es sehr mühsam (und erst recht fehleranfällig) sein kann, händisch die Entity- und Repository-Klassen nachträglich zu erstellen.
Es kann durchaus der Fall sein, dass doctrine bestimmte Maßnahmen fordert. Ich musste zum Beispiel mehrmals nachträglich in meinen Tabellen (gerade in den unbedeutenden) Primärschlüssel erzeugen. Und der spezielle MySQL-Datentyp ENUM muss durch den allgemeineren Typ SET ersetzt werden. Aber diese Anpassungen sollten gefahrlos vorzunehmen sein.
Die richtige Aufforderung („Prompt“) ist der wichtigste Faktor im Umgang mit ChatGPT, da sie die Art und Weise beeinflusst, wie der Chatbot reagiert und antwortet. Ein gut formulierter Prompt kann die Genauigkeit und Relevanz der Antworten von ChatGPT verbessern und gleichzeitig die Wahrscheinlichkeit von unerwünschten oder ungenauen Antworten verringern. Es ist wichtig, eine klare und präzise Aufforderung zu verwenden, um sicherzustellen, dass ChatGPT versteht, was von ihm erwartet wird, und dass seine Antwort auf die spezifische Frage oder das spezifische Thema zugeschnitten ist. Eine schlecht formulierte Aufforderung kann hingegen zu unklaren und verwirrenden Antworten führen, die das Gespräch erschweren oder unnötig in die Länge ziehen.
Hier einige Beispiele, wie ich aktuell die KI bediene.
Bessere Texte in Dialogform gemeinsam mit der KI entwerfen
Kannst du meine Aufforderung verbessern, indem du mir Fragen stellst? Wenn du bereit bist, schreib die verbesserte Aufforderung und stell mir neue Fragen, nachdem ich deine vorherigen Fragen beantwortet habe. Ist das für dich okay?
Wie kreativ darf es sein?
Berücksichtige bitte ab jetzt den „Kfaktor“. Wenn der Kfaktor 1 ist, werden deine Antworten einfach und nicht sehr kreativ sein. Wenn der Kfaktor 10 ist, ist das die Höchstgrenze und du wirst sehr kreativ antworten. Verstehst du das?
Eine Prise Humor, bitte schön!
Berücksichtige bitte ab jetzt den „Hfaktor“. Wenn der Hfaktor 1 ist, werden deine Antworten trocken, journalistisch und humorlos sein. Wenn der Hfaktor 10 ist, ist das die Höchstgrenze und du wirst sehr lustig und humorvoll antworten. Verstehst du das?
Die Autorenrolle finden
Schreibe bitte wie ein erfahrener Werbetexter/Journalist/Arzt/Politiker.
Ein guter Bewerbungstext, oder?
Eine Anleitung zum Lernen erstellen
Ich möchte ein PHP-Programmierer werden. Schreibe mir einen einfachen Schritt-für-Schritt-Plan, der mir beim Lernen hilft. Fange mit den wichtigsten Punkten an und berücksichtige bitte das 80-20-Prinzip. Nutze Markdown Formatierungen für Überschriften und hebe wichtige Punkte fett hervor.
Ich bin PHP-Programmierer, und diese Anleitung (die man in weiteren Schritten auch zu einem kompletten Trainings-Handbuch erweitern könnte) ist wirklich gut.
Mache die KI zu deinem Assistenten
Jetzt wird es noch interessanter. Lassen wir doch die KI mal eine komplexe Aufgabe erledigen, während wir an der Playstation sitzen.
Ich benötige eine Marktstudie über den Verkauf von Induktionsöfen in Deutschland. Bestimme bitte alle Schritte, um sie zu realisieren, und setze sie dann selbstständig ohne meine Hilfe um.
Kleiner Tipp: Wenn der Text zwischendurch abreist, einfach kurz von der Playstation aufstehen und „weiter bitte“ eintippen.
Und jetzt noch ein kleiner Witz
Erzähl mir einen Witz, der so anfängt: Darth Vader, der Papst und Greta Thunberg betreten eine Bar, da sagt Darth Vader …
Ergebnis:
Darth Vader: Ich spüre eine starke Macht in diesem Raum... ach nein, das ist ja nur Greta Thunberg, die ihr Handy auflädt.
Nach ca. 20 Versuchen wurde es dann wirklich etwas lustig. Ich bin positiv überrascht.
Darth Vader, der Papst und Greta Thunberg betreten eine Bar. Der Barkeeper schaut sie an und sagt: „Was kann ich euch anbieten?“ Der Papst antwortet: „Ich nehme ein Glas Wasser, bitte.“ Greta sagt: „Ich nehme ein Glas Saft, aber bitte aus biologischem Anbau.“ Und Darth Vader sagt: „Ich nehme ein Glas Milch.“ Der Barkeeper schaut ihn überrascht an und fragt: „Milch? Wirklich?“ Darth Vader antwortet: „Ja, ich muss meine dunkle Seite ein bisschen aufhellen.“
alias +='pushd .'
alias ..='cd ..'
alias ...='cd ../..'
alias dir='ls -la --color=auto'
alias d='ls -la --color=auto'
alias gzcat='gunzip -c'
alias l='ls -alF'
alias la='ls -la'
alias ll='ls -la'
alias ls='/bin/ls $LS_OPTIONS'
alias ls-l='ls -l'
alias md='mkdir -p'
alias o='less'
alias rd='rmdir'
alias rehash='hash -r'
alias rm='rm -i'
alias unzip='tar xfvz'
alias which='type -p'
alias zip='tar cfvz'
alias sudo='sudo '
alias del='trash -rf'
Webmin -> Refresh Modules Servers -> PostgreSQL Database Server
HeidiSQL für PostgreSQL
WICHTIG: IP6 muss deaktiviert sein (siehe oben)
sudo nano /etc/postgresql/14/main/postgresql.conf
listen_addresses = '*'
sudo nano /etc/postgresql/14/main/pg_hba.conf
# IPv4 local connections:
#host all all 127.0.0.1/32 scram-sha-256
host all all 0.0.0.0/0 scram-sha-256
sudo service postgresql restart
Da IP6 jetzt deaktiviert ist, muss noch eine Einstellung für nginx dringend angepasst werden:
sudo nano /etc/nginx/sites-available/default
#listen [::]:80 default_server; dieser Eintrag muss deaktiviert sein, wenn kein IP6
sudo systemctl restart nginx # nginx neu starten
neuer User für PostgreSQL
Webmin -> PostgreSQL -> PostgreSQL Users -> Create a new user
Samba
sudo apt-get install samba
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup # Kopie schadet nie
systemctl status smbd # Status prüfen
sudo nano /etc/samba/smb.conf
[www]
comment = Web Root Dir
path = /var/www/html
valid users = @www-data
browseable = yes
public = no
writable = yes
printable = no
create mode = 0644
directory mode = 0775
force group = www-data
force user = www-data
sudo usermod -aG www-data $USER
sudo smbpasswd -a $USER # für jeden Nutzer notwendig, der Samba nutzen soll
sudo service smbd restart
systemctl status smbd
sudo smbstatus --shares # zeigt aktive Verbindungen
In der Windows-Kommandozeile eine Verbindung herstellen:
net use X: \\<HOST>\www /user:<USER> <PASSWORD>
Symfony
Symfony-cli Binary installieren
sudo apt-get install php-xml # wird noch benötigt
cd ~
curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh' | sudo -E bash
sudo apt install symfony-cli
ein neues Symfony-Projekt anlegen
sudo chown -R www-data:www-data /var/www/html/
sudo find /var/www/html/ -type d -exec chmod 775 {} \;
sudo find /var/www/html/ -type f -exec chmod 664 {} \;
sudo find /var/www/html/ -type d -exec chmod g+s {} \;
cd /var/www/html/
symfony new --webapp testprojekt
cd testprojekt/
composer require --dev symfony/profiler-pack
symfony server:start -d # Symfony Server starten
Wer erst nachträglich auf die Idee kommt, den eigenen Entwicklungsserver mit einem Produktionsserver per Git und GitHub zu synchronisieren, steckt vor dem Problem, wie man eine Verbindung zu GitHub herstellt und einen erstmaligen Abgleich der Dateien herstellt. Danach kann und sollte ein Deployment dann nur noch per git erfolgen.
Wie immer ist es einfach, wenn man weiß, wie es geht, oder welche Fragen man stellen muss.
Problembeschreibung
Problem: ein Projekt (auf Produktion), das bisher nur mit FTP deployt wurde, soll nachträglich nur noch mit einem GitHub Repository ohne FTP synchronisiert werden.
SSH-Schlüssel bei GitHub hinterlegen
Da es sich aller Wahrscheinlichkeit nach um ein privates Projekt handelt, muss sich der Produktionsserver (=Ziel) gegenüber GitHub authentifizieren. Dazu muss man einen öffentlichen Schlüssel erzeugen und bei GitHub hinterlegen. Erklärt habe ich das bereits hier (für Windows) und hier (für Linux).
ls -al ~/.ssh # testen, ob schon Keys vorhanden sind
mkdir ~/.ssh # wenn nicht, Ordner anlegen
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "<BESCHREIBUNG>"
ls -la
Danach muss git wissen, wo es die SSH-Schlüssel findet.
nano ~/.ssh/config
Der einfachste und funktionsfähige Inhalt wäre folgender:
Ich authentifiziere mich als git@github-private bei GitHub.
ssh -T git@github-private
Das git Repository auf Produktion anlegen und mit dem remote Repository verbinden
Navigieren Sie zum Verzeichnis Ihres lokalen Projekts auf dem Produktionsserver und führen Sie folgende Befehle aus.
cd <PROJEKTVERZEICHNIS>
git init
git config -l
git remote add origin git@github-private:<USER>/<REPOSITORY>.git
git remote -v
git pull origin main
git checkout main -f
git branch --set-upstream-to origin/main
Ich erkläre die einzelnen Schritte.
git init ist ein Befehl, der ein neues Git-Repository in einem lokalen Verzeichnis erstellt. Er legt einen versteckten Ordner namens .git an, der die Repository-Daten enthält. Er macht das Verzeichnis bereit für die Versionskontrolle mit Git.
git config -l ist ein Befehl, der alle Git-Konfigurationsoptionen anzeigt, die für das aktuelle Repository oder den aktuellen Benutzer gesetzt sind. Er liest die Werte aus den Dateien .git/config, ~/.gitconfig und /etc/gitconfig. Er kann nützlich sein, um die Einstellungen zu überprüfen oder zu ändern.
git remote add origin ist ein Befehl, der einen Remote-Namen namens origin zu einem lokalen Repository hinzufügt. Er verbindet das lokale Repository mit einem Remote-Repository, das an den Befehl angehängt wird. Er ermöglicht das Hochladen und Herunterladen von Änderungen zwischen den Repositories.
git remote -v zeigt die Liste der Remote-Namen und ihre URLs an. Er hilft zu überprüfen, ob die Remote-Verbindungen korrekt sind.
git pull origin main ist ein Befehl, der den lokalen Branch main mit dem Remote-Branch main von origin aktualisiert. Er lädt zuerst alle Änderungen vom Remote-Repository herunter und führt dann einen Merge oder einen Rebase aus. Er bringt das lokale Repository auf den neuesten Stand.
git branch --set-upstream-to origin/main ist ein Befehl, der den aktuellen lokalen Branch mit dem Remote-Branch main von origin verknüpft. Er legt fest, welcher Remote-Branch als Standard für das Pushen und Pullen verwendet wird. Er erleichtert die Synchronisation zwischen den Branches.
Als Ergebnis sollte jetzt der Produktionsserver auf demselben Stand sein wie das GitHub-Repository (und damit auch wie der Entwicklungsserver).
Das zukünftige Deployment
Ab jetzt können wir den Weg über git pull oder git fetch && git merge gehen, um Änderungen aus dem remote Repository bei GitHub zu übernehmen.
Die schnelle Methode ‘git pull’
git pull
git pull ist ein Befehl, der den aktuellen lokalen Branch mit dem entsprechenden Remote-Branch aktualisiert. Er entspricht einem git fetch gefolgt von einem git merge oder einem git rebase. Er benötigt einen Remote-Namen und einen Branch-Namen oder eine Verknüpfung zwischen den Branches.
git fetch origin ist ein Befehl, der alle Änderungen vom Remote-Repository origin herunterlädt. Er aktualisiert die lokalen Referenzen zu den Remote-Branches, aber nicht die lokalen Branches. Er ermöglicht es, die Differenzen zwischen den Branches zu sehen oder einen Merge oder einen Rebase auszuführen.
git log origin/main ^main ist ein Befehl, der die Commit-Historie vom Remote-Branch origin/main anzeigt, die nicht im lokalen Branch main enthalten ist. Er hilft, zu sehen, welche Änderungen noch nicht synchronisiert sind.
Der Befehl git diff main origin/main zeigt die Unterschiede zwischen dem lokalen Zweig main und dem entfernten Zweig origin/main an². Er kann verwendet werden, um zu sehen, welche Änderungen Sie noch nicht mit dem entfernten Repository synchronisiert haben.