
๊ฐ์ ๋จธ์ (VM)์ ์์ฑํ์ฌ OS, ์น ์๋ฒ, DB, ์๋ํ๋ ์ค๋ฅผ ์ง์ ์ค์นํ๋ ๊ณผ์ ์ ๋๋ค.
1. ๋ฆฌ์์ค ๊ทธ๋ฃน ๋ง๋ค๊ธฐ:
+ ๋ฆฌ์์ค ๋ง๋ค๊ธฐ ํด๋ฆญ.student_wordpress_rg).

2. ๊ฐ์ ๋จธ์ (VM) ์์ฑ ์ค์ :
Virtual Machine ๋๋ ๊ฐ์ ๋จธ์ ๊ฒ์.Standard_D2s_v3 (2 vcpu, 8 GiB ๋ฉ๋ชจ๋ฆฌ) ๊ถ์ฅ (ํ ๋น๋ ์ด๊ณผ ์ ๋ณ๊ฒฝ).

3. ๋ณด์ ๋ฐ ๋คํธ์ํฌ ์ค์ (์ค์):
22 (SSH ์ ์)80 (HTTP ์น)443 (HTTPS ๋ณด์ ์น)
4. ํค ์ ์์ฑ ๋ฐ ๋ฐฐํฌ:
์ ํค ์ ์์ฑ์ ์ ํํ๊ณ , VM ๋ง๋ค๊ธฐ๋ฅผ ์๋ฃํ๋ฉด ํ๋ผ์ด๋น ํค(.pem) ๋ค์ด๋ก๋ ํ์
์ด ๋น๋๋ค. ์ด ํ์ผ์ ๋ค์ ๋ค์ด๋ก๋ํ ์ ์์ผ๋ ์์ ํ ๊ณณ์ ์ ์ฅํ์ธ์.

1. ์ ์ ์ ๋ณด ํ์ธ:
๊ฐ์ ํ์ด์ง์์ ๊ณต์ฉ IP ์ฃผ์๋ฅผ ํ์ธํ๊ณ ๋ณต์ฌํฉ๋๋ค.
2. SSH ์ ์:
ํฐ๋ฏธ๋(PowerShell ๋๋ CMD)์์ SSH ๋ช
๋ น์ด๋ก VM์ ์ ์ํฉ๋๋ค.
# SSH ์ ์ ์์ (ํค ํ์ผ์ด ์๋ ๊ฒฝ๋ก์์ ์คํ)
ssh -i [ํคํ์ผ๊ฒฝ๋ก\\ํ์ผ๋ช
.pem] azureuser@[๊ณต์ฉIP์ฃผ์]

