Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric

Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric

Mögen.

Ich habe den Inhalt, der darin enthalten war, nicht angesprochen.

Es ist auf halbem Weg, aber ich habe viel Zeit verbracht, weil ich nicht alle Informationen hatte. Ich frage mich, ob es in Ordnung ist, diesen Bereich zusammenzustellen. Wie Tipps oder Sucht.

Die endgültige Dateistruktur sieht folgendermaßen aus.

.
├── Vagrantfile
├── ansible.cfg
├── fabfile.py
├── flask
│   ├── main.py
│   ├── reload.trigger
│   ├── runserver.py
│   └── uwsgi.ini
├── inventory
├── playbooks
│   └── python.yml
└── ssh.config

Machen Sie eine Entwicklung vm mit Vagabund

Box hinzugefügt

Es wurde eine Vagabundbox mit dem Namen centos6 hinzugefügt.

bash


vagrant box add centos6 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box

Aufbau

Es gibt keinen besonderen Grund, aber ich werde zwei machen. Ich möchte alles auf einmal mit rsync bereitstellen.

Wenn Sie nur einen benötigen, nur node1.

Vagrantfile


# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.define :node1 do |node|
    node.vm.box = "centos6"
    node.vm.network :private_network, ip: "192.168.33.10"

    node.vm.provider :virtualbox do |vb|
        vb.customize ["modifyvm", :id, "--memory", "512"]
    end
  end

  config.vm.define :node2 do |node|
    node.vm.box = "centos6"
    node.vm.network :private_network, ip: "192.168.33.11"

    node.vm.provider :virtualbox do |vb|
        vb.customize ["modifyvm", :id, "--memory", "512"]
    end
  end

end

Bereiten Sie ssh-config für vm vor

Weil es praktisch ist, wenn man sich mit ssh verbindet.

bash


vagrant ssh-config > ssh.config

Der Inhalt sollte so aussehen.

ssh.config


Host node1
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/kuryu/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

Host node2
  HostName 127.0.0.1
  User vagrant
  Port 2200
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/kuryu/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

Anlaufen

bash


vagrant up

Erstellen Sie eine Python-Umgebung mit ansible

Da es lange dauern wird, habe ich die Artikel geteilt. Siehe hier. http://qiita.com/arc279/items/44ac688a2df24569f8af

Das Inventar sieht so aus.

inventory


[servers]
node1
node2

Obwohl es nicht im obigen Artikel geschrieben ist, Schreiben Sie die Einstellungen, die sich auf config beziehen, wenn Sie mit ansible sshing, in die ansible-Konfigurationsdatei. Geben Sie auch die Inventardatei an.

ansible.cfg


[defaults]
hostfile = inventory

[ssh_connection]
ssh_args = -F ssh.config

Wenn Sie ansible.cfg in den aktuellen Status versetzen, wird es ohne Erlaubnis gelesen.

Die Ausführung ist so.

ansible-playbook playbooks/python.yml

Verwenden Sie flask + uwsgi

Körper

main.py


# -*- coding:utf-8 -*-

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "hello flask!!"

@app.route("/foo")
def foo():
    return "foo"

@app.route("/foo/bar")
def foo_bar():
    return "foobar"

Werkzeug Startdatei

runserver.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-

from main import app

options = {
    "debug": True,
    "threaded": True,
    "host": "0.0.0.0",
}
app.run(**options)

Wenn Sie mit dem Debuggen mit Werkzeug beginnen möchten, geben Sie diesem die Ausführungsberechtigung und klicken Sie darauf.

uwsgi Konfigurationsdatei

Geben Sie mit touch-reload die Datei an, die uwsgi bei Berührung neu laden soll. Bei Bedarf sollten Sie auch daemonize angeben.

uwsgi.ini


[uwsgi]
socket = /tmp/flask.wsgi.sock
master = true
uid = vagrant
gid = vagrant
http = :5000
python-path = .      #Das uwsgi-Startverzeichnis ist aktuell
wsgi = main:app
processes = 3
threads = 2
pidfile = ./flask.pid
touch-reload = ./reload.trigger
env = environment=development

Es ist eine sehr unnatürliche Art zu schreiben, Wenn Sie hier in Form von _env = _ __ [Schlüssel] = [Wert] __ angeben, Am Anfang

import os
print os.environ["environment"]

Sie können es unter lesen.

starte uwsgi

Wenn ich pyenv mit ansible in ↑ gemacht habe, sollte uwsgi in pip enthalten sein, also

Beim Strom der Flasche

bash


uwsgi uwsgi.ini

Sollte mit beginnen.

Bereitstellung mit Fabric + Rsync

rsync muss sowohl auf der sync-Seite als auch auf der sync-Seite sein.

Da rsync auch im obigen Ansible-Artikel enthalten ist, Wenn das Playbook ordnungsgemäß funktioniert, sollte sich rsync auf der VM-Seite befinden.

