Skip to content

Latest commit

 

History

History
73 lines (71 loc) · 3.53 KB

README.md

File metadata and controls

73 lines (71 loc) · 3.53 KB

Provisioning a server with Terraform

  • Install tfenv and terraform
    $ brew install tfenv
    $ cd infra/terraform
    $ export HTTPS_PROXY=socks5://127.0.0.1:1122 # optionally
    $ tfenv install
  • Setup credentials (only first time)
    $ cp terraform.tfvars{.example,}
    $ vim terraform.tfvars
  • Initialize and download modules (if needed)
    $ export HTTPS_PROXY=socks5://127.0.0.1:1122 # optionally
    $ terraform init
  • Import existing DigitalOcean configuration (optionally; only the first time)
    $ terraform import digitalocean_droplet.web <id>
    $ terraform import digitalocean_domain.site my-stamps.ru
    $ terraform import digitalocean_record.www my-stamps.ru,<id>
    $ terraform import digitalocean_record.no-www my-stamps.ru,<id>
    $ terraform import digitalocean_record.ns1 my-stamps.ru,<id>
    $ terraform import digitalocean_record.ns2 my-stamps.ru,<id>
    $ terraform import digitalocean_record.ns3 my-stamps.ru,<id>
    $ terraform import digitalocean_record.mx1 my-stamps.ru,<id>
    $ terraform import digitalocean_record.mx2 my-stamps.ru,<id>
    $ terraform import digitalocean_record.email my-stamps.ru,<id>
    $ terraform import digitalocean_record.spf my-stamps.ru,<id>
    $ terraform import digitalocean_record.verification my-stamps.ru,<id>
    $ terraform import digitalocean_record.domain_key my-stamps.ru,<id>
    The ids can be obtained by API:
    $ export DIGITALOCEAN_TOKEN="$(grep -Po 'do_token = "\K[^\"]+' terraform.tfvars)"
    $ curl -sS -H "Content-Type: application/json" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/droplets" | jq '.droplets[].id'
    12345678
    $ curl -sS -H "Content-Type: application/json" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/domains/my-stamps.ru/records" | jq
  • Import existing UptimeRobot configuration (optionally; only the first time)
    $ terraform import uptimerobot_alert_contact.email <id>
    $ terraform import uptimerobot_monitor.mystamps <id>
    $ terraform import uptimerobot_status_page.status_page <id>
    The ids can be obtained by making /v2/getAlertContacts, /v2/getMonitors, and /v2/getPSPs API calls (see https://uptimerobot.com/api/ for details). For example:
    $ export UPTIMEROBOT_TOKEN="$(grep -Po 'uptimerobot_token = "\K[^\"]+' terraform.tfvars)"
    $ curl -sS -H 'Content-Type: application/x-www-form-urlencoded' -H 'Cache-Control: no-cache' -d "api_key=$UPTIMEROBOT_TOKEN" 'https://api.uptimerobot.com/v2/getAlertContacts' | jq -r '.alert_contacts[].id'
    1234567
    $ curl -sS -H 'Content-Type: application/x-www-form-urlencoded' -H 'Cache-Control: no-cache' -d "api_key=$UPTIMEROBOT_TOKEN" 'https://api.uptimerobot.com/v2/getMonitors' | jq '.monitors[].id'
    123456789
    $ curl -sS -H 'Content-Type: application/x-www-form-urlencoded' -H 'Cache-Control: no-cache' -d "api_key=$UPTIMEROBOT_TOKEN" 'https://api.uptimerobot.com/v2/getPSPs' | jq '.psps[].id'
    1234
  • Import existing MailGun configuration (optionally; only the first time)
    $ terraform import mailgun_domain.mystamps us:my-stamps.ru
  • Plan and apply:
    $ terraform plan -out terraform.tfplan
    $ terraform apply terraform.tfplan