Skip to content

Latest commit

ย 

History

History
82 lines (66 loc) ยท 4.88 KB

File metadata and controls

82 lines (66 loc) ยท 4.88 KB

๐Ÿงฑ Inception - Docker ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ์ธํ”„๋ผ ๊ตฌ์ถ• ํ”„๋กœ์ ํŠธ

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
Inception์€ Docker์™€ Docker Compose๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๊ฒฝ๋Ÿ‰ ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ์ง์ ‘ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ์กฐ๊ฑด์—์„œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ์šด์˜ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ํ‚ค์šฐ๊ธฐ ์œ„ํ•ด ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—‚๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Inception/
โ”œโ”€โ”€ Makefile
โ””โ”€โ”€ srcs/
    โ”œโ”€โ”€ .env
    โ”œโ”€โ”€ docker-compose.yml
    โ””โ”€โ”€ requirements/
        โ”œโ”€โ”€ mariadb/
        โ”‚   โ”œโ”€โ”€ conf/
        โ”‚   โ”œโ”€โ”€ Dockerfile
        โ”‚   โ”œโ”€โ”€ .dockerignore
        โ”‚   โ””โ”€โ”€ tools/
        โ”œโ”€โ”€ nginx/
        โ”‚   โ”œโ”€โ”€ conf/
        โ”‚   โ”œโ”€โ”€ Dockerfile
        โ”‚   โ”œโ”€โ”€ .dockerignore
        โ”‚   โ””โ”€โ”€ tools/
        โ””โ”€โ”€ wordpress/
            โ”œโ”€โ”€ Dockerfile
            โ””โ”€โ”€ tools/

๐ŸŽฏ ์ฃผ์š” ๋ชฉํ‘œ

  • Dockerfile ์ž‘์„ฑ ๋ฐ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์ž๋™ํ™”
  • TLS ์ ์šฉ๋œ ์›น ์„œ๋น„์Šค ๊ตฌ์„ฑ (HTTPS 443 ํฌํŠธ)
  • ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ์˜ ์„œ๋น„์Šค ๋ถ„๋ฆฌ ๋ฐ ์—ฐ๋™
  • ๋ณด์•ˆ ์ •์ฑ… ์ค€์ˆ˜ (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋…ธ์ถœ ๊ธˆ์ง€ ๋“ฑ)

โš™๏ธ ๊ธฐ์ˆ  ์Šคํƒ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
Docker ๊ฐ ์„œ๋น„์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜๊ณ  ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ ์ œ๊ณต
Docker Compose ์ „์ฒด ์ธํ”„๋ผ ํ™˜๊ฒฝ์„ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑ ๋ฐ ์ž๋™ํ™”
NGINX HTTPS(SSL/TLS 1.2 or 1.3) ๊ธฐ๋ฐ˜ Reverse Proxy
WordPress + PHP-FPM ๋ธ”๋กœ๊ทธ/์›น์‚ฌ์ดํŠธ ์—”์ง„
MariaDB WordPress์™€ ์—ฐ๋™๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
Volumes ์›น ๋ฐ์ดํ„ฐ ๋ฐ DB ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ ๋ณด์žฅ
Custom Network ์„œ๋น„์Šค ๊ฐ„์˜ ๋‚ด๋ถ€ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ
.env ํŒŒ์ผ ๋ฏผ๊ฐ์ •๋ณด ์™ธ๋ถ€ ์œ ์ถœ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ

๐Ÿ› ๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

  • NGINX๋Š” HTTPS 443 ํฌํŠธ๋งŒ ํ—ˆ์šฉํ•˜๋ฉฐ, ์œ ์ผํ•œ ์ง„์ž…์ ์ž…๋‹ˆ๋‹ค.
  • WordPress๋Š” php-fpm ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, nginx ์—†์ด ๋ณ„๋„ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค.
  • MariaDB๋Š” DB ์ „์šฉ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ตฌ๋™๋˜๋ฉฐ, WordPress DB๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์›น์„œ๋น„์Šค ๋นŒ๋“œ์‹œ ์ฆ‰์‹œ ์‚ฌ์šฉ์ž ๋ฐ ๊ด€๋ฆฌ์ž ๊ณ„์ •์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์„œ๋น„์Šค๋Š” Debian ๊ธฐ๋ฐ˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปค์Šคํ…€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๋Š” crash ์‹œ ์ž๋™ ์žฌ์‹œ์ž‘๋˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • .env ํŒŒ์ผ์„ ํ†ตํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋„๋ฉ”์ธ ๋“ฑ ๋ฏผ๊ฐ ์ •๋ณด๋Š” Git์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ๋ฐฐ์šด ์  (What I Learned)

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋‹จ์ˆœํ•œ Docker ์‹ค์Šต์„ ๋„˜์–ด์„œ, ์‹ค์ œ ์„œ๋น„์Šค ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ์ธํ”„๋ผ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•ด๋ณด๋ฉฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ Docker์˜ ์‹ค์ „ ํ™œ์šฉ๋ฒ•์„ ๊นŠ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šฐ๊ณ  ์ฒด๋“ํ–ˆ์Šต๋‹ˆ๋‹ค:

๐Ÿ”ง 1. Docker ๋ฐ docker-compose ๊ธฐ๋ฐ˜ ์ธํ”„๋ผ ๊ตฌ์„ฑ docker-compose.yml์„ ํ†ตํ•ด Nginx, WordPress, MariaDB๋ฅผ ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ถ„๋ฆฌํ•ด ๊ตฌ์„ฑํ•˜๊ณ , ์„œ๋น„์Šค ๊ฐ„ ์—ฐ๊ฒฐ์„ docker network๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์‹ค์ œ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ์˜ ์ธํ”„๋ผ๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Dockerfile์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ๊ฐ ์„œ๋น„์Šค์˜ ์ด๋ฏธ์ง€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์ˆ˜ํ–‰ํ–ˆ๊ณ , Makefile๋กœ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰์„ ์ž๋™ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”’ 2. HTTPS ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ์„ค์ • TLS 1.2/1.3์„ ์ ์šฉํ•œ Nginx ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ํ†ตํ•ด HTTPS๋กœ๋งŒ ์ ‘์† ๊ฐ€๋Šฅํ•œ ๋ณด์•ˆ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

OpenSSL์„ ์ด์šฉํ•ด ์ž์ฒด ์ธ์ฆ์„œ ์ƒ์„ฑ ๋ฐ Nginx์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ TLS์™€ ์ธ์ฆ์„œ์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’พ 3. ๋ฐ์ดํ„ฐ ์˜์†ํ™” ๋ฐ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ WordPress์˜ ์›น ํŒŒ์ผ๊ณผ MariaDB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ Docker volume์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์˜์†ํ™” ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ์‹œ์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

.env ํŒŒ์ผ์„ ํ†ตํ•ด ๋ฏผ๊ฐํ•œ ์ •๋ณด(๋น„๋ฐ€๋ฒˆํ˜ธ, ๋„๋ฉ”์ธ ๋“ฑ)๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๊ณ , git์—์„œ ignore ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ณด์•ˆ ๊ด€์ ์˜ ํ”„๋กœ์ ํŠธ ์„ค๊ณ„ ๊ฒฝํ—˜์„ ์Œ“์•˜์Šต๋‹ˆ๋‹ค.

๐Ÿ”„ 4. ์ปจํ…Œ์ด๋„ˆ ์šด์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด restart: always ์˜ต์…˜์„ ์ ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ถฉ๋Œ์ด๋‚˜ ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ… ์ดํ›„์—๋„ ์ž๋™์œผ๋กœ ๋ณต๊ตฌ๋˜๋„๋ก ์„ค์ •ํ•˜์˜€๊ณ ,

PID 1 ๋ฐ ๋ฐ๋ชฌ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ , tail -f, sleep infinity ๊ฐ™์€ ๋น„๊ถŒ์žฅ ๋ฐฉ์‹ ์—†์ด ์„œ๋น„์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿง  5. ์šด์˜ ํ™˜๊ฒฝ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฝํ—˜ mylogin.42.fr ํ˜•ํƒœ์˜ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ๊ณผ hosts ํŒŒ์ผ ์„ค์ •์„ ํ†ตํ•ด ๊ฐ€์ƒ ์šด์˜ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ, ๋„๋ฉ”์ธ, IP ๋งคํ•‘, ํฌํŠธํฌ์›Œ๋”ฉ, ์„œ๋ฒ„ ๋ณด์•ˆ์— ๋Œ€ํ•œ ์‹ค์ œ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ์‹ค์Šต์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๋Ÿ‰ํ™” ์ด๋ฏธ์ง€๋กœ๋Š” Debian์„ ์„ ํƒํ•˜์—ฌ ์„œ๋น„์Šค ์•ˆ์ •์„ฑ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๋ฐฉ์‹์˜ ์šด์˜ ์„ ํƒ ๊ธฐ์ค€์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.