VPC에 있는 LAMP 스택의 PHP 웹 애플리케이션
이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.
이 튜토리얼에서는 IBM Cloud 가상 사설 클라우드(VPC)인프라에서 Apache 웹 서버, MySQL 데이터 베이스, PHP 스크립팅을 사용하여 Ubuntu Linux 가상 서버를 만드는 방법을 안내합니다. 이 소프트웨어 조합(일반적으로 LAMP 스택 이라고 함)은 웹사이트와 웹 애플리케이션을 제공하는 데 자주 사용됩니다. IBM Cloud VPC를 사용하여 LAMP 스택을 빠르게 배치하며 원하는 경우 로깅 및 모니터링을 추가합니다. LAMP 서버를 실제로 체험하기 위해, 여러분은 무료 오픈 소스인 WordPress 콘텐츠 관리 시스템도 설치하고 구성해야 합니다.
목표
- VPC에서 가상 서버 인스턴스(VSI)를 프로비저닝합니다.
- 최신 Apache, MySQL 및 PHP 소프트웨어를 설치합니다.
- WordPress를 설치하고 구성하여 웹 사이트 또는 블로그를 호스팅합니다.
- 정전을 발견하고 성능 저하를 모니터하도록 로깅 및 모니터링을 구성합니다(선택사항).
- VSI의 크기를 조정합니다(선택사항).

