Zero-config deployments of Plug, Phoenix, Rack and Rails apps on a clean Ubuntu server using Docker and Let's Encrypt
NOTE: This is an experimental project
Despite of having my fair share of experience in software development, hosting web applications has never really been my strongest skill set. So as a real programmer, I want to use a command line interface for easy deployments of my web applications (using HTTPS or not).
Important for me is not want to be locked onto a specific hosting provider and also, I want the server to be dispensable because "I know that my CLI has got my back".
So enter the Ruby gem
VPS which makes it able to deploy my web application on a totally clean Ubuntu server by roughly just executing five simple commands 💪
Run the following command to install
$ gem install "vps"
VPS is a command-line-interface, you can print help instructions:
$ vps help Commands: vps -v, [--version] # Show VPS version number vps deploy HOST [TOOL] # Deploy web application to the server vps domain # Manage upstream domains vps domain add HOST:UPSTREAM DOMAIN [EMAIL] # Add domain to host upstream (email recommended for https) vps domain help [COMMAND] # Describe subcommands or one specific subcommand vps domain list HOST[:UPSTREAM] # List domains of host vps domain remove HOST[:UPSTREAM] [DOMAIN] # Remove domain from host upstream vps edit [HOST] # Edit the VPS configuration(s) vps help [COMMAND] # Describe available commands or one specific command vps init HOST # Execute an initial server setup vps install HOST [TOOL] # Install software on the server vps service # Manage host services vps service add HOST [SERVICE] # Add service to host configuration vps service help [COMMAND] # Describe subcommands or one specific subcommand vps service list HOST # List services of host configuration vps service remove HOST [SERVICE] # Remove service from host configuration vps upstream # Manage host upstreams vps upstream add HOST[:UPSTREAM] PATH # Add upstream to host configuration vps upstream help [COMMAND] # Describe subcommands or one specific subcommand vps upstream list HOST # List upstreams of host configuration vps upstream remove HOST[:UPSTREAM] # Remove upstream from host configuration
Deploying a Plug / Phoenix / Rack / Rails application to a totally clean installed Ubuntu server
Let's say the SSH host is called
silver_surfer and that the application is located at
Just execute the following commands:
$ vps init silver_surfer $ vps install silver_surfer docker $ vps upstream add silver_surfer ~/Sources/spider_web $ vps domain add silver_surfer:spider_web http://spider.web $ vps deploy silver_surfer
Et voilà. Your awesome website is online, powered by Docker and Nginx! :D
Want to use a HTTPS domain?
No problem, just specify so and make sure you also pass a valid email address (which is recommended). During deployment
certbot will be added to the docker compose config and the SSL certificates will be created using
$ vps init silver_surfer $ vps install silver_surfer docker $ vps upstream add silver_surfer ~/Sources/spider_web $ vps domain add silver_surfer:spider_web https://spider.web firstname.lastname@example.org $ vps deploy silver_surfer
Cool, huh? :D
Want to add a (commonly used) service?
Easy. Just run
vps service add <yourhost> (e.g.
vps service add silver_surfer) and follow the instructions.
Thanks Philipp Medien (@pentacent_hq) for writing about using Nginx and Let's Encrypt with Docker:
https://medium.com/@pentacent / the-blog-post
Thanks Dmitry Fedosov (@dimafeng) for writing about scripting Docker based deployments:
http://dimafeng.com / the-blog-post
- Add documentation about adding docker-compose and Nginx related configs plus adding pre- and postload tasks
For support, remarks and requests, please mail me at email@example.com.
Copyright (c) 2020 Paul Engel, released under the MIT license
http://github.com/archan937 – http://twitter.com/archan937 – firstname.lastname@example.org
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.