Microsoft AI School에서 교육 계정을 통해 가상머신을 제공 받았다.
Azure에 가상머신을 돌려서 그 위에 WordPress를 통해 블로그를 만들려고 한다.
- OS server : 우분투
- Web server : Apache2, PHP
- Database : MariaDB, MySQL
1. 리소스 그룹 만들기Microsoft AI School에서 교육 계정을 통해 가상머신을 제공 받았다.
Azure에 가상머신을 돌려서 그 위에 WordPress를 통해 블로그를 만들려고 한다.
- OS server : 우분투
- Web server : Apache2, PHP
- Database : MariaDB, MySQL
1. 리소스 그룹 만들기


리소스 그룹 -> "만들기" 클릭
- 구독 : 리소스가 함께 청구될 계정
- 리소스 그룹 : 그룹 이름( 식별 가능하게 생성 ) => 이름은 만들고 나서 수정 불가
- 영역 : 한국이면 "Korea Central"
2. Marketplace에서 가상 머신 리소스 생성


만들기 => "Azure 서비스만" 체크 => "가상 머신" 검색후 "만들기" 클릭

가상 머신 생성은 새로운 컴퓨터를 하나 만드는 것이다. 그래서 컴퓨터 사양, 서버들을 지정해줘야한다.
- 가상 머신 이름 : test-wordpress-vm
- 이미지 : Ubuntu Server 24.04 LTS - x64 Gen2
- 크기 : Standard_D2s_v3 - 2 vcpu, 8GiB 메모리 ( 크기에 따라 가격 청구 )
- 인증 형식 : SSH 공개 키 => 키 다운 받아 인증
- 사용자 이름 : azureuser
- 키 쌍 이름 : 다운 받을 키 이름지정 ( 보통 자동 지정됌 )
- 인바운드 포트 선택 : HTTP(80), HTTPS(443), SSH(20)
( HTTP, HTTPS는 외부에서 접근하기 위해, SSH는 가상머신에 안전하기 접근하기 위해 )
네트워킹에 " VM 삭제 시 공용 IP 및 NIC 삭제" 체크후 만들기!

이 창이 나왔을 때, 반드시 "프라이빗 키 다운로드 및 리소스 만들기" 클릭해서 키 다운로드 받아야함!!
나는 쉬운 경로를 위해 Downloads 폴더에 저장했다.

"배포가 완료됨"이 뜨면 배포 성공!
3. Window Shell을 통해 가상 머신 접속
지금까지 MS Azure로부터 가상의 컴퓨터를 빌린거고, 이 컴퓨터에 운영체제인 리눅스 "우분투"를 돌린거다.
이제 윈도우 쉘을 통해 이 우분투에 접속할 것이다.
ssh -i .키경로\프라이빗 키 이름.pem 관리사용자이름@공용IP주소
위의 명령어를 통해 가상 머신에 접속.
( ~ / . : 현재 위치 )
( ssh : 원격 시스템에 안전하게 접근하고 관리하기 위한 접속 명령어 )
( -i : identity 파일 / -p : port번호 )

=> yes
Warning : Permanently added '공용ip주소' to the list of known hosts.
=> Azure 사이트에서 다운 받은 파일을 그대로 사용했기 때문에 이런 "Permission 에러"가 발생
[ Permission 에러 발생 시 ]
Power Shell (X) , CMD (O)
내 프라이빗 키가 있는 경로로 이동 후(cd 경로)
1. icacls <KEY>.pem /reset
2. icacls <KEY>.pem /grant:r %username%:(R)
3. icacls <KEY>.pem /inheritance:r
다시 Power Shell로 접속 후, ssh 접속 명령어 입력

왼쪽에 초록색으로 "관리자이름@가상머신이름"의 환경이 뜨면 접속 성공
4. 접속한 가상머신에 필요한 패키지들 설치 및 설정
1. 우분투 패키지 설치
sudo apt update -y
(가져올수있는 패키지들의 버전정보를 최신화함)
sudo apt upgrade -y
(최신화 할수 있는 정보를 기반으로 패키지 전부 업데이트)
( sudo : 루트 권한 명령 )
( apt: Ubuntu와 같은 Debian 계열의 Linux 배포판 패키지 관리 )
( -y : 사용자의 확인을 묻지않고 바로 yes )
2. 필요한 라이브러리들 설치( apache, mariadb, php, mysql )
sudo apt install apache2 mariadb-server php php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap libapache2-mod-php php-mysql
3. Apache 시작 및 설정
Apache는 웹 요청을 처리해주는 웹 서버이다.
sudo systemctl start apache2
( 시스템에서 아파치2 시작 )
sudo systemctl enable apache2
( OS, 가상서버 재시작시 아파치2 자동 시작 enable )
( systemctl : 시스템 및 서비스 관리 도구, 서비스의 시작, 중지, 재시작 제어 가능 )
4. MariaDB 설정
MariaDB는 MySQL 계열의 오픈 소스 RDBMS(관계형 데이터베이스)이다.
sudo mysql_secure_installation
( MySQL 보안 설정 )
Enter current password for root (enter for none): => 초기 루트 패스워드 입력 ( 없으면 그냥 엔터 )
Switch to unix_socket authentication [Y/n] => 루트 패스워드 말고 유닉스 소켓 인증 방식으로 전환할지
Change the root password? [Y/n] => 루트 패스워드를 변경할지
Remove anonymous users? [Y/n] => 익명의 사용자를 제거할지 ( 보안상 제거해주는게 좋음 )
Disallow root login remotely? [Y/n] => localhost의 IP가 아닌 원격에서 루트 계정으로 로그인하는 것을 막을지
Remove test database and access to it? [Y/n] => 테스트 데이터베이스를 제거할지
Reload privilege tables now? [Y/n] => 현재 설정한 값을 적용할지
sudo mysql -u root -p
( MySQL 데이터베이스 서버에 접속 및 설정 )
( -u : MySQL에 접속할 사용자 이름을 지정 )
( -p : MySQL 접속 시 비밀번호를 입력하도록 요구 )

