1. ์ธ์ฆ์ ๊ฐฑ์ ํ๋ผ๋ ๋ฉ์ผ
์ด์ ์๋ฆฌ์ฆ ๊ธ ์ค 17๋ฒ ๊ฒ์๊ธ์์ ์์ผ๋์นด๋ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ฌ์ดํธ์ ์ ์ฉ์ ํ์์ต๋๋ค.
Let's Encrypt ์ธ์ฆ์๋ค์ 90์ผ๋ง๋ค ๊ฐฑ์ ์ ํด์ผ ํ๋๋ฐ์.
์ผ๋ง์ ์์ ๊ฐ์ด ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํ๋ผ๋ ๋ฉ์ผ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋, ์ด์ ๊ฐฑ์ ์ ํด์ผ ๊ฒ ์ง์?
ํ์ง๋ง, 3๊ฐ์๋ง๋ค ๋งค๋ฒ ์๋์ผ๋ก ๊ฐฑ์ ํ๋ ๊ฒ์ ๋๋ฌด ๊ท์ฐฎ๊ธฐ๋ ํ๊ณ ๊น๋นก ์์ ์๋ ์์ผ๋, ์๋์ชฝ์์๋ crontab ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์๋์ผ๋ก ๊ฐฑ์ ๋๋๋ก ํ ๊ฒ์ ๋๋ค.
2. ๊ฐฑ์ ์์ ์ ์ธ์ฆ์ ํ์ธํด ๋ณด๊ธฐ => ํ์ ์์ ์ด ์๋ ์ฐธ๊ณ ์ฉ์.
๊ฐ. ์ธ์ฆ์ ๊ฒ์ฆํด๋ณด๊ธฐ
sudo docker run --rm --name certbot \
-v /etc/letsencrypt:/etc/letsencrypt \
certbot/dns-cloudflare \
certificates
- ์์ ๊ฐ์ด ์ ๋ ฅ์ ํด๋ณด๋ฉด, ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค. ๋นจ๊ฐ ๋ถ๋ถ์ ๋ณด๋ฉด ๋ง๋ฃ๊ฐ 16์ผ์ด ๋จ์ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋. ์ธ์ฆ์ ๋ชจ์ ๊ฐฑ์ ํ๊ธฐ
์๋ ๋ช ๋ น ๋ง์ง๋ง์ '--dry-run'์ ๋ถ์ฌ์ฃผ๋ฉด ์ธ์ฆ์ ๊ฐฑ์ ์ ๊ฐ์ง๋ก ์๋ฎฌ๋ ์ด์ ํด๋ณผ ์ ์์ต๋๋ค.
sudo docker run --rm --name certbot \
-v /root/.secrets/cloudflare.ini:/etc/cloudflare.ini \
-v /etc/letsencrypt:/etc/letsencrypt \
certbot/dns-cloudflare \
renew --dry-run
์์ ๊ฐ์ ๋ช ๋ น์ ์คํํด ๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.(์ค์ ๋ก ๊ฐฑ์ ๋ ๊ฒ์ ์๋๋๋ค.)
3. ์ธ์ฆ์ ์ค์ ๊ฐฑ์ ํ๊ธฐ
๊ฐ. ์๋ ๊ฐฑ์ ๋ฐฉ๋ฒ
1) 3๊ฐ์๋ง๋ค ์๋์ผ๋ก ์ง์ ๊ฐฑ์ ํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ์ ๋ ฅ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ด๋ฏธ ์ ์๋ฎฌ๋ ์ด์ ๊ฒ์ฆ์์ ๋ฌธ์ ์์ด ์ฑ๊ณต์ ํ์๊ธฐ ๋๋ฌธ์, ๋ง์ง๋ง '--dry-run'๋ง ๋นผ์ค ์๋ ๋ช ๋ น์ ์คํํ๋ฉด ๋น์ฐํ ๊ฐฑ์ ์ด ์๋ ๊ฒ์ ๋๋ค.
sudo docker run --rm --name certbot \
-v /root/.secrets/cloudflare.ini:/etc/cloudflare.ini \
-v /etc/letsencrypt:/etc/letsencrypt \
certbot/dns-cloudflare \
renew
2) ์ ๋ช ๋ น์ผ๋ก ๊ฐฑ์ ์ ์ฑ๊ณต์ ํ์๋ค๋ฉด ๋น์ฐํ ์ธ์ฆ์ ํ์ผ์ด ๋ณ๊ฒฝ์ด ๋ ๊ฒ์ด๊ธฐ์, front_nginx ์ปจํ ์ด๋ ์์ nginx๊ฐ ๋ณ๊ฒฝ๋ ์ธ์ฆ์ ํ์ผ์ ๋ค์ ์ฝ๊ธฐ ์ํด ์๋ ๋ช ๋ น์ผ๋ก reload๋ฅผ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
docker exec front_nginx_cname nginx -s reload
3) ์ ๋ฐฉ๋ฒ์ ์๋์ผ๋ก ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ท์ฐฎ์ ์ ์์ต๋๋ค. ๊ทธ๋์, ์๋์์๋ ์ ๊ณผ์ ์ ๋งค๋ฒ ์๋์ผ๋ก ์คํ๋๋๋ก ๋ง๋ค ๊ฒ์ ๋๋ค.
๋. ์๋ ๊ฐฑ์ ์ค์ ๋ฐฉ๋ฒ
1) renew.sh ํ์ผ ์์ฑ (์ํ๋์ด์ผ ํ ๋ช ๋ น์ด๋ค์ ๋ชจ์๋ ํ์ผ)
#!/bin/bash
docker run --rm --name certbot \
-v /root/.secrets/cloudflare.ini:/etc/cloudflare.ini \
-v /etc/letsencrypt:/etc/letsencrypt \
certbot/dns-cloudflare \
renew &&
docker exec front_nginx nginx -s reload
- ์ ๋ช ๋ น์ ๋จผ์ ์ธ์ฆ์๋ฅผ ๊ฐฑ์ ํ์, front_nginx ์ปจํ ์ด๋์ nginx๋ฅผ reloadํ๋ ๊ฒ์ ๋๋ค.
- ์ ๋ช ๋ น ์ค renew ๋ค์์ ์๋ '&&' ๋ผ๋ ๊ธฐํธ๋ ์์ ๋ช ๋ น์ด ์ฑ๊ณต์ ํ ํ์ ๋ค์ ๋ช ๋ น์ ์คํํ๋ผ๋ ์๋ฏธ์ ๋๋ค. ๋ง์ฝ ์์ ๋ช ๋ น์ด ์คํจํ๋ฉด ๋ค์ ๋ช ๋ น์ ์คํ๋์ง ์์ต๋๋ค.
2) renew.sh ํ์ผ์ ์คํ์ด ๊ฐ๋ฅํ๋๋ก ๋ฐ๊พธ์ด ์ฃผ์ด์ผ ํจ.
chmod -R 755 /home/mungkhs/renew.sh
3) crontab ์ค์ => ์ผ์ ์๊ฐ๋ง๋ค ํน์ ์์ ์ ์๋์ ์ผ๋ก ์คํ๋๋๋ก ํ๋ ๊ธฐ๋ฅ
* ์ ๋ ์ธ์ฆ์ ํ์ผ ๊ฐฑ์ ๋ฐ nginx reload ๋ฅผ ์ํด root ๊ณ์ ์์ crontab ์ค์ ์ ํด์ฃผ์์ต๋๋ค.
crontab -l
* ์ ๋ช ๋ น์ ํ์ฌ crontab ๋ด์ฉ์ ๋ณด๋ ๊ฒ์ ๋๋ค. ํ์ฌ ์๋ฌด ์ค์ ์ด ์๋ค์.
crontab -e
* ์ ๋ช ๋ น์ ์ฒ์ ์ ๋ ฅํ๋ฉด ์๋์ ๊ฐ์ ์๋ํฐ ์ ํ ์ฐฝ์ด ๋์ต๋๋ค. ์ ๋ 1๋ฒ nano ์๋ํฐ๋ฅผ ์ ํํ์์ต๋๋ค.
*์๋ํฐ ์ฐฝ์ด ๋์ค๋ฉด ๋งจ ์๋์ ์๋์ฒ๋ผ ๋ช ๋ น์ ์ถ๊ฐํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
30 3 1,15 * * /home/mungkhs/renew.sh >> /home/mungkhs/renew.log 2>&1
<์ ์ฝ๋ ์ค๋ช
>
- ๋งค์ 1์ผ, 15์ผ ์๋ฒฝ 3์ 30๋ถ์ /home/mungkhs/renew.sh ํ์ผ์ด ์คํ๋จ.
- ์คํ ๊ฒฐ๊ณผ ์ถ๋ ฅ ๋ด์ฉ์ด /home/mungkhs/renew.log ํ์ผ์ ๋๊ฐ ๊ธฐ๋ก๋จ.
* ์คํ ์๊ฐ์ ์๋ฒฝ์ผ๋ก ํ ์ด์ ๋ ์ธ์ฆ์ ๊ฐฑ์ ํ nginx๋ฅผ reload ์ํค๊ฒ ๋๋, ํํ์ด์ง ์ ์์๊ฐ ์์ ์๊ฐ์ ํ๋ ๊ฒ์.
* ์คํ ์ฃผ๊ธฐ๋ ๋ณธ์ธ์ด ์ํ๋ ๋๋ก ์ค์ ์ ํ๋ฉด ๋จ. ๋ธ๋ก๊ทธ ๊ธ๋ค์ ๋ณด๋ฉด ๋งค์ผ ๋๋ 1์ฃผ์ผ์ ํ๋ฒ ์์ผ๋ก ์คํ์ ์ํค๋ ๊ฒฝ์ฐ๋ ๋ง์.
* ๋จ, ์ธ์ฆ์ ๊ฐฑ์ ์ฃผ๊ธฐ๊ฐ 3๋ฌ์ด๋ผ๊ณ ํด์ 3๋ฌ์ ํ๋ฒ์ฉ ์คํ์ ์ํฌ ๊ฒฝ์ฐ์๋, ๋ง์ฝ ์ธ์ฆ์ ๊ฐฑ์ ์ ์คํจ๋ฅผ ํ๋ ๊ฒฝ์ฐ์ ๊ฐฑ์ ์๊ธฐ๋ฅผ ๋์น๊ฒ ๋๋ ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
<์๋ถ๋ถ ๋ฐ๋ณต ์ฃผ๊ธฐ ์ค๋ช
> * * * * * => ๋งค์ผ ๋งค์๊ฐ ๋งค๋ถ๋ง๋ค ์คํ๋๋ค๋ ๋ป. ๋ถ ์๊ฐ ์ผ ์ ์์ผ 30 * * * * => ๋งค์ ๋งค์ผ ๋งค์๊ฐ 30๋ถ์ ์คํ 0,20,40 * * * * => ๋งค์ ๋งค์ผ ๋งค์๊ฐ 0,20,40๋ถ์ ์คํ */5 * * * * => ๋งค์ ๋งค์ผ ๋งค์๊ฐ 5๋ถ ๊ฐ๊ฒฉ์ผ๋ก ์คํ */5 1,3 5-6 * * => ๋งค์ 5์ผ~6์ผ ์ฌ์ด์ 1์์ 3์์ 5๋ถ ๊ฐ๊ฒฉ์ผ๋ก ์คํ 0-30/5 * * * * => ๋งค์ ๋งค์ผ ๋งค์๊ฐ 0๋ถ~30๋ถ ์ฌ์ด์๋ง 5๋ถ ๊ฐ๊ฒฉ์ผ๋ก ์คํ 0 */12 * * * => ๋งค์ ๋งค์ผ 12์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก 0๋ถ์๋ง ์คํ * * * * 0 => ์ผ์์ผ์๋ง ๋งค๋ถ๋ง๋ค ์คํ 10 6 * * 0,6 => ํ ,์ผ์์ผ์๋ง 6์ 10๋ถ์ ์คํ * * L * * => ๋งค์ ๋ง์ง๋ง๋ ์๋ง ๋งค๋ถ๋ง๋ค ์คํ * * * * 0L => ๋งค์ ๋ง์ง๋ง ์ผ์์ผ์๋ง ๋งค๋ถ๋ง๋ค ์คํ * * * * 1-5 => ๋งค์ ์ฃผ์ค(์~๊ธ)์๋ง ๋งค๋ถ๋ง๋ค ์คํ * * W * * => ๋งค์ ์ฃผ์ค(์~๊ธ)์๋ง ๋งค๋ถ๋ง๋ค ์คํ * * 1W* * * => ๋งค์ 1์ผ์ด ์ฃผ์ค์ผ๋๋ง ๋งค๋ถ๋ง๋ค ์คํ |
๋ค. ๊ฐฑ์ ๊ฒฐ๊ณผ ๋ก๊ทธ ํ์ธ
cat /home/mungkhs/renew.log
1) ๊ฐฑ์ ์ฑ๊ณต ๋ฉ์ธ์ง
2) ์ crontab ์ค์ ์ ๋งค์ 1, 15์ผ์ ๊ฐฑ์ ์คํ ์ค์ ์ ํ์๊ธฐ ๋๋ฌธ์, ํ๋ฒ ์ฑ๊ณต ํ ๋ค์ ๊ฐฑ์ ์ ๊น์ง 3~4๋ฒ ์ ๋๋ ๊ฐฑ์ ์ด ๋์ง ์์ ๊ฒ์ ๋๋ค. ์ด๋๋ ์๋์ ๊ฐ์ ๋ฉ์ธ์ง๊ฐ ๋ณด์ฌ์ง๋๋ค.
์์ผ๋ก๋ ์ธ์ฆ์ ๊ฐฑ์ ์ด ์๋์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๊ฒฝ์ ์ฐ์ง ์์๋ ๋ฉ๋๋ค.
๐บ๐บ ์์ ํ ๋ชจ๋ ์์ค๋ ์๋ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๐บ๐บ
https://github.com/mmssem/progstudy
GitHub - mmssem/progstudy
Contribute to mmssem/progstudy development by creating an account on GitHub.
github.com
๐บ ๋ชฉ์ฐจ ๐บ(๋ณด์๋ ค๋ฉด ์๋ ๋๋ณด๊ธฐ ๋ฅผ ๋๋ฌ์ฃผ์ธ์.)
1. Docker๋ฅผ ์ฌ๋ํ๊ฒ ๋ ์ด์ (Docker+Nginx_proxy+SSL+Github action)
2. Docker ์ค์น (Docker+Nginx_proxy+SSL+Github action)
3. MobaXterm (Docker+Nginx_proxy+SSL+Github action)
5. ๋ก์ปฌ์ nginx(์น์๋ฒ) ์ค์นํด๋ณด๊ธฐ (Docker+Nginx_proxy+SSL+Github action)
6. ์๋ฒ ์๋ ๋ฐฐํฌ (1) ๋ก์ปฌ => github (Docker+Nginx_proxy+SSL+Github action)
7. ์๋ฒ ์๋ ๋ฐฐํฌ (2) ์๋ฒ์ ์๋ ๋ฐฐํฌ๋ฅผ ์ํ runner ์ค์น
8. ์๋ฒ ์๋ ๋ฐฐํฌ (3) ๋ก์ปฌ ์์ค -> git push -> github -> ์๋ฒ ์๋ ๋ฐฐํฌ ํ์ธ
9. (tip) git Add, Commit, push ํ๋ฒ์ ํ๊ธฐ
10. ์๋ฒ ์๋ ๋ฐฐํฌ (4) ๋ฐฐํฌ์ ์๋ฒ์์ docker-compose.yml ์๋ ์คํ
11. ์๋ฒ์ vnstat ์ค์น (docker-compose.yml ์ด์ฉ)
12. ์๋ฒ์ ๋์ปค ์ค์น์ network ์ค์ ๋ณ๊ฒฝ ์ฌํญ ํ์ธํ๊ธฐ
13. nginx + php + mysql + phpmyadmin ์ค์นํ๊ธฐ
14. Nginx - Reverse Proxy, Load Balancing ๊ธฐ๋ฅ ํ์ฉ
15. ๋ก์ปฌ์์ ์์ดํผ ๋์ ๋๋ฉ์ธ๋ช ์ฌ์ฉํ๊ธฐ(hosts ์์ )
16. https๋ฅผ ์ฐ๊ธฐ ์ํด ๋ก์ปฌ์์ SSL ํ ์คํธ ํ๊ธฐ (with mkcert)
17. ์๋ฒ์ SSL ์ ์ฉํ๊ธฐ (docker + Let's Encrypt + wildcard ์ธ์ฆ์ + Cloudflare)
18. ์์ผ๋์นด๋ ์ธ์ฆ์ ์๋ ๊ฐฑ์ (docker + Let's Encrypt + wildcard ์ธ์ฆ์ + crontab)