静的ファイルホスティングサービスにXSERVERを使っているのですが、
ローカルPCで作成した本番用ファイルをアップロードする際に
一個ずつアップロードするのが面倒だったので、
Shellで一括アップロードするスクリプトを作りました。
環境
ローカルPC OS:Windows 10
リモートサーバー:XSERVER
事前準備
以下の秘密鍵を作成し、ダウンロードしておく。
→ XSERVERでSSH接続するための設定手順(公式サイト)
スクリプト
UPLOAD_FILES_TO_XSERVER.sh
SCRIPT_DIR=$(cd $(dirname $0); pwd) # スクリプトが配置されているディレクトリを設定
# XSERVERへのログインパスワードをクリップボードにコピー
# SET /P <NUL="<パスワード>" | clip
<※1パスワードをコピーするbatchファイルへのパス>.bat # パスワードをコピーするbatchファイルへのパス
echo "パスワードをクリップボードにコピーしました。"
# 定数定義
KEY_PATH=<秘密鍵パス> # 秘密鍵パス(事前準備で保管した鍵へのパス)
PORT=<ポート番号> # ポート番号
COPY_FROM=$SCRIPT_DIR/out/* # コピー対象ファイル 今回はout/*にあるファイルをコピー対象とする
USER_NAME=xs<ユーザー名> # ユーザー名
HOST_NAME=<ホスト名>.xserver.jp # ホスト名
REMOTE_ROOT_DIR=$USER_NAME@$HOST_NAME:/home/$USER_NAME/ #リモートパス(どんな命名が良いか思いつかなかったので、適当に付けました。)
PROJECT_DIR=<ドメイン名>/public_html/(<サブドメイン名>)/(<サブフォルダ名>)/ # アップロードフォルダまでのパス
# 例)PROJECT_DIR=paths-are.com/public_html/works.paths-are.com/jamstackblog-with-next-muiv5-microcms/
COPY_TO=$REMOTE_ROOT_DIR$PROJECT_DIR # コピー先
# コピー先のファイルを全て削除(前回のデータなどのごみデータを削除する。)
echo "コピー先 $COPY_TO 配下のファイルを全て削除します。パスワードを入力してください。"
ssh -i $KEY_PATH -l $USER_NAME -p $PORT $USER_NAME.xsrv.jp "rm -r $PROJECT_DIR*" #コピー先のフォルダ配下のファイルを削除
# 一括アップロード
echo "$COPY_FROM のファイルを $COPY_TO へアップロードします。パスワードを入力してください。"
scp -i $KEY_PATH -r -P $PORT $COPY_FROM $COPY_TO
read -p "Press [Enter] key to resume."
上記スクリプトをご自身のルートプロジェクト直下に配置してください。
そして、<>の中を自分の環境に合わせて設定してください。
コピー対象ファイルは今回は「ルート/out/*」に設定していますので、自由に変えてください。私はNext.jsの静的htmlファイルをXSERVERにアップロードする想定でこのスクリプトを書きました。
<※1パスワードをコピーするbatchファイルへのパス> とありますが、これは
SET /P <NUL="<パスワード>" | clip というコードが記載されたbatchファイルを用意します。
copy_pass.bat
SET /P <NUL="<パスワード>" | clip
パスワードは事前準備時の鍵を作成時に設定したパスワード値に置き換えてください。
このbatchファイルを実行すると<パスワード>の文字列がクリップボードにコピーされるようになります。ちょっとした便利テクです。
実行
実行します。
実行.sh
bash UPLOADFILES_TO_XSERVER.sh
こんな感じのログが出力されるはずです。
bash UPLOADFILES_TO_XSERVER.sh
dir> SET /P ="<パスワード>" 0<NUL | clip
コピー先 <コピー先パス> 配下のファイルを全て削除します
。パスワードを入力してください。
Enter passphrase for key '<秘密鍵パス>':
<コピー対象> のファイルを <コピー先パス> へアップロードします。パスワードを入力してください。
Enter passphrase for key '<秘密鍵パス>':
aeziyoec49v.json 100% 1769 29.9KB/s 00:00
ls6ubzxne_4.json 100% 2460 30.4KB/s 00:00
y2y-2m1migih.json 100% 2537 34.5KB/s 00:00
business.json 100% 1794 23.4KB/s 00:00
culture.json 100% 62 1.0KB/s 00:00
design.json 100% 61 1.2KB/s 00:00
health.json 100% 61 1.2KB/s 00:00
opinion.json 100% 2484 49.2KB/s 00:00
politics.json 100% 63 1.2KB/s 00:00
science.json 100% 62 1.2KB/s 00:00
style.json 100% 60 0.9KB/s 00:00
technology.json 100% 1796 32.5KB/s 00:00
travel.json 100% 2560 31.8KB/s 00:00
index.json 100% 7904 108.7KB/s 00:00
777-3be30c059f107898767e.js 100% 65KB 338.4KB/s 00:00
framework-2191d16384373197bc0a.js 100% 128KB 330.6KB/s 00:00
main-f697fe405f9bcb3ffaff.js 100% 74KB 241.6KB/s 00:00
404-ff821282b85737b4b90b.js 100% 513 3.6KB/s 00:00
[id]-d15bed3392fddeca4750.js 100% 6688 81.3KB/s 00:00
[categoryId]-df6dd1caea01dfee2716.js 100% 7726 96.3KB/s 00:00
index-55a40d819e141f7366e4.js 100% 7733 81.6KB/s 00:00
_app-8aa3da5d09aa38ac3826.js 100% 38KB 312.1KB/s 00:00
_error-737a04e9a0da63c9d162.js 100% 267 6.5KB/s 00:00
polyfills-a54b4f32bdc1ef890ddd.js 100% 90KB 482.9KB/s 00:00
webpack-d5ec76dc671ff27c3b07.js 100% 1634 21.2KB/s 00:00
_buildManifest.js 100% 630 10.3KB/s 00:00
_ssgManifest.js 100% 146 2.4KB/s 00:00
index.html 100% 10KB 123.2KB/s 00:00
index.html 100% 32KB 299.1KB/s 00:00
index.html 100% 33KB 283.4KB/s 00:00
index.html 100% 33KB 296.6KB/s 00:00
index.html 100% 36KB 266.6KB/s 00:00
index.html 100% 30KB 228.7KB/s 00:00
index.html 100% 30KB 240.0KB/s 00:00
index.html 100% 30KB 251.8KB/s 00:00
index.html 100% 37KB 303.6KB/s 00:00
index.html 100% 30KB 200.7KB/s 00:00
index.html 100% 30KB 256.4KB/s 00:00
index.html 100% 30KB 160.7KB/s 00:00
index.html 100% 36KB 181.7KB/s 00:00
index.html 100% 37KB 241.7KB/s 00:00
index.html 100% 52KB 351.7KB/s 00:00
Press [Enter] key to resume.
パスワードを入力するところでは、入力してください。
クリップボードにコピーする手順を踏んでいる方はそのままペーストして「Enter」すれば大丈夫です。
XSERVER管理画面から
「更新日時」を確認したところXSERVERへちゃんとアップロードできてることが確認できました。
おわり
まあ、今はWinSCPなどのファイルアップロードソフトウェアや、Githubにプッシュしたら自動でサーバーへアップロードするCIとかがあるので、こんなレガシーなやり方する方はあまりいないかもしれませんが、一応こんなやり方もできますね。ということで自分用の備忘録でしたー!
↧