CREATE DATABASE wordpress;
( wordpress라는 데이터베이스 생성 )
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '비번';
( localhost에 wordpress라는 유저를 생성 및 비번 설정)
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost';
( "wordpress@localhost"라는 유저에게 "wordpress"라는 데이터베이스 내의 모든 테이블에게 "모든" 권한을 부여함 )
( show GRANTS for 'wordpress'@'localhost'; : 이걸로 권한 부여 확인 )
FLUSH PRIVILEGES;
( 권한 변경 사항 바로 적용 )
select User, Host from mysql.user;
( DB의 모든 유저들 확인 가능 )

EXIT;
( DB 빠져나옴 )
5. Wordpress 설치 및 구성
오픈소스를 기반으로 한 설치형 블로그, 프로그래밍 언어인 PHP로 작성된 설치형 블로그 CMS이다.
cd /var/www
( www에서 워드프레스 설치할거라서 여기로 이동 )
sudo wget http://wordpress.org/latest.tar.gz
( 워드프레스 웹에서 latest.tar.gz라는 압축파일을 가져옴 )
( wget : 웹에서 파일을 다운로드하는 명령어 )
sudo tar -xvzf latest.tar.gz
( 압축을 풀어서 내용을 추출해 wordpress파일이 나오도록 함 )
( tar : 파일 압축 및 해제 작업을 처리하는 유틸리티 )
( -xvzf : tar 명령어의 여러 옵션 )
( x : 압축 파일을 추출, v : 추출하면서 처리 과정을 출력, z : gzip을 사용해 압축 풀기, f : 파일 이름을 지정 )
ls -al
( 해당 디렉토리의 파일들을 확인 가능(-al은 숨긴 폴더까지) )

sudo rm -rf html
( html 폴더 제거 )
( rm : 파일이나 디렉터리를 삭제 )
( -r : 디렉터리 내의 하위 디렉터리와 파일들까지 삭제 / f :강제 삭제)
sudo rm latest.tar.gz
( 압축 파일 제거 )
sudo mv wordpress html
(wordpress를 html로 이름변경 (mv는 move))
( mv는 html이 없으면 그냥 이름 변경 기능)
sudo chown -R www-data:www-data /var/www/html
( html의 권한을 www-data로 바꿔줌 )
( chown : 파일이나 디렉토리의 소유자(owner) 및 그룹(group)을 변경 )
( -R : 재귀적 변경, 그 하위의 모든 파일과 디렉터리의 소유권도 함께 변경 )


웹 서버(예: Apache, Nginx)는 보통 www-data 사용자 및 그룹으로 동작한다.
sudo chmod -R 775 /var/www/html
(html에 읽고(4), 쓰고(2), 실행(1) 권한을 주는 것)
( chmod : 파일 및 디렉토리의 권한을 변경 )
( ls -al로 확인하면 drwxr-xr-x에서 drwxrwxr-x로 바뀌어있음 / (4+2+1=7)75라서 775)
7 (rwx): 소유자에게 읽기(read), 쓰기(write), 실행(execute) 권한을 줍니다.
7 (rwx): 그룹 사용자에게도 읽기, 쓰기, 실행 권한을 줍니다.
5 (r-x): 다른 사용자에게는 읽기와 실행 권한을 주지만 쓰기 권한은 주지 않습니다.

cd html
( html로 이동 )
5. DNS에 도메인 명 추가
Azure의 test-wordpress-vm 가상 머신 들어가서 DNS 이름 확인

=> "구성되지 않음" 클릭 => DNS 이름 레이블(옵션) 지정후 저장 ( 공용 IP주소-설정-구성 )
( koreacentral.cloudapp.azure.com에서 중복되면 안됌)
개요 들어가서 DNS이름 확인 후, 브라우저에서 접속!
( samdo.koreacentral.cloudapp.azure.com )

