chocoding™

좌충우돌 엉망진창 코딩 성장 블로그

AWS EC2 우분투에 웹서버 설치 하기

“AWS EC2 서비스에 워드프레스를 위한 웹 서비스 환경 구축 하기” 목차
  1. 웹 서비스 패키지 설치 하기 (Apache HTTP Server, PHP, MySQL)
  2. Apache HTTP Server 환경 설정 하기
  3. 사이트 인증서 발급 받고 HTTPS 사용 하기

우분투에 워드프레스 웹 서버 설치를 하기 위해서는 다음 세 가지가 필요하다.

  1. HTTP 접속을 가능하게 해주는 HTTP Server
  2. 웹 애플리케이션이 동작할 수 있도록 해주는 프로그래밍 언어
  3. 대량의 데이터를 저장하고 관리할 수 있는 데이터베이스

이 포스트에서는 줄여서 APM이라고 많이 부르는 Apache HTTP Server, PHP, MySQL을 설치하려고 한다. 이 포스트에서는 빠른 진도와 쉬운 설명을 위해 심화 학습과 세부 설정을 과감하게 생략하고 (사실 나도 잘 모른다) 오로지 설치 과정만 진행 한다. 세부 설정은 포스팅을 따로 하도록 할 예정이다.

설치 전 준비 사항

관리자 권한 얻기

패키지를 설치하고 환경을 설정하기 위해서는 관리자 권한을 얻어야 한다.

ShellScript
sudo su

패키지 업데이트

이 작업은 우분투 배포판 리포지토리에서 제공하는 최신 설치 패키지와 비교해서 현재 내 우분투 패키지 리스트를 최신화(업데이트) 하는 것이다. 내 우분투의 패키지들이 실제 버전업이 되지는 않는다.

ShellScript
apt update

패키지 업그레이드 (버전 업)

업데이트한 패키지 리스트를 실제로 버전 업하는 과정

ShellScript
apt upgrade

Apache HTTP Server (아파치 웹 서버) 설치

아파치 웹 서버 설치 명령

ShellScript
apt install apache2   #2.4 버전이라고 apache 뒤에 숫자 2가 붙었나봐요^^

아파치 웹 서버 시작 명령

ShellScript
systemctl start apache2

서버 동작 확인

  • 시스템 명령어로 확인 하는 방법
ShellScript
systemctl status apache2  #apache2 상태를 보여 달라는 명령어

 apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-05-10 15:23:46 UTC; 4min 7s ago
     # 위와 같이 Active라는 상태가 나오면 정상적으로 작동되고 있다는 뜻이다
  • 웹 브라우저에서 EC2 인스턴스 퍼블릭 IPv4 주소를 입력해서 웹서버가 동작 하는지 확인 한다. 아래와 같은 페이지가 뜨면 정상.

php 설치

워드프레스가 php 버전에 민감하다고 이야기들 하는데 개인적으로는 테스트 기간 동안 php 8.2를 사용했는데 아무런 문제도 없었다. 여기서는 우분투 22.04에서 기본적으로 지원하는 php 8.1을 설치하도록 하고 다른 버전을 다운로드 하고 설치하는 방법에 대해서는 따로 포스팅을 하도록 하겠다. 워드프레스 php 버전 지원에 대해서 더 많이 알고 싶다면 여기를 참조

php 설치 명령

ShellScript
apt install php

php 설치 확인

  • 버전 확인으로 php 설치 확인 하기
  • 웹 브라우저로 php 설치 확인 하기

우선 아래 명령으로 info.php 라는 파일을 만든 뒤

ShellScript
echo "<?php phpinfo(); ?>" >> /var/www/html/info.php  #info.php에 phpinfo() 코드를 삽입 하라는 명령

웹 브라우저에서 로딩 해서 설치 여부 확인

MySQL Database Server (데이터베이스 서버) 설치

mysql-server 설치 명령

ShellScript
apt install mysql-server

mysql 보안 설정 명령

ShellScript
mysql_secure_installation

보안 설정 참고. 이 문구들은 버전에 따라서 달라질 수 있지만 핵심 내용은 같다.

ShellScript
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password 
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
#패스워드 설정을 시작한다는 말

There are three levels of password validation policy:
#패스워드 설정에 관한 3가지 정책이 있습니다: (패스워드 강도 설정)
LOW    Length >= 8
#낮은 강도: 패스워드 8자 이하
MEDIUM Length >= 8, numeric, mixed case, and special characters
#중간 강도: 패스워드 8자 이상, 문자, 숫자, 특수문자 혼합
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
#강력한 강도: 중간 강도 + dictionary file(딕셔너리 파일; 이 파일에 포함된 단어는 패스워드로 사용할 수 없음)
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 선택


By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for testing, and to make the installation go a bit smoother.
You should remove them before moving into a production environment.
#MySQL은 편의를 위해 계정 없이 아무나 접근할 수 있도록 설치된다. 하지만 개발 환경으로 사용하기 위해선 익명 사용자를 지우는 것이 좋다. 익명 사용자 지울래? Y면 삭제
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y


Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network.
#보통은 root 사용자는 localhost에서만 접속하는 것이 좋다. 이렇게 하면 누군가가 root 계정의 패스워드를 추측할 수 없기 때문이다.
#HeidiSQL 같은 mysql 관리 인터페이스는 SSH 접속을 지원하므로 y로 하는 것이 좋다
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing,
and should be removed before moving into a production environment.
#'test'라는 데이터베이스가 있는데 지울래? y 선택
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y


Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
#권한 테이블( privilege tables)을 리로딩하면 지금까지의 모든 변경사항이 바로 적용 된다는 말
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

All done!  #완료

MySQL root 계정 패스워드 설정

SQL
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '********';