Hinzugefügt am 2019.11.06.
Ich verwende einen Heimserver mit GitLab und Mattermost, der unter CentOS 7 installiert ist, um eine Programmierumgebung zu Hause einzurichten (ich bereite einen separaten Artikel für dieses Setup vor. Es hat aus verschiedenen Gründen lange gedauert ...)
In Mattermost werden verschiedene Benachrichtigungen von GitLab angezeigt. Wenn jedoch ein Virus von ClamAV erkannt wird oder ein entsprechendes Protokoll an den privaten Kanal von Mattermost gesendet werden kann, ist die Verwaltung einfacher. Google Mail ist in viel Spam vergraben. Es scheint, dass Python eine Bibliothek namens slackweb hat, die Nachrichten an slack usw. senden kann. Das endgültige Ziel ist es also, sie zu installieren.
Ich habe jedoch überhaupt nicht mit Python auf dem Server gespielt, daher werde ich eine Umgebung erstellen, in der ich 3 Systeme anstelle von CentOS 7 Standard 2.7 verwenden kann. Da gesagt wird, dass es eine geeignete virtuelle Umgebung schafft, um die ursprüngliche Umgebung nicht zu verschmutzen, schien die virtuelle Umgebung von pyenv und pipenv gut zu sein, als ich sie googelte, also werde ich es vorerst versuchen.
Aktualisieren Sie die Umgebung zunächst wie gewohnt einmal mit "sudo yum update". Dieses Mal stieg GitLab von 12.4.0 auf 12.4.1 und das Update dauerte einige Zeit.
Installieren Sie zunächst die erforderlichen Pakete für pyenv.
# yum install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git
Dann klonen Sie Pyenv von Github. Platziert in / usr / local / pyenv, damit es von allen Benutzern verwendet werden kann.
# git clone git://github.com/pyenv/pyenv.git /usr/local/pyenv
# cd /usr/local/pyenv
# mkdir {versions,shims} <- ,Setzen Sie kein Leerzeichen danach
Laden Sie auch das Paket für das Pyenv-Update herunter.
# cd plugins/
# git clone git://github.com/pyenv/pyenv-update
Geben Sie die Umgebungsvariable für pyenv an und übergeben Sie sie über den Pfad.
# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
# echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh
PATH kann auch zum Zeitpunkt von sudo übernommen werden
# visudo
Bearbeiten Sie oben die Zeile mit "secure_path" wie folgt.
#Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults env_keep += "PATH"
Defaults env_keep += "PYENV_ROOT"
Melden Sie sich jetzt erneut an oder $ source / etc / profile.d / pyenv.sh
und der Pfad wird übergeben, sodass Sie pyenv verwenden können.
$pyenv --version
pyenv 1.2.14-11-gb5f69fe
$pyenv install --list
~Die verfügbaren Python-Versionen sind gestaffelt~
(Es ist in Ordnung, den Pfad durchzugehen, aber ich verstehe nicht wirklich, warum das Bearbeiten des Inhalts von visudo so ist. Kann ich unter / sbin ... einen Kommentar abgeben?)
Da pip selbst nicht enthalten war, installieren Sie von dort aus.
$curl https://bootstrap.pypa.io/get-pip.py | sudo python
$pip --version
pip 19.3.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
Warten Sie als Nächstes auf die Installation von pipenv.
$sudo pip install pipenv
$pipenv --version
pipenv, version 2018.11.26
Im obigen Zustand kann pipenv verwendet werden, und eine virtuelle Umgebung für jeden Ordner oder jedes Projekt kann mit pipenv --python 3.7.5 usw. im nächsten Abschnitt erstellt werden.
Der Inhalt dieser virtuellen Umgebung wird jedoch in "~ / .local / share / virtualenvs /" erstellt. Als ich mich am Server anmeldete, wollte ich abrufen und benachrichtigen, wer sich mit getpass.getuser ()
bei Mattermost angemeldet hat. Da sich die Entität jedoch im Home-Verzeichnis jedes Benutzers befindet, möchte ich slack web
erhalten Ich konnte es nicht lesen und warf einen Fehler. Da die Version von Python für andere Benutzer 3.7.5 war, wurde anscheinend die Umgebung von pyenv geladen, aber die Umgebung von pipenv konnte nicht geladen werden.
Um dies zu vermeiden, definieren Sie "$ PIPENV_VENV_IN_PROJECT" als Umgebungsvariable. Infolgedessen wird die tatsächliche virtuelle Umgebung in jedem Projektverzeichnis im Verzeichnis ".venv" gespeichert.
Ich möchte, dass alle angemeldeten Benutzer ".venv" jedes Projekts verwenden. Fügen Sie daher am Ende von "/ etc / bashrc" Folgendes hinzu.
/etc/bashrc
# To enable local virtual enviroment for pipenv
export PIPENV_VENV_IN_PROJECT=1
Jetzt können alle Benutzer alles von Programmen bis zu Umgebungen verarbeiten, die sie nur mit dem Inhalt eines einzelnen Verzeichnisses verwenden möchten.
Erstellen Sie einen Projektordner, um den Betrieb von slackweb zu überprüfen. Dies ist das ursprüngliche Ziel.
$mkdir my_program
$mkdir my_program/slackweb
$cd my_program/slackweb
Geben Sie Python 3.7.5 der neuesten Karte der 3.7-Serie als Umgebung an. Es scheint jedoch, dass libffi-devel erforderlich ist, um die 3.7-Serie oder höher zu verwenden. Installieren Sie es daher vor der Installation von 3.7. (Ich ging später hin und her, ohne dies zu tun)
$sudo yum install libffi-devel
$sudo pyenv install 3.7.5
Nachdem wir 3.7.5 über pyenv haben, erstellen Sie eine virtuelle Umgebung, um sie im Ordner my_program / slackweb zu verwenden.
$pipenv --python 3.7.5
Überprüfen Sie in diesem Status, ob die Python-Version des Systems und die Python-Version von pipenv in diesem Ordner unterschiedlich sind.
$python --version
Python 2.7.5
$pipenv run python --version
Python 3.7.5
Wenn Sie "pipenv run" im Auge behalten, verwenden Sie den Befehl in dieser Umgebung. Das ist mit einer kleinen Bestätigung in Ordnung, aber wenn Sie unter der virtuellen Umgebung eingeben und alle nachfolgenden Befehle mit Python in der virtuellen Umgebung ausführen möchten, wenn Sie alle nachfolgenden Befehle mit Python in der virtuellen Umgebung ausführen möchten, geben Sie die Umgebung mit "pipenv shell" ein. Beenden
beim Beenden.
Selbst wenn Sie es von pipenv aus tun, ohne vorher pyenv zu machen, scheint es, dass es von der Installation von Python in Zusammenarbeit mit pyenv gemacht wird, aber in diesem Fall müssen Sie es mit sudo machen. Dann befindet sich die erstellte virtuelle Umgebung wahrscheinlich unter root (?). Diesmal wird sie also separat ausgeführt.
Wenn Sie pyenv nur für lokale Benutzer installieren und den Pfad nur an sich selbst übergeben, benötigen Sie kein sudo (?)
Installieren Sie schließlich Slack Web.
$pipenv install slackweb
Wenn Sie "pip list" in einer normalen Shell ausführen, können Sie die von pip of system installierten Dinge sehen, jedoch in einer virtuellen Umgebung
[name@localhost slackweb]$ pipenv shell
(slackweb) [name@localhost slackweb]$ pip list
Package Version
---------- -------
pip 19.3.1
setuptools 41.6.0
slackweb 1.0.5
wheel 0.33.6
Auf diese Weise können Sie den Inhalt der von Ihnen erstellten virtuellen Umgebung überprüfen. Hier ist ein Test, um zu sehen, ob Slackweb funktioniert:
(slackweb) [name@localhost slackweb]$python
Python 3.7.5 (default, Nov 3 2019, 00:13:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import slackweb
>>> slack = slackweb.Slack(url="Eingehende Web-Hook-Adresse Ihres Mattermost")
>>> slack.notify(text="This is a test from inside of the server.")
Auf dem Stadtplatz von Mattermost heißt es, dies sei ein Test innerhalb des Servers. Auf diese Weise können in Zukunft verschiedene Benachrichtigungen an Mattermost gesendet werden, was praktisch ist. Verschiedene Dinge werden wahrscheinlich weitergehen.
Wir haben ein Programm vorbereitet, das Mattermost benachrichtigt, wenn sich der Server tatsächlich anmeldet.
login_notification.py
import slackweb
import getpass
slack = slackweb.Slack(url="Eingehende Web-Hook-Adresse Ihres Mattermost")
attachments = []
attachment = {"title": "Login notification",
"pretext": "This is a notification from _Server FQDN_",
"text": "**" + getpass.getuser() + "** logged in.",
"mrkdwn_in": ["text", "pretext"]}
attachments.append(attachment)
slack.notify(channel="#Name des Benachrichtigungszielkanals",
username="CentOS 7",
attachments=attachments)
Das getpass
-Modul ist übrigens die Standardbibliothek von Python, sodass Sie nicht versuchen müssen, es in pipenv zu speichern (oder besser gesagt, Sie leiden nur unter Fehlern, verschwenden Zeit ...). Wenn Sie es versehentlich installieren, bleibt ein seltsamer Datensatz in der Pipfile zurück. Löschen Sie daher unnötige Informationen mit "pipenv uninstall getpass", "pipenv clean".
Danach können Sie eine Anmeldemeldung erhalten, indem Sie diese ausführen. Führen Sie einfach "pipenv run python login_notification.py" aus, aber ich möchte, dass Sie nur einmal automatisch benachrichtigt werden, wenn Sie sich anmelden. Fügen Sie es daher am Ende von / etc / bashrc
hinzu, damit dies auch für alle Benutzer geschieht.
/etc/bashrc
# Notify the login to mattermost
cd /home/username/my_program/slackweb/ <-Benutzername ist der Benutzer, der die oben genannte Umgebung und das Programm erstellt hat
pipenv run python login_notification.py
cd ~ <-Ich weiß nicht, was ich später tun soll, daher gehe ich zurück zum Haus des angemeldeten Benutzers
Jedes Mal, wenn Sie sich mit "ssh" oder "sudo su" anmelden, werden Sie Mattermost darüber informiert, dass Sie sich als jeder Benutzer oder Root angemeldet haben. Mattermost kann Benachrichtigungen problemlos mit Smartphones verknüpfen. Selbst wenn eine verdächtige Person ohne Ihr Wissen die Kontrolle übernimmt, können Sie dies sofort bemerken. Es ist nur eine Versicherung für den Seelenfrieden, daher ist es wichtiger zu verhindern, dass der private Schlüssel für den Zugriff durchgesickert ist, aber ich denke, es ist sehr wichtig, dass sich die Menschen wohl fühlen. (In diesem Sinne bin ich überhaupt nicht erleichtert, weil ich mir Sorgen mache, dass ich beim Hochladen dieses Artikels versehentlich den Web-Hook oder den Benutzernamen offenlegen könnte.)
Installieren Sie Pyenv unter CentOS und erstellen Sie eine Python 3-Entwicklungsumgebung
Ich habe versucht, Pipenv für die Python-Entwicklung zu verwenden
Pipenv: Python-Entwicklungsworkflow für Menschen (pipenv Official)