ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืืชืจ ืกื˜ื˜ื™ ื‘ืืชืจื™ Cloudflare Workers

ืฉืœื•ื! ืฉืžื™ ื“ื™ืžื”, ืื ื™ ืžื•ื‘ื™ืœ ื˜ื›ื ื™ ืฉืœ ืฆื•ื•ืช SysOps ื‘-Wrike. ื‘ืžืืžืจ ื–ื” ืืกืคืจ ืœื›ื ื›ื™ืฆื“ ืœื”ืคื•ืš ืืชืจ ืื™ื ื˜ืจื ื˜ ื›ืžื” ืฉื™ื•ืชืจ ืงืจื•ื‘ ืœืžืฉืชืžืฉ ื‘-10 ื“ืงื•ืช ื•-5 ื“ื•ืœืจ ืœื—ื•ื“ืฉ ื•ืœื”ืคื•ืš ืืช ื”ืคืจื™ืกื” ืฉืœื• ืœืื•ื˜ื•ืžื˜ื™ืช. ืœืžืืžืจ ืื™ืŸ ื›ืžืขื˜ ืฉื•ื ืงืฉืจ ืœื‘ืขื™ื•ืช ืฉืื ื• ืคื•ืชืจื™ื ื‘ืฆื•ื•ืช ืฉืœื ื•. ื–ื” ื“ื•ื•ืงื ื”ื—ื•ื•ื™ื” ื”ืื™ืฉื™ืช ื•ื”ื”ืชืจืฉืžื•ืช ืฉืœื™ ืžื”ื™ื›ืจื•ืช ืขื ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื“ืฉื” ืœื™. ื ื™ืกื™ืชื™ ืœืชืืจ ืืช ื”ืฉืœื‘ื™ื ื‘ืคื™ืจื•ื˜ ืจื‘ ื›ื›ืœ ื”ืืคืฉืจ ื›ื“ื™ ืฉื”ื”ื•ืจืื•ืช ื™ื”ื™ื• ืฉื™ืžื•ืฉื™ื•ืช ืขื‘ื•ืจ ืื ืฉื™ื ืขื ื ื™ืกื™ื•ืŸ ืฉื•ื ื”. ืื ื™ ืžืงื•ื•ื” ืฉืชื”ื ื•. ืœืœื›ืช!

ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืืชืจ ืกื˜ื˜ื™ ื‘ืืชืจื™ Cloudflare Workers

ืื– ืื•ืœื™ ื›ื‘ืจ ืžืฆืืชื ื“ืจืš ืคืฉื•ื˜ื” ื•ื–ื•ืœื” ืœืืจื— ืืชืจ ืื™ื ื˜ืจื ื˜. ืื•ืœื™ ืืคื™ืœื• ื‘ื—ื™ื ื, ื›ืคื™ ืฉืžืชื•ืืจ ื›ืืŸ ืžืืžืจ ื ื”ื“ืจ.

ืื‘ืœ ืคืชืื•ื ืืชื” ืขื“ื™ื™ืŸ ืžืฉื•ืขืžื ื•ืจื•ืฆื” ืœื’ืขืช ื‘ืขื•ืœื ื”ื—ื“ืฉ ื•ื”ืืžื™ืฅ ืฉืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื”? ื ื ื™ื— ืฉืืชื” ื—ื•ืฉื‘ ืขืœ ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ืคืจื™ืกื” ื•ื‘ืจืฆื•ื ืš ืœื”ืื™ืฅ ืืช ื”ืืชืจ ืฉืœืš ื›ื›ืœ ื”ืืคืฉืจ? ื‘ืžืืžืจ ื–ื” ื ืฉืชืžืฉ ื”ื•ื’ื•, ืื‘ืœ ื–ื” ืื•ืคืฆื™ื•ื ืœื™.

