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
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
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
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
bash
vagrant up
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
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"
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.
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.
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.
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.
Siehe hier für Details. http://qiita.com/shivaken/items/c679ae9d15ac1cbebd0b
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
local_dir='./flask/', Die Flasche zur Hand
remote_dir='~/flask', In _ / home / vagrant / flask_ von vm
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 mit der Option -R an.
Es scheint, dass der Gruppenname von ansibles Inventar eine Rolle spielt.
bash
fab -R servers deploy
@roles ('servers')
Auch hier mit einem Dekorateur.
bash
fab deployall
bash
fab -H node1 deploy
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