3. ํ์ ํจํค์ง ์ค์น:
์ ์ ํ, ํจํค์ง ๋ชฉ๋ก์ ๊ฐฑ์ ํ๊ณ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(LAMP Stack)๋ฅผ ์ค์นํฉ๋๋ค.
# 1. ํจํค์ง ๋ชฉ๋ก ์ต์ ํ (๊ฐ์ฅ ๋จผ์ ์คํ)
sudo apt update -y
# 2. LAMP ์คํ(Linux, Apache, MariaDB, PHP) ๋ฐ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
# (VM ์์ ์ค์น๋๋ฏ๋ก ๋ด PC์๋ ์ํฅ ์์)
sudo apt install apache2 mariadb-server php php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap libapache2-mod-php php-mysql -y
์ ๋ก ํธ๋ฌ์คํธ(Zero Trust) ์์น์ ๋ฐ๋ผ Root ๊ณ์ ๋์ ์ต์ํ์ ๊ถํ์ ๊ฐ์ง ์ ์ฉ ์ฌ์ฉ์๋ฅผ ์์ฑํ์ฌ ์ด์ํฉ๋๋ค.
1. ๋ณด์ ์ค์ :
sudo mysql_secure_installation
# ์ค์ ๊ณผ์ ์์ Root ๋น๋ฐ๋ฒํธ ์ค์ , ์ต๋ช
์ฌ์ฉ์ ์ ๊ฑฐ ๋ฑ์ ์งํ (Y/N ์ ํ)
2. DB ๋ฐ ์ ์ ์์ฑ (SQL ๋ชจ๋ ์ง์ ):
sudo mysql -u root -p
(์๋๋ MariaDB ์ฝ์ ๋ด๋ถ ๋ช ๋ น์ด)
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
show databases;
-- 1. ์๋ํ๋ ์ค์ฉ DB ์์ฑ
CREATE DATABASE wordpress;
-- 2. ์ฌ์ฉ์ ์์ฑ (์ ๋ก ํธ๋ฌ์คํธ: root ์ฌ์ฉ ์ง์)
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '์ค์ ํ ๋น๋ฐ๋ฒํธ';
-- ์ฌ์ฉ์ ํ์ธ
SELECT USER, HOST from mysql.user;
-- 3. ๊ถํ ๋ถ์ฌ (ํด๋น DB์ ๋ํ ๋ชจ๋ ๊ถํ)
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';
-- ๊ถํ ํ์ธ
SHOW GRANTS FOR 'wordpress'@'localhost';
-- 4. ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ ๋ฐ ์ข
๋ฃ
FLUSH PRIVILEGES;
EXIT;
๊ธฐ์กด ์น ๋ฃจํธ์ ํ์ผ์ ๋น์ฐ๊ณ ํ๊ตญ์ด ๋ฒ์ ์๋ํ๋ ์ค๋ฅผ ์ค์นํฉ๋๋ค.
# ์น ๋ฃจํธ ์ด๋ ๋ฐ ๊ธฐ์กด ํ์ผ ์ญ์
cd /var/www
sudo rm -rf *
# ํ๊ตญ์ด ์๋ํ๋ ์ค ๋ค์ด๋ก๋ (wget)
sudo wget <http://ko.wordpress.org/latest-ko_KR.tar.gz>
# ์์ถ ํด์
sudo tar -xvzf latest-ko_KR.tar.gz
# ํด๋๋ช
๋ณ๊ฒฝ (wordpress -> html) ๋ฐ ์์ถํ์ผ ์ญ์
sudo mv wordpress html
sudo rm latest-ko_KR.tar.gz
# ํ์ผ ๋ฆฌ์คํธ ํ์ธ
ls -al
์ํ์น ์น ์๋ฒ๊ฐ ํ์ผ์ ์ ๊ทผํ ์ ์๋๋ก ์์ ๊ถํ์ ๋ณ๊ฒฝํ๊ณ ์ค์ ์ ์์ ํฉ๋๋ค.
1. ๊ถํ ์ค์ :
# ์์ ์๋ฅผ www-data(์ํ์น ์ ์ )๋ก ๋ณ๊ฒฝ
sudo chown -R www-data:www-data /var/www/html
# ๊ถํ ๋ณ๊ฒฝ (775)
sudo chmod -R 775 /var/www/html
2. VirtualHost ์ค์ :
# ์ค์ ํ์ผ ๋๋ ํ ๋ฆฌ ์ด๋
cd /etc/apache2/sites-available
# ์๋ํ๋ ์ค ์ค์ ํ์ผ ์์ฑ ๋ฐ ํธ์ง (vi ์๋ํฐ ์ฌ์ฉ)
sudo vi wordpress.conf
wordpress.conf ๋ด์ฉ ์
๋ ฅ:*(ServerName์๋ ๋ณธ์ธ์ Azure DNS ์ฃผ์๋ฅผ ์
๋ ฅํฉ๋๋ค. DNS ์ค์ ์ 2.6 ์ฐธ์กฐ)*
<VirtualHost *:80>
ServerAdmin test@test.com
DocumentRoot /var/www/html
# [๋ณธ์ธ์-DNS-์ฃผ์] ์: geondongkim-wordpress.koreacentral.cloudapp.azure.com
ServerName [๋ณธ์ธ์-DNS-์ฃผ์]
<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>
3. ์ค์ ์ ์ฉ ๋ฐ ์ํ์น ์ฌ์์:
# ์ฌ์ดํธ ํ์ฑํ
sudo a2ensite wordpress.conf
# ์ค์ ๋ฌธ๋ฒ ๊ฒ์ฌ (Syntax OK ํ์ธ)
sudo apache2ctl configtest
# ์ํ์น ์๋น์ค ์ฌ์์ ๋ฐ ์ํ ํ์ธ
sudo systemctl reload apache2
sudo systemctl status apache2
1. Azure DNS ์ค์ :
๊ณต์ฉ IP ์ฃผ์ ๋ฆฌ์์ค๋ก ์ด๋ํ๊ฑฐ๋ ๊ฐ์ -> DNS ์ด๋ฆ: ๊ตฌ์ฑ์ ํด๋ฆญํฉ๋๋ค.

DNS ์ค์ ์ด ์๋ฃ๋์๋ค๋ฉด, Certbot ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌด๋ฃ SSL ์ธ์ฆ์(Let's Encrypt)๋ฅผ ๋ฐ๊ธ๋ฐ๊ณ ์น์ฌ์ดํธ๋ฅผ HTTPS๋ก ์ ํํฉ๋๋ค.
1. Certbot ์ค์น ๋ฐ ์คํ
ํฐ๋ฏธ๋์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์์๋๋ก ์
๋ ฅํฉ๋๋ค.
# 1. Certbot ์ํ์น ํ๋ฌ๊ทธ์ธ ์ค์น
sudo apt install python3-certbot-apache -y
# 2. ์ธ์ฆ์ ๋ฐ๊ธ ์์ฒญ (์ค์: http:// ๋ฑ์ ์ ์ธํ ์์ ๋๋ฉ์ธ ์ฃผ์๋ง ์
๋ ฅ)
# ์: sudo certbot --apache -d geondongkim-wordpress.koreacentral.cloudapp.azure.com
sudo certbot --apache -d [๋ณธ์ธ์-DNS-์ฃผ์]
2. Certbot ์ค์ ๋จ๊ณ (์ธํฐ๋ํฐ๋ธ ๋ชจ๋)
๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ช ๊ฐ์ง ์ง๋ฌธ์ด ๋์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์งํํ์ธ์.
Y ์
๋ ฅ.N ์
๋ ฅํด๋ ๋ฌด๋ฐฉ.๐ก ์ฐธ๊ณ : Certbot์ด ์๋์ผ๋ก Apache ์ค์ ์ ์์ ํ์ฌ, ์ฌ์ฉ์๊ฐ http://๋ก ์ ์ํ๋๋ผ๋ ์์ ํ https://๋ก ์๋ ๋ฆฌ๋ค์ด๋ ํธ๋๋๋ก ์ค์ ํด ์ค๋๋ค.

