This post will guide you through automating a "bare-metal" machine configuration, and getting a server ready for building and deploying Elixir / Phoenix applications (with LiveView support!)
Managing infrastructure can be frustratingly hard. Combing through byzantine interfaces with poor documentation and hidden features, clicking through hundreds of menus - these experiences are all too familiar to DevOps engineers using AWS. A DevOps engineer's worst fear is that the business will ask for a new instance of the application for a client, and they will have to repeat all those manual steps again. (Hopefully in the correct order, and not forgetting anything along the way!)
At Hashrocket we are big fans of automation, and part of that means we use the
This file contains hidden or 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
| import * as Pulumi from '@pulumi/pulumi'; | |
| import * as DigitalOcean from '@pulumi/digitalocean'; | |
| import * as fs from 'fs'; | |
| const projectName = Pulumi.getProject(); | |
| const config = new Pulumi.Config(); | |
| const sshPubKeyFilename = config.require('sshPubKeyFilename'); | |
| const publicKey = fs.readFileSync(sshPubKeyFilename).toString(); |
This file contains hidden or 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
| on run argv | |
| set zoom to "zoom.us" | |
| set wait to 0.5 | |
| log "activating zoom" | |
| tell application zoom to activate | |
| # Wait for Zoom's create meeting window to open | |
| tell application "System Events" | |
| repeat until visible of process zoom is true |
This file contains hidden or 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
| let g:ale_pattern_options = { | |
| \ '\.min\.js$': {'ale_linters': [], 'ale_fixers': []}, | |
| \ '\.min\.css$': {'ale_linters': [], 'ale_fixers': []}, | |
| \} | |
| let g:ale_fixers = { | |
| \ 'typescript': ['prettier'], | |
| \ 'typescript.tsx': ['prettier'], | |
| \ 'javascript': ['prettier'], | |
| \ 'javascript.jsx': ['prettier'], |
This file contains hidden or 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
| 2019-09-03T22:02:12+00:00 constant-heavenly-redtailedhawk[gigalixir]: Readiness probe failed | |
| : dial tcp 10.56.14.229:4000: connect: connection refused | |
| 2019-09-03T22:02:15+00:00 constant-heavenly-redtailedhawk[gigalixir]: Readiness probe failed | |
| : dial tcp 10.56.14.229:4000: connect: connection refused | |
| 2019-09-03T22:02:18+00:00 constant-heavenly-redtailedhawk[gigalixir]: Readiness probe failed | |
| : dial tcp 10.56.14.229:4000: connect: connection refused | |
| 2019-09-03T22:02:21+00:00 constant-heavenly-redtailedhawk[gigalixir]: Readiness probe failed | |
| : dial tcp 10.56.14.229:4000: connect: connection refused | |
| 2019-09-03T22:02:22.756111+00:00 constant-heavenly-redtailedhawk[gigalixir-run]: Shutting do | |
| wn 'constant-heavenly-redtailedhawk' on host 'constant-heavenly-redtailedhawk-7b8b998fd4-ltl |
This file contains hidden or 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
| def most_viewed_posts(start_date, end_date) do | |
| # v0 | |
| query = """ | |
| select | |
| page, | |
| count(page) as hits | |
| from | |
| requests | |
| where | |
| request_time between $1::timestamp and $2::timestamp and |
This file contains hidden or 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
| "scripts": { | |
| "test": "./node_modules/jest/bin/jest.js", | |
| "test:watch": "yarn test --watch", | |
| "webpack:test:build": "RAILS_ENV=test bin/webpack", | |
| "webpack:test:watch": "RAILS_ENV=test bin/webpack --watch --progress", | |
| "webpack-dev-server": "node --max-old-space-size=4096 ./node_modules/webpack-dev-server/bin/webpack-dev-server --progress --hot --color --config", | |
| "lint:js": "eslint ./app/javascript --ext .js --ext .jsx", | |
| "lint:css": "stylelint app/assets/stylesheets/**/*.scss", | |
| "webpack": "node --max-old-space-size=4096 ./node_modules/webpack/bin/webpack.js --progress" | |
| }, |
This file contains hidden or 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
| #!/usr/bin/env ruby | |
| # frozen_string_literal: true | |
| $stdout.sync = true | |
| require 'shellwords' | |
| require 'yaml' | |
| ENV['RAILS_ENV'] ||= 'development' | |
| RAILS_ENV = ENV['RAILS_ENV'] |
This file contains hidden or 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
| # frozen_string_literal: true | |
| require 'whois' | |
| require 'whois-parser' | |
| words = File.readlines('/usr/share/dict/words') | |
| whois = Whois::Client.new(timeout: 10) | |
| domains = words |