``` html ___ ___ ___ ___ / /\ /__/\ / /\ /__/| / /++\ \ \+\ / /++\ | |+| / /+/\+\ \__\+\ / /+/\+\ | |+| / /+/~/++\ ___ / /++\ / /+/ \+\ | |+| /__/+/ /+/\+\ /__/\ /+/\+\ /__/+/ \__\+\ ___|__|+| \ \+\/+/__\/ \ \+\/+/__\/ \ \+\ / /+/ /__/+++++\ \ \++/ \ \++/ \ \+\ /+/ \__\~~~~++\ \ \+\ \ \+\ \ \+\/+/ \ \+\ \ \+\ \ \+\ \ \++/ \ \+\ \__\/ \__\/ \__\/ \__\/ Ahoy = Puma + NGINX + Mina + Vagrant + Ansible ``` --- #### Ahoy will generate everything you need to deploy your Rails application * Ansible scripts to provision your server with Nginx, Ruby, PostgreSQL, and recommended security settings (ssh hardening, firewall, fail2ban, etc.) * Mina scripts to deploy your Rails application * Puma application server configuration files * An optional Vagrantfile with settings * An *.env* directory that will use YAML to store your environment variables securely **IMPORTANT:** Ahoy currently expects that your Rails application is using PostgreSQL. Depending on demand, there may be future support for MySQL. ## Installation and usage **RECOMMENDATION:** You might want to first try this using a fresh Rails application so you can see how it effects your files before running this in your existing code base. ### Step 1 Add the gem to your Gemfile and bundle ```ruby gem 'rails-ahoy' ``` $ bundle install Execute the following terminal command to launch Ahoy's interactive guide $ rails generate ahoy:init Continue to next step AFTER you complete the interactive guide ### Step 2 If you don't have a production *secret_key_base*, generate one using: $ rake secret This will produce something that looks like: $ f67395912d0ddd0de80a734822e73b327d007809123... Now just copy and paste it into the following file: $ /.env/production_env.yml **IMPORTANT:** At this point make sure to commit your changes and push them up to your repo! ### Step 3 **IMPORTANT:** For this step, you will need a freshly installed Ubuntu box with root ssh privileges. If you're not sure how to do this, contact your web hosting administrator. From the root of your Rails application... $ cd config/ansible && ./production.sh Executing `production.sh` will launch the provisioning process and setup your box so it can run Rails using Nginx as the web server, Puma as your application server, and PostgreSQL as your database. **NOTE:** This process may take a while (15 mins or so), so sit back and relax. ### Step 4 **ASSUMPTION:** This step assumes that your code is hosted in a Github repo. Once the provisioning process is complete, log into your box with the server user (ex: deployer) $ ssh deployer@ Once in, get your server user's public key $ cat ~/.ssh/id_rsa.pub This will print out something like this: sh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOv2hw90hySH+41A6NVjp6GXhBS/PUVmTot... Copy the public key and paste it into your Rails application Github repo settings to allow SSH access. ### Step 5 Go back to the root of your Rails application and execute the following command: $ mina production setup Then... $ mina production deploy ### Congratulations! If everything worked as it should have, your Rails application should be up and running on the Web. Enjoy! ## Contributing 1. Fork it ( https://github.com/[my-github-username]/rails-ahoy/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new Pull Request