216.73.216.25 TODAY : 2,896
์ž๋ฃŒ์‹ค ์„œ๋ธŒ ํƒ€์ดํ‹€ ์•„์ด์ฝ˜

์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ตœ์ƒ๊ธ‰

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 3์ฃผ์ฐจ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  (Docker) ํ™œ์šฉ- 04 PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„์ปค๋ผ์ด์ง•

๐Ÿ“š PHP ์ตœ์ƒ๊ธ‰ - 3์ฃผ์ฐจ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  (Docker) ํ™œ์šฉ- 04 PHP ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋„์ปค๋ผ์ด์ง•

์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ ์ŠคํŽ™

  • ํ‰์ : 10.0
  • ๋ผ์ด์„ ์Šค: free
  • ์šด์˜์ฒด์ œ:
  • ํŒŒ์ผ ํฌ๊ธฐ: 0

ํ”ผ๋“œ๋ฐฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ

  • ์‚ฌ์šฉ์ž ํ‰์ : 10.0
  • ๋‹ค์šด๋กœ๋“œ ์ˆ˜: 1
  • ์กฐํšŒ์ˆ˜: 19

์ œ์กฐ์‚ฌ ๋ฐ ๋“ฑ๋ก ์ •๋ณด

  • ์ œ์ž‘์‚ฌ: LUZENSOFT
  • ๋“ฑ๋ก์ผ: 2025-10-12 14:25:44
  •  

- ์„ค๋ช…

#๋„์ปค๋ผ์ด์ง•(Dockerizing)์˜ ์ดํ•ด์™€ ํ•„์š”์„ฑ

uploadImage


์ง€๋‚œ ์„ธ ๋ฒˆ์˜ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” #Docker ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…, #Dockerfile ์ž‘์„ฑ, ๊ทธ๋ฆฌ๊ณ  #DockerCompose ๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋ชจ๋“  ์ง€์‹์„ ํ†ตํ•ฉํ•˜์—ฌ ์‹ค์ œ #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •, ์ฆ‰ #๋„์ปค๋ผ์ด์ง•์„ ์‹ค์Šตํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

#๋„์ปค๋ผ์ด์ง• ์˜ ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ํŒจํ‚ค์ง€(#Docker์ด๋ฏธ์ง€)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” "๋‚ด ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž˜ ๋˜๋Š”๋ฐ..."๋ผ๋Š” ๊ฐœ๋ฐœ์ž์˜ ์•…๋ชฝ์„ ์˜์›ํžˆ ์—†์• ์ค๋‹ˆ๋‹ค. #์ปจํ…Œ์ด๋„ˆํ™” ๋œ ํ™˜๊ฒฝ์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋‚˜ ์ง€์†์  ํ†ตํ•ฉ/๋ฐฐํฌ(CI/CD) ํ™˜๊ฒฝ์˜ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.



1๋‹จ๊ณ„: ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๋ฐ #Dockerfile ์ตœ์ ํ™”

uploadImage


๊ฐ€์žฅ ๋จผ์ €, #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ •์˜ํ•˜๋Š” #Dockerfile ์„ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


1. ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ์„ ํƒ


์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•„์š”์— ๋”ฐ๋ผ ์ ์ ˆํ•œ #PHP์ด๋ฏธ์ง€ ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ๊ณผ ์šฉ๋Ÿ‰์„ ๊ณ ๋ คํ•˜์—ฌ Alpine ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

Dockerfile

# ๊ฒฝ๋Ÿ‰ ๋ฆฌ๋ˆ…์Šค Alpine ๊ธฐ๋ฐ˜ PHP FPM ์ด๋ฏธ์ง€ ์‚ฌ์šฉ
FROM php:8.3-fpm-alpine


2. ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •


๋ณด์•ˆ์„ ์œ„ํ•ด root๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž(UID/GID)๋ฅผ ์„ค์ •ํ•˜๊ณ , #WORKDIR ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

Dockerfile

# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /var/www/html

# ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์„ค์ •
# RUN addgroup -g 1000 app && adduser -u 1000 -G app -D app
# USER app


3. ํ™•์žฅ ๋ฐ ์˜์กด์„ฑ ์„ค์น˜


์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”๊ตฌํ•˜๋Š” ๋ชจ๋“  #PHPํ™•์žฅ(PDO, GD, Redis ๋“ฑ)๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ(Composer)๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

Dockerfile

# PHP ํ™•์žฅ ์„ค์น˜ ๋ฐ ์‚ญ์ œ
RUN apk add --no-cache libzip-dev
RUN docker-php-ext-install pdo pdo_mysql zip

