Zeit NOW: migrace .dev domény do cloudu

🗓 27/02/2019  ⏳ 7 min read  💬 1400 words

13 let jsem čekal na správnou doménu, a pak jsem ji rovnou hodil do cloudu.

<off-topic>

Od doby, co Google oznámil, že bude prodávat domény s koncovkou .dev, jsem se těšil, že si udělám radost. Čekal jsem, než se Google vysloví a nechá mi si tu doménu koupit. Ona taková doména felix.dev zní fakt cool. Od pradávna totiž bojuju s tím, že mi můj táta a jmenovec vyfouknul skoro všechy pěkný domény a e-mailové účty. Chtěl jsem mít e-mail milansulc@gmail.com, ale nebyl jsem očividně první.

Tenkrát, zhruba před 13 lety, jsem si tedy založil e-mail rkfelix@gmail.com, RK znamená Rychnov nad Kněžnou. Tenkrát mi to nevadilo, ale když ho někomu dnes diktuji, není to moc profesionální.

Doménu milansulc.cz jsem nakonec získál, ale za prvé je dlouhá a za druhé, co zvolit jako prefix, info@milansulc.cz? chci@milansulc.cz? dycky@milansulc.cz? To snad radši ne. Tudy cesta taky nevede.

Pak jsem objevil koncovku .xyz asi za 1 $, ale už asi tušíte, proč je tak levná…

Nicméně, když se začaly rozšiřovat koncovky .io, tak jsem znovu přisel pozdě. Nakonec jsem si zaregistroval {hackerskou} doménu f3l1x.io (tady právě jste), ale jak poznamenal Honza Černý (chemix): „S tím se nikdo vypisovat nebude.“ Nuže, doufám, že backlinky odvedou svoji práci.

A konečně se dostáváme do doby zhruba 2 týdny zpět, kdy si dávám do kupy seznam domén, co si koupím. Pochopitelně felix.dev nechybí, event v kalendáři na den, kdy Google uvolňuje registrace bez navýšení mám, všechno vypadá slibně.

Dnes, 27.2.2019, pravidelně kontroluju stav domén a co nevidím. Moji, jako fakt, moji doménu felix.dev někdo koupil. Dprdl. On si to fakt někdo koupil v předprodeji, za takový prachy, kroutím hlavou.

Google .dev domain

Moje záložní doména sulc.dev je stále volná. Dnes stojí 12 $ + 125 $, asi na provoz Google serverů. Od zítra stojí jenom 12 $. Svolávám rodinný sněm. Všichni truchlí se mnou. Během pár minut máme jasno, nebudeme váhat a koupíme si za 3000,- Kč sulc.dev. Protože přece milan@sulc.dev je ultra cool. Right?

</off-topic>


Pojďme se podívat, co to ten Zeit je a s čím nám může pomoci. Nutno dodat, že jsem si prošel přes Azure, AWS až ke GCP, ale Zeit je pro mě jasnej objev roku 2018.

Azure, AWS i GCP mají vlastní HW/SW. Vy si můžete koupit nějakou službu nebo výkon a přes jejich admin nástroje/konzole ho spravovat. Zeit stojí bokem, resp. nad těmito cloudy a pomocí svého API je ovládá. Vy jen říkáte, že chcete nahrát někam svůj statický obsah nebo třeba kus PHP/JS/Go/Python kódu, ale už se nestaráte, jestli je to realně hostované u GCP nebo třeba u AWS. To za vás řeší Zeit a řeší to opravdu pěkně. Tím myslím vývojářsky, přes konzoli.

Nejdříve nainstalujeme nástroj now, jak radí dokumentace. Vytvoříme účet, přihlásíme, atd.

npm install -g now
now login

Takhle vypadá now -h.

$ now -h

  𝚫 now [options] <command | path>
  Commands:
    Cloud
      deploy               [path]      Performs a deployment (default)
      ls | list            [app]       Lists deployments
      rm | remove          [id]        Removes a deployment
      ln | alias           [id] [url]  Configures aliases for deployments
      inspect              [id]        Displays information related to a deployment
      domains              [name]      Manages your domain names
      certs                [cmd]       Manages your SSL certificates
      secrets              [name]      Manages your secret environment variables
      dns                  [name]      Manages your DNS records
      logs                 [url]       Displays the logs for a deployment
      scale                [args]      Scales the instance count of a deployment
      init                 [example]   Initialize an example project
      help                 [cmd]       Displays complete help for [cmd]
    Administrative
      billing | cc         [cmd]       Manages your credit cards and billing methods
      upgrade | downgrade  [plan]      Upgrades or downgrades your plan
      teams                [team]      Manages your teams
      switch               [scope]     Switches between teams and your personal account
      login                [email]     Logs into your account or creates a new one
      logout                           Logs out of your account
      whoami                           Displays the current scope
  Options:
    -h, --help                     Output usage information
    -v, --version                  Output the version number
    -V, --platform-version         Set the platform version to deploy to
    -n, --name                     Set the project name of the deployment
    -A FILE, --local-config=FILE   Path to the local `now.json` file
    -Q DIR, --global-config=DIR    Path to the global `.now` directory
    -d, --debug                    Debug mode [off]
    -f, --force                    Force a new deployment even if nothing has changed
    -t TOKEN, --token=TOKEN        Login token
    -p, --public                   Deployment is public (`/_src` is exposed)
    -e, --env                      Include an env var during run time (e.g.: `-e KEY=value`). Can appear many times.
    -b, --build-env                Similar to `--env` but for build time only.
    -m, --meta                     Add metadata for the deployment (e.g.: `-m KEY=value`). Can appear many times.
    -C, --no-clipboard             Do not attempt to copy URL to clipboard
    -T, --team                     Set a custom team scope
    --regions                      Set default regions to enable the deployment on
  > NOTE: To view the usage information for Now 1.0, run `now help deploy-v1`
  Examples:
  – Deploy the current directory
    $ now
  – Deploy a custom path
    $ now /usr/src/project
  – Deploy with environment variables
    $ now -e NODE_ENV=production -e SECRET=@mysql-secret
  – Show the usage information for the sub command `list`
    $ now help list

