PHP

mixhostにPHP Deployerを使ってデプロイする

投稿日:2017/10/29 更新日:

今年の夏に、このブログのホスティング環境を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は今のところ無料です。
詳しくは以下のページで確認することができます。


-PHP

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

CakePHPで簡単なコントローラーとビューの作成

先日こちらの記事でCakePHPのインストールを行いました。 今回はとりあえず最初の一歩としてコントローラーとビューを使ってみたいと思います。 最終的な目標はすごい簡単で/cake/hello/にアク …

WindowsにLaravel 5.4をインストールする

どうもPHP初心者、Laravel初心者のものです。 今回の案件ではPHPのフレームワークにLaravelを使うことにしましたのでインストール手順をまとめたいと思います。 環境 ホストOS:Windo …

CakePHPでビューからコンポーネントを呼び出す方法

CakePHPで各ビューで特定の処理をコンポーネントでまとめて呼び出したい場合があると思います。 単純に考えるとビューにコンポーネントをセットすればよいと思いますが、ヘルパーからコンポーネントを呼び出 …

CakePHP2.4系のインストールと設定方法

今までずーっとJava/サーブレット関連の開発をしていたのですが世の中の流れか不明ですが、今回PHPの開発をすることになりました。 少し触ったことがある程度で、フレームワークとかは何も使っていない素の …

CakePHPでコントローラーの呼び出しURLを変更する

CakePHPでは基本的にURLとコントローラーは一致します。 例えば /users/index というURLの場合、呼び出されるコントローラーは UsersController が呼び出されます。 …

ad-sidebar




カテゴリー