Créez un environnement de développement python avec vagrant + ansible + fabric

Créez un environnement de développement python avec vagrant + ansible + fabric

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

Faire une vm de développement avec vagrant

boîte ajoutée

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

Réglage

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

Préparer ssh-config pour vm

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

Commencez

bash


vagrant up

Créer un environnement python avec ansible

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

Utilisez flask + uwsgi

Corps

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"

Fichier de démarrage Werkzeug

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.

fichier de configuration uwsgi

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.

démarrer uwsgi

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.

Déployer avec Fabric + rsync

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.

Je souhaite utiliser un inventaire ansible dans le tissu

Voir ici pour plus de détails. http://qiita.com/shivaken/items/c679ae9d15ac1cbebd0b

Je veux faire référence à ssh-config

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

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

Spécifiez le rôle avec l'option -R.

Il semble que le nom de groupe de l'inventaire d'ansible soit role.

Je n'ai pas très bien étudié ce domaine.

bash


fab -R servers deploy

@roles ('servers') Même ici avec un décorateur.

bash


fab deployall

Spécifiez un seul nom d'hôte

bash


fab -H node1 deploy

alors

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

Créez un environnement de développement python avec vagrant + ansible + fabric
Créez un environnement virtuel avec Python!
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
[Python] Créez un environnement virtuel avec Anaconda
Créer un environnement Python
Créez un environnement python avec ansible sur centos6
Créer un environnement virtuel avec conda avec Python
[Python] Créer un environnement de développement Django avec Docker
Créer un environnement de construction python3 avec Sublime Text3
Obtenez un environnement de développement Python rapide avec Poetry
Créer un répertoire avec python
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créer un environnement de développement Python avec OS X Lion
Configurer un environnement de développement Python avec Sublime Text 2
Créer un environnement Kubernetes avec Ansible 2
Créer un environnement Python sur Mac (2017/4)
Créer un environnement virtuel avec Python 3
Créer un environnement python dans centos
Créer un environnement Kubernetes avec Ansible 1
Configurer un environnement de développement Python avec Atom
Configurer un environnement de développement Python avec Visual Studio Code
Obtenez un environnement de développement Python propre avec pyenv + pipx + Poetry
Comment entrer dans l'environnement de développement Python avec Vagrant
[Pyenv] Construire un environnement python avec ubuntu 16.04
Créer un environnement d'exécution Windows Python avec VScode + Remote WSL
Créer un décorateur de fonction Python avec Class
Créez facilement un environnement de développement avec Laragon
[Environnement de développement] Python avec Xcode [Avec transition d'écran]
Créez une image factice avec Python + PIL.
Créez un environnement python sur votre Mac
Créons un environnement virtuel pour Python
Créons un groupe gratuit avec Python
Essayez de créer un environnement python avec Visual Studio Code et WSL
Création d'un environnement Python 3.6 avec Windows + PowerShell
[Python] Créer un environnement Batch à l'aide d'AWS-CDK
Créer un environnement Python + uWSGI + Nginx avec Docker
Créer un compteur de fréquence de mots avec Python 3.4
Créez un environnement virtuel pour python avec pyenv
Créez un environnement Python moderne avec Neovim
Créer un environnement de développement Python pour le développement de l'IA
J'ai écrit un script pour créer rapidement un environnement de développement pour Twitter Bot avec AWS Lambda + Python 2.7
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Créez un environnement de développement Python sur Windows (WSL distant Visual Studio Code).
Procédure de création d'un environnement virtuel Python avec VS Code sous Windows
Créez un environnement Python 3 avec pyenv sur Mac et affichez des graphiques Network X
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Créer un environnement de développement de langage C avec un conteneur
Créez un environnement de test Vim + Python en 1 minute