ืื ื—ื ื• ืžืฉืชืžืฉื™ื ื‘-Gitlab CI/CD ืœืื•ื˜ื•ืžืฆื™ื”, ืื‘ืœ ืžื” ืœื’ื‘ื™ ื”ืืฆื”? ื‘ื•ืื• ื ืคืจื•ืก ืืช ื”ืืชืจ ื™ืฉื™ืจื•ืช ืœ-Cloudflare ื‘ืืžืฆืขื•ืช ืืชืจื™ ืขื•ื‘ื“ื™ื.

ืžื” ื ื“ืจืฉ ื›ื“ื™ ืœื”ืชื—ื™ืœ:

ื—ืœืง 1: ื”ืชืงื ืช ื”ื•ื’ื•

ืื ื›ื‘ืจ ื”ืชืงื ืช ืืช ื”ื•ื’ื•, ืื• ืื ืืชื” ืžืขื“ื™ืฃ ืžื—ื•ืœืœ ืืชืจื™ื ืกื˜ื˜ื™ ืื—ืจ (ืื• ืœื ืžืฉืชืžืฉ ื‘ืื—ื“ ื‘ื›ืœืœ), ืื– ืืชื” ื™ื›ื•ืœ ืœื“ืœื’ ืขืœ ื”ื—ืœืง ื”ื–ื”.

  1. ื”ื•ืจื“ ืืช ื”ื•ื’ื• ืž https://github.com/gohugoio/hugo/releases

  2. ืื ื• ืžื ื™ื—ื™ื ืืช ืงื•ื‘ืฅ ื”ื”ืคืขืœื” ืฉืœ ื”ื•ื’ื• ืœืคื™ ืื—ื“ ืžืืœื” ื”ืžื•ื’ื“ืจื™ื ื‘ ื ืชื™ื‘ ื“ืจื›ื™ื

  3. ื™ืฆื™ืจืช ืืชืจ ื—ื“ืฉ: hugo new site blog.example.com

  4. ืฉื ื” ืืช ื”ืกืคืจื™ื™ื” ื”ื ื•ื›ื—ื™ืช ืœืกืคืจื™ื™ื” ื”ื—ื“ืฉื” ืฉื ื•ืฆืจื”: cd blog.example.com

  5. ื‘ื—ืจ ื ื•ืฉื ืขื™ืฆื•ื‘ (https://github.com/budparr/gohugo-theme-ananke/releases ืื• ืžื” ืฉืœื ื™ื”ื™ื”)

  6. ื‘ื•ืื• ื ื™ืฆื•ืจ ืืช ื”ืคื•ืกื˜ ื”ืจืืฉื•ืŸ: hugo new posts/my-amazing-post.md

  7. ื”ื•ืกืฃ ืชื•ื›ืŸ ืœืงื•ื‘ืฅ ืฉื ื•ืฆืจ: content/posts/my-amazing-post.md.
    ื›ืืฉืจ ื”ื›ืœ ื ืขืฉื”, ืฉื ื” ืืช ืขืจืš ื”ื˜ื™ื•ื˜ื” ืœ ืฉืงืจ

  8. ื™ืฆื™ืจืช ืงื‘ืฆื™ื ืกื˜ื˜ื™ื™ื: hugo -D

ื›ืขืช ื”ืืชืจ ื”ืกื˜ื˜ื™ ืฉืœื ื• ืžืžื•ืงื ื‘ืชื•ืš ืกืคืจื™ื™ื” ./ืคึผื•ึผืžึฐื‘ึผึตื™ ื•ืžื•ื›ืŸ ืœืคืจื™ืกื” ื”ื™ื“ื ื™ืช ื”ืจืืฉื•ื ื” ืฉืœืš.

ื—ืœืง 2: ื”ื’ื“ืจืช Cloudflare

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ื”ื’ื“ืจื” ื”ืจืืฉื•ื ื™ืช ืฉืœ Cloudflare. ื ื ื™ื— ืฉื›ื‘ืจ ื™ืฉ ืœื ื• ื“ื•ืžื™ื™ืŸ ืœืืชืจ. ื‘ื•ืื• ื ื™ืงื— ื›ื“ื•ื’ืžื” blog.example.com.

ืฉืœื‘ 1: ืฆื•ืจ ืขืจืš DNS

ืจืืฉื™ืช, ื‘ื—ืจ ืืช ื”ื“ื•ืžื™ื™ืŸ ืฉืœื ื•, ื•ืœืื—ืจ ืžื›ืŸ ืืช ืคืจื™ื˜ ื”ืชืคืจื™ื˜ DNS. ืื ื• ื™ื•ืฆืจื™ื ืจืฉื•ืžื” A-ื‘ืœื•ื’ ื•ืžืฆื™ื™ื ื™ื ืขื‘ื•ืจื• ื›ืชื•ื‘ืช IP ืคื™ืงื˜ื™ื‘ื™ืช (ื–ื”ื• ื”ืจืฉืžื™ ื”ืžืœืฆื”, ืื‘ืœ ื”ื ื™ื›ืœื• ืœืขืฉื•ืช ืืช ื–ื” ืงืฆืช ื™ื•ืชืจ ื™ืคื”).

ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืืชืจ ืกื˜ื˜ื™ ื‘ืืชืจื™ Cloudflare Workers

ืฉืœื‘ 2: Cloudflare Token

  1. ื”ืคืจื•ืคื™ืœ ืฉืœื™ -> ืืกื™ืžื•ื ื™ API tab-> ืฆื•ืจ ืืกื™ืžื•ืŸ -> ืฆื•ืจ ืืกื™ืžื•ืŸ ืžื•ืชืื ืื™ืฉื™ืช

ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืืชืจ ืกื˜ื˜ื™ ื‘ืืชืจื™ Cloudflare Workers

ื›ืืŸ ืชืฆื˜ืจืš ืœื”ื’ื‘ื™ืœ ืืช ื”ืืกื™ืžื•ืŸ ืœื—ืฉื‘ื•ื ื•ืช ื•ืื–ื•ืจื™ื, ืืš ื”ืฉืืจ ืืช ืืคืฉืจื•ืช ื”ืขืจื™ื›ื” ืขื‘ื•ืจ ื”ื”ืจืฉืื•ืช ื”ืจืฉื•ืžื•ืช ื‘ืชืžื•ื ื”.

ืฉืžื•ืจ ืืช ื”ืืกื™ืžื•ืŸ ืœืขืชื™ื“, ื ื–ื“ืงืง ืœื• ื‘ื—ืœืง ื”ืฉืœื™ืฉื™.

ืฉืœื‘ 3: ืงื‘ืœ accountid ื•-zoneid

ืชึฐื—ื•ึผื โ†’ ืกืงื™ืจื” ื›ืœืœื™ืช โ†’ [ืกืจื’ืœ ืฆื“ ื™ืžื™ืŸ]

ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืืชืจ ืกื˜ื˜ื™ ื‘ืืชืจื™ Cloudflare Workersืืœื” ืฉืœื™, ืืœ ืชืฉืชืžืฉ ื‘ื”ื ื‘ื‘ืงืฉื” :)

