Fabric을 사용하여 내 SSH 워크 플로를 모방하여 웹 응용 프로그램을 배포 할 때 문제가 있습니다.Fabric의 사용자 전환
- SSH 루트 사용자를 사용 : 나는 서버에 SSH 때
여기에 명령을 내 일반적인 흐름이다. ssh를 [email protected]
- 스위치 웹 사용자 : SU - 웹
- 디렉토리를 변경 : CD/SRV/웹/자극은/
- 시작 VIRTUALENV abc_project : 자식 풀 원산지 : abc_env
- 자식 풀 수행을 workon -m는
- 실행을 다른 스크립트를 구축 build_stuff :
- 실행을 스크립트를 마스터 내가 패브릭에서 배포 스크립트로이 작성하는 노력
./run 나는 때의 쉘 출력을 얻을 u - web이 입력되었습니다. 스크립트를 계속하려면 Ctrl-D를 눌러야합니다. 나는 내 virtualenv를 활성화 할 수 없다. 왜냐하면 : su - web이 사용자를 web
으로 성공적으로 전환하지만 Ctrl-d (Fabric 스크립트를 계속할 수 있도록) 때문에 사용자가 다시 로그 아웃했다가 다시 로그 아웃한다. 뿌리.
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)
... 한 가지 더있다 :
가 여기 내 스크립트의 아니, 난 처음에 웹으로 로그인 할 수 없습니다, 나는 루트로 로그인해야합니다. 루트 사용자가 아닌 virtualenv가있는 것은 웹 사용자입니다.
감사합니다. 나는 웹 사용자를 사용하여 git 명령을 실행하는 것을 생각하지 않았다. 나는 대신 git 명령 앞에'su - web'을 사용하려고 노력했다. 고마워요 백만 mechmind! – Mark