ここ数日で大量にGitHub Actionsを用いたphpファイルの自動デプロイを行っていました。特に1つのサーバで複数の自動pullは試行錯誤したので、備忘録として残そうと思います。少しでも役に立てれば幸いです。
仕様
・Ubuntu18.04
・レンタルサーバ(無料枠内でOK)
└ hoge.com
└ special.hoge.com
・GitHub
手順(準備)
初めに、必要なファイルを作成します。
私のように、一つのサーバで複数のホームページを運用したい場合などは、GitHub Actionsをしたいプロジェクトの数だけ鍵を作成するようにしましょう。
・公開鍵と秘密鍵
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_hoge #指定せず[Enter]を押すと()内のファイル名になります。
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): id_rsa_special_hoge
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
・config
Host github-hoge
hostname github.com
user git
Identify ~/.ssh/id_rsa_hoge
Host github-special-hoge
hostname github.com
user git
Identify ~/.ssh/id_rsa_special_hoge
次に、.ssh/authorizationに公開鍵を追記しておきます。
$cat ~/.ssh/id_rsa_hoge.pub >> ~/.ssh/authorization
$cat ~/.ssh/id_rsa_special_hoge.pub >> ~/.ssh/authorization
次に、サーバでpullしたいディレクトリなどを決め、cloneしていきます。
Gitのインストールは下記コマンド。
$sudo apt install git
なお、cloneする場合は保存先ディレクトリ(公開しているホームページのディレクトリ)は空にする必要があるため、WinSCPなどでファイルをバックアップしておいてください。
$git clone git@github.com/[userName]/[projectName].git [deployDirectory]
例えば、Godというユーザが作成した場合は、下記のようになります。
$git clone git@github.com/God/hoge.git ~/hoge.com
$git clone git@github.com/God/special.hoge.git ~/special.hoge.com
ディレクトリを指定しなかった場合は、現在居るディレクトリにプロジェクト名でフォルダが作成されます。
手順(GitHub Actions)
まず、デプロイ(サーバにpullしたいプロジェクト)したいプロジェクトで環境変数と公開鍵の設定を行います。
PORT=22
HOST=[サーバのIPアドレス]
HOST_NAME=[サーバのユーザ名]
PRIVATE_KEY=[秘密鍵をコピー]
※秘密鍵の貼り付けですが、改行を\nに置き換えて1行にする方法もありますが、私はwindows標準搭載のメモ帳からのコピペで動きました。なので下記のようになります。
-----BEGIN OPENSSH PRIVATE KEY-----↓
*******************↓
-----END OPENSSH PRIVATE KEY-----↓
[EOF]
環境変数の設定が終わったら、次に公開鍵を設定します。
→Deploy Key
ここまでで設定は終わりです。次にGitHub Actionを作成します。
circle: deploy
build
さて、いよいよテストです。
pushして動くか試してみましょう。もしエラーが出る場合はサーバに戻ってgithubへログインできるか確認してみます。
$ssh -T git@git-hoge
Hello git@github.com:God/hoge.com.
これでうまくいかない場合はサーバのファイアウォールの確認や、エラー文をネットで検索してデバッグしてください。
~Fin~
これで1つのサーバから複数のホームページでも自動的にpullできるようになり、開発がとても容易になりました。