ืฉืžื•ืจ ืื•ืชื ืœื™ื“ ื”ืืกื™ืžื•ืŸ, ื ืฆื˜ืจืš ืื•ืชื ื’ื ื‘ื—ืœืง ื”ืฉืœื™ืฉื™.

ืฉืœื‘ 4: ื”ืคืขืœ ืขื•ื‘ื“ื™ื

ืชึฐื—ื•ึผื โ†’ ืขื•ื‘ื“ื™ื โ†’ ื ื”ืœ ืขื•ื‘ื“ื™ื

ืื ื• ื‘ื•ื—ืจื™ื ืฉื ื™ื™ื—ื•ื“ื™ ื•ืชืขืจื™ืฃ ืขื•ื‘ื“ื™ื โ†’ ืœืœื ื”ื’ื‘ืœื” (5$ ืœื—ื•ื“ืฉ ื”ื™ื•ื). ืื ืชืจืฆื”, ืชื•ื›ืœ ืœืฉื“ืจื’ ืžืื•ื—ืจ ื™ื•ืชืจ ืœื’ืจืกื” ื”ื—ื™ื ืžื™ืช.

ื—ืœืง 3: ืคืจื™ืกื” ืจืืฉื•ื ื” (ืคืจื™ืกื” ื™ื“ื ื™ืช)

