Fabricを使用してSSHワークフローを模倣してWebアプリケーションを展開する際に問題があります。ファブリック内のユーザーの切り替え
- SSHはrootユーザーを使用して:私は、サーバーへのSSHとき
は、ここにコマンドのいつもの流れです。 WebユーザへのSSH [email protected]
- 切り替えます。su - ウェブ
- ディレクトリを変更します。cd/SRV /ウェブ/ PROD/
- abc_projectスタートvirtualenvの:
- abc_env workon gitのプルを実行します。gitの原点を引きますbuild_stuff -m
- 実行を構築する別のスクリプト:
を./run私はファブリックでデプロイスクリプトとしてこれを書いてみました、私はシェルの出力sを取得するファイル名を指定して実行に
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)
...もう一つあります:いいえ、私は当初、ウェブとしてログインすることはできませんが、私は、rootとしてログインする必要があります。 rootユーザーではなく、virtualenvを持つのはWebユーザーです。
ありがとうございます!私はWebユーザーを使ってgitコマンドを実行することは考えていませんでした。代わりにgitコマンドの前で 'su - web'を使い続けました。 100万のメカをありがとう! – Mark