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