Przełączanie użytkownika w Fabric
Mam problem z używaniem Fabric do naśladowania mojego przepływu pracy SSH w celu wdrożenia mojej aplikacji internetowej.
Oto mój zwykły przepływ poleceń, gdy SSH na serwerze:
SSH przy użyciu użytkownika root. ssh [email protected]łącz się na użytkownika internetowego: su - webZmień katalog: cd / srv / web / prod / abc_projectStart virtualenv: workon abc_envWykonaj git pull: git pull origin masterUruchom skrypt: build_stuff -m buildUruchom inny skrypt: ./runPróbowałem napisać to jako skrypt instalacyjny w Fabric i otrzymałem wynik powłoki po wprowadzeniu su-web. Muszę nacisnąć Ctrl-D, aby kontynuować skrypt. Nie jestem też w stanie aktywować mojego virtualenv .... ponieważ: su - web pomyślnie przełącza użytkownika naweb
ale z powodu Ctrl-d (dzięki czemu mogę kontynuować skrypt Fabric), wylogowuje się z tego użytkownika iz powrotem do roota.
Oto mój skrypt:
env.user = 'root'
@roles('web')
def deploy():
dev_path = '/srv/web/prod'
app_path = '/srv/web/prod/rhino'
workon = 'workon rhino_env'
with prefix('su - web'):
puts('Switched to `web` user')
with settings(warn_only=True):
run('kill -9 `cat /srv/web/run/rhino/rhino.pid`')
puts('Stopped rhino...')
with cd(app_path):
run('git reset --hard HEAD')
puts('Discarded all untracked and modified files')
run('git checkout master')
run('git pull origin master')
users = run('users')
puts('Output from `users` command: %s' % users)
run(workon)
run('build_assets -m build')
run('cd %(dev_path)s; chown -R web:ebalu rhino' % {'dev_path': dev_path})
run('cd %(app_path)s; ./run' % {'app_path': app_path})
pid = run('cat /srv/web/run/rhino/rhino.pid')
puts('Rhino started again with pid: %s.' % pid)
... jest jeszcze jedna rzecz: Nie, początkowo nie mogę się zalogować, muszę się zalogować jako root. Jest to użytkownik WWW, który ma virtualenv nie użytkownika root.