# Composer ์„ค์น˜ (Docker multi-stage build ์‚ฌ์šฉ ๊ถŒ์žฅ)
COPY --from=composer:latest /usr/local/bin/composer /usr/local/bin/composer



2๋‹จ๊ณ„: #DockerCompose ๋ฅผ ์‚ฌ์šฉํ•œ ์„œ๋น„์Šค ์ •์˜ (Web + DB)

uploadImage


๋Œ€๋ถ€๋ถ„์˜ #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์€ ์ตœ์†Œํ•œ ์›น ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๊ฐ•์˜์—์„œ ๋‹ค๋ค˜๋˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ Nginx, PHP-FPM, MySQL 3๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•˜๋Š” #DockerCompose ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.


1. ๋„คํŠธ์›Œํฌ ๋ฐ ๋ณผ๋ฅจ ์ •์˜


์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ๊ณผ ์˜๊ตฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ์™€ ๋ณผ๋ฅจ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

YAML

version: '3.8'

services:
  # ... (์„œ๋น„์Šค ์ •์˜ ์ƒ๋žต)

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜๊ตฌ ์ €์žฅ์„ ์œ„ํ•œ ๋ณผ๋ฅจ
volumes:
  db_data:

# ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ
networks:
  app_net:
    driver: bridge


2. Nginx ์„ค์ • ํŒŒ์ผ ์—ฐ๊ฒฐ


Nginx ์ปจํ…Œ์ด๋„ˆ๊ฐ€ #PHP-FPM ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ • ํŒŒ์ผ์„ ๋งคํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ • ํŒŒ์ผ์—๋Š” fastcgi_pass php-fpm:9000;์™€ ๊ฐ™์€ ์ง€์‹œ๋ฌธ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ php-fpm์€ #DockerCompose ์„œ๋น„์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

YAML

  web:
    image: nginx:stable-alpine
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf # ์„ค์ • ํŒŒ์ผ ๋งคํ•‘
    networks:
      - app_net
    # ...


3. ์ฝ”๋“œ์™€ ํ™˜๊ฒฝ ์„ค์ • ๋งˆ์šดํŠธ


๊ฐœ๋ฐœ ์ค‘์—๋Š” ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๋„๋ก, ๋กœ์ปฌ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ #WORKDIR ๋กœ ๋ณผ๋ฅจ ๋งˆ์šดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

YAML

  php-fpm:
    build: .
    volumes:
      - .:/var/www/html # ๋กœ์ปฌ ์ฝ”๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ ์ฝ”๋“œ ๋™๊ธฐํ™”
    networks:
      - app_net
    # ...



3๋‹จ๊ณ„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ฐ ํ…Œ์ŠคํŠธ

uploadImage


#Dockerfile ๊ณผ #DockerCompose ํŒŒ์ผ ์ž‘์„ฑ์„ ์™„๋ฃŒํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์ตœ์ข… ์‹คํ–‰ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.


1. ๋ชจ๋“  ์„œ๋น„์Šค ์‹คํ–‰


ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Bash

docker-compose up -d

์ด ๋ช…๋ น์–ด๋Š” ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด ์›น ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.


2. ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ


Bash

docker-compose ps

๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ Up ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ํ˜ธ์ŠคํŠธ ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost (๋˜๋Š” Nginx๊ฐ€ ๋งคํ•‘ํ•œ ํฌํŠธ)๋กœ ์ ‘์†ํ•˜์—ฌ #PHP์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฒฐ๋ก 



#๋„์ปค๋ผ์ด์ง• ์€ ํ˜„๋Œ€์ ์ธ #PHP๊ฐœ๋ฐœ ์˜ ํ•„์ˆ˜ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. #Dockerfile ์„ ํ†ตํ•œ ์ •๋ฐ€ํ•œ ํ™˜๊ฒฝ ์ •์˜์™€ #DockerCompose ๋ฅผ ํ†ตํ•œ ์œ ๊ธฐ์ ์ธ ์„œ๋น„์Šค ๊ด€๋ฆฌ๋Š” ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ์—ฌ๋Ÿฌ๋ถ„์€ ๋ณต์žกํ•œ ๋‹ค์ค‘ ์„œ๋น„์Šค ํ™˜๊ฒฝ๋„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ๊ธ‰ ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ ์„ ์Šต๋“ํ–ˆ์Šต๋‹ˆ๋‹ค.




๊ณ ํ’ˆ์งˆ ์ฐฉํ•œ๊ฐ€๊ฒฉ ํ†ต์‹ ์‚ฌIP ๊ณ ์ •IP ์•ˆ์ „ํ•œVPN ์ดˆ๊ณ ์†VPN / ๊ฒŒ์ž„,๊ด‘๊ณ ,์šฐํšŒ์šฉ

uploadImage

https://vpn.luzensoft.com