216.73.216.25 TODAY : 8,415

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

 > 

PHP - ๊ณ ๊ธ‰

๐Ÿ“š PHP ๊ณ ๊ธ‰ - 8์ฃผ์ฐจ: ๋ฐฐํฌ ๋ฐ ์šด์˜ ๊ธฐ์ดˆ (Linux ์„œ๋ฒ„) - 02 Git์„ ์ด์šฉํ•œ ์ฝ”๋“œ ๋ฐฐํฌ

๐Ÿ“š PHP ๊ณ ๊ธ‰ - 8์ฃผ์ฐจ: ๋ฐฐํฌ ๋ฐ ์šด์˜ ๊ธฐ์ดˆ (Linux ์„œ๋ฒ„) - 02 Git์„ ์ด์šฉํ•œ ์ฝ”๋“œ ๋ฐฐํฌ

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

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

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

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

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

  • ์ œ์ž‘์‚ฌ: LUZENSOFT
  • ๋“ฑ๋ก์ผ: 2025-09-28 13:34:00
  •  

- ์„ค๋ช…

์™œ Git์„ ์‚ฌ์šฉํ•ด ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

uploadImage

๊ณผ๊ฑฐ์—๋Š” #FTP(File Transfer Protocol)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ์—์„œ ์„œ๋ฒ„๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ์‹์ด ํ”ํ–ˆ์ง€๋งŒ, ์ด๋Š” #์˜ค๋ฅ˜_๋ฐœ์ƒ_๊ฐ€๋Šฅ์„ฑ ์ด ๋†’๊ณ  #๋กค๋ฐฑ(Rollback) ์ด ์–ด๋ ต๋‹ค๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„๋Œ€์˜ #PHP_๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” Git์„ ์ด์šฉํ•œ ๋ฐฐํฌ๊ฐ€ #ํ‘œ์ค€ ์œผ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค. Git์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋ฒ„์ „๋ณ„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ์•ˆ์ •์„ฑ๊ณผ ์ž๋™ํ™”๊ฐ€ ๋Œ€ํญ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๐Ÿš€



1. ๊ธฐ๋ณธ ๋ฐฐํฌ ์ „๋žต: Pull ๋ฐฉ์‹

uploadImage

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ Git ๊ธฐ๋ฐ˜ ๋ฐฐํฌ ๋ฐฉ์‹์€ ์„œ๋ฒ„์—์„œ ์ง์ ‘ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ค๋Š”(Pull) ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.


๋‹จ๊ณ„๋ณ„ ์„ค์ •



1. ์„œ๋ฒ„์— Git ์„ค์น˜


๋Œ€๋ถ€๋ถ„์˜ Linux ์„œ๋ฒ„์—๋Š” Git์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€๋งŒ, ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Bash

# Ubuntu/Debian
sudo apt update
sudo apt install git

# CentOS/RHEL
sudo yum install git


2. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ ์„ค์ •


์›น ์„œ๋ฒ„๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด ์‹คํ–‰ํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ(์˜ˆ: /var/www/html/my-project)๋กœ ์ด๋™ํ•˜์—ฌ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

Bash

cd /var/www/html
sudo git clone [Git_Repository_URL] my-project


3. ์ฝ”๋“œ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฐฐํฌ


๊ฐœ๋ฐœ์ž๊ฐ€ ์›๊ฒฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(์˜ˆ: GitHub, GitLab)์— ์ฝ”๋“œ๋ฅผ #Push ํ•œ ํ›„, ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ git pull ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Bash

cd /var/www/html/my-project
git pull origin main

  • ์žฅ์ : ์„ค์ •์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ : ๋งค๋ฒˆ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์™„๋ฒฝํ•œ ์ž๋™ํ™”๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.



2. ์ž๋™ํ™”๋œ ๋ฐฐํฌ ์ „๋žต: Git Webhook ํ™œ์šฉ

uploadImage

๋ฐฐํฌ ์ž๋™ํ™”์˜ ํ•ต์‹ฌ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์›๊ฒฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— Push ํ•˜์ž๋งˆ์ž ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ž๋™์œผ๋กœ git pull์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด #Webhook์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


1. Webhook ์„ค์ •


