コマンド一発でソースコードを本環境に!PHP製のDeployツール「Deployer」を使ってみた
本番環境へのソースコードのDeployにも色々な方法があります。
- FTPクライアントを用いてアップロード
- lftpコマンドを用いてアップロード
- GitHub等のサービスを介して本環境でclone
- GitHubActionsを用いてアップロード 等々…
弊社ではセキュリティ等の関係上オンプレミスのGitLabでソースコードを管理していたため、自動化が思うように進まなかったのですが、昨今のコロナ渦でリモートワークが実施されるに伴い、GitHubの導入、Deployの自動化が進んでいます。 その中でも実際に使ってみて便利だったPHP製のDeployツール「Deployer」の紹介をしたいと思います。
Deployerとは
A deployment tool written in PHP with support for popular frameworks out of the box.
Google翻訳:すぐに使用できる一般的なフレームワークをサポートするPHPで記述されたデプロイメントツール。
詳細は後述しますが、PHPで書かれたDeployツールになります。
SSHで本環境に接続し、Gitリポジトリのcloneやcomposerのインストールを行ってくれます。
筆者の環境
- WSL2
- Ubuntu-20.04
- PHP-8.0.3
Deployerを実際に使ってみる
Deployerを使って実際にDeployしてみるに当たり、Twigを用いてhtmlを表示するだけのコードを書きました。
<?php
require_once './vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('./templates');
$twig = new \Twig\Environment($loader);
$args = [
'title' => 'deployer test',
'content' => 'コンテンツ'
];
echo $twig->render('index.html.twig', $args);
<!DOCTYPE HTML>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
{{ content }}
</body>
</html>
{
"require": {
"twig/twig": "^3.0"
}
}
$ tree -L 2
.
├── composer.json
├── composer.lock
├── docker-compose.yml
├── index.php
├── templates
│ └── index.html.twig
└── vendor
├── autoload.php
├── composer
├── symfony
└── twig
インストール
今回はcomposesrを用いてインストールします。
https://deployer.org/docs/6.x/installation#source-composer-installation
$ php ./vendor/bin/dep
Deployer master
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-f, --file[=FILE] Specify Deployer file
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
help Displays help for a command
init Initialize deployer system in your project
list Lists commands
Deployer設定ファイルの作成
depコマンドのinitを用いて作成します。 各種フレームワークから設定ファイルの雛形を選択します。
今回はフレームワークを用いていないので [0]Common を選択しました。
$ ./vendor/bin/dep init
Please select your project type (defaults to common):
[0] Common
[1] Laravel
[2] Symfony
[3] Yii
[4] Zend Framework
[5] CakePHP
[6] CodeIgniter
[7] Drupal
> 0
Successfully created: /path/to/ploject/deploy.php
deploy.phpの編集
前工程で作成した deploy.php を編集します。
ソースコードのGitリポジトリと公開サーバのSSH接続情報を設定しました。
$ git diff
diff --git a/deploy.php b/deploy.php
index 72b77cc..63d2561 100644
--- a/deploy.php
+++ b/deploy.php
@@ -7,7 +7,7 @@ require 'recipe/common.php';
set('ssh_type', 'native');
set('ssh_multiplexing', true);
-set('repository', 'git@domain.com:username/repository.git');
+set('repository', 'https://github.com/username/deployer-test.git');
set('shared_files', []);
set('shared_dirs', []);
set('writable_dirs', []);
@@ -15,9 +15,10 @@ set('writable_dirs', []);
// Servers
server('production', 'domain.com')
- ->user('username')
- ->identityFile()
- ->set('deploy_path', '/var/www/domain.com');
+ ->configFile('~/.ssh/config')
+ ->identityFile('~/.ssh/production_id.rsa')
+ ->http_user(33)
+ ->set('deploy_path', '~/deployer-test');
Deployerの実行
プロジェクト直下で下記のコマンドを実行します。
./vendor/bin/dep deploy
$ ./vendor/bin/dep deploy
✔ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
✔ Executing task deploy:update_code
✔ Executing task deploy:shared
✔ Executing task deploy:writable
✔ Executing task deploy:vendors
✔ Executing task deploy:clear_paths
✔ Executing task deploy:symlink
✔ Executing task deploy:unlock
✔ Executing task cleanup
✔ Executing task success
Successfully deployed!
問題なく成功したようです!!
本環境の確認
本環境のDeploy先を確認します。
$ ll
合計 2
lrwxrwxrwx 1 xxxxxxxx xxxxxxxx 39 9月 15 16:41 current -> /home/xxxxxxxx/deployer-test/releases/1
drwxr-xr-x 3 xxxxxxxx xxxxxxxx 3 9月 15 16:41 releases
drwxr-xr-x 2 xxxxxxxx xxxxxxxx 2 9月 15 16:06 shared
試しにもう一度デプロイしてみると…
$ ll
合計 2
lrwxrwxrwx 1 xxxxxxxx xxxxxxxx 39 9月 15 17:14 current -> /home/xxxxxxxx/deployer-test/releases/2
drwxr-xr-x 4 xxxxxxxx xxxxxxxx 4 9月 15 17:14 releases
drwxr-xr-x 2 xxxxxxxx xxxxxxxx 2 9月 15 16:06 shared
$ ll releases/
合計 3
drwxr-xr-x 5 xxxxxxxx xxxxxxxx 12 9月 15 16:41 1
drwxr-xr-x 5 xxxxxxxx xxxxxxxx 12 9月 15 17:14 2
最新版の releases/2/ に current が切り替わっています!
おわりに
Deployerを使ってソースコードをDeployしてみました。 シンボリックリンクが最新バージョンを向く構成になっていることで、不具合が見つかった際は前バージョンに戻すことも簡単にできますね! 今回ご紹介した以外にもいろいろな機能があるので、是非使ってみてはいかがでしょうか?
この記事を書いた人
-
東京で2年半エンジニアとしての経験を積み、浜松にUターンの後、アーティスへ入社。
ソリューション事業部のWebエンジニアとして、システムの設計・開発・保守・運用からインフラまで幅広く従事している。
フルスタックエンジニア目指して現在も勉強の日々。車が好き。
この執筆者の最新記事
関連記事
最新記事
FOLLOW US
最新の情報をお届けします
- facebookでフォロー
- Twitterでフォロー
- Feedlyでフォロー