[์ ์ฒด ํ๋ฆ ์์ฝ]
sudo apt install ... ๋ก ๋๊ตฌ ์ค์น.sudo certbot ... ๋ช
๋ น์ด๋ก ์ธ์ฆ์ ์์ฒญ.Y).https://๋๋ฉ์ธ์ผ๋ก ์ ์ํ์ฌ ์๋ฌผ์ ์์ด์ฝ ํ์ธ.https://[๋ณธ์ธ์-DNS-์ฃผ์] ์
๋ ฅ.wordpresswordpresslocalhostwp
์ ์ก์ ๋๋ฅด๊ณ , ์ฌ์ดํธ ์ ๋ชฉ ๋ฐ ๊ด๋ฆฌ์ ๊ณ์ ์์ฑ ํ ์ค์น๋ฅผ ์๋ฃํฉ๋๋ค.[์ฐธ๊ณ ] ํญ๋ชฉ์ผ๋ก ์ถ๊ฐํ๋ฉด ํ๋ฆ์ด ์์ฐ์ค๋ฝ์ต๋๋ค.์ ๊ณตํด์ฃผ์ ๋ช ๋ น์ด๋ฅผ ๋ฐํ์ผ๋ก ๋ด์ฉ์ ์ ๋ฆฌํ์ต๋๋ค.

Azure์์ ์ ๊ณตํ๋ ๊ธด ๋๋ฉ์ธ(*.cloudapp.azure.com) ๋์ , DuckDNS์ ๊ฐ์ ๋ฌด๋ฃ ๋๋ฉ์ธ ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ์งง์ ์ฃผ์(*.duckdns.org)๋ฅผ ์ถ๊ฐ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
1. ์ค์ ํ์ผ ๋ณต์ฌ ๋ฐ ์์ฑ
๊ธฐ์กด์ ์์ฑํ wordpress.conf ํ์ผ์ ๋ณต์ฌํ์ฌ DuckDNS์ฉ ์ค์ ํ์ผ์ ๋ง๋ญ๋๋ค.
# ๊ธฐ์กด ์ค์ ํ์ผ ๋ณต์ฌ
sudo cp wordpress.conf duckdns.conf
# ํ์ผ ์์ฑ ํ์ธ
ls -al
# DuckDNS ์ค์ ํ์ผ ํธ์ง
sudo vi duckdns.conf
2. duckdns.conf ๋ด์ฉ ์์
ServerName ๋ถ๋ถ์ ๋ณธ์ธ์ด DuckDNS์์ ๋ฐ๊ธ๋ฐ์ ๋๋ฉ์ธ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.
<VirtualHost *:80>
ServerAdmin test@test.com
DocumentRoot /var/www/html
# [๋ณธ์ธ์ DuckDNS ๋๋ฉ์ธ ์
๋ ฅ]
# ์: ServerName geondongkim.duckdns.org
ServerName geondongkim.duckdns.org
<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/duckdns_error.log
CustomLog ${APACHE_LOG_DIR}/duckdns_access.log combined
</VirtualHost>
3. ์ฌ์ดํธ ํ์ฑํ ๋ฐ SSL ์ ์ฉ
์๋ก ๋ง๋ ์ค์ ์ ์ํ์น์ ๋ฑ๋กํ๊ณ , Certbot์ ํตํด HTTPS ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
# 1. DuckDNS ์ฌ์ดํธ ์ค์ ํ์ฑํ
sudo a2ensite duckdns.conf
# 2. ์ํ์น ์ค์ ๋ค์ ๋ถ๋ฌ์ค๊ธฐ
sudo systemctl reload apache2
# 3. SSL ์ธ์ฆ์ ๋ฐ๊ธ (DuckDNS ๋๋ฉ์ธ)
# ์ฃผ์: --apache ์์ ๋์(-)๊ฐ ๋ ๊ฐ์
๋๋ค.
sudo certbot --apache -d 'geondongkim.duckdns.org'
Azure Marketplace๋ฅผ ์ด์ฉํด ํด๋ฆญ ๋ช ๋ฒ์ผ๋ก ๊ตฌ์ถํ๋ ๋ฐฉ์์ ๋๋ค.
root ์ฌ์ฉ ๊ธ์ง, SSH ํฌํธ ๊ด๋ฆฌ ๋ฑ ๋ณด์ ์์น์ ์ค์ํด์ผ ํฉ๋๋ค.