Ubuntu 20.04 LTS에서 PHP 개발 환경 구성하기

Ubuntu 20.04 LTS에서 PHP 개발 환경 구성하기

1. 개요

본 포스팅에서는 PHP를 사용하여 웹 사이트를 제작하기 위한 웹 서버 및 데이터베이스를 구축하는 방법에 대해서 설명합니다. Ubuntu 20.04 LTS 환경에서 APM(Apache2, PHP8.0, MySQL)을 사용하여 간단한 웹 사이트를 제작할 수 있게 개발 환경을 구성합니다.

2. APM(Apache2, PHP8.0, MySQL) 설치

설치하기 전에 패키지 목록을 업데이트하고 기존에 설치된 패키지도 업데이트합니다.

sudo apt-get update sudp apt-get upgrade

2.1. Apache2

우선 웹 서버를 구성할 프로그램인 아파치(Apache2) 패키지를 설치합니다.

sudo apt-get install apache2

설치 후에 아래의 명령어를 통해 Apache의 상태를 확인할 수 있습니다.

sudo systemctl status apache2

systemctl status apache2

2.1.1. 방화벽 설정

외부에서 웹 사이트로 접근하기 위해 HTTP와 HTTPS의 기본 포트인 80과 443 포트에 대한 방화벽을 설정해야합니다. 방화벽을 설정하기 전에 우선 서비스 명으로 확인합니다.

sudo ufw app info "Apache" sudo ufw app info "Apache Secure" sudo ufw app info "Apache Full"

ufw app info

각 상황에 맞는 서비스를 확인하여 포트에 대한 접근을 설정하면 되고, 우선적으로 "Apache Full"을 선택하여 2개의 포트에 대한 접근을 허용합니다.

sudo ufw allow in "Apache Full" # 방화벽 확인 sudo ufw status verbose

2.2. MySQL

다음으로 데이터베이스인 MySQL를 아래의 명령어를 통해 패키지를 설치합니다.

sudo apt-get install mysql-server

MySQL 설치 후에 기초 보안을 설정하기 위한 명령어를 입력합니다.

sudo mysql_secure_installation

기초 보안을 설정하기 위한 몇가지 입력 사항이 있습니다. 패스워드 설정, 데이터베이스 공개 여부, Root 계정 사용 등의 항목이 있으니 상황에 맞게 설정하시면 됩니다.

... Press y|Y for Yes, any other key for No : y ... Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 ... New password: <패스워드 입력> ... # 데이터베이스를 아무나 읽을 수 없게 할 지 여부 Remove anonymous users? (Press y|Y for Yes, any other key for No) : y ... # 원격 접속으로 root 계정 사용 여부 Disallow root login remtely? (Press y|Y for Yes, any other key for No) : n # 테스트 데이터베이스 및 엑세스를 삭제 여부 Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y # 지금 권한으로 테이블 로드 여부 Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

보안 설정까지 완료했으면 아래의 명령어를 통해 MySQL 서버에 접속합니다.

sudo mysql

mysql

2.2.1. 방화벽 설정

데이터베이스도 외부에서 접속이 가능하게 하기 위해서 MySQL에서 사용하는 포트를 확인한 후 접근을 허용합니다.

mysql> show variables like 'port';

show variables like 'port'

3306 포트를 확인 후 방화벽을 설정합니다.

sudo ufw allow 3306/tcp # 방화벽 확인 sudo ufw status verbose

2.2.2. 보안 설정

Root 계정을 외부에서 접속하는 걸 허용하는 것은 보안상 문제가 될 수 있으므로 유저와 데이터베이스를 생성하여 권한을 부여합니다.

# Database 생성 mysql> create database '' default character set utf8; # User 생성 mysql> create user ''@'' identified by '';

부분에서 %으로 설정하면 localhost를 제외한 모든 아이피에서 접근이 가능하도록 설정하는 것입니다.

mysql> create database bananaDB default character set uft8; mysql> create user 'banana'@'%' identified by '';

다음으로 생성한 유저에게 권한을 부여합니다.

mysql> grant ON TO ''@'';

은 권한종류를 나타내며 ALL 입력시 모든 권한을 허용합니다. 은 접근할 데이터베이스, 테이블을 지정하며 <데이터베이스 명>.<테이블 명>으로 표현합니다. *.* 설정 시 모든 데이터베이스와 테이블에 대한 접근을 허용합니다.

mysql> grant ALL ON bananaDB.* TO 'banana'@'%';

권한 부여 후 flush 합니다.

mysql> flush privileges;

2.2.3. 외부 접속

외부에서 접속할 수 있도록 MySQL 설정도 변환해주어야 하므로 아래의 파일을 열어서 수정합니다.

/etc/mysql/mysql.conf.d/mysqld.cnf

파일 내용 중 bind-address와 mysqlx-bind-address 부분을 수정합니다.

# mysqld.cnf bind-address = 0.0.0.0 mysqlx-bind-address = 0.0.0.0

MySQL 서비스를 재시작합니다.

sudo service mysql restart

2.3. PHP

마지막으로 웹 사이트 제작에 사용할 언어인 PHP를 설치합니다. PHP8.0을 설치하기 위해 우선 레퍼지토리를 추가합니다.

sudo add-apt-repository ppa:ondrej/php sudo apt-get update

이 후 PHP 패키지를 설치하고 확인합니다.

sudo apt-get install php8.0 php8.0-common php8.0-cli -y php -v # show PHP version. php -m # show PHP modules loaded.

2.3.1. 테스트

PHP가 정상적으로 설치되었는지 확인하기 위해 아래의 명령어를 통해 파일을 생성하고 테스트합니다.

sudo nano /var/www/html/test.php

// test.php

웹 브라우저에서 http://<서버 아이피 주소>/test.php로 접속하여 확인합니다.

참고

from http://bananani.tistory.com/12 by ccl(A) rewrite - 2021-09-19 22:00:42