## ๐Ÿ› ๏ธ Gitea & Quartz ๋ฐฐํฌ ์ž๋™ํ™” ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๊ธฐ๋ก ### 1. ๋ฌธ์ œ์˜ ๋ฐœ๋‹จ: Gitea ๊ฒฝ๋กœ ๋ณ€๊ฒฝ (`/git/` ๋ˆ„๋ฝ) ๊ธฐ์กด์— ์„ค์ •๋œ Gitea์˜ ์ ‘์† ์ฃผ์†Œ๊ฐ€ `/git/` ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์—ˆ์œผ๋‚˜, ์„œ๋ฒ„ ์žฌ์„ค์ • ๊ณผ์ •์—์„œ ์ด ๊ฒฝ๋กœ๊ฐ€ ๋น ์ง€๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์—ฐ์‡„์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. - **ํ˜„์ƒ:** Gitea ์›นํ›…(Webhook)์ด ์„œ๋ฒ„์˜ ์ˆ˜์‹ ๊ธฐ(`webhook` ์„œ๋น„์Šค)์— ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์ง€ ๋ชปํ•จ. - **์›์ธ:** Gitea ๋‚ด๋ถ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •๊ณผ ์™ธ๋ถ€ ํ˜ธ์ถœ URL์ด ์ผ์น˜ํ•˜์ง€ ์•Š์•„ 404 ์—๋Ÿฌ ๋˜๋Š” ์—ฐ๊ฒฐ ๊ฑฐ๋ถ€ ๋ฐœ์ƒ. --- ### 2. ์ฃผ์š” ์žฅ์•  ์š”์ธ ๋ฐ ํ•ด๊ฒฐ ๊ณผ์ • #### ๐Ÿ“‚ [Level 1] ์„œ๋น„์Šค ์‹คํ–‰ ์‹คํŒจ (ConditionPathExists) - **์—๋Ÿฌ:** `webhook.service was skipped because of an unmet condition check`. - **์›์ธ:** ๊ธฐ๋ณธ ์„ค์น˜๋œ `webhook` ์„œ๋น„์Šค๊ฐ€ `/etc/webhook.conf` ํŒŒ์ผ์ด ์žˆ์–ด์•ผ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ์„ค์ •๋จ. - **ํ•ด๊ฒฐ:** ์„œ๋น„์Šค ํŒŒ์ผ(`systemd`)์„ ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๋‹น ์กฐ๊ฑด์„ ์‚ญ์ œํ•˜๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๋งŒ๋“  `hooks.json`์„ ๋ฐ”๋ผ๋ณด๋„๋ก ์„ค์ •ํ•จ. #### ๐Ÿ”‘ [Level 2] ์ธ์ฆ ์—๋Ÿฌ (no source for value retrieval) - **์—๋Ÿฌ:** `500 | error evaluating hook: no source for value retrieval`. - **์›์ธ:** `hooks.json`์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ(Secret) ๊ฒ€์‚ฌ ๋กœ์ง์ด ์žˆ๋Š”๋ฐ, Gitea ์›นํ›… ์„ค์ •์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ํ—ค๋” ์ด๋ฆ„์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Œ. - **ํ•ด๊ฒฐ:** ๋ณด์•ˆ์„ ์œ„ํ•ด Gitea์™€ ์„œ๋ฒ„ ์–‘์ชฝ์— ๋™์ผํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด `trigger-rule`์„ ์‚ญ์ œํ•˜์—ฌ ๋ฌธํ„ฑ์„ ๋‚ฎ์ถค. #### ๐Ÿš€ [Level 3] ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ ๋ฌธ์ œ (npx & node) - **์—๋Ÿฌ:** `npx: command not found` ๋˜๋Š” `node: No such file or directory`. - **์›์ธ:** `systemd` ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜(`PATH`)๋ฅผ ์ฝ์ง€ ๋ชปํ•ด NVM์— ์„ค์น˜๋œ Node.js๋ฅผ ์ฐพ์ง€ ๋ชปํ•จ. - **ํ•ด๊ฒฐ:** `deploy.sh` ์ƒ๋‹จ์— Node.js ์‹คํ–‰ ํŒŒ์ผ์ด ์žˆ๋Š” **์ ˆ๋Œ€ ๊ฒฝ๋กœ**๋ฅผ `export PATH`๋กœ ์ง์ ‘ ์ฃผ์ž…ํ•จ. #### ๐Ÿ“‰ [Level 4] ์ž์› ๋ถ€์กฑ ๋ฐ ์„œ๋ฒ„ ๊ฒฝ์ง (kswapd0) - **ํ˜„์ƒ:** ๋นŒ๋“œ ์‹œ์ž‘ ์‹œ ์„œ๋ฒ„๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋А๋ ค์ง€๋ฉฐ ์ ‘์†์ด ๋Š๊น€. - **์›์ธ:** Quartz ๋นŒ๋“œ๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, 512MB~1GB ์ˆ˜์ค€์˜ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ธํ•ด ์Šค์™‘(Swap) ํ˜„์ƒ์ด ์‹ฌํ™”๋จ. - **ํ•ด๊ฒฐ:** 1. **Swap ํ™•์žฅ:** ๊ธฐ์กด ์Šค์™‘ ํŒŒ์ผ์„ **2GB**๋กœ ๋Œ€ํญ ํ™•์žฅํ•˜์—ฌ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์— ๋Œ€๋น„ํ•จ. 2. **์šฐ์„ ์ˆœ์œ„ ์กฐ์ •:** ๋นŒ๋“œ ๋ช…๋ น์–ด ์•ž์— **`nice -n 19`**๋ฅผ ๋ถ™์—ฌ ๋‹ค๋ฅธ ์„œ๋น„์Šค(Nginx, Gitea)์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ์ตœ์ ํ™”ํ•จ. --- ### 3. ์ตœ์ข… ์ž๋™ํ™” ์•„ํ‚คํ…์ฒ˜ (The "Tight" Setup) |**๊ตฌ์„ฑ ์š”์†Œ**|**์—ญํ• **|**์ตœ์ ํ™” ํฌ์ธํŠธ**| |---|---|---| |**Gitea**|์†Œ์Šค ๊ด€๋ฆฌ ๋ฐ ํŠธ๋ฆฌ๊ฑฐ|`/git/` ๊ฒฝ๋กœ๋ฅผ ์ œ์™ธํ•œ ํด๋ฆฐ URL ์ ์šฉ| |**Webhook**|์‹ ํ˜ธ ์ˆ˜์‹ ๊ธฐ (Port 29292)|์ „์šฉ ์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ์ž๋™ ์‹œ์ž‘ ์„ค์ •| |**deploy.sh**|๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ|**์ ˆ๋Œ€ ๊ฒฝ๋กœ ์‚ฌ์šฉ**, **๋กœ๊ทธ ํŒŒ์ผ ๊ธฐ๋ก**, **์šฐ์„ ์ˆœ์œ„ ์ตœ์ € ์„ค์ •**| |**Swap File**|๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ (2GB)|`/etc/fstab` ๋“ฑ๋ก์„ ํ†ตํ•œ ์˜๊ตฌ ์ ์šฉ| --- ### ๐Ÿ“ ๊ตํ›ˆ > **๊ฒฝ๋กœ(Path)์™€ ํ™˜๊ฒฝ(Environment)์€ ์–ธ์ œ๋‚˜ ๋ช…์‹œ์ ์ด์–ด์•ผ ํ•œ๋‹ค.** > ๊ณต์งœ ์„œ๋ฒ„์ผ์ˆ˜๋ก ์ˆ˜๋™์œผ๋กœ ์ž์›์„ ๋ฐฐ๋ถ„ํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” **๋นก๋นกํ•œ ์ตœ์ ํ™”**๊ฐ€ ์‹œ์Šคํ…œ์˜ ์ƒ๋ช…์ค„์ด ๋œ๋‹ค.