Ich möchte ansible Inventar in Stoff verwenden

Siehe hier für Details. http://qiita.com/shivaken/items/c679ae9d15ac1cbebd0b

Ich möchte auf ssh-config verweisen

so was.

env.use_ssh_config = True
env.ssh_config_path = "ssh.config"

ssh-config wird angegeben, um eine Verbindung als vagrant-Benutzer herzustellen Das Verbindungsziel __ $ HOME__ ist _ / home / vagrant_.

Damit

rysnc mit rsync_project ().

fabfile.py


from fabric.api import *
from fabric.decorators import roles
from fabric.contrib.project import rsync_project
import ansible.inventory

env.use_ssh_config = True
env.ssh_config_path = "ssh.config"

inventory = ansible.inventory.Inventory('inventory')
env.roledefs = inventory.groups_list()

def hostname():
    run("echo %s" % env.host)

def deploy():
    rsync_project(
        local_dir='./flask/',
        remote_dir='~/flask',
        exclude=['.DS_Tore', '*.tmp'],
        delete=True
    )
    reload()

@roles('servers')
def deployall():
    deploy()

def reload():
    run('touch ~/flask/reload.trigger')

fab

Geben Sie die Rolle an

Geben Sie die Rolle mit der Option -R an.

Es scheint, dass der Gruppenname von ansibles Inventar eine Rolle spielt.

Ich habe diesen Bereich nicht sehr gut untersucht.

bash


fab -R servers deploy

@roles ('servers') Auch hier mit einem Dekorateur.

bash


fab deployall

Geben Sie einen einzelnen Hostnamen an

bash


fab -H node1 deploy

damit

Der Inhalt ist unorganisiert.

Bereitstellen auf git pull anstelle von rsync, Ich denke, es ist okay, es modern zu machen.

Wenn Sie mehr tun möchten

Ich denke, es gibt verschiedene Dinge, aber das ist der Punkt, um eine Entwicklungsumgebung zu schaffen.

Recommended Posts

Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen Sie eine Python-Umgebung
Erstellen Sie eine Python-Umgebung mit ansible auf centos6
Erstellen Sie eine virtuelle Umgebung mit conda in Python
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Holen Sie sich mit Poetry eine schnelle Python-Entwicklungsumgebung
Erstellen Sie ein Verzeichnis mit Python
Erstellen Sie mit Python eine Entwicklungsumgebung für maschinelles Lernen
Erstellen Sie eine Python-Entwicklungsumgebung mit OS X Lion
Richten Sie mit Sublime Text 2 eine Python-Entwicklungsumgebung ein
Erstellen einer Kubernetes-Umgebung mit ansible 2
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Erstellen einer virtuellen Umgebung mit Python 3
Erstellen Sie eine Python-Umgebung in Centos
Erstellen einer Kubernetes-Umgebung mit ansible 1
Richten Sie mit Atom eine Python-Entwicklungsumgebung ein
Richten Sie eine Python-Entwicklungsumgebung mit Visual Studio Code ein
Holen Sie sich eine saubere Python-Entwicklungsumgebung mit pyenv + pipx + Poetry
So gelangen Sie mit Vagrant in die Python-Entwicklungsumgebung
[Pyenv] Erstellen einer Python-Umgebung mit Ubuntu 16.04
Erstellen Sie eine Windows Python-Ausführungsumgebung mit VScode + Remote WSL
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen Sie mit Laragon ganz einfach eine Entwicklungsumgebung
[Entwicklungsumgebung] Python mit Xcode [Mit Bildschirmübergang]
Erstellen Sie mit Python + PIL ein Dummy-Image.
Erstellen Sie eine Python-Umgebung auf Ihrem Mac
Erstellen wir eine virtuelle Umgebung für Python
Erstellen wir mit Python eine kostenlose Gruppe
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
Erstellen einer Python 3.6-Umgebung mit Windows + PowerShell
[Python] Erstellen Sie eine Stapelumgebung mit AWS-CDK
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Erstellen Sie mit Neovim eine moderne Python-Umgebung
Erstellen einer Python-Entwicklungsumgebung für die KI-Entwicklung
Ich habe ein Skript geschrieben, um mit AWS Lambda + Python 2.7 schnell eine Entwicklungsumgebung für Twitter Bot zu erstellen
Erstellen Sie ein USB-Boot-Ubuntu mit einer Python-Umgebung für die Datenanalyse
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Erstellen Sie eine Python-Entwicklungsumgebung unter Windows (Remote-WSL für Visual Studio Code).
Vorgehensweise zum Erstellen einer virtuellen Python-Umgebung mit VS-Code unter Windows
Erstellen Sie eine Python3-Umgebung mit pyenv auf einem Mac und zeigen Sie NetworkX-Diagramme an
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen Sie eine Entwicklungsumgebung für die C-Sprache mit einem Container
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung