Cloudflare Workers Sites์—์„œ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์•ˆ๋…•ํ•˜์„ธ์š”! ์ œ ์ด๋ฆ„์€ Dima์ด๊ณ  Wrike SysOps ํŒ€์˜ ๊ธฐ์ˆ  ์ฑ…์ž„์ž์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค๊ณ  ํ•œ ๋‹ฌ์— 10๋‹ฌ๋Ÿฌ๋ฅผ ๋“ค์—ฌ 5๋ถ„ ์•ˆ์— ๋ฐฐํฌ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๋Š” ์šฐ๋ฆฌ ํŒ€ ๋‚ด์—์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ์™€๋Š” ๊ฑฐ์˜ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜คํžˆ๋ ค ๋‚˜์—๊ฒŒ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์•Œ๊ฒŒ ๋œ ๋‚˜์˜ ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜๊ณผ ์ธ์ƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ง€์นจ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ฅผ ์ตœ๋Œ€ํ•œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ฆ๊ธธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ€๋‹ค!

Cloudflare Workers Sites์—์„œ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

๋”ฐ๋ผ์„œ ์•„๋งˆ๋„ ๊ท€ํ•˜๋Š” ์ด๋ฏธ ์›น์‚ฌ์ดํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ €๋ ดํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ฌด๋ฃŒ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ๊ธฐ์‚ฌ.

ํ•˜์ง€๋งŒ ๊ฐ‘์ž๊ธฐ ์—ฌ์ „ํžˆ ์ง€๋ฃจํ•˜๊ณ  ๋ฉ‹์ง„ ์‹ ๊ธฐ์ˆ  ์„ธ๊ณ„๋ฅผ ์ ‘ํ•˜๊ณ  ์‹ถ๋‚˜์š”? ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ๊ณ ๋ ค ์ค‘์ด๊ณ  ์‚ฌ์ดํŠธ ์†๋„๋ฅผ ์ตœ๋Œ€ํ•œ ๋†’์ด๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ ์šฐ๋ฆฌ๋Š” ํœด๊ณ , ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

์ž๋™ํ™”๋ฅผ ์œ„ํ•ด Gitlab CI/CD๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ฐ€์†ํ™”๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ Cloudflare์— ์ง์ ‘ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ž ์‚ฌ์ดํŠธ.

์‹œ์ž‘ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ:

1๋ถ€: Hugo ์„ค์น˜

์ด๋ฏธ Hugo๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ(๋˜๋Š” ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ) ์ด ๋ถ€๋ถ„์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค์Œ์—์„œ ํœด๊ณ ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”. https://github.com/gohugoio/hugo/releases

  2. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์— ์ •์˜๋œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์— ๋”ฐ๋ผ Hugo ์‹คํ–‰ ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. PATH ๋ฐฉ๋ฒ•

  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. ์ƒ์„ฑ๋œ ํŒŒ์ผ์— ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ /๊ฒŒ์‹œ๋ฌผ/my-amazing-post.md.
    ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ดˆ์•ˆ ๊ฐ’์„ ๋‹ค์Œ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆ‡๋œ

  8. ์ •์  ํŒŒ์ผ ์ƒ์„ฑ: hugo -D

์ด์ œ ์ •์  ์‚ฌ์ดํŠธ๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค. ./๊ณต๊ณต์˜ ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋™ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2๋ถ€: Cloudflare ์„ค์ •

์ด์ œ Cloudflare์˜ ์ดˆ๊ธฐ ์„ค์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋„๋ฉ”์ธ์ด ์ด๋ฏธ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž blog.example.com.

1๋‹จ๊ณ„: DNS ํ•ญ๋ชฉ ์ƒ์„ฑ

๋จผ์ € ๋„๋ฉ”์ธ์„ ์„ ํƒํ•œ ๋‹ค์Œ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์„ ์„ ํƒํ•˜์„ธ์š”. DNS. ์šฐ๋ฆฌ๋Š” ๋ธ”๋กœ๊ทธ A-๋ ˆ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๊ฐ€์ƒ IP๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ์€ ๊ณต์‹ ์ถ”์ฒœ, ํ•˜์ง€๋งŒ ์กฐ๊ธˆ ๋” ์˜ˆ์˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค).

Cloudflare Workers Sites์—์„œ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