6. Certbot을 통해 사이트를 https 등록
Certbot은 Let's Encrypt의 사용자에게 무료로 TLS 인증서를 발급해주는 오픈 소스 툴이다.
다시 Power Shell에 가서 가상 머신에 "certbot" 설치할 것이다.
sudo apt install python3-certbot-apache -y
( 아파치 웹서버를 통해 certbot을 설치 )
sudo certbot --apache -d 'samdo.koreacentral.cloudapp.azure.com'
( 해당 도메인에 대해 SSL 인증서를 발급하고 Apache에 적용 )
( --apache : Certbot이 Apache 웹 서버에 맞게 SSL 인증서를 자동으로 구성해 HTTPS를 활성화 )
( -d : 인증서를 적용할 도메인을 지정 )
Enter email address (used for urgent renewal and security notices) => 자신의 이메일 입력
Please read the Terms of Service at ... => 약관 동의
Would you be willing, once your first certificate is ... => 광고 메일 동의
인증서 발급 후, 크롬에 처음 접속하면 "안전하지 않은 페이지"라고 뜨지만, 시간 지나면 해결됌.

6 - 2. 웹 설정 안하고 쉘로 설정 하는 법( 쉘에서 안할거면 스킵! )
sudo mv wp-config-sample.php wp-config.php
( wp-config-sample.php가 사라지면서 이제 웹에서는 설정이 불가능 )
sudo nano wp-config.php
( 쉘에서 wp-config.php 편집 시작 => 데이터베이스 설정 )
( nano : 터미널에서 사용할 수 있는 텍스트 편집기 )
7. DNS로 웹에 직접 접속해서 데이터베이스 생성 및 사이트 설정
https://samdo.koreacentral.cloudapp.azure.com에 접속하면 wordpress에 사용할 데이터베이스 생성하도록 한다.
데이터베이스를 생성하면 html/wp-admin/wp-config.php 파일이 생성된다.
( 웹에서 데이터베이스 설정하는게 wp-config.php파일을 설정하는것과 같다.( DB이름, DB유저이름, 비번, host이름) )

MariaDB 설정할때 했던것처럼 똑같이 설정

나중에 사이트 편집 화면 접속을 위해 사이트 제목, 사용자명, 비번, 이메일 주소 입력
워드프레스 설치후 설정했던 사용자명, 비번을 통해 접속

여기서 블로그의 여러가지 기능을 편집, 커스터마이징 가능.
8. 워드프레스 주소, 사이트 주소 설정
만약에 사이트가 깨진다면 설정에 들어가 URL을 지정해줘야 한다.
https://samdo.koreacentral.cloudapp.azure.com/wp-admin 에 접속해 위의 편집 화면으로 들어감
설정-일반에서 워드프레스 주소(URL), 사이트 주소(URL) 확인 후
둘 다 https://samdo.koreacentral.cloudapp.azure.com으로 변경
( 오류 나면 Powershell에서 var/www/html의 wp-config.php파일 안의 직접 사이트주소, 워드프레스주소 지정해도됌 )

- 사이트 주소 : 외부에 노출되는 사이트 주소 ( 이건 DNS 이름이랑 같게 해줘야함 )
- 워드프레스 주소 : 워드프레스가 설치된 곳 ( 이건 조건에 따라 달라짐 )
아파치의 증명서가 var/www쪽에 다 저장이 되어 있어서 우리가 도메인주소를 입력하면 거기 있는 index.php를 읽는것
[주소 입력하고 거치는 과정들 ]
1. 주소를 입력하면 Apache를 거침(가상 머신 접속된거임)
2. /etc/apache2/sites-available에 있는 파일들을 읽어들임

3. 000-default-le-ssl.conf 파일에 SSL증명서가 들어있음
4. 그 증명서에 DocumentRoot 부분에 "/var/www/html"라고 명시되어 있음
5. 그래서 /var/www/html에 있는 index.php를 리턴해주는 것
만약에 /var/www/html 아래에 “new”폴더를 추가로 생성하고 다른 파일들 전부 그 폴더로 넣으면 워드프레스의 주소는 samdo.koreacentral.cloudapp.azure.com/new로 바뀌는 것.
9. 블로그 커스터마이징
이제 알아서 커스터마이징 시키면 끝!
'클라우드' 카테고리의 다른 글
| Azure Machine Learning을 통한 야구 선수 능력 측정 모델 구현(군집) (3) | 2024.10.14 |
|---|---|
| Azure Machine Learning을 통한 자전거 렌탈 수요 예측 모델 구현(회귀) (1) | 2024.10.13 |
| Azure Machine Learning을 통한 로켓 발사 여부 예측 모델 구현(분류) (0) | 2024.10.13 |
| Azure Machine Learning을 이용해 Stable Diffusion 사용하기 (1) | 2024.09.29 |