웹사이트 검색

Apache, PHP 7 및 MySQL을 사용한 Ubuntu 16.04(LTS) LAMP 서버 자습서


LAMP는 Linux, Apache, MySQL, PHP의 약자입니다. 이 튜토리얼은 PHP 7(mod_php) 및 MySQL/MariaDB 지원이 있는 Ubuntu 16.04 LTS(Xenial Xerus) 서버에 Apache 웹 서버를 설치하는 방법과 Lets encrypt로 SSL 인증서를 설정하는 방법을 보여줍니다. 또한 MySQL 관리를 더 쉽게 하기 위해 PHPMyAdmin을 설치하겠습니다. LAMP 설정은 Joomla, Wordpress 또는 Drupal과 같은 널리 사용되는 CMS 시스템의 완벽한 기반입니다.

서문

이 자습서에서는 호스트 이름 server1.example.com을 IP 주소 192.168.1.100과 함께 사용합니다. 이러한 설정은 사용자에 따라 다를 수 있으므로 적절하게 교체해야 합니다.

가이드의 기초로 최소 Ubuntu 서버 설정을 사용하는 것이 좋습니다. 웹 호스팅 회사에서 Ubuntu 16.04 최소 설치가 포함된 가상 또는 루트 서버 이미지이거나 최소 서버 가이드를 사용하여 처음부터 서버를 설치할 수 있습니다.

루트 권한으로 이 튜토리얼의 모든 단계를 실행하고 있으므로 루트로 로그인했는지 확인하십시오.

sudo su

1. MySQL 또는 MariaDB 데이터베이스 설치하기

현재 널리 사용되는 두 가지 MySQL 데이터베이스 시스템이 있습니다. Oracle에서 개발하여 현재 버전 5.7에서 사용할 수 있는 고전적인 \MySQL\ 서버와 원래 MySQL 개발자인 Monty Widenius가 개발한 MariaDB라는 이름의 MySQL 포크입니다.

아래에서 두 가지 대안을 모두 설치하는 방법을 보여 드리겠습니다. 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는 메타 패키지라고 하며 항상 Ubuntu에서 사용할 수 있는 최신 MySQL 버전을 설치합니다. 최신 버전은 현재 MySQL 5.7입니다.

설치 중에 이미 MySQL의 루트 암호를 설정했지만 보안상의 이유로 익명 사용자 및 테스트 데이터베이스를 제거하고 싶습니다. 이를 달성하려면 아래의 mysql_secure_installation 명령을 실행하십시오.

mysql_secure_installation

다음과 같은 질문을 받게 됩니다.

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
VALIDATE PASSWORD PLUGIN 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 plugin?
Press y|Y for Yes, any other key for No:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
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.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.
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.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

이제 MySQL 설정이 보호되었습니다.

1.2 MariaDB 10 설치

다음 명령을 실행하여 MariaDB 서버 및 클라이언트를 설치합니다.

apt-get -y install mariadb-server mariadb-client

이제 MariaDB의 루트 비밀번호를 설정합니다.

mysql_secure_installation

다음과 같은 질문을 받게 됩니다.

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

\mysql command\를 사용하여 MariaDB에 대한 로그인을 테스트합니다.

mysql -u root -p

위에서 설정한 MariaDB 루트 암호를 입력합니다. 결과는 아래 스크린샷과 유사해야 합니다.

MariaDB 셸을 종료하려면 \quit\ 명령을 입력하고 Enter 키를 누릅니다.

2. 아파치 웹 서버 설치

Apache 2는 Ubuntu 패키지로 제공되므로 다음과 같이 설치할 수 있습니다.

apt-get -y install apache2

이제 브라우저에서 http://192.168.1.100으로 이동하면 Apache2 기본 페이지가 표시됩니다(작동합니다!).

Apache 기본 가상 호스트의 문서 루트는 Ubuntu의 /var/www/html이고 기본 구성 파일은 /etc/apache2/apache2.conf입니다. 구성 시스템은 /usr/share/doc/apache2/README.Debian.gz에 완전히 문서화되어 있습니다.

3. PHP 7 설치

다음과 같이 PHP 7 및 Apache PHP 모듈을 설치할 수 있습니다.

apt-get -y install php7.0 libapache2-mod-php7.0

그런 다음 Apache를 다시 시작합니다.

systemctl restart apache2

4. PHP를 테스트하고 PHP 설치에 대한 세부 정보 얻기

기본 웹 사이트의 문서 루트는 /var/www/html입니다. 이제 해당 디렉토리에 작은 PHP 파일(info.php)을 만들고 브라우저에서 호출합니다. 이 파일은 설치된 PHP 버전과 같은 PHP 설치에 대한 많은 유용한 정보를 표시합니다.

