LoginSignup
4
6

More than 3 years have passed since last update.

LaravelをDeployerでデプロイする流れ

Posted at

LaravelをDeployerでデプロイしてみた。

$ composer require deployer/deployer --dev
$ vendor/bin/dep
$ php vendor/bin/dep init
Please select your project type [Common]:
[0 ] Common
[1 ] Laravel
[2 ] Symfony
[3 ] Yii
[4 ] Yii2 Basic App
[5 ] Yii2 Advanced App
[6 ] Zend Framework
[7 ] CakePHP
[8 ] CodeIgniter
[9 ] Drupal
[10] TYPO3

今回はLaravelなので、1を選択。
すると deploy.php という設定ファイルが作成される

今回は以下のように書いた。なお、ymlファイルはステージング環境と本番環境を分けていなくて、
本番環境しかないので、作成していない。

<?php
namespace Deployer;

require 'recipe/laravel.php';

// Project name
set('application', 'my_project');

// Project repository
set('repository', 'git@github.com:nag*******ki/sns_pr*********ori.git');

// [Optional] Allocate tty for git clone. Default value is false.
set('git_tty', true); 

// Shared files/dirs between deploys 
add('shared_files', []);
add('shared_dirs', ['vendor']);

// Writable dirs by web server 
add('writable_dirs', ['bootstrap/cache', 'storage']);


// Hosts

//公開したいEC2インスタンスと紐付けしたElasticIP
host('1*.1*8.**.***')
    ->port('22')
    ->user('ec2-user')
    ->stage('production')
    ->set('branch', 'master')
    ->identityFile('~/Desktop/aws-********.pem')
    ->set('deploy_path', '~/{{application}}');

// Tasks

task('build', function () {
    run('cd {{release_path}} && build');
});

//Task追記した箇所

//option('env-update', null, InputOption::VALUE_OPTIONAL, 'update env file.');

task('copy:env', function () {
  if (input()->hasOption('env-update')){
      $update = input()->getOption('env-update');
      if($update == 'true'){
          $stage = get('stage');
          $src = ".env.${stage}";
          $path = get('deploy_path');
          $shared_path = "${path}/shared";
          run("if [ -e $(echo ${shared_path}/.env ) ]; then cp {{release_path}}/${src} ${shared_path}/.env; fi");
          run("cp {{release_path}}/${src} {{release_path}}/.env");
      }
  }
});

/*
task('npm:run', function (): void {
    run('cd {{release_path}} && chmod 707 public');
    run('cd {{release_path}} && npm install');

    if (input()->getArgument('stage') === 'production') {
        run('cd {{release_path}} && npm run production');
    } else {
        run('cd {{release_path}} && npm run development');
    }
});

task('php:run', function (): void {
    run('cd {{release_path}} && composer dump-autoload');
    run('cd {{release_path}} && php artisan htaccess:ip');
});
*/


task('deploy', [
    'deploy:info',
    'deploy:prepare', // サーバに接続して、ソースコードを配置するディレクトリを作成するTask
    'deploy:lock', // デプロイをlockすすTask
    'deploy:release', // デプロイするソースコードを配置するためのディレクトリを整備するTask
    'deploy:update_code', // git cloneでソースを落とすTask
    'deploy:shared', // リリースバージョンの共有ディレクトリを設置するTask
    'deploy:writable',
    'deploy:vendors', // composerをinstallするTask
    'deploy:clear_paths',
    'deploy:symlink', // シンボリックリンク差し替えるTask
    'deploy:unlock',  // デプロイのlockを解除するTask
    'cleanup',  // 前リリースバージョンを削除するTask
    'success',
]);

  before('deploy:shared', 'copy:env'); // deploy:sharedの前にTaskを実行
  //after('deploy:shared', 'npm:run'); // deploy:sharedの後にTaskを実行
  //after('deploy:vendors', 'php:run'); // deploy:vendorsの後にTaskを実行


// [Optional] if deploy fails automatically unlock.
after('deploy:failed', 'deploy:unlock');

// Migrate database before symlink new release.

//before('deploy:symlink', 'artisan:migrate');

次にデプロイコマンド(本番環境用)
はじめに

$ ./vendor/bin/dep deploy production

2回目以降、.envファイルに変更があった場合に下のコマンドを実行

$ ./vendor/bin/dep deploy production --env-update=true

次に、EC2とGitHubとの連携

EC2内で、秘密鍵と公開鍵を作成
viやcatコマンドで、github_id_rsa.pubの中身を全てコピーして
GitHubのSSHKeyのところに貼り付け。

EC2内にいて、vi ~/.sshに秘密鍵と公開鍵がある状態。
vi ~/.ssh/configでファイルを作成し、以下のように記載

[ec2-user@ip-10-0-10-11 .ssh]$ vi config

Host github
 HostName      github.com
 IdentityFile  ~/.ssh/github_id_rsa
 User          git  

権限付与

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/config    

以下のようにコマンドを打ったら、成功

$ ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '**.***2.7*.**' to the list of known hosts.
Hi nagamoridaiki! You've successfully authenticated, but GitHub does not provide shell access.

ただし、詰まったところがあり、秘密鍵は名前をid_rsaにしないと通らないようである。
そんな時は、

cp github_id_rsa id_rsa

これでgit cloneも、 deployerもうまく通った。

deployerがうまくいくと、EC2にmy_projectフォルダができ、そこにGitHubにのせた
Laravelプロジェクトがインストールされているので、
あとはApacheのDocumentルートを

DocumentRoot "~/my_project/current/public"

のように設定する。
と、ドメイン名でLaravelのアプリが表示されるようになる。
ここまでで、2日ほどかかった。。。

あとは、データベースとの連携が。。。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6