2010-11-21 13 views
7

Apache Webサーバーを実行していて、変更を(githubから)Webサーバーに展開する最善の方法は何ですか?git/githubとWebサーバーのデプロイメント設定

/var/www/rightはrootのみ書き込み可能です。

自分のgitプロジェクトを/ var/www /に直接入れるべきですか? (つまり、/var/www/.git/?)

しかし、コマンドを実行する必要があるとき(sudo git push)は動作しません(私のsshキーはsudoの下にないので)。

私は/ var/www/writableを自分で作成する方が良いでしょうか?または、rootユーザーにsshキーを追加する必要がありますか?それとも私は何か他のことをすべきか?

ありがとうございました。

+0

をチェックアウトhttp://stackoverflow.com/questions/279169/deploy-php-using-git – philfreo

+0

またはCapistrano http://help.github.com/capistrano/ – philfreo

答えて

5

ローカルマシンの内容をサーバと同期させるためにrsyncを使用しています.1台のサーバにデプロイするだけであれば、かなりシンプルになります(そして、カピストラーノは過剰です)。私は~/.bash_profileで次のエイリアスを置く:

alias eget='rsync -avie ssh [email protected]:sites/example.com/www/ ~/Projects/example/example.com/www/ --exclude .DS_Store --exclude ".git*" --delete-after' 
alias edep='rsync -avuie ssh ~/Projects/example/example.com/www/ [email protected]:sites/example.com/www/ --exclude .DS_Store --exclude ".git*" --delay-updates --delete-after' 

その後、私のローカルマシン上のgitのレポから。私が行います

git commit -am 'commit some changes' 
git pull --rebase # pull any new changes from remote (--rebase prevents an unnecessary merge commit.) 
eget -n # confirm which files I've changed 

それは魚に見える場合、私は-nなしegetを行い、その後、ちょうどgit diff -wを行うことができます。その後、変更を保存したいファイルに対してgit checkout -- path/to/fileを実行できます。その後、私はまだ得られなかったサーバー上の変更をコミットします。これは、サーバー上のファイルが展開とは異なる方法で変更されている場合にのみ発生します。そうしないと、あなたのローカルバージョンは常にサーバー上のファイルよりも最新であるため、あなたのローカルにまだ持っていないサーバー上のものを上書きすることを心配する必要はありません。続き...

edep -n # just see what files will be deployed/updated/etc. 
edep # looks good. Deploy for real. 

完了!

詳細はrsync(1) Mac OS X Manual Pageをご覧ください。

もう1つの方法はGit post-receive hookです。しかし、これを行うにはサーバーにGitをインストールする必要があります。また、セキュリティ&清潔の理由から、ディレクトリの外に.gitディレクトリを置くことをお勧めします。 Git core.worktree設定オプションでこれを行うことができます。たとえば、~/git/example.com.gitからは、git init --bare; git config core.worktree ~/sites/example.com/となります。これにより、~/git/example.com.git~/sites/example.com/.gitのようになります。

2

セントラルリポジトリを作成するには、gitのブランチを使用して異なる目的で異なるブランチを作成し、すべてのリポジトリを一般公開したり、.gitディレクトリを公開してはいけません(これはあなたコードを実行したりリポジトリに公開したりしていました。私の頭の上から、ここでは私自身の経験から、私はお勧め手順は次のとおりです。

  • は、コードの中央/ハブリポジトリを作成します。 (オプションですが、お勧めします。中央リポジトリにgithub.comを使用する方が良い場合もあります)。ローカル展開のローカルコピーをチェックアウトすることができます。あなたのラップトップにサイトを再現したいとき。必要はありませんが、非常に便利で、あなたのサイトは移植性があります。開発目的でステージングリポジトリとステージングブランチを持つことができます。プロダクションの目的で、レポやブランチを作成することもできます。

  • リポジトリの明示的に公開されたディレクトリをリポジトリのルートではなく、明示的に作成します。リポジトリ内に/ www /または/ serve /または/ public /ディレクトリを作成します。これは、検索エンジンによって公開され、インデックスに登録されるものなので、そこに何が入るか注意してください。そこに入るものは、公開知識であり、永遠にキャッシュされ、セキュリティ脆弱性攻撃の標的になるものとします(これは簡単に真実かもしれません)。

  • gitサーバーの中央リポジトリを作成する(例:cd /home/tchalgit clone [email protected]:tchalvak/ninjawars.git)。ただし、開発者グループのアクセス許可を共有しているフォルダが理想的です。単純な開発レベルのサイトを作成し、サイトの唯一の務め/公共のファイルへのシンボリックリンクを作成し、cd /var/www/ln -s /url/to/shared/repository/public/ nickNameForDevSiteHere

  • はあなたの開発サイトのシンボリックリンクを作成します。 (オプションですが推奨されます)。このようにして、devサイトはいくつかのipとニックネームで簡単にアクセスできます。 http://10.0.1.123/publicdevelopmentsitenickname実際のドメイン名は必要ありません。

  • はライブ&展開コードをコミット指定します。現在のところ、 "生きている"コードであれば、live-branchを作成したいかもしれませんが、このブランチはおそらく定期的に強制的に上書きされなければならないことに注意してください。 git branch live-branchgit push -f origin live-branch。それはあなたのコードのスナップショットであり、安定しているブランチではないと考えてください。

  • devサイトが十分にテストされていることが確かめられた場合は、live-branchコードを手動でデプロイするか、ライブブランチをチェックアウトして個別のデプロイスクリプトを使用するか、明示的にパブリックなコンテンツ、devサイトに似ています。

    • ドメイン名のapacheに仮想ホストを作成します。例えば、あなたは次のようなものを使うことができます: <VirtualHost *> ServerName greatdomain.com ServerAlias www.greatdomain.com DocumentRoot /srv/greatdomain/www/ </VirtualHost> これは巨大な話題なので、詳細についてはっきりしていない場合は、Apacheで仮想ホストを設定するためのさらなる調査をすることをおすすめします。

    • サーバーのIPでドメイン名をDNSに指定します。要約すると

、あなたはかなり簡単に特定のツー各展開型の枝を使用してコードのすべてを展開するにgitを使用することができます。たとえば、デプロイメント間のデータベースなどの同期には役立ちませんが、それは実行中の事後に、サイトをデプロイする第2段階として把握し、その間に手動で行うことができるステップです。

関連する問題