nano /var/www/html/info.php
<?php
phpinfo();
?>

그런 다음 info.php 파일의 소유자를 www-data 사용자 및 그룹으로 변경합니다.

chown www-data:www-data /var/www/html/info.php

이제 브라우저에서 해당 파일을 호출합니다(예: http://192.168.1.100/info.php).

보시다시피 PHP 7.0이 작동 중이며 서버 API 라인에 표시된 것처럼 Apache 2.0 핸들러를 통해 작동합니다. 더 아래로 스크롤하면 PHP5에서 이미 활성화된 모든 모듈이 표시됩니다. MySQL은 목록에 없습니다. 이는 아직 PHP에서 MySQL/MariaDB를 지원하지 않는다는 의미입니다.

5. PHP에서 MySQL/MariaDB 지원 받기

PHP에서 MySQL 지원을 받으려면 php7.0-mysql 패키지를 설치할 수 있습니다. 다른 PHP 모듈을 설치하는 것이 좋으며 애플리케이션에 필요할 수도 있습니다. 다음과 같이 사용 가능한 PHP 모듈을 검색할 수 있습니다.

apt-cache search php7.0

필요한 것을 선택하고 다음과 같이 설치하십시오.

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

이제 Apache2를 다시 시작합니다.

systemctl restart apache2

PHP 7은 이제 위의 phpinfo()에 표시된 것처럼 MySQL/MariaDB를 지원합니다.

6. Opcache + APCu PHP 캐시를 설치하여 PHP 속도 향상

PHP 7은 PHP 중간 코드 캐싱 및 최적화를 위한 내장 opcode 캐셔와 함께 제공되며 이름은 opcache이며 php7.0-opcache 패키지에서 사용할 수 있습니다. PHP 페이지 속도를 높이려면 Opcache를 설치하는 것이 좋습니다. opcache 외에도 opcache용 호환성 래퍼인 APCu를 설치하여 PHP 5.x 버전에서 자주 사용되는 캐싱 시스템인 APC 캐시의 기능을 제공하고 여전히 많은 CMS 시스템에서 이를 사용합니다.

Opcache 및 APCu는 다음과 같이 설치할 수 있습니다.

apt-get -y install php7.0-opcache php-apcu

Opcache가 이미 설치되어 있다고 표시되더라도 걱정하지 마십시오.

이제 Apache를 다시 시작합니다.

systemctl restart apache2

이제 브라우저에서 http://192.168.1.100/info.php를 다시 로드하고 모듈 섹션으로 다시 스크롤하십시오. 이제 거기에서 많은 새 모듈을 찾을 수 있습니다.

info.php 파일은 서버의 민감한 정보를 제공하므로 더 이상 필요하지 않을 때 삭제하는 것을 잊지 마십시오. 다음 명령을 실행하여 파일을 삭제합니다.

rm -f /var/www/html/info.php

7. 아파치에서 SSL 웹사이트 활성화

SSL/TLS는 웹 브라우저와 서버 간의 연결을 암호화하는 보안 계층입니다. 오늘날 대부분의 웹 브라우저는 서버와 웹 브라우저 간의 연결이 SSL로 암호화되지 않은 경우 사이트를 안전하지 않은 것으로 표시하기 시작합니다. 이 장에서는 SSL로 웹 사이트를 보호하는 방법을 보여줍니다.

서버에서 다음 명령을 실행하여 SSL(https://) 지원을 활성화하십시오. 달리다:

a2enmod ssl
a2ensite default-ssl

SSL 모듈을 활성화하고 /etc/apache2/sites-enabled 폴더의 symlink를 /etc/apache2/sites-available/default-ssl.conf 파일에 추가하여 활성 Apache 구성에 포함합니다. 그런 다음 Apache를 다시 시작하여 새 구성을 활성화합니다.

systemctl restart apache2

이제 웹 브라우저에서 https://192.168.1.100을 열어 SSL 연결을 테스트합니다.

서버의 SSL 인증서가 \자체 서명\ SSL 인증서이므로 SSL 경고를 받게 됩니다. 이는 브라우저가 기본적으로 이 인증서를 신뢰하지 않으며 먼저 보안 경고를 수락해야 함을 의미합니다. 경고를 수락하면 Apache 기본 페이지가 표시됩니다.

브라우저에서 URL 앞의 닫힌 \녹색 자물쇠\는 연결이 암호화되었음을 나타냅니다.

SSL 경고를 제거하는 방법에는 두 가지가 있습니다. 자체 서명된 SSL 인증서 /etc/ssl/certs/ssl-cert-snakeoil.pem을 SSL 기관에서 구매한 공식 서명된 SSL 인증서로 바꾸거나 8장에서 설명할 Lets encrypt의 무료 SSL 인증서.

8. Lets Encrypt에서 무료 SSL 인증서 받기

Lets Encrypt SSL 인증서로 웹사이트를 보호하는 첫 번째 단계는 python-letsencrypt-apache 패키지를 설치하는 것입니다. 다음 명령을 실행합니다.

apt-get -y install python-letsencrypt-apache

다음 단계에서는 Lets Encrypt에서 SSL 인증서를 요청합니다. 이 프로세스 중에 Lets Encrypt 서버는 사용자가 letsencrypt 명령에 제공한 도메인 이름을 통해 서버에 연결을 시도합니다. 이미 포트 80(http)의 도메인 이름으로 웹 사이트에 도달할 수 있도록 이 도메인 이름이 이미 DNS의 서버를 가리키는 것이 중요합니다. 인터넷에서 웹 사이트에 연결할 수 없는 경우 Lets Encrypt SSL 인증서 생성이 실패합니다.

SSL 인증서 생성을 시작하기 전에 vhost 구성 파일에서 도메인 이름을 설정하십시오. 편집기로 기본 가상 호스트 파일을 엽니다.

nano /etc/apache2/sites-available/000-default.conf

다음 줄을 추가합니다.

ServerName example.com

DocumentRoot 줄 바로 아래에 있습니다. example.com을 자신의 웹사이트 도메인 이름으로 바꿉니다.

그런 다음 다음 명령을 사용하여 SSL 인증서를 만듭니다.

letsencrypt --apache -d example.com

여기에서 example.com을 도메인 이름으로 다시 바꾸십시오. 이 명령은 몇 가지 질문을 하는 마법사를 시작합니다.

이 웹사이트를 담당하는 관리자에게 연락할 수 있는 이메일 주소를 입력하십시오.

Lets Encrypt SSL 기관의 이용 약관에 동의합니다.

비SSL 요청을 https://로 자동 리디렉션할지 여부를 선택합니다. 웹 사이트가 http:// 및 https:// 버전으로 사용 가능한 경우 중복 콘텐츠 문제를 피하기 위해 여기에서 예를 선택합니다.

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

지금 브라우저를 사용하여 웹사이트에 액세스하면 자동으로 SSL로 리디렉션되며 브라우저의 URL 표시줄 앞에 있는 녹색 자물쇠는 현재 신뢰할 수 있는 SSL 인증서를 사용하고 있음을 나타냅니다.

8.1 자동 갱신을 암호화하자

Lets Encrypt SSL 인증서는 80일이라는 짧은 기간 동안만 유효합니다. 따라서 이제 필요할 때 SSL 인증서를 자동 갱신하도록 cronjob을 설정합니다. 명령은 letsencrypt 갱신입니다.

LE 자동 갱신을 위한 cronjob을 설정합니다. 달리다:

crontab -e

편집기에서 루트 crontab을 엽니다. 파일 끝에 다음 줄을 삽입합니다.

0 1 * * * /usr/bin/letsencrypt renew &> /dev/null

파일을 저장하면 cronjob이 활성화됩니다. 이 cronjob은 매일 밤 오전 1시에 Lets Encrypt renew 명령을 호출합니다. 이 명령은 필요할 때만 SSL 인증서를 갱신하므로(만료 30일 전) 매일 밤 실행해도 문제가 없습니다.

9. phpMyAdmin 설치

phpMyAdmin은 MySQL 데이터베이스를 관리할 수 있는 웹 인터페이스입니다. 설치하는 것이 좋습니다.

apt-get -y install phpmyadmin

중요: apt 설치 프로그램은 이제 몇 가지 질문을 할 것입니다. 그 중 하나는 웹 서버 유형을 선택하는 것입니다. 일반적인 실수는 웹 서버 유형이 강조 표시만 되고 선택되지 않는다는 것입니다. apt 메뉴에서 항목을 선택하려면 탭 또는 커서 키로 항목을 탐색한 후 키보드의 스페이스바를 눌러야 합니다. 강조하는 것만으로는 충분하지 않습니다!

다음과 같은 질문이 표시됩니다.

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1 MariaDB로 PHPMyAdmin에 대한 루트 액세스

다음 단계는 MariaDB 설치에만 필요합니다. MySQL 5.7을 사용하는 경우 이 단계를 건너뜁니다.

MariaDB는 기본적으로 루트 사용자에 대해 \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 링크

  • 아파치: 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/