2017-04-27 6 views
0

저는 Laravel 기반 응용 프로그램을위한 배포 도구로 capistrano를 사용하고 있습니다. 모든 서버 자격 증명을 저장하는 .env 파일은 배포 과정에서 만들어집니다. 다음은 빌드 로직 (deploy.rb)의 개요입니다.Capistrano : Laravel에 대한 데이터베이스 암호 저장

# config valid only for current version of Capistrano 
lock "3.8.1" 

set :application, "my_app" 
set :repo_url, "[email protected]:me/myapp.git" 
set :deploy_to, '/var/www/myapp' 

# Environment variables 
set :app_path, '/var/www/myapp/current' 
set :app_debug, true 
set :app_env, 'local' 
set :app_key, 'base64:k1IYcD0k8Q59nDOBds0sgPVJye/vy85ovAS8GQecRuI=' 
set :app_log_level, 'debug' 
set :app_url, 'http://localhost' 

set :db_connection, 'mysql' 
set :db_host, '127.0.0.1' 
set :db_port, '3306' 
set :db_name, 'my_db_name' 
set :db_user, 'my_db_user' 
set :db_password, 'mypassword' 

set :keep_releases, 3 

# Do composer install 
namespace :composer do 
    desc "Running Composer install ..." 
    task :install do 
     on roles(:app) do 
      within release_path do 
       execute :composer, "install --no-dev" 
       execute :composer, "dumpautoload" 
      end 
     end 
    end 
end 

# Do database migrations 
namespace :database do 
    desc "Running database migrations ..." 
    task :migrate do 
     on roles(:app) do 
      execute "php #{fetch(:app_path)}/artisan migrate" 
     end 
    end 
end 

# Create .env file 
namespace :environment do 
    desc "Setting up environment variables ..." 
    task :set_variables do 
     on roles(:app) do 
       puts ("Creating environment configuration file...") 
       execute "cat /dev/null > #{fetch(:app_path)}/.env" 

       execute "echo APP_NAME=#{fetch(:application)} >> #{fetch(:app_path)}/.env" 
       execute "echo APP_ENV=#{fetch(:app_env)} >> #{fetch(:app_path)}/.env" 
       execute "echo APP_KEY=#{fetch(:app_key)} >> #{fetch(:app_path)}/.env" 
       execute "echo APP_DEBUG=#{fetch(:app_debug)} >> #{fetch(:app_path)}/.env" 
       execute "echo APP_LOG_LEVEL=#{fetch(:app_log_level)} >> #{fetch(:app_path)}/.env" 
       execute "echo APP_URL=#{fetch(:app_url)} >> #{fetch(:app_path)}/.env" 

       execute "echo DB_CONNECTION=#{fetch(:db_connection)} >> #{fetch(:app_path)}/.env" 
       execute "echo DB_HOST=#{fetch(:db_host)} >> #{fetch(:app_path)}/.env" 
       execute "echo DB_PORT=#{fetch(:db_port)} >> #{fetch(:app_path)}/.env" 
       execute "echo DB_DATABASE=#{fetch(:db_name)} >> #{fetch(:app_path)}/.env" 
       execute "echo DB_USERNAME=#{fetch(:db_user)} >> #{fetch(:app_path)}/.env" 
       execute "echo DB_PASSWORD=#{fetch(:db_password)} >> #{fetch(:app_path)}/.env" 
     end 
    end 

    task :set_permissions do 
     on roles(:app) do 
      puts ("Set directory permissions to writtable...") 
      execute "chmod -R 777 #{fetch(:app_path)}/storage" 
      execute "chmod -R 777 #{fetch(:app_path)}/bootstrap/cache" 
     end 
    end 
end 

namespace :deploy do 
    after :updated, "composer:install" 
    after :finished, "environment:set_variables" 
    after :finished, "environment:set_permissions" 
    after :finished, "database:migrate" 
end 

데이터베이스 암호는 파일 자체에 저장되어 있으므로 안전한 방법은 아닙니다. 비밀 번호를 어떻게 분리 보관합니까? 나는 카피스트라노와 루비를 처음 사용합니다.

답변

0

두 가지 메커니즘이 있습니다.

내가 처음 고려해야 할 것은 linked_files를 사용하는 것입니다. 당신의 config/deploy.rb에서

append :linked_files, '.env' 

같은 뭔가 deploy 디렉토리 안에 해당 파일이 deploy 디렉토리 외부 shared/config/deploy.rb에 연결되게합니다. 이 파일을 수동으로 설정 한 다음 Capistrano를 배포시이 파일에 링크합니다.

둘째, 시스템에 환경 변수를 추가하여 읽을 수 있도록하고 .env 파일을 건너 뛸 수 있습니다.

마지막으로 저장소에 새 YAML 파일을 만들고 gitignore를 입력 한 다음 암호를 읽을 수 있습니다. Capistrano 구성을 읽는 논리가 배포 컴퓨터에서 로컬로 실행되기 때문에이 작업이 가능합니다.