Comme.
Je n'ai pas abordé le contenu qui y est entré.
C'est à mi-chemin, mais j'ai passé beaucoup de temps parce que je n'avais pas toutes les informations. Je me demande s'il est correct de regrouper ce domaine. Comme des conseils ou une dépendance.
La structure finale du fichier ressemble à ceci.
.
├── Vagrantfile
├── ansible.cfg
├── fabfile.py
├── flask
│ ├── main.py
│ ├── reload.trigger
│ ├── runserver.py
│ └── uwsgi.ini
├── inventory
├── playbooks
│ └── python.yml
└── ssh.config
Ajout d'une boîte de vagabonds avec le nom centos6.
bash
vagrant box add centos6 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box
Il n'y a pas de raison particulière, mais j'en ferai deux. Je veux tout déployer en même temps avec rsync.
Si vous n'en avez besoin que d'un seul, 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
Parce que c'est pratique lors de la connexion avec ssh.
bash
vagrant ssh-config > ssh.config
Le contenu devrait ressembler à ceci.
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
Comme ce sera long, j'ai divisé les articles. Vois ici. http://qiita.com/arc279/items/44ac688a2df24569f8af
L'inventaire ressemble à ceci.
inventory
[servers]
node1
node2
Bien que cela ne soit pas écrit dans l'article ci-dessus, Écrivez les paramètres qui font référence à config lors de la connexion avec ansible dans le fichier de configuration ansible. Spécifiez également le fichier d'inventaire.
ansible.cfg
[defaults]
hostfile = inventory
[ssh_connection]
ssh_args = -F ssh.config
Si vous mettez ansible.cfg dans l'état actuel, il sera lu sans autorisation.
L'exécution est comme ça.
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)
Si vous voulez commencer le débogage avec Werkzeug, donnez la permission d'exécution et appuyez dessus.
Avec touch-reload, spécifiez le fichier à recharger uwsgi lorsque vous le touchez. Si nécessaire, vous devez également spécifier daemonize.
uwsgi.ini
[uwsgi]
socket = /tmp/flask.wsgi.sock
master = true
uid = vagrant
gid = vagrant
http = :5000
python-path = . #Le répertoire de démarrage uwsgi est actuel
wsgi = main:app
processes = 3
threads = 2
pidfile = ./flask.pid
touch-reload = ./reload.trigger
env = environment=development
C'est une façon d'écrire très contre nature, Si vous spécifiez ici sous la forme _env = _ __ [clé] = [valeur] __, Au démarrage
import os
print os.environ["environment"]
Vous pouvez le lire sur.
Quand j'ai créé pyenv avec ansible dans ↑, uwsgi devrait être inclus avec pip, donc
Au courant de flacon
bash
uwsgi uwsgi.ini
Devrait commencer par.
rsync doit être à la fois du côté sync et du sync side.
Puisque rsync est également inclus dans l'article ansible ci-dessus, Si le playbook passe correctement, rsync doit être du côté vm.
Voir ici pour plus de détails. http://qiita.com/shivaken/items/c679ae9d15ac1cbebd0b
comme ça.
env.use_ssh_config = True
env.ssh_config_path = "ssh.config"
ssh-config est spécifié pour se connecter en tant qu'utilisateur vagrant, donc La destination de connexion __ $ HOME__ est _ / home / vagrant_.
Alors
local_dir='./flask/', Le flacon à portée de main
remote_dir='~/flask', Dans _ / home / vagrant / flask_ de vm
rysnc avec 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
Spécifiez le rôle avec l'option -R.
Il semble que le nom de groupe de l'inventaire d'ansible soit role.
bash
fab -R servers deploy
@roles ('servers')
Même ici avec un décorateur.
bash
fab deployall
bash
fab -H node1 deploy
Le contenu est devenu désorganisé.
Déployer sur git pull au lieu de rsync, Je pense qu'il est normal de le rendre moderne.
Si vous voulez en faire plus
Je pense qu'il y a plusieurs choses, mais c'est le but de créer un environnement de développement.
Recommended Posts