ืขืฉื™ืชื™ ืืช ื”ืคืจื™ืกื” ื”ื™ื“ื ื™ืช ื”ืจืืฉื•ื ื” ื›ื“ื™ ืœื’ืœื•ืช ืžื” ื‘ืืžืช ืงื•ืจื” ืฉื. ืœืžืจื•ืช ืฉื›ืœ ื–ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื™ื•ืชืจ:

  1. ื”ืชืงืŸ ืจื ื’ืœืจ: npm i @cloudflare/wrangler -g

  2. ื‘ื•ื ื ืœืš ืœืกืคืจื™ื™ืช ื”ื‘ืœื•ื’ ืฉืœื ื•: cd blog.example.com

  3. ื”ืคืขืœ ืจื ื’ืœืจ: wrangler init โ€” site hugo-worker

  4. ืฆื•ืจ ืชืฆื•ืจื” ืขื‘ื•ืจ ืจื ื’ืœืจ (ื”ื–ืŸ ืืช ื”ืืกื™ืžื•ืŸ ื›ืฉืชืชื‘ืงืฉ): wrangler config

ื›ืขืช ื ื ืกื” ืœื‘ืฆืข ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื‘ืฅ ื”ื—ื“ืฉ ืฉื ื•ืฆืจ wrangler.toml (ื›ืืŸ ืจืฉื™ืžื” ืžืœืื” ืฉืœ ื”ื’ื“ืจื•ืช ืืคืฉืจื™ื•ืช):

  1. ืื ื• ืžืฆื™ื™ื ื™ื accountid ื•-zoneid

  2. ืžืฉืชื ื” ืžึทืกืœื•ึผืœ ืœืžืฉื”ื• ื›ืžื• *blog.example.com/*

  3. ืื ื• ืžืฆื™ื™ื ื™ื ืฉืงืจ ืขื‘ื•ืจ workersdev

  4. ืฉื ื” ืืช ื”ื“ืœื™ ืœ-./public (ืื• ื”ื™ื›ืŸ ื ืžืฆื ื”ืืชืจ ื”ืกื˜ื˜ื™ ืฉืœืš)

  5. ืื ื™ืฉ ืœืš ื™ื•ืชืจ ืžื“ื•ืžื™ื™ืŸ ืื—ื“ ื‘ื ืชื™ื‘, ืขืœื™ืš ืœืชืงืŸ ืืช ื”ื ืชื™ื‘ ื‘ืกืงืจื™ืคื˜ ื”ืขื‘ื•ื“ื”: workers-site/index.js (ืจืื” ืคื•ื ืงืฆื™ื” handleEvent)

ืžืฆื•ื™ืŸ, ื”ื’ื™ืข ื”ื–ืžืŸ ืœืคืจื•ืก ืืช ื”ืืชืจ ื‘ืืžืฆืขื•ืช ื”ืฆื•ื•ืช wrangler publish.

ื—ืœืง 4: ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ืคืจื™ืกื”

ืžื“ืจื™ืš ื–ื” ื ื›ืชื‘ ืขื‘ื•ืจ Gitlab, ืืš ื”ื•ื ืœื•ื›ื“ ืืช ื”ืžื”ื•ืช ื•ื”ืงืœื•ืช ืฉืœ ืคืจื™ืกื” ืื•ื˜ื•ืžื˜ื™ืช ื‘ืื•ืคืŸ ื›ืœืœื™.

ืฉืœื‘ 1: ืฆื•ืจ ื•ื”ื’ื“ืจ ืืช ื”ืคืจื•ื™ืงื˜ ืฉืœื ื•

  1. ืฆื•ืจ ืคืจื•ื™ืงื˜ GitLab ื—ื“ืฉ ื•ื”ืขืœื” ืืช ืกืคืจื™ื™ืช ื”ืืชืจ: blog.example.com ืขื ื›ืœ ื”ืชื•ื›ืŸ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืžื•ืงื ื‘ืกืคืจื™ื™ืช ื”ืฉื•ืจืฉ ืฉืœ ื”ืคืจื•ื™ืงื˜

  2. ืงื‘ืขื ื• ืžืฉืชื ื” CFAPITOKEN ื›ืืŸ: ื”ื’ื“ืจื•ืช โ†’ CI / CD โ†’ ืžืฉืชื ื™ื

ืฉืœื‘ 2: ืฆื•ืจ ืงื•ื‘ืฅ .gitlab-ci.yml ื•ื”ืคืขืœ ืืช ื”ืคืจื™ืกื” ื”ืจืืฉื•ื ื”

ืฆื•ืจ ืงื•ื‘ืฅ .gitlab-ci.yml ื‘ืฉื•ืจืฉ ืขื ื”ืชื•ื›ืŸ ื”ื‘ื:

stages:
  - build
  - deploy

build:
  image: monachus/hugo
  stage: build
  variables:
    GIT_SUBMODULE_STRATEGY: recursive
  script:
    - cd blog.example.com/
    - hugo
  artifacts:
    paths:
      - blog.example.com/public
  only:
    - master # this job will affect only the 'master' branch
  tags:
    - gitlab-org-docker #


deploy:
  image: timbru31/ruby-node:2.3
  stage: deploy
  script:
    - wget https://github.com/cloudflare/wrangler/releases/download/v1.8.4/wrangler-v1.8.4-x86_64-unknown-linux-musl.tar.gz
    - tar xvzf wrangler-v1.8.4-x86_64-unknown-linux-musl.tar.gz
    - cd blog.example.com/
    - ../dist/wrangler publish
  artifacts:
    paths:
      - blog.example.com/public
  only:
    - master # this job will affect only the 'master' branch
  tags:
    - gitlab-org-docker #

ืื ื• ืžืฉื™ืงื™ื ืืช ื”ืคืจื™ืกื” ื”ืจืืฉื•ื ื” ื‘ืื•ืคืŸ ื™ื“ื ื™ (CI/CD โ†’ ืฆื™ื ื•ืจื•ืช โ†’ ื”ืคืขืœ ืฆื™ื ื•ืจ) ืื• ื‘ื”ืชื—ื™ื™ื‘ื•ืช ืœืกื ื™ืฃ ื”ืžืืกื˜ืจ. ื•ื•ืืœื”!

ืžืกืงื ื”

ื•ื‘ื›ืŸ, ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื”ื–ื™ื–ืชื™ ืืช ื–ื” ืžืขื˜, ื•ื›ืœ ื”ืชื”ืœื™ืš ืœืงื— ืงืฆืช ื™ื•ืชืจ ืžืขืฉืจ ื“ืงื•ืช. ืื‘ืœ ืขื›ืฉื™ื• ื™ืฉ ืœืš ืืชืจ ืžื”ื™ืจ ืขื ืคืจื™ืกื” ืื•ื˜ื•ืžื˜ื™ืช ื•ื›ืžื” ืจืขื™ื•ื ื•ืช ื—ื“ืฉื™ื ืœื’ื‘ื™ ืžื” ืขื•ื“ ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืขื Workers.

 ืขื•ื‘ื“ื™ Cloudflare    ื”ื•ื’ื•    GitLab Ci

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”