- 일반 사용자가 웹 브라우저를 사용하여 VPC에서 실행되는 LAMP 서버에 액세스합니다.
- VSI가 암호화된 Block Storage 볼륨의 데이터를 사용하도록 구성됩니다(선택사항).
시작하기 전에
이 튜토리얼에는 다음 항목이 필요합니다.
- IBM Cloud 청구 가능 계정
- IBM Cloud CLI
- IBM Cloud VPC 플러그인(
vpc-infrastructure
)
- IBM Cloud VPC 플러그인(
terraform
: 인프라를 코드로 사용하여 리소스를 프로비저닝함jq
: JSON 파일을 조회함git
: 소스 코드 저장소를 복제함
솔루션 튜토리얼 시작하기 가이드에서 운영 환경에 맞는 도구를 다운로드하고 설치하는 방법을 확인할 수 있습니다. 이러한 도구의 설치를 피하려면 Cloud Shell 사용할 수 있습니다.
서비스 작성
이 섹션에서는 IBM Cloud Shell 과 IBM Cloud 사용하여 VPC, 서브넷, 보안 그룹, 가상 서버 인스턴스(VSI)를 프로비저닝합니다. VSI는 클라우드 환경이 사용자의 인프라 요구사항에 완벽히 부합할 수 있도록, 일반적으로 수요가 가장 많은 경우를 처리하고 그 후에는 일시중단하거나 전원을 끌 수 있습니다.
Terraform 템플리트를 사용하여 이러한 리소스를 생성하려는 경우 https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp에서 사용 가능한 템플리트를 사용하고 README.md의 지시사항을 따를 수 있습니다. 이 템플릿은 Schematics 에서도 사용할 수 있습니다.
- IBM Cloud 계정에 로그인한 상태에서 IBM Cloud Shell을 실행하십시오.
- 셸에서 자동으로 IBM Cloud 지역 중 하나에 로그인되며, 다음 명령을 실행하여 원하는 경우 다른 지역으로 전환할 수 있습니다
ibmcloud target -r <region-name> -g <resource-group>
SSH 키 작성
-
VPC에서 SSH 키는 비밀번호 대신 VSI에 대한 관리자 액세스에 사용됩니다. 다음 명령을 실행하여 SSH 키를 작성하고 프롬프트가 표시되면 기본값을 수락하십시오. SSH 키에 대한 자세한 정보는 문서 SSH 키를 참조하십시오.
ssh-keygen -t rsa -b 4096
위의 명령은
~/.ssh
디렉토리 내에 두 개의 파일(id_rsa
및id_rsa.pub
)을 생성합니다. Cloud Shell 세션은 수명이 짧으며, IBM Cloud Shell 내부에서 작성한 모든 파일은 향후 재사용을 위해 안전한 위치에 저장되어야 합니다. 화면 오른쪽 상단 섹션에 있는 Cloud Shell에 다운로드 및 업로드 파일 옵션이 있습니다.재사용할 기존 SSH 키가 있는 경우, 대신 이 키를 Cloud Shell 세션에 업로드할 수 있습니다.
-
계정에 SSH 키를 추가하십시오.
SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
VPC, 서브넷 및 보안 그룹 작성
-
VPC를 작성하십시오. 자세한 정보는 콘솔 또는 CLI에서 VPC 작성에 대한 문서를 참조하십시오.
VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id')
-
VPC에 대한 서브넷을 작성하십시오.
SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id')
-
VPC에 대한 보안 그룹을 작성하십시오.
SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id')
-
SSH 포트 22로 인바운드를 제한하는 규칙을 추가하십시오.
ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --json
SSH 포트에 대한 액세스를 일부 주소로 제한할 수 있습니다. 위의 명령어에서 --remote
를 사용하면 이 서버에 액세스할 수 있는 사용자를 제한할 수 있습니다. 예를 들어, ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json
-
HTTP 포트 80으로 인바운드를 제한하는 규칙을 추가하십시오.
ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --json
HTTP 포트에 대한 액세스를 일부 주소로 제한할 수도 있습니다. 위의 명령어에서 --remote
을 사용하여 이 서버에 액세스할 수 있는 사용자를 제한할 수 있습니다. 예를 들어, ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json
-
모두에게 아웃바운드를 허용하는 규칙을 추가하십시오. 이는 소프트웨어 설치에 필요하며 나중에 사용 안함으로 설정하거나 제거할 수 있습니다.
ibmcloud is security-group-rule-add $SG_ID outbound all --json
가상 서버 인스턴스 작성
- IBM Cloud는 Ubuntu 이미지를 주기적으로 최신 소프트웨어로 업데이트합니다. 다음 명령을 실행하여 최신 Ubuntu 20.x의 이미지 ID를 얻으십시오.
IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id')
- 가상 서버 인스턴스 작성
NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id')
- 유동 IP를 예약하십시오.
FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address')
- SSH로 서버에 연결하십시오. SSH를 통해 새로 작성된 서버에 액세스하는 데 1분 정도 걸릴 수 있습니다.
브라우저를 통해 가상 서버에 액세스하려면 유동 IP를 알아야 합니다. 이 유동 IP는 쉘 변수에서 이전에 캡처되었으므로,ssh root@$FLOATING_IP
echo $FLOATING_IP
명령을 실행하여 유동 IP 주소를 확보하거나ibmcloud is floating-ips --json
을 실행하고 유동 IP를 작성하는 데 사용되는 이름(fip-lamp-1
)을 검색하여 확보할 수 있습니다. 웹 콘솔에서 서버의 플로팅 IP 주소도 확인할 수 있습니다.
Apache, MySQL 및 PHP 설치
이 절에서는 Ubuntu 패키지 소스를 업데이트하고 Apache, MySQL 및 PHP를 최신 버전으로 설치하는 명령을 실행합니다.
처음으로 서버가 스핀업되면 이미 시스템 업데이트를 실행 중이고 사용자가 아래 명령을 실행하지 못하게 될 수 있으므로, ps aux | grep -i apt
를 실행하여 시스템 업데이트 상태를 확인하고 자동화된 시스템 업데이트 태스크가 태스크를 완료하거나 강제 종료하기를 기다릴 수 있습니다.
- 업데이트 중에 대화식 모드를 사용 안함으로 설정
export DEBIAN_FRONTEND=noninteractive
- 패키지 업데이트
apt update
- Apache 설치
apt install apache2 -y
- MySQL 설치
apt install mysql-server -y
- PHP 설치
apt install php libapache2-mod-php php-mysql php-common php-cli -y
설치 및 구성 확인
이 절에서는 Apache, MySQL 및 PHP가 최신 버전이며 Ubuntu 이미지에서 실행 중인지 확인합니다. 또한 MySQL에 대한 권장 보안 설정을 구현합니다.
- 브라우저에서 유동 IP 주소를 열어 Ubuntu를 확인하십시오. Ubuntu 시작 페이지가 표시됩니다.
Ubuntu확인 - 다음 명령을 사용하여 설치된 Apache, MySQL 및 PHP 버전을 검토하십시오.
apache2 -v
mysql -V
php -v
mysql
를 엽니다.mysql
- yourPassword의 암호를 대체하는 다음 명령을 실행하십시오.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
mysql
프롬프트를 종료합니다.exit
- 다음 스크립트를 실행하여 MySQL 데이터베이스를 보안하십시오. 환경 설정에 가장 적합한 옵션을 선택하거나 ENTER키를 눌러 설정을 빠르게 진행하십시오.
mysql_secure_installation
- 또한, 다음 명령을 사용하여 PHP 정보 페이지를 빠르게 만들 수 있습니다.
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
- 작성한 PHP 정보 페이지를 보십시오. 브라우저를 열고
http://{FloatingIPAddress}/info.php
로 이동하십시오. VSI의 유동 IP 주소를 대체하십시오. 이는 다음 이미지와 유사합니다.

WordPress 설치 및 구성
애플리케이션을 설치하여 LAMP 스택을 실제로 사용해 보십시오. 다음 단계는 일반적으로 웹 사이트 및 블로그를 작성하는 데 사용되는 오픈 소스 WordPress 플랫폼을 설치합니다. 생산 설치에 대한 자세한 정보와 설정은 WordPress 참고하세요.
- 다음 명령을 실행하여 WordPress를 설치하십시오.
apt install wordpress -y
- MySQL 및 PHP를 사용하도록 WordPress를 구성하십시오. 다음 명령을 실행하여 텍스트 편집기를 열고
/etc/wordpress/config-localhost.php
파일을 작성하십시오.sensible-editor /etc/wordpress/config-localhost.php
- yourPassword를 자신의 MySQL 데이터베이스 비밀번호로 대체하고 다른 값은 그대로 두어 다음 행을 파일에 복사하십시오. 파일을 저장한 후 종료하십시오.
<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'yourPassword'); define('DB_HOST', 'localhost'); define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content'); ?>
mysql
프롬프트를 열고 비밀번호를 제공하십시오.mysql -u root -p
- 다음 명령어를 실행할 때 데이터베이스 비밀번호를 yourPassword 바꾸고, 다른 값은 변경하지 마십시오.
CREATE DATABASE wordpress;
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
mysql
프롬프트를 종료합니다.exit
- WordPress 설치를 웹 서버 문서 루트로 이동하십시오.
ln -s /usr/share/wordpress /var/www/html/wordpress
mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
- WordPress 설정을 완료하고 플랫폼에 공개하십시오. 브라우저를 열고
http://{FloatingIPAddress}/wordpress/wp-admin
로 이동합니다. 인스턴스의 유동 IP 주소를 대체하십시오. 이는 다음 이미지와 유사해야 합니다.WordPress 사이트 실행 중
도메인 구성
LAMP 서버에 기존 도메인 이름을 사용하려면 VSI의 유동 IP 주소를 가리키도록 A 레코드를 업데이트하십시오.
서버 모니터링 및 로그 관리
서버 가용성과 최상의 사용자 경험을 보장하기 위해, 모든 프로덕션 서버에서는 모니터링을 사용으로 설정해야 합니다. VSI를 모니터하고 중앙 위치에서 분석을 위한 로그를 캡처하기 위해 몇 가지 옵션을 사용할 수 있습니다.
서버 모니터링
IBM Cloud Monitoring 서비스의 인스턴스를 설정한 후 VSI 인스턴스의 CPU, 볼륨, 메모리 및 네트워크 사용을 모니터할 수 있습니다. 모니터링 서비스를 구성하려는 경우 Linux 호스트 모니터링 문서에 설명된 단계를 따르십시오.
서버 로깅
IBM Cloud Logs 생성하여 IBM Cloud 시스템 및 애플리케이션 로그를 관리할 수 있습니다.
IBM Cloud Logs는 관리자, DevOps 팀 및 개발자 고급 기능을 제공하여 로그 데이터를 필터링하고 검색하고 추적하고 경보를 정의하며 사용자 정의 보기를 설계하여 애플리케이션 및 시스템 로그를 모니터합니다.
Linux 로깅 에이전트 관리하기 문서에 설명된 지침을 따릅니다
BYOK(Bring-Your-Own-Key) 암호화 데이터 볼륨 구성(선택사항)
VSI가 제공자가 관리하는 암호화된 부트 볼륨 100GB를 사용하여 작성되었지만, VSI를 삭제하는 경우 삭제하기 전에 보호하려는 모든 데이터를 이동해야 합니다. 또는 VSI가 삭제되어 새 VSI에 접속되는 경우에도 지속될 수 있는 데이터 볼륨을 작성해야 합니다. 자체 키를 사용하여 볼륨을 암호화할 수도 있습니다. 원하는 결과인 경우 아래에 설명된 단계를 따라 데이터 볼륨을 작성하고 VSI에 접속하십시오.
-
데이터 볼륨 구성 파일을 작성하십시오.
VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')
VPC에서 고객 관리 암호화 키를 사용할 수도 있습니다. 자신의 암호화 키를 저장하기 위해 다음 두 가지 서비스 중 하나를 사용할 수 있습니다. (1) FIPS 140-2 레벨 3 서비스 IBM Key Protect. 문서의 IBM Key Protect 서비스 프로비저닝 주제를 참조하십시오. (2) FIPS 140-2 레벨 4 서비스 IBM Cloud Hyper Protect Crypto Services. 문서의 IBM Cloud Hyper Protect Crypto Services 시작하기 주제를 참조하십시오. 볼륨을 작성할 때 사용할 암호화 키에 대해 CRN과 함께
--encryption-key
매개변수를 지정할 수 있습니다. -
인스턴스 이름을 기준으로 모든 인스턴스 및 필터링을 나열하여 이전에 작성된 VSI의 ID를 캡처하십시오.
VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
-
기존 VSI에 데이터 볼륨을 접속하십시오.
ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json
-
SSH를 사용하여 서버에 연결하십시오.
ssh root@$FLOATING_IP
-
VSI에 새로 작성된 데이터 볼륨을 구성하고 한 번에 하나씩 아래의 각 행을 실행하십시오.
new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//') parted $new_bsv mklabel gpt parted -a opt $new_bsv mkpart primary ext4 0% 100% new_part=${new_bsv}1 mkfs.ext4 -L lamp-data ${new_part} mkdir /data mount ${new_part} /data echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab mount -a
새 /data 파일 시스템을 사용하도록 Apache 구성
- Apache 서비스 중지
service apache2 stop
- Apache 디렉토리를 /var에서 /data로 이동
mv /var/www /data/
- 새 위치에 대한 링크 작성
ln -s /data/www /var/www
- Apache 서비스 시작
service apache2 start
새 /data 파일 시스템을 사용하도록 MySQL 구성
- MySQL 서비스 중지
service mysql stop
- MySQL 디렉토리를 /var에서 /data로 이동
mkdir /data/lib
mv /var/lib/mysql /data/lib/
- 새 위치에 대한 링크 작성
ln -s /data/lib/mysql /var/lib/mysql
- AppArmor에 새로운 위치의 별칭을 추가하십시오. 그렇지 않으면 AppArmor 액세스를 차단합니다.
echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias
- AppArmor 서비스 다시 시작
systemctl restart apparmor
- MySQL 서비스 시작
service mysql start
- 브라우저를 열고
http://{FloatingIPAddress}/wordpress
로 이동합니다. 인스턴스의 유동 IP 주소를 대체하십시오. 새 데이터 볼륨을 추가하기 전과 마찬가지로 WordPress 페이지에 액세스할 수 있어야 합니다.
VSI 크기 조정(선택사항)
VSI는 VPC에서 사용 가능한 가장 작은 프로파일 중 하나, 즉 2개의 vCPU 및 4GiB RAM을 사용하여 작성되었습니다. 사용 요구사항에 따라 사용 가능한 vCPU 및 RAM의 양을 늘리거나 줄일 수 있습니다(가상 서버 인스턴스 크기 조정 참조).
-
인스턴스 이름을 기준으로 모든 인스턴스 및 필터링을 나열하여 이전에 작성된 VSI의 ID를 캡처하십시오.
VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id')
-
인스턴스를 중지하십시오.
ibmcloud is instance-stop $VSI_ID
-
인스턴스의 크기를 조정하십시오.
ibmcloud is instance-update $VSI_ID --profile cx2-4x8
ibmcloud is instance-profiles
명령을 실행하여 대체 프로파일 목록을 가져올 수 있습니다. 그러나 가상 서버 인스턴스 크기 조정 주제의 현재/대상 프로파일을 기반으로 한 크기 조정에 대한 제한사항에 유의하십시오. -
인스턴스를 시작하십시오.
ibmcloud is instance-start $VSI_ID
-
VSI가 적절한 호스트에 배치되고 시작될 때 몇 분 정도 기다려야 할 수 있습니다. 브라우저를 열고
http://{FloatingIPAddress}/wordpress
로 이동합니다. 인스턴스의 유동 IP 주소를 대체하십시오. 크기를 조정하기 전처럼 WordPress 페이지에 액세스할 수 있어야 합니다.
자원 제거
- VPC 콘솔에서 유동 IP를 클릭하고 VSI에 대한 IP 주소를 클릭한 후 조치 메뉴에서 해제를 선택하십시오. IP 주소를 해제할지 확인하십시오.
- 그런 다음 가상 서버 인스턴스로 전환하고 인스턴스를 삭제하십시오.
- VSI가 삭제되면 서브넷으로 전환하십시오. 서브넷을 삭제하십시오.
- 서브넷이 삭제된 후 VPC 탭으로 전환한 후 VPC를 삭제하십시오.
- 선택적 데이터 볼륨을 작성했지만 더 이상 필요하지 않은 경우 Block Storage 볼륨 탭으로 전환하고 볼륨을 삭제하십시오.
콘솔 사용 시 리소스 삭제 후 업데이트된 상태 정보를 보려면 브라우저를 새로 고쳐야 할 수 있습니다.
리소스에 따라 즉시 삭제되지 않고 보유될 수 있습니다(기본 7일 동안). 리소스를 영구적으로 삭제하여 재확보하거나 보유 기간 내에 리소스를 복원할 수 있습니다. 리소스 재확보 사용 방법은 이 문서를 참조하십시오.