summaryrefslogtreecommitdiff
path: root/memos/WM-022.txt
diff options
context:
space:
mode:
Diffstat (limited to 'memos/WM-022.txt')
-rw-r--r--memos/WM-022.txt134
1 files changed, 134 insertions, 0 deletions
diff --git a/memos/WM-022.txt b/memos/WM-022.txt
new file mode 100644
index 0000000..4bd0ec6
--- /dev/null
+++ b/memos/WM-022.txt
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+Document: WM-022 P. Webb
+Category: Tutorial 2017.12.05
+
+ Easy deployment with Vagrant
+
+Abstract
+
+ Quite irritated I wasn't doing this already
+
+Body
+
+ > Vagrant[1] provides easy to configure, reproducible, and portable
+ > work environments built on top of industry-standard technology and
+ > controlled by a single consistent workflow to help maximize the
+ > productivity and flexibility of you and your team.
+
+ This is fine and dandy but, I'm not on a team with my side projects.
+ I just want to quickly push my code to a server and keep it moving.
+ Here's how I did it.
+
+ 1. Installation
+
+ Head on over to HashiCorp's download page for Vagrant[2] and
+ select the build for your OS flavor of choice. After the
+ installation is complete, open a Terminal and type `vagrant -v` to
+ ensure installation was successful. If you see a version number,
+ you're good to go.
+
+ 2. Setup
+
+ `cd` into the folder you want to deploy and initialize a Vagrant
+ deployment script with `vagrant init`. This will automatically
+ generate a `Vagrantfile` and it is in here that you'll customize
+ your deployment strategies. Here[3] are all the parameters you can
+ use for SFTP (which is the way I'm deploying my projects). There's
+ documentation for Heroku and inline scripts as well. Here's my
+ deployment script for `thewebb.blog`:
+
+ ```ruby
+ Vagrant.configure("2") do |config|
+ config.vm.box = "base"
+
+ config.push.define "ftp" do |push|
+ push.host = "thewebb.blog"
+ push.username = "root"
+ push.password = "~/.ssh/id_rsa"
+ push.secure = true
+ push.destination = "/var/www/twb"
+ push.exclude = ".DS_Store"
+ push.exclude = ".git"
+ push.exclude = ".gitignore"
+ push.exclude = ".sass-cache"
+ push.exclude = "[documents]"
+ push.exclude = "node_modules"
+ push.exclude = "package-lock.json"
+ push.exclude = "Vagrantfile"
+ end
+ end
+ ```
+
+ You can probably guess what's going on here, but I'll walk you
+ through it anyway.
+
+ I'm connected to `thewebb.blog` via secure FTP, or SFTP, with an
+ SSH key (because passwords are lame). The directory I want to push
+ data to on `thewebb.blog` has a path of `/var/www/twb`. There are
+ a couple of files and folders I don't want/need on my server
+ (mostly the contents of my `.gitignore`, along with that
+ file itself).
+
+ Please refer to the documentation[4] for in-depth descriptions
+ about other parameters like `config.vm.box` (this line is
+ required btw).
+
+ 3. Takeoff
+
+ I use Node.js for practically everything I do so I added a nifty
+ deploy command to my `package.json`. Here's the relevant bit:
+
+ ```json
+ {
+ "scripts": {
+ "deploy": "vagrant push"
+ }
+ }
+ ```
+
+ And that's it!
+
+ To be quite honest, me using Vagrant feels like the equivalent of
+ buying an iMac Pro to browse the Internet but, their tagline is
+ "Deployment environments made easy". And guess what? It works
+ *damn good*. What's easier than `npm run deploy`?
+
+ 4. One more thing
+
+ When you deploy your project, you'll see a message in Terminal
+ stating what's happening, but nothing else. It would be *nice* to
+ have a progress bar to indicate…well, progress but it doesn't take
+ too long (for my projects). Also, automatic reading of my
+ `.gitignore` file so I don't have to manually include what I
+ want excluded.
+
+ Another thing that would be nice is something where my server
+ could detect changes and run commands. For example, let's say I
+ add new modules to this blog. I'll have to install them on my
+ server as well. Currently, I have to SSH into it and run whatever
+ extra steps to ensure updates and I *reeeeeally* don't feel like
+ doing that. You could argue that I could just use HashiCorp's
+ other tools like Nomad and Consul but 1) it was too confusing to
+ set up and I realized 2) those tools are *definitely* overkill for
+ what I work on.
+
+ SO! I have caused myself *much* pain to create a system that
+ allows these automatic updates to happen. Just deploy and your
+ server will take care of the rest. During my failed attempts at
+ utilizing other tools, I was inspired by the ease with which I
+ deployed with Vagrant via a simple file. It's still in development
+ but I've been working on it for the past day and a half. Great
+ progress has been made, stay tuned! 🕸
+
+References
+
+ [1] <https://www.vagrantup.com>
+ [2] <https://www.vagrantup.com/downloads.html>
+ [3] <https://www.vagrantup.com/docs/push/ftp.html>
+ [4] <https://www.vagrantup.com/docs/index.html>