--- id: "gitea, qurtz ์„ค์น˜ 20260331" created: "2026-03-31 10:41" tags: --- # ๐ŸŒ ๊ฐœ์ธ ์„œ๋ฒ„(GCP) ๊ธฐ๋ฐ˜ Gitea & HTTPS ๊ตฌ์ถ• ๊ฐ€์ด๋“œ ๋ณธ ๋ฌธ์„œ๋Š” Ubuntu 25.xx ํ™˜๊ฒฝ์—์„œ ๊ฐ€๋ฒผ์šด Git ์„œ๋น„์Šค์ธ **Gitea**๋ฅผ ์„ค์น˜ํ•˜๊ณ , **Nginx**์™€ **DuckDNS**๋ฅผ ์ด์šฉํ•ด **HTTPS** ๋ณด์•ˆ ์ ‘์†์„ ๊ตฌํ˜„ํ•œ ๊ณผ์ •์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ## 1. ์„œ๋ฒ„ ๊ธฐ๋ณธ ํ™˜๊ฒฝ ๋ฐ Gitea ์„ค์น˜ ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ๋ฐ”์ด๋„ˆ๋ฆฌ ์‹คํ–‰ ๋ฐฉ์‹์œผ๋กœ Gitea๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ „์šฉ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. - **OS:** Ubuntu 25.xx (GCP Instance) - **์‚ฌ์šฉ์ž ์ƒ์„ฑ:** `git` ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž ์ƒ์„ฑ (`/home/git`) - **DB:** SQLite3 (๊ฒฝ๋Ÿ‰ํ™”๋ฅผ ์œ„ํ•ด ์„ ํƒ) - **๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒฝ๋กœ:** `/usr/local/bin/gitea` - **๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ:** `/var/lib/gitea` --- ## 2. ๋„๋ฉ”์ธ ๋ฐ ๋„คํŠธ์›Œํฌ ์„ค์ • ์™ธ๋ถ€ ์ ‘์†์„ ์œ„ํ•ด ๋ฌด๋ฃŒ DDNS ์ฃผ์†Œ๋ฅผ ํ™•๋ณดํ•˜๊ณ  ํด๋ผ์šฐ๋“œ ๋ฐฉํ™”๋ฒฝ์„ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. - **๋„๋ฉ”์ธ:** `white-smith.duckdns.org` (GCP ์™ธ๋ถ€ IP ์—ฐ๊ฒฐ ์™„๋ฃŒ) - **ํฌํŠธ ๊ฐœ๋ฐฉ (GCP & UFW):** - `22/tcp`: SSH ์ ‘์† (PuTTY, SFTP) - `80/tcp`: HTTP (์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๋ฐ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์šฉ) - `443/tcp`: HTTPS (์‹ค์ œ ์„œ๋น„์Šค์šฉ) - **๋ณด์•ˆ ์กฐ์น˜:** ๋ถˆํ•„์š”ํ•œ ํฌํŠธ(20, 21, 3389 ๋“ฑ) ์ฐจ๋‹จ ๋ฐ Gitea ์ง์ ‘ ํฌํŠธ(3000)๋Š” Nginx๋ฅผ ๊ฑฐ์น˜๋„๋ก ์™ธ๋ถ€ ์ฐจ๋‹จ ๊ถŒ์žฅ. --- ## 3. HTTPS & Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ Nginx๋ฅผ ์•ž๋‹จ์— ์„ธ์›Œ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ์ ‘์†์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ### SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ `Certbot`์„ ์ด์šฉํ•ด **Let's Encrypt** ๋ฌด๋ฃŒ SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. Bash ``` sudo certbot --nginx -d white-smith.duckdns.org ``` ### Nginx ์ตœ์ข… ์„ค์ • (`/etc/nginx/sites-available/gitea`) IP ์ ‘์† ์‹œ ๋„๋ฉ”์ธ์œผ๋กœ ์ž๋™ ์ „ํ™˜๋˜๋„๋ก ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Nginx ``` # 1. HTTP -> HTTPS ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (IP ํฌํ•จ) server { listen 80; server_name 34.19.79.94 white-smith.duckdns.org; return 301 https://white-smith.duckdns.org$request_uri; } # 2. HTTPS ์„œ๋น„์Šค ๋ธ”๋ก server { listen 443 ssl; server_name white-smith.duckdns.org; # SSL ์ธ์ฆ์„œ ๊ฒฝ๋กœ (Certbot ๊ด€๋ฆฌ) ssl_certificate /etc/letsencrypt/live/white-smith.duckdns.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/white-smith.duckdns.org/privkey.pem; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` --- ## 4. Gitea ๋‚ด๋ถ€ ์„ค์ • ์—…๋ฐ์ดํŠธ HTTPS ํ™˜๊ฒฝ์— ๋งž์ถฐ `/etc/gitea/app.ini` ํŒŒ์ผ์„ `vi`๋กœ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. - **ROOT_URL:** `https://white-smith.duckdns.org/` - **DOMAIN:** `white-smith.duckdns.org` - **SSH_DOMAIN:** `white-smith.duckdns.org` --- ## 5. ํ˜„์žฌ ์ƒํƒœ ์š”์•ฝ 1. **HTTPS ์ ‘์†:** `https://white-smith.duckdns.org`๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘์† ๊ฐ€๋Šฅ. 2. **IP ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ:** `34.19.79.94` ์ž…๋ ฅ ์‹œ ์ž๋™์œผ๋กœ ๋„๋ฉ”์ธ ์ฃผ์†Œ๋กœ ์ „ํ™˜๋จ. 3. **ํŒŒ์ผ ์ „์†ก:** ํฌํŠธ 22๋ฒˆ์„ ํ†ตํ•ด SFTP ๋ฐฉ์‹์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ํŒŒ์ผ ๊ด€๋ฆฌ ์ค‘. # ๐Ÿš€ Gitea & Quartz ๋„๋ฉ”์ธ ํ†ตํ•ฉ ๋ฐ ์„œ๋ฒ„ ์„ค์ • ๊ฐ€์ด๋“œ ๋ณธ ๊ฐ€์ด๋“œ๋Š” ๋‹จ์ผ ๋ฉ”์ธ ๋„๋ฉ”์ธ(`white-smith.duckdns.org`)์—์„œ **Quartz(๋ธ”๋กœ๊ทธ)**์™€ **Gitea(Git ์„œ๋น„์Šค)**๋ฅผ ์ถฉ๋Œ ์—†์ด ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. --- ## 1. ์„œ๋น„์Šค ์ฃผ์†Œ ์„ค๊ณ„ ๋™์ผ ๋„๋ฉ”์ธ ์ ์œ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **ํ•˜์œ„ ๊ฒฝ๋กœ(Path)** ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. - **Quartz (๋ฉ”์ธ ๋ธ”๋กœ๊ทธ):** `https://white-smith.duckdns.org/` - **Gitea (์ฝ”๋“œ ์ €์žฅ์†Œ):** `https://white-smith.duckdns.org/git/` --- ## 2. Gitea ์„ค์ • ์ˆ˜์ • (`app.ini`) Gitea๊ฐ€ `/git/` ๊ฒฝ๋กœ๋ฅผ ์ธ์‹ํ•˜๋„๋ก ๋‚ด๋ถ€ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - **ํŒŒ์ผ ์œ„์น˜:** `/var/lib/gitea/custom/conf/app.ini` (๋˜๋Š” ์„ค์น˜ ๊ฒฝ๋กœ ๋‚ด `custom/conf/app.ini`) - **์ˆ˜์ • ๋‚ด์šฉ:** Ini, TOML ``` [server] ROOT_URL = https://white-smith.duckdns.org/git/ LOCAL_ROOT_URL = http://127.0.0.1:3000/ HTTP_ADDR = 127.0.0.1 HTTP_PORT = 3000 ``` > **Tip:** `LOCAL_ROOT_URL`์„ ์ถ”๊ฐ€ํ•ด์•ผ ๋‚ด๋ถ€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์‹œ 404 ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --- ## 3. Nginx ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ์„ค์ • `/etc/nginx/sites-available/gitea` ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์—ฌ ๋‘ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. Nginx ``` server { listen 80; server_name 34.19.79.94 white-smith.duckdns.org; return 301 https://white-smith.duckdns.org$request_uri; } server { listen 443 ssl; server_name white-smith.duckdns.org; ssl_certificate /etc/letsencrypt/live/white-smith.duckdns.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/white-smith.duckdns.org/privkey.pem; # [์šฐ์„ ์ˆœ์œ„ 1] Gitea ์„ค์ • location /git/ { proxy_pass http://127.0.0.1:3000/; # ๋์— '/' ํ•„์ˆ˜ proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # [์šฐ์„ ์ˆœ์œ„ 2] Quartz ์„ค์ • (๋ฉ”์ธ) location / { proxy_pass http://127.0.0.1:8080; # Quartz ์‹คํ–‰ ํฌํŠธ proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` --- ## 4. ๊ถŒํ•œ ๊ด€๋ฆฌ ๋ฐ ์ ‘๊ทผ (etc ๊ฒฝ๋กœ) ์‹œ์Šคํ…œ ์„ค์ • ํŒŒ์ผ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒํ•œ์„ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. 1. **๊ถŒํ•œ ๋ณ€๊ฒฝ (์ถ”์ฒœ):** Bash ``` sudo chown -R root:$(whoami) /etc/nginx sudo chmod -R 775 /etc/nginx ``` 2. **ํฌํŠธ ํ™•์ธ ๋ช…๋ น์–ด:** Bash ``` sudo ss -tulpn | grep node # Quartz ํฌํŠธ ํ™•์ธ ``` 3. **์„œ๋น„์Šค ์žฌ์‹œ์ž‘:** Bash ``` sudo nginx -t && sudo systemctl restart nginx sudo systemctl restart gitea ``` --- ## 5. ํ•ต์‹ฌ ์ฃผ์˜์‚ฌํ•ญ - **Nginx ๊ฒฝ๋กœ ์Šฌ๋ž˜์‹œ:** `proxy_pass http://127.0.0.1:3000/;` ์ฒ˜๋Ÿผ ๋์— `/`๊ฐ€ ์žˆ์–ด์•ผ `/git/` ๊ฒฝ๋กœ๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. - **Quartz ์‹คํ–‰:** Quartz๋ฅผ `npx quartz build --serve`๋กœ ๋„์šด ๊ฒฝ์šฐ ํ•ด๋‹น ํฌํŠธ(๋ณดํ†ต 8080)๊ฐ€ Nginx ์„ค์ •๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. - **๋ณด์•ˆ:** `/etc` ์ „์ฒด ๊ถŒํ•œ์„ `777`๋กœ ๋ฐ”๊พธ์ง€ ๋งˆ์„ธ์š”. ํ•„์š”ํ•œ ํด๋”๋งŒ ๊ทธ๋ฃน ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.