🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1313閲覧

コンテンツを自動アップする仕組み

pond

総合スコア350

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/02/10 12:41

前提・実現したいこと

検証のWEBサーバのコンテンツを更新し、本番へアップしたい時に
リストをアップロードすると、リストファイルの中身に応じて、本番のWEBサーバへコンテンツを自動アップロードする仕組み
イメージ説明

確認したこと

・本番WEB#1からWEB#2への同期はリアルタイム同期はLsync + rsyncでいけそう
・リストからの情報取得はsedコマンドでいけそう

疑問

検証サーバ上のリストからsedコマンドなどでファイルパス・更新日時などの情報を取得したあと、
本番へ指定時刻にファイルアップロードする処理方法がシェルで実現できるものか?

補足情報(FW/ツールのバージョンなど)

サーバ: Amazon EC2
OS : Amazon Linux 2
WEB : Apache2.4.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/02/10 13:02

出来るのは出来るとしても、シェル限定にしなければもっと簡単では? 後はリスト内の時間指定の粒度次第ですかね
pond

2021/02/10 13:21

ありがとうございます。 例えばPHPだとどんなプログラムになりますでしょうか?イメージわかず。。 時間の粒度は、CRONレベルと考えています。
hentaiman

2021/02/10 13:36

どんなプログラムってどういう事ですかね・・・ 方法は思い浮かんでも細かい仕様や条件次第で適不適があるしphpとか他のプログラム通さずに人力でやれば良い部分もあるしと。 イメージを湧かすためのアドバイス程度で言うならリスト1行毎に適切なコマンド(scpとかrsyncとかftpsとか)作ってシェルスクリプトを出力して実行するとか。 自分ならこのやり方はしませんが、仕様が不明瞭なようなのでまずは上述のやり方してから無駄を省いては?やってるうちに仕様が明確になるかもしれないし
t_obara

2021/02/10 14:22

gitとか使えば良いのでは?hookとか適宜使えば自前で頑張らなくても良さそうですが。
guest

回答1

0

ベストアンサー

結論から言うと、実現はできるでしょうがお勧めしません。
そんなめんどくさいことをやらずとも、ソースをgit管理した上で自動デプロイの仕組みを整えればいいのではないでしょうか。

やり方は色々あり、AWSで完結させるならCodePipelineを使うとか、もうちょっとカスタマイズしたければCodeBuild+CodeDeployを組み合わせてデプロイの仕組みを作るか、など。
Jenkinsサーバを立ててJenkinsにデプロイをやらせるのも使い古された方法です。
今だとCircleCIなんかを使ってもいいでしょう。
GitHubを使っているならGitHub Actionsも今なら使えるでしょう。

上記すべて、対象がgit管理されていることが前提です。
gitリポジトリ上に更新対象となるソースがあればわざわざ検証環境から本番環境へ転送する必要はなく、gitリポジトリ上からソースを取得してデプロイすればよくなります。

今回質問に書いてあることも頑張れば普通に実現できます。
時間を指定してコマンドを流すコマンドはあります(調べれば出てくるので割愛します)。
対象がわかっているならscpで送ればいいでしょう。
ただ、その設計は3つのサーバ全てに依存関係を作る構造なのでお勧めしません。
また反映を確実にするためにはそれなりに作り込みが必要でしょう。
通信エラーなどでコマンドに失敗した時にどうするのか、など。
単にソースを配置するだけでなく、配置後に何かしらコマンド実行等の処理が必要な場合、その動きをどうやって担保するのかなども気にしなければなりません。
これは他の方法を取っていても同様に気をつける必要のあることですが。

前述した大抵のサービスではこれらをやりやすくする仕組みが何らかの形で備わっているはずです。

投稿2021/02/10 18:43

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問