Git ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค(GitHub, GitLab ๋“ฑ)์˜ ์„ค์ • ํŽ˜์ด์ง€์—์„œ Webhook์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • Payload URL: ๋ฐฐํฌ๋ฅผ ์‹คํ–‰ํ•  ์„œ๋ฒ„์˜ ํŠน์ • URL(์˜ˆ: http://my-project.com/deploy.php)์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • Secret: ๋ณด์•ˆ์„ ์œ„ํ•ด ๋น„๋ฐ€ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.


2. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ (deploy.php)


์ง€์ •๋œ Payload URL์—์„œ ์‹คํ–‰๋  PHP ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” Webhook ์š”์ฒญ์ด ์˜ฌ๋ฐ”๋ฅธ ๋น„๋ฐ€ ํ‚ค์™€ ํ•จ๊ป˜ ์ „์†ก๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„, Shell ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹ค์ œ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

PHP

<?php
// ๋ณด์•ˆ ๊ฒ€์ฆ (Secret ํ‚ค ํ™•์ธ ๋กœ์ง)
// ...

// ๋ฐฐํฌ ์‹คํ–‰ (Shell ๋ช…๋ น์„ ํ†ตํ•ด git pull ์‹คํ–‰)
$output = shell_exec('cd /var/www/html/my-project && git pull origin main 2>&1');

// ๋กœ๊ทธ ๊ธฐ๋ก
file_put_contents('deployment.log', date('Y-m-d H:i:s') . "n" . $output . "n", FILE_APPEND);
?>


3. ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์„ค์ •


์›น ์„œ๋ฒ„(Nginx/Apache)๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž(์ผ๋ฐ˜์ ์œผ๋กœ www-data ๋˜๋Š” nginx)๊ฐ€ git pull ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • www-data ์‚ฌ์šฉ์ž์—๊ฒŒ Git ๋ช…๋ น์–ด ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ , Git ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์žฅ์ : ๊ฐœ๋ฐœ์ž๊ฐ€ Push๋งŒ ํ•˜๋ฉด ๋ฐฐํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ๋ฐฐํฌ ์†๋„์™€ ์•ˆ์ •์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ : ์ดˆ๊ธฐ ์„ค์ • ์‹œ Webhook ๋ณด์•ˆ ์ฒ˜๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์„ค์ •์ด ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



3. ๋ฐฐํฌ ์ž๋™ํ™” ์‹ฌํ™”: Capistrano ๋˜๋Š” Deployer


๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, git pull ๋ฐฉ์‹๋งŒ์œผ๋กœ๋Š” #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค_๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, #์บ์‹œ_์‚ญ์ œ, #์‹ฌ๋ณผ๋ฆญ_๋งํฌ_๊ต์ฒด ๋“ฑ ๋ณต์žกํ•œ #๋ฐฐํฌ_๋‹จ๊ณ„๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด๋•Œ๋Š” PHP ๊ธฐ๋ฐ˜์˜ Deployer๋‚˜ Ruby ๊ธฐ๋ฐ˜์˜ Capistrano ๊ฐ™์€ ์ „๋ฌธ #๋ฐฐํฌ_๋„๊ตฌ ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ๋„๊ตฌ๋“ค์€ ์„œ๋ฒ„์— ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ , ์ƒˆ ๋ฒ„์ „์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด์ „ ๋ฒ„์ „์œผ๋กœ ์ฆ‰์‹œ #์›์ž์ _๋ฐฐํฌ(Atomic Deployment) ๋ฐ ๋กค๋ฐฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.



๋งˆ์น˜๋ฉฐ


Git์„ ์ด์šฉํ•œ ์ฝ”๋“œ ๋ฐฐํฌ๋Š” ํ˜„๋Œ€์ ์ธ ์›น ์šด์˜์˜ ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ์ˆ˜๋™ git pull๋กœ ์‹œ์ž‘ํ•˜๋”๋ผ๋„, ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ Webhook ๋˜๋Š” ์ „๋ฌธ ๋ฐฐํฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ์ „๋žต์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” Nginx์™€ PHP-FPM์„ ์„ค์ •ํ•˜์—ฌ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€



๋ฌด๋ฃŒ์ฒดํ—˜, ๋Š๊น€์—†์ด ๋น ๋ฅธVPN VPN, ๊ตญ๋‚ด ๋‹ค๋Ÿ‰IP, ๋ชจ๋ฐ”์ผ๊ฐ€๋Šฅ, ๋ณธ์‚ฌ ํ’ˆ์งˆ๊ด€๋ฆฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ์„ฑ ๋†’์€ VPN ์„œ๋น„์Šค

https://vpn.luzensoft.com