Web サイトには何千ものファイルがあり、数十のファイルが変更されるたびに Web サイト全体を再アップロードすることは不可能ですが、毎回どのファイルが変更されたかを覚えておくのは簡単ではありません。そして、これらの変更されたファイルはさまざまなフォルダーに分散しているため、1 つずつ見つけてアップロードするのはさらに面倒になります。
では、変更されたファイルのみを毎回正確かつ便利にアップロードするにはどうすればよいでしょうか?
追伸。私の現在のアプローチは、ローカル開発環境に git をインストールし、リモート サーバーに git をインストールしてから、ここでプッシュし、そこにプルすることです。ただし、プルするにはリモート エンドに Telnet または SSH を接続する必要があります。プッシュ後にサーバーが自動的に更新される方法はありますか?みんなの提案を聞きたい。
仅有的幸福2017-05-02 09:29:07
最も簡単な方法は、git を使用してアップロードすることです。git には自動デプロイを実現できるフックが付属しています。
私も以前質問者さんと同じことをしたことがありますが、複数人で共同作業をするとプロジェクトがめちゃくちゃになりやすいです。
世界只因有你2017-05-02 09:29:07
リマインダーをくれた @Cocbin に感謝します。これに基づいて、Git のフック原理を注意深く研究し、自分のプロジェクトに基づいて次のことを実行しました:
まず、プロジェクトを github ウェブサイトにデプロイしたので、複雑なフックを自分で設定する必要はなく、github に付属の Webhook を使用するだけです。 Webhook は、GitHub にプッシュするときに設定したコールバック URL をトリガーし、この URL でプル操作を実行できます。
さらに、サーバーでは、開発者独自の ssh キーを使用してプルしないでください。代わりに、デプロイ キーを生成して、github に配置します。このキーは、手動でのパスワード入力を必要とせず、特に github からプルするために使用されます。 . コンテンツのダウンロード後、自動展開は完全に完了します。
Hudson と Jenkins も調べました。どちらも非常に優れたツールです。Java プロジェクトを実行している場合は、Jenkins を使用する必要があります。Hudson が Oracle に買収されてから、徐々にオープンではなくなったためです。しかし、私のプロジェクトは PHP なので、このために別の Java 8 セットをインストールする余裕はないので、それを検討しませんでした。実際には、PHP 用の特別な Jenkins もありますが、それでも重すぎると感じました。将来的にプロジェクトが大きくなるまで、それを使用することを検討するかもしれません。
上記はいくつかの経験談ですが、同じ問題を抱えている学生さんの参考になれば幸いです。
----------これがゴージャスな分かれ目です--------------------------#🎜🎜 #
追加:実際の操作プロセスは想像よりもはるかに複雑です。コードは次のとおりです:
リーリー
このとき、プッシュアップロードがあるとgithubはコールバックをしますが、問題は、コールバック中にsshイン時に使用したユーザー名ではなく、ユーザー名apacheが使用されることです。ユーザー名 apache は適切ではありません そのディレクトリには操作権限がありません:エラー: .git/FETCH_HEAD を開けません: 権限が拒否されました
したがって、ssh_user を最初の Apache グループ: error: cannot open .git/FETCH_HEAD: Permission denied
所以你需要先把ssh_user加到apache组中:
$sReqData = file_get_contents('php://input');
try {
$payload = json_decode($sReqData);
} catch (Exception $e) {
exit(0);
}
if ($payload->ref === 'refs/heads/master') {
exec('cd /var/www/your_repo; git pull;');
}
然后修改权限:
usermod -a -G apache ssh_user
之所以放在这个目录,是因为apache这个用户的缺省目录就是/var/www,当然你可以把它改到另外一个目录下,可能会更安全一些。
然后:
chmod -R g+w /var/www
chown -R ssh_user:apache /var/www
chmod -R g+s /var/www
它会在apache的.ssh文件夹下产生一个known_hosts
文件,然后如果你是用的ssh方式,你还需要把上面生成的deploy key里的两个文件id_rsa
和id_rsa.pub
リーリー
リーリー
このディレクトリに配置される理由は、Apache ユーザーのデフォルトのディレクトリが /var/www であるためです。もちろん、より安全な別のディレクトリに変更することもできます。その後:
known_hosts
ファイルが生成されます。ssh を使用している場合は、上記で生成されたデプロイ キーに 2 つのファイルを追加する必要もあります< Copy code>id_rsa< /code> と id_rsa.pub
を .ssh フォルダーにコピーします。次に、次のコマンドを数回実行して、エラーが再度報告されないことを確認します。次に、クライアントから新しいバージョンをプッシュして、自動展開が成功するかどうかを確認できます。 ================ 国内版 =====================
黄舟2017-05-02 09:29:07
私が使用した方法についてお話します:
1. まず、バージョン管理サービスと rsync サービスが必要です
2。バージョン サーバーを一時ファイル フォルダー
3. rsync サーバー ディレクトリを一時フォルダー
に指定します。 rsync コマンドを使用して、サーバー ディレクトリをデプロイメント ディレクトリ
5 に同期します。 : バージョン コードの更新 一時フォルダーに移動し (増分)、一時フォルダー ファイルに対して更新操作を実行します (必要な場合)。rsync は一時フォルダー ファイルを展開ディレクトリに同期します (増分)
上記のプロセスが完了したら、コードを送信するたびに上記の項目 5 のシェルを実行するだけで済みます。
少し面倒ですが、嫌な場合はスプレーしない方が効果的です。