Tôi gặp sự cố khi sử dụng Fabric để bắt chước luồng công việc SSH của mình để triển khai ứng dụng web của mình.Chuyển người dùng trong Fabric
Dưới đây là dòng chảy bình thường của tôi về các lệnh khi tôi SSH đến một máy chủ:
- SSH sử dụng tài khoản root. ssh [email protected]
- Đổi thành người sử dụng web: su - web
- Thay đổi thư mục: cd/srv/web/prod/abc_project
- Bắt đầu virtualenv: workon abc_env
- Thực hiện git pull: git pull gốc nắm vững
- Chạy một kịch bản: build_stuff -m xây dựng
- Chạy kịch bản khác: ./run
tôi cố gắng để viết những dòng này như một kịch bản triển khai trong vải và tôi nhận được một sản lượng vỏ khi s u - web được nhập. Tôi phải nhấn Ctrl-D để tiếp tục kịch bản. Tôi cũng không thể kích hoạt virtualenv của tôi .... vì: su - web chuyển thành công người dùng thành web
nhưng vì Ctrl-d (để tôi có thể tiếp tục tập lệnh Fabric), nó đăng xuất khỏi người dùng đó và quay lại nguồn gốc.
Dưới đây là kịch bản của tôi:
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)
... có một điều nữa: Không, tôi không thể đăng nhập như web ban đầu, tôi phải đăng nhập như là root. Đó là người dùng web có virtualenv không phải là người dùng root.
Cảm ơn rất nhiều! Tôi không bao giờ nghĩ đến việc chạy lệnh git bằng cách sử dụng người dùng web. Tôi cố gắng sử dụng 'su - web' trước các lệnh git thay vào đó. Cảm ơn một triệu mechmind! – Mark