2๋‹จ๊ณ„: Cloudflare ํ† ํฐ

  1. ๋‚ด ํ”„๋กœํ•„ (My Profile) -> API ํ† ํฐ ํƒญ-> ํ† ํฐ ์ƒ์„ฑ -> ์ปค์Šคํ…€ ํ† ํฐ ์ƒ์„ฑ

Cloudflare Workers Sites์—์„œ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์—ฌ๊ธฐ์—์„œ๋Š” ํ† ํฐ์„ ๊ณ„์ • ๋ฐ ์˜์—ญ์œผ๋กœ ์ œํ•œํ•ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ๋ฆผ์— ๋‚˜์—ด๋œ ๊ถŒํ•œ์— ๋Œ€ํ•œ ํŽธ์ง‘ ์˜ต์…˜์€ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค.

๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด ํ† ํฐ์„ ์ €์žฅํ•˜์„ธ์š”. ์„ธ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

3๋‹จ๊ณ„: accountid ๋ฐ zoneid ๊ฐ€์ ธ์˜ค๊ธฐ

๋„๋ฉ”์ธ โ†’ ์‚ดํŽด๋ณด๊ธฐ โ†’ [์˜ค๋ฅธ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”]

Cloudflare Workers Sites์—์„œ ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๊ฑด ๋‚ด๊บผ์ด๋‹ˆ ํ•จ๋ถ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š” :)

ํ† ํฐ ์˜†์— ์ €์žฅํ•˜์„ธ์š”. ์„ธ ๋ฒˆ์งธ ๋ถ€๋ถ„์—์„œ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: ์ž‘์—…์ž ํ™œ์„ฑํ™”

๋„๋ฉ”์ธ โ†’ ๋…ธ๋™์ž โ†’ ์ž‘์—…์ž ๊ด€๋ฆฌ

๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ์„ ํƒํ•˜๊ณ  Workers โ†’ Unlimited(ํ˜„์žฌ ์›” $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. ์ง€์ • ๊ทธ๋ฆ‡๋œ ์— ๋…ธ๋™์ž๊ฐœ๋ฐœ

  4. ๋ฒ„ํ‚ท์„ ./public์œผ๋กœ ๋ณ€๊ฒฝ (๋˜๋Š” ์ •์  ์‚ฌ์ดํŠธ์˜ ์œ„์น˜)

  5. ๊ฒฝ๋กœ์— ๋„๋ฉ”์ธ์ด ๋‘ ๊ฐœ ์ด์ƒ ์žˆ์œผ๋ฉด ์ž‘์—… ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฒฝ๋กœ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋™์ž ์‚ฌ์ดํŠธ/index.js (๊ธฐ๋Šฅ ์ฐธ์กฐ ํ•ธ๋“ค์ด๋ฒคํŠธ)

์ข‹์Šต๋‹ˆ๋‹ค. ์ด์ œ ํŒ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. wrangler publish.

4๋ถ€: ๋ฐฐํฌ ์ž๋™ํ™”

์ด ๊ฐ€์ด๋“œ๋Š” Gitlab์šฉ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋™ํ™”๋œ ๋ฐฐํฌ์˜ ๋ณธ์งˆ๊ณผ ์šฉ์ด์„ฑ์„ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑ

  1. ์ƒˆ GitLab ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์ดํŠธ ์—…๋กœ๋“œ: ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ธ”๋กœ๊ทธ.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 โ†’ ํŒŒ์ดํ”„ ๋ผ์ธ โ†’ ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰) ๋˜๋Š” ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. ์งœ์ž”!

๊ฒฐ๋ก 

๊ธ€์Ž„, ์ œ๊ฐ€ ๊ทธ๊ฒƒ์„ ์•ฝ๊ฐ„ ์ ˆ์ œํ–ˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์ „์ฒด ๊ณผ์ •์ด XNUMX๋ถ„ ๋‚จ์ง“ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ ์ž๋™ ๋ฐฐํฌ ๊ธฐ๋Šฅ๊ณผ ์ž‘์—…์ž๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ž‘์—…์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด๋ฅผ ๊ฐ–์ถ˜ ๋น ๋ฅธ โ€‹โ€‹์‚ฌ์ดํŠธ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

 Cloudflare ๊ทผ๋กœ์ž    ํœด๊ณ     GitLab Ci

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€