今年の夏に、このブログのホスティング環境をmixhost
に切り替えました。
mixhostはComposer
も使えるのでDeployer
でデプロイに挑戦してみました。
Gitのインストール
Deployerでリモートサーバーからリポジトリをクローンするのでmixhostでgitが実行できることが必須となります。
残念ながらmixhostではデフォルトでgitはインストールされていないので使うことはできません。
なのでインストールします。
こちらのページを参考にインストールしました。
自分の場合契約プランが低いので時間はかかりますが特に問題なくインストール&実行することができました。
Deployerのインストール
今回は自分のマシンからDeployerを実行しますのでマシンにDeployer
インストールします。
公式サイトに書いてある通りです。
Deployer
[code lang=bash]
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
[/code]
インストールしたらdep
コマンドが実行できるか確認します。
[code lang=bash]
[vagrant@localhost deploy]$ dep --version
Deployer 6.0.3
[/code]
Bitbucketの設定
mixhostでgitからリモートレポジトリをクローンするときにsshを使ってクローンします。
なのでmixhostでBitbucket用に秘密鍵/公開鍵を作ります。
ssh-keygen
コマンドで秘密鍵/公開鍵を作りますが途中で聞かれるパスフレーズは未入力とします。
mixhostで作業します。
[code lang=bash]
cd ~/.ssh
ssh-keygen -t rsa -f bitbucket_rsa
[/code]
次にbitbucket.orgへの接続の場合は上記で作成した秘密鍵を使うように設定ファイルに追記します。
もし存在しない場合は新規に作成してください。
[code lang=bash]
vi ~/.ssh/config
[/code]
以下を追記します。
[code lang=text]
Host bitbucket.org
HostName bitbucket.org
IdentityFile ~/.ssh/bitbucket_rsa
User Bitbucketのユーザー名
[/code]
作成ファイルが存在せず新しく設定した場合は属性を変更しておきます。
[code lang=bash]
chmod 600 ~/.ssh/config
[/code]
次に作成した公開鍵をBitbucketに登録します。
[code lang=bash]
cat ~/.ssh/bitbucket_rsa.pub
[/code]
Bitbucketにログインして自分のProfile画面から登録することができます。
Deployerの設定
Deployerの設定をしますが、バージョンによって微妙に書き方が変わるみたいなので今回は6.0.3
で動作する設定となります。
まずはdeploy.php
です。
[php]
<?php
namespace Deployer;
require 'recipe/laravel.php';
inventory('servers.yml');
set('bin/git', '/home/mixhostのユーザー名/opt/bin/git');
// Project name
set('application', 'アプリケーション名');
// Project repository
set('repository', 'レポジトリ');
// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true);
// Shared files/dirs between deploys
set('shared_files', ['.env']);
set('shared_dirs', [
'storage',
]);
set('http_user', 'mixhostのユーザー名');
set('http_group', 'mixhostのユーザー名');
set('writable_mode', 'chgrp');
set('writable_use_sudo', false);
// Writable dirs by web server
set('writable_dirs', [
'bootstrap/cache',
'storage',
'storage/app',
'storage/app/public',
'storage/framework',
'storage/framework/cache',
'storage/framework/sessions',
'storage/framework/views',
'storage/logs',
]);
task('build', function () {
run('cd {{release_path}} && build');
});
// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');
// Migrate database before symlink new release.
before('deploy:symlink', 'artisan:migrate');
// レポジトリ直下にLaravelのプロジェクトがあるならchange_cwdタスクは不要
// 今回のレポジトリ構成はsrc/app/以下にLaravelが展開されている。
task('change_cwd', function () {
$subdir = get('release_path') . DIRECTORY_SEPARATOR . 'src/app';
set('release_path', $subdir);
run('cd {{release_path}}');
});
after('deploy:update_code', 'change_cwd');
[/php]
サーバー情報はservers.yml
に外出しています。
[python]
ホスト名.mixh.jp:
hostname: ホスト名.mixh.jp
user: mixhostのユーザー名
identityFile: /home/vagrant/.ssh/mixhost.pk(これはmixhostの秘密鍵)
stage: production
deploy_path: "/home/ユーザー名/展開場所"
branch: master
[/python]
デプロイしてみる
準備ができたらDeployします。
自分のマシンにログインしてdep
コマンドを実行します。
[code lang=bash]
dep deploy production
[/code]
特に問題なければDeployが実行できます。
.envの適用
Laravelは.envにクレデンシャルな情報を設定します。
レポジトリにはクレデンシャルな情報をコミットしないので.envは含まれません。
なので.envを記載します。
.envはshared_files
に設定してあるので実態はシンボリックリンクとなっております。
.envを修正したら設定ファイルのキャッシュを生成し直します。
[code lang=bash]
php artisan config:cache
[/code]
mixhostのドキュメントルートの設定
デプロイを実行するとservers.yml
に設定したdeploy_path
にcurrentというシンボリックリンクがあります。
ドキュメントルートにはこのシンボリックリンクを指定します。
これでうまく設定できていればブラウザでページを開くとLaravelのページが表示されていると思います。
検討
mixhostは自動的にSSL対応が行われます。
おそらくSSL対応するときにドキュメントルートに.well-knownというディレクトリが自動的に作成されます。
リリースすると.well-knownもshared_dirsに設定しておいたほうが良いかもしれません。ただ動作は未確認です。
まとめ
mixhostはComposerも使えるのでPHPの実行環境としては管理が楽だと思います。
DeployerでのデプロイもできたのでWordPressのデプロイなどもできるのではないでしょうか。
ホスティングサービスだと初期費用が発生することが多いのですがmixhostは今のところ無料です。
詳しくは以下のページで確認することができます。