서버 튜토리얼 · 9 min read · Dec 26, 2025
우분투 18.04 (LTS) LAMP 서버 튜토리얼: Apache, PHP 7.2 및 MySQL
LAMP는 L inux, A pache, M ySQL, P HP의 약자입니다. 이 튜토리얼에서는 PHP 7.2 (mod_php) 및 MySQL / MariaDB 지원과 함께 우분투 18.04 LTS (Bionic Beaver) 서버에 Apache 웹 서버를 설치하는 방법과 Let’s Encrypt로 SSL 인증서를 설정하는 방법을 보여줍니다. 또한 MySQL 관리를 쉽게 하기 위해 PHPMyAdmin을 설치할 것입니다. LAMP 설정은 Joomla, Wordpress 또는 Drupal과 같은 인기 있는 CMS 시스템의 완벽한 기반입니다.
사전 노트
이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.1.100을 사용할 것입니다. 이러한 설정은 귀하의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.
튜토리얼의 기초로 최소한의 우분투 서버 설정을 사용하는 것이 좋습니다. 이는 웹 호스팅 회사에서 제공하는 우분투 18.04 최소 설치가 포함된 가상 또는 루트 서버 이미지일 수 있으며, 또는 우리의 최소 서버 튜토리얼을 사용하여 처음부터 서버를 설치할 수 있습니다.
이 튜토리얼의 모든 단계를 루트 권한으로 실행하고 있으므로 루트로 로그인했는지 확인하십시오:
sudo -s1. MySQL 또는 MariaDB 데이터베이스 설치
현재 두 가지 널리 사용되는 MySQL 데이터베이스 시스템이 있습니다. Oracle에서 개발한 클래식 “MySQL” 서버는 현재 버전 5.7로 제공되며, 원래 MySQL 개발자인 Monty Widenius가 개발한 MySQL 포크인 MariaDB가 있습니다.
아래에서 두 가지 대안을 설치하는 방법을 보여드리겠습니다. 1.1 또는 1.2 장 중 하나만 따르십시오. 저는 Howtoforge에서 다운로드할 수 있는 가상 머신 이미지에 MySQL 5.7을 사용할 것입니다.
1.1 MySQL 5.7 설치
MySQL 5.7을 설치하려면 다음 명령을 실행하십시오:
apt-get -y install mysql-server mysql-client패키지 mysql-server와 mysql-client는 소위 ‘메타 패키지‘로, 항상 우분투에서 사용할 수 있는 최신 MySQL 버전을 설치합니다. 현재 최신 버전은 MySQL 5.7입니다.
설치 중에 MySQL의 루트 비밀번호를 이미 설정했지만, 보안상의 이유로 익명 사용자와 테스트 데이터베이스를 제거하고 싶습니다. 아래의 mysql_secure_installation 명령을 실행하여 이를 달성하십시오.
mysql_secure_installation다음 질문을 받게 됩니다:
MySQL 서버 배포 보안 설정 중입니다.루트 사용자 비밀번호 입력: <-- MySQL 루트 비밀번호 입력VALIDATE PASSWORD PLUGIN을 사용하여 비밀번호를 테스트하고 보안을 개선할 수 있습니다. 비밀번호의 강도를 확인하고 사용자가 충분히 안전한 비밀번호만 설정할 수 있도록 허용합니다. VALIDATE PASSWORD 플러그인을 설정하시겠습니까?예를 선택하려면 y|Y를 누르고, 아니오를 선택하려면 다른 키를 누르십시오:
기존 비밀번호를 루트에 사용합니다.
루트 비밀번호를 변경하시겠습니까? ((예를 선택하려면 y|Y를 누르고, 아니오를 선택하려면 다른 키를 누르십시오) : <-- 비밀번호 유효성 검사를 활성화하려면 여기서 'y'를 선택하십시오. 저는 이 기능이 필요하지 않으므로 여기서 'n'을 선택합니다.... 건너뜁니다.
기본적으로 MySQL 설치에는 익명 사용자가 있으며, 이는 누구나 사용자 계정을 생성하지 않고도 MySQL에 로그인할 수 있도록 허용합니다. 이는 테스트 용도로만 의도되며 설치를 조금 더 원활하게 진행하기 위한 것입니다. 프로덕션 환경으로 이동하기 전에 이를 제거해야 합니다.익명 사용자를 제거하시겠습니까? (예를 선택하려면 y|Y를 누르고, 아니오를 선택하려면 다른 키를 누르십시오) : <-- y
성공.
보통 루트는 'localhost'에서만 연결할 수 있어야 합니다. 이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.원격으로 루트 로그인을 허용하지 않으시겠습니까? (예를 선택하려면 y|Y를 누르고, 아니오를 선택하려면 다른 키를 누르십시오) : <-- y
성공.기본적으로 MySQL에는 'test'라는 데이터베이스가 있으며, 누구나 접근할 수 있습니다. 이는 테스트 용도로만 의도되며, 프로덕션 환경으로 이동하기 전에 제거해야 합니다.테스트 데이터베이스 및 이에 대한 접근을 제거하시겠습니까? (예를 선택하려면 y|Y를 누르고, 아니오를 선택하려면 다른 키를 누르십시오) : <-- y
- 테스트 데이터베이스 삭제 중...
성공.- 테스트 데이터베이스에 대한 권한 제거 중...
성공.권한 테이블을 다시 로드하면 지금까지의 모든 변경 사항이 즉시 적용됩니다.권한 테이블을 지금 다시 로드하시겠습니까? (예를 선택하려면 y|Y를 누르고, 아니오를 선택하려면 다른 키를 누르십시오) : <-- y
성공.모두 완료되었습니다!이제 MySQL 설정이 보안되었습니다.
1.2 MariaDB 10 설치
다음 명령을 실행하여 MariaDB 서버 및 클라이언트를 설치하십시오:
apt-get -y install mariadb-server mariadb-client이제 MariaDB의 루트 비밀번호를 설정합니다.
mysql_secure_installation다음 질문을 받게 됩니다:
루트의 현재 비밀번호 입력 (없으면 엔터): <-- 엔터를 누르십시오
루트 비밀번호를 설정하시겠습니까? [Y/n] <-- y
새 비밀번호: <-- 여기에서 새로운 MariaDB 루트 비밀번호를 입력하십시오
새 비밀번호를 다시 입력하십시오: <-- 비밀번호를 반복하십시오
익명 사용자를 제거하시겠습니까? [Y/n] <-- y
원격으로 루트 로그인을 허용하지 않으시겠습니까? [Y/n] <-- y
권한 테이블을 지금 다시 로드하시겠습니까? [Y/n] <-- y1.3 MySQL/MariaDB 루트 로그인 테스트
“mysql 명령”으로 MariaDB에 로그인 테스트를 수행하십시오:
mysql -u root -p그리고 위에서 설정한 MariaDB 루트 비밀번호를 입력하십시오. 결과는 아래 스크린샷과 유사해야 합니다:

MySQL/MariaDB 셸을 종료하려면 “quit” 명령을 입력하고 엔터를 누르십시오.
2. Apache 웹 서버 설치
Apache 2는 우분투 패키지로 제공되므로 다음과 같이 설치할 수 있습니다:
apt-get -y install apache2이제 브라우저를 http://192.168.1.100으로 이동하면 Apache2 기본 페이지를 볼 수 있습니다 (작동합니다!):

Apache 기본 vhost의 문서 루트는 우분투에서 /var/www/html이며, 주요 구성 파일은 /etc/apache2/apache2.conf입니다. 구성 시스템은 /usr/share/doc/apache2/README.Debian.gz에 완전히 문서화되어 있습니다.
3. PHP 7.2 설치
다음과 같이 PHP 7.2 및 Apache PHP 모듈을 설치할 수 있습니다:
apt-get -y install php7.2 libapache2-mod-php7.2그런 다음 Apache를 재시작합니다:
systemctl restart apache24. PHP 테스트 및 PHP 설치에 대한 세부 정보 가져오기
기본 웹사이트의 문서 루트는 /var/www/html입니다. 이제 해당 디렉토리에 작은 PHP 파일 (info.php)을 생성하고 브라우저에서 호출하겠습니다. 이 파일은 설치된 PHP 버전과 같은 PHP 설치에 대한 유용한 세부 정보를 많이 표시합니다.
nano /var/www/html/info.php그런 다음 info.php 파일의 소유자를 www-data 사용자 및 그룹으로 변경합니다.
chown www-data:www-data /var/www/html/info.php이제 브라우저에서 해당 파일을 호출합니다 (예: http://192.168.1.100/info.php):

보시다시피, PHP 7.2가 작동하고 있으며, 서버 API 줄에 표시된 대로 Apache 2.0 핸들러를 통해 작동하고 있습니다. 아래로 스크롤하면 PHP에서 이미 활성화된 모든 모듈을 볼 수 있습니다. MySQL은 목록에 없으므로 PHP에서 MySQL / MariaDB 지원이 아직 없습니다.
5. PHP에서 MySQL / MariaDB 지원 가져오기
PHP에서 MySQL 지원을 얻으려면 php7.2-mysql 패키지를 설치할 수 있습니다. 애플리케이션에 필요할 수 있는 다른 PHP 모듈도 설치하는 것이 좋습니다. 사용 가능한 PHP 모듈을 다음과 같이 검색할 수 있습니다:
apt-cache search php7.2그리고
apt-cache search php-모든 PHP 패키지가 이름에 7.2 버전 번호를 포함하고 있지는 않습니다.
필요한 모듈을 선택하고 다음과 같이 설치합니다:
apt-get -y install php7.2-mysql php7.2-curl php7.2-gd php7.2-intl php-pear php-imagick php7.2-imap php-memcache php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl php7.2-mbstring php-gettext이제 Apache2를 재시작합니다:
systemctl restart apache2
이제 PHP 7.2는 위의 phpinfo()에서 보여준 대로 MySQL / MariaDB 지원을 갖추고 있습니다.
6. PHP 속도를 높이기 위한 Opcache + APCu PHP 캐시 설치
PHP 7은 PHP 중간 코드를 캐시하고 최적화하기 위한 내장 opcode 캐셔를 제공하며, 이름은 ‘opcache’이며 php7.0-opcache 패키지에서 사용할 수 있습니다. PHP 페이지 속도를 높이기 위해 Opcache를 설치하는 것이 강력히 권장됩니다. opcache 외에도 APCu를 설치할 것입니다. APCu는 PHP 5.x 버전에서 자주 사용되는 캐싱 시스템인 APC 캐시의 기능을 제공하기 위한 opcache의 호환성 래퍼입니다.
Opcache 및 APCu는 다음과 같이 설치할 수 있습니다:
apt-get -y install php7.2-opcache php-apcuOpcache가 이미 설치되어 있다고 표시되더라도 걱정하지 마십시오.
이제 Apache를 재시작합니다:
systemctl restart apache2이제 브라우저에서 http://192.168.1.100/info.php를 새로 고치고 다시 모듈 섹션으로 스크롤하십시오. 이제 많은 새로운 모듈을 찾을 수 있어야 합니다:

더 이상 필요하지 않은 경우 info.php 파일을 삭제하는 것을 잊지 마십시오. 이 파일은 서버의 민감한 세부 정보를 제공합니다. 파일을 삭제하려면 다음 명령을 실행하십시오.
rm -f /var/www/html/info.php7. Apache에서 SSL 웹사이트 활성화
SSL/TLS는 웹 브라우저와 서버 간의 연결을 암호화하는 보안 계층입니다. 대부분의 웹 브라우저는 서버와 웹 브라우저 간의 연결이 SSL로 암호화되지 않은 경우 오늘날 사이트를 안전하지 않은 것으로 표시하기 시작합니다. 이 장에서는 SSL로 웹사이트를 보호하는 방법을 보여드리겠습니다.
서버에서 SSL (https://) 지원을 활성화하려면 다음 명령을 실행하십시오. 실행:
a2enmod ssl
a2ensite default-ssl이는 SSL 모듈을 활성화하고 /etc/apache2/sites-available/default-ssl.conf 파일에 대한 심볼릭 링크를 /etc/apache2/sites-enabled 폴더에 추가하여 활성 Apache 구성에 포함시킵니다. 그런 다음 새 구성을 활성화하려면 Apache를 재시작합니다:
systemctl restart apache2이제 브라우저에서 https://192.168.1.100을 열어 SSL 연결을 테스트하십시오.

서버의 SSL 인증서가 “자체 서명된” SSL 인증서이기 때문에 SSL 경고가 표시됩니다. 이는 브라우저가 기본적으로 이 인증서를 신뢰하지 않으며 먼저 보안 경고를 수락해야 함을 의미합니다. 경고를 수락한 후 Apache 기본 페이지를 볼 수 있습니다.

브라우저의 URL 앞에 있는 닫힌 “녹색 자물쇠”는 연결이 암호화되었음을 나타냅니다.
SSL 경고를 없애는 방법은 두 가지가 있습니다. 하나는 /etc/ssl/certs/ssl-cert-snakeoil.pem의 자체 서명된 SSL 인증서를 SSL 기관에서 구입한 공식 서명된 SSL 인증서로 교체하는 것이고, 다른 하나는 제가 8장에서 설명할 Let’s Encrypt에서 무료 SSL 인증서를 받는 것입니다.
8. Let’s Encrypt에서 무료 SSL 인증서 받기
Let’s Encrypt SSL 인증서로 웹사이트를 보호하기 위한 첫 번째 단계는 python3-certbot-apache 패키지를 설치하는 것입니다. 다음 명령을 실행하십시오:
apt-get -y install python3-certbot-apache다음 단계에서는 certbot 클라이언트 프로그램을 사용하여 Let’s Encrypt에서 SSL 인증서를 요청합니다. 이 과정에서 Let’s Encrypt 서버는 certbot 명령에 제공한 도메인 이름을 통해 귀하의 서버에 연결하려고 시도합니다. 이 도메인 이름이 DNS에서 이미 귀하의 서버를 가리키고 있어야 하며, 웹사이트가 포트 80 (http)에서 도메인 이름으로 접근 가능해야 합니다. 웹사이트가 인터넷에서 접근할 수 없다면 Let’s Encrypt SSL 인증서 생성이 실패합니다.
SSL 인증서를 생성하기 전에 vhost 구성 파일에서 도메인 이름을 설정하십시오. 기본 vhost 파일을 편집기로 엽니다:
nano /etc/apache2/sites-available/000-default.conf그리고 다음 줄을 추가합니다:
ServerName example.com‘DocumentRoot’ 줄 바로 아래에 추가합니다. example.com을 귀하의 웹사이트 도메인 이름으로 교체하십시오.
그런 다음 다음 명령으로 SSL 인증서를 생성합니다:
certbot --apache -d example.com여기에서도 example.com을 귀하의 도메인 이름으로 교체하십시오. 이 명령은 여러 질문을 묻는 마법사를 시작합니다.
이 웹사이트의 책임자에게 연락할 수 있는 이메일 주소를 입력하십시오.
Let’s Encrypt SSL 기관의 약관에 동의하십시오.
Certbot은 이제 전자 프론티어 재단과 이메일 주소를 공유할 것인지 묻습니다. 여기서 원하는 대로 선택하십시오.
그런 다음 비 SSL 요청을 https://로 자동으로 리디렉션할 것인지 선택하십시오. 웹사이트가 http:// 및 https:// 버전으로 제공될 때 중복 콘텐츠 문제를 피하기 위해 여기서 예를 선택하겠습니다.

SSL 인증서가 성공적으로 발급되었습니다.

이제 브라우저에서 웹사이트에 접근하면 자동으로 SSL로 리디렉션되며, 브라우저의 URL 바 앞에 있는 녹색 자물쇠가 신뢰할 수 있는 SSL 인증서를 사용하고 있음을 보여줍니다.

8.1 Let’s Encrypt 자동 갱신
Let’s Encrypt SSL 인증서는 단 80일 동안만 유효합니다. 따라서 SSL 인증서를 자동 갱신하는 cronjob이 필요하며, 이 cronjob은 certbot –renew 명령을 실행합니다.
이 cronjob은 certbot을 설치할 때 자동으로 설정되며, cron 파일은 /etc/cron.d/certbot입니다. 따라서 여기서 더 이상 할 일이 없습니다. cronjob이 어떻게 생겼는지 알고 싶다면 다음 명령을 실행하십시오:
/etc/cron.d/certbot결과는 다음과 같습니다:
root@server1:~# cat /etc/cron.d/certbot
# /etc/cron.d/certbot: certbot 패키지에 대한 crontab 항목
#
# 업스트림에서는 하루에 두 번 갱신을 시도할 것을 권장합니다
#
# 결국, 이는 인증서가 취소되지 않았는지 확인할 기회가 될 것입니다
# 만료가 30일 이내인 경우에만 갱신이 발생합니다.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin0 */12 * * * root test -x /usr/bin/certbot -a \\! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew9. phpMyAdmin 설치
phpMyAdmin은 MySQL 데이터베이스를 관리할 수 있는 웹 인터페이스입니다. 설치하는 것이 좋습니다:
apt-get -y install phpmyadmin중요: apt 설치 프로그램이 여러 질문을 할 것입니다. 그 중 하나는 웹 서버 유형을 선택하는 것입니다. 일반적인 실수는 웹 서버 유형이 강조 표시되지만 선택되지 않는 것입니다. apt 메뉴에서 항목을 선택하려면 탭 또는 커서 키로 항목으로 이동한 후 스페이스 바를 눌러야 합니다. 단순히 강조 표시하는 것만으로는 충분하지 않습니다!
다음 질문을 보게 됩니다:
자동으로 구성할 웹 서버: <-- 옵션 선택: apache2
phpmyadmin을 dbconfig-common으로 구성하시겠습니까? <-- 예
phpmyadmin의 MySQL 애플리케이션 비밀번호: <-- 엔터를 누르십시오. apt가 자동으로 무작위 비밀번호를 생성합니다.9.1 PHPMyAdmin에 대한 루트 액세스
MariaDB와 MySQL은 기본적으로 루트 사용자에 대해 “unix_socket”라는 플러그인을 활성화합니다. 이 플러그인은 루트 사용자가 PHPMyAdmin에 로그인할 수 없도록 하고, 루트 사용자에 대한 MySQL의 TCP 연결이 작동하지 않도록 합니다. PHPMyAdmin에서 다른 사용자와 데이터베이스를 생성할 수 있는 권한을 가진 사용자를 얻기 위해, 루트 사용자와 동일한 권한을 가진 “admin”이라는 이름의 새로운 MySQL 사용자를 생성할 것입니다.
셸에서 루트 사용자로 MySQL 데이터베이스에 로그인하십시오:
mysql -u root“admin”이라는 이름과 “howtoforge”라는 비밀번호를 가진 새 사용자를 생성합니다. 아래 명령에서 비밀번호 “howtoforge”를 안전한 비밀번호로 교체하십시오!
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit그 후, http://192.168.1.100/phpmyadmin/에서 phpMyAdmin에 접근할 수 있습니다:


10 이 튜토리얼의 가상 머신 이미지 다운로드
이 튜토리얼은 VMWare 및 Virtualbox와 호환되는 ovf/ova 형식의 사용 준비가 완료된 가상 머신 이미지로 제공됩니다. 가상 머신 이미지는 다음 로그인 세부 정보를 사용합니다:
SSH / 셸 로그인
사용자 이름: administrator
비밀번호: howtoforge
이 사용자는 sudo 권한이 있습니다.
MySQL 로그인
사용자 이름: root
비밀번호: howtoforge
VM의 IP는 192.168.1.100이며, /etc/network/interfaces 파일에서 변경할 수 있습니다. 위의 모든 비밀번호를 변경하여 가상 머신을 안전하게 하십시오.
11 링크
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- MySQL: http://www.mysql.com/
- MariaDB: https://mariadb.com/
- 우분투: http://www.ubuntu.com/
- phpMyAdmin: http://www.phpmyadmin.net/
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.