Last active
November 11, 2019 14:11
-
-
Save yanyingwang/c623b16e2b7299947823 to your computer and use it in GitHub Desktop.
mina+puma+nginx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'mina/bundler' | |
require 'mina/rails' | |
require 'mina/git' | |
# require 'mina/rbenv' # for rbenv support. (http://rbenv.org) | |
require 'mina/rvm' # for rvm support. (http://rvm.io) | |
require 'mina/puma' | |
require 'mina/nginx' | |
# Basic settings: | |
# domain - The hostname to SSH to. | |
# deploy_to - Path to deploy into. | |
# repository - Git repo to clone from. (needed by mina/git) | |
# branch - Branch name to deploy. (needed by mina/git) | |
set :application, "appname" | |
set :server_name, "www.appname.com" | |
set :domain, 'appname-production' | |
set :deploy_to, "/home/username/appname" | |
set :repository, '[email protected]:usrename/appname.git' | |
set :branch, 'master' | |
# For system-wide RVM install. | |
# set :rvm_path, '/usr/local/rvm/bin/rvm' | |
# Manually create these paths in shared/ (eg: shared/config/database.yml) in your server. | |
# They will be linked in the 'deploy:link_shared_paths' step. | |
set :shared_paths, ['config/database.yml', 'config/secrets.yml', 'log', 'tmp/pids', 'tmp/sockets'] | |
set :app_path, lambda { "#{deploy_to}/#{current_path}" } | |
set :stage, 'production' | |
# Optional settings: | |
# set :user, 'foobar' # Username in the server to SSH to. | |
# set :port, '30000' # SSH port number. | |
# set :forward_agent, true # SSH forward_agent. | |
# This task is the environment that is loaded for most commands, such as | |
# `mina deploy` or `mina rake`. | |
task :environment do | |
# If you're using rbenv, use this to load the rbenv environment. | |
# Be sure to commit your .ruby-version or .rbenv-version to your repository. | |
# invoke :'rbenv:load' | |
# For those using RVM, use this to load an RVM version@gemset. | |
invoke :'rvm:use[ruby-2.1.5@default]' | |
end | |
# Put any custom mkdir's in here for when `mina setup` is ran. | |
# For Rails apps, we'll make some of the shared paths that are shared between | |
# all releases. | |
task :setup => :environment do | |
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"] | |
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"] | |
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/tmp/sockets"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/tmp/sockets"] | |
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/tmp/pids"] | |
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/tmp/pids"] | |
# Puma needs a place to store its pid file and socket file. | |
queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"] | |
queue! %[touch "#{deploy_to}/#{shared_path}/config/secrets.yml"] | |
queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml' and 'secrets.yml'."] | |
if repository | |
repo_host = repository.split(%r{@|://}).last.split(%r{:|\/}).first | |
repo_port = /:([0-9]+)/.match(repository) && /:([0-9]+)/.match(repository)[1] || '22' | |
queue %[ | |
if ! ssh-keygen -H -F #{repo_host} &>/dev/null; then | |
ssh-keyscan -t rsa -p #{repo_port} -H #{repo_host} >> ~/.ssh/known_hosts | |
fi | |
] | |
end | |
end | |
desc "Deploys the current version to the server." | |
task :deploy => :environment do | |
to :before_hook do | |
# Put things to run locally before ssh | |
end | |
deploy do | |
# Put things that will set up an empty directory into a fully set-up | |
# instance of your project. | |
invoke :'git:clone' | |
invoke :'deploy:link_shared_paths' | |
invoke :'bundle:install' | |
invoke :'rails:db_migrate' | |
invoke :'rails:assets_precompile' | |
invoke :'deploy:cleanup' | |
to :launch do | |
#queue "mkdir -p #{deploy_to}/#{current_path}/tmp/" | |
#queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt" | |
invoke 'puma:phased_restart' | |
end | |
end | |
end | |
# For help in making your deploy script, see the Mina documentation: | |
# | |
# - http://nadarei.co/mina | |
# - http://nadarei.co/mina/tasks | |
# - http://nadarei.co/mina/settings | |
# - http://nadarei.co/mina/helpers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
upstream appname { | |
server unix:///home/username/appname/shared/tmp/sockets/puma.sock; | |
} | |
server { | |
listen 80; | |
server_name www.appname.com; # change to match your URL | |
root /home/username/appname/current/public; # I assume your app is located at this location | |
location / { | |
proxy_pass http://appname; # match the name of upstream directive which is defined above | |
proxy_set_header Host $host; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
} | |
location ~* ^/assets/ { | |
# Per RFC2616 - 1 year maximum expiry | |
expires 1y; | |
add_header Cache-Control public; | |
# Some browsers still send conditional-GET requests if there's a | |
# Last-Modified header or an ETag header even if they haven't | |
# reached the expiry date sent in the Expires header. | |
add_header Last-Modified ""; | |
add_header ETag ""; | |
break; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# #{deploy_to}/#{shared_path}/config/puma.rb | |
# Change to match your CPU core count | |
workers 1 | |
# Min and Max threads per worker | |
threads 1, 6 | |
mina_dir = File.expand_path("../../..", __FILE__) | |
app_dir = "#{mina_dir}/current" | |
shared_dir = "#{mina_dir}/shared" | |
# Default to production | |
rails_env = ENV['RAILS_ENV'] || "production" | |
environment rails_env | |
# Set up socket location | |
bind "unix://#{shared_dir}/tmp/sockets/puma.sock" | |
# Logging | |
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true | |
# Set master PID and state locations | |
pidfile "#{shared_dir}/tmp/pids/puma.pid" | |
state_path "#{shared_dir}/tmp/sockets/puma.state" | |
activate_control_app "unix://#{shared_dir}/tmp/sockets/pumactl.sock" | |
on_worker_boot do | |
require "active_record" | |
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished | |
ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env]) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
cp config/puma.rb /home/tech/koooffer/shared/config/
mina puma:start -vv