Doménu máme, chceme ji přidat do správy Zeit. Proč?

Zeit DNS speed

  1. Bude hostovaná na rychlé infrastruktuře, kterou Zeit provozuje s CloudFlare.
  2. DNS spravujete přes konzoli, ne admin rozhraní, fakt přes terminál, jako pravej geek.
  3. Zeit má velmi štědrý free tarif, idealní na prototypování nebo vlastní web.

Zeit pricing

Přidáme doménu přes terminál.

$ now domains add sulc.dev

Že se vše podařilo, víte hned.

> Success! Domain sulc.dev added correctly. [3s]

> WARN! The domain was added but it is not verified. To verify it, you should either:
  a) Change your domain nameservers to the following intended set: [recommended]

     Intended Nameservers    Current Nameservers
     b.zeit-world.co.uk      dns1.registrar-servers.com    ✘
     d.zeit-world.org        dns2.registrar-servers.com    ✘
     e.zeit-world.net        -                             ✘
     f.zeit-world.com        -                             ✘

  b) Add a DNS TXT record with the name and value shown below.

     name        type        value
     _now        TXT         **HASH**

  We will run a verification for you and you will receive an email upon completion.
  If you want to force running a verification, you can run `now domains verify <domain>`
  Read more: https://err.sh/now-cli/domain-verification

Jak je vidět, Zeit doporučuje změnit NS na jejich servery, abyste doménu mohli pohodlně spravovat. Lze nasměrovat i CNAME, ale doporučuju změnit komplet NS, ničemu to nevadí.

Potom, co je doména připojena k vašemu účtu, se čeká na verifikaci, kdy Zeit ověřuje, že jste správně nastavili NS záznamy.

Zeit domains list

Jakmile dojde k verifikaci, můžete svoji doménu ovládat kompletně přes terminál. Např. nastavit si MX záznamy.

Zobrazíme si nápovědu přes now help dns.

$ now help dns

  𝚫 now dns [options] <command>

  Commands:

    add     [details]             Add a new DNS entry (see below for examples)
    import  [domain] [zonefile]   Import a DNS zone file (see below for examples)
    rm      [id]                  Remove a DNS entry using its ID
    ls      [domain]              List all DNS entries for a domain

  Options:

    -h, --help                     Output usage information
    -A FILE, --local-config=FILE   Path to the local `now.json` file
    -Q DIR, --global-config=DIR    Path to the global `.now` directory
    -d, --debug                    Debug mode [off]
    -t TOKEN, --token=TOKEN        Login token
    -T, --team                     Set a custom team scope

  Examples:

  – Add an A record for a subdomain

      $ now dns add <DOMAIN> <SUBDOMAIN> <A | AAAA | ALIAS | CNAME | TXT>  <VALUE>
      $ now dns add zeit.rocks api A 198.51.100.100

  – Add an MX record (@ as a name refers to the domain)

      $ now dns add <DOMAIN> '@' MX <RECORD VALUE> <PRIORITY>
      $ now dns add zeit.rocks '@' MX mail.zeit.rocks 10

  – Add an SRV record

      $ now dns add <DOMAIN> <NAME> SRV <PRIORITY> <WEIGHT> <PORT> <TARGET>
      $ now dns add zeit.rocks '@' SRV 10 0 389 zeit.party

  – Add a CAA record

      $ now dns add <DOMAIN> <NAME> CAA '<FLAGS> <TAG> "<VALUE>"'
      $ now dns add zeit.rocks '@' CAA '0 issue "zeit.co"'

  – Import a Zone file

      $ now dns import <DOMAIN> <FILE>
      $ now dns import zeit.rocks ./zonefile.txt

A přidáme MX záznamy.

$ now dns add sulc.dev '@' MX mx1.example.com 10
> Success! DNS record for domain sulc.dev (rec_0123456789abcdefg1) created under f3l1x [1m]

$ now dns add sulc.dev '@' MX mx2.example.com 20
> Success! DNS record for domain sulc.dev (rec_0123456789abcdefg2) created under f3l1x [1m]

Takhle jednoduché to je. Znáte Zeit? Používáte ho na něco? Podělte se do diskuze.