今年の夏に、このブログのホスティング環境をmixhost
に切り替えました。
mixhostはComposer
も使えるのでDeployer
でデプロイに挑戦してみました。
Gitのインストール
Deployerでリモートサーバーからリポジトリをクローンするのでmixhostでgitが実行できることが必須となります。
残念ながらmixhostではデフォルトでgitはインストールされていないので使うことはできません。
なのでインストールします。
こちらのページを参考にインストールしました。
自分の場合契約プランが低いので時間はかかりますが特に問題なくインストール&実行することができました。
Deployerのインストール
今回は自分のマシンからDeployerを実行しますのでマシンにDeployer
インストールします。
公式サイトに書いてある通りです。
Deployer
curl -LO https://deployer.org/deployer.phar mv deployer.phar /usr/local/bin/dep chmod +x /usr/local/bin/dep
インストールしたらdep
コマンドが実行できるか確認します。
[vagrant@localhost deploy]$ dep --version Deployer 6.0.3
Bitbucketの設定
mixhostでgitからリモートレポジトリをクローンするときにsshを使ってクローンします。
なのでmixhostでBitbucket用に秘密鍵/公開鍵を作ります。
ssh-keygen
コマンドで秘密鍵/公開鍵を作りますが途中で聞かれるパスフレーズは未入力とします。
mixhostで作業します。
cd ~/.ssh ssh-keygen -t rsa -f bitbucket_rsa
次にbitbucket.orgへの接続の場合は上記で作成した秘密鍵を使うように設定ファイルに追記します。
もし存在しない場合は新規に作成してください。
vi ~/.ssh/config
以下を追記します。
Host bitbucket.org HostName bitbucket.org IdentityFile ~/.ssh/bitbucket_rsa User Bitbucketのユーザー名
作成ファイルが存在せず新しく設定した場合は属性を変更しておきます。
chmod 600 ~/.ssh/config
次に作成した公開鍵をBitbucketに登録します。
cat ~/.ssh/bitbucket_rsa.pub
Bitbucketにログインして自分のProfile画面から登録することができます。
Deployerの設定
Deployerの設定をしますが、バージョンによって微妙に書き方が変わるみたいなので今回は6.0.3
で動作する設定となります。
まずはdeploy.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');
サーバー情報はservers.yml
に外出しています。
ホスト名.mixh.jp: hostname: ホスト名.mixh.jp user: mixhostのユーザー名 identityFile: /home/vagrant/.ssh/mixhost.pk(これはmixhostの秘密鍵) stage: production deploy_path: "/home/ユーザー名/展開場所" branch: master
デプロイしてみる
準備ができたらDeployします。
自分のマシンにログインしてdep
コマンドを実行します。
dep deploy production
特に問題なければDeployが実行できます。
.envの適用
Laravelは.envにクレデンシャルな情報を設定します。
レポジトリにはクレデンシャルな情報をコミットしないので.envは含まれません。
なので.envを記載します。
.envはshared_files
に設定してあるので実態はシンボリックリンクとなっております。
.envを修正したら設定ファイルのキャッシュを生成し直します。
php artisan config:cache
mixhostのドキュメントルートの設定
デプロイを実行するとservers.yml
に設定したdeploy_path
にcurrentというシンボリックリンクがあります。
ドキュメントルートにはこのシンボリックリンクを指定します。
これでうまく設定できていればブラウザでページを開くとLaravelのページが表示されていると思います。
検討
mixhostは自動的にSSL対応が行われます。
おそらくSSL対応するときにドキュメントルートに.well-knownというディレクトリが自動的に作成されます。
リリースすると.well-knownもshared_dirsに設定しておいたほうが良いかもしれません。ただ動作は未確認です。
まとめ
mixhostはComposerも使えるのでPHPの実行環境としては管理が楽だと思います。
DeployerでのデプロイもできたのでWordPressのデプロイなどもできるのではないでしょうか。
ホスティングサービスだと初期費用が発生することが多いのですがmixhostは今のところ無料です。
詳しくは以下のページで確認することができます。