웹사이트 검색

Ubuntu 16.04에 Linux, Apache, MySQL, PHP(LAMP) 스택을 설치하는 방법


소개

LAMP 스택은 서버가 동적 웹사이트 및 웹 앱을 호스팅할 수 있도록 일반적으로 함께 설치되는 일련의 오픈 소스 소프트웨어입니다. 이 용어는 Apache 웹 서버가 있는 Linux 운영 체제를 나타내는 약어입니다. 사이트 데이터는 MySQL 데이터베이스에 저장되며 동적 콘텐츠는 PHP에서 처리됩니다.

이 가이드에서는 Ubuntu 16.04 서버에 LAMP 스택을 설치합니다. Ubuntu는 첫 번째 요구 사항인 Linux 운영 체제를 충족합니다.

전제 조건

이 가이드를 시작하기 전에 서버에 설정된 sudo 권한이 있는 루트가 아닌 별도의 사용자 계정이 있어야 합니다. Ubuntu 16.04 자습서의 초기 서버 설정에서 1-4단계를 완료하여 이 작업을 수행하는 방법을 배울 수 있습니다.

1단계 - Apache 설치 및 방화벽 조정

Apache 웹 서버는 세계에서 가장 널리 사용되는 웹 서버 중 하나입니다. 잘 문서화되어 있고 웹 역사의 많은 부분에서 널리 사용되어 웹 사이트 호스팅을 위한 훌륭한 기본 선택이 되었습니다.

Ubuntu의 패키지 관리자인 apt를 사용하여 Apache를 쉽게 설치할 수 있습니다. 패키지 관리자를 사용하면 Ubuntu에서 유지 관리하는 저장소에서 대부분의 소프트웨어를 고통 없이 설치할 수 있습니다. 여기에서 apt 사용 방법에 대해 자세히 알아볼 수 있습니다.

목적을 위해 다음 명령을 입력하여 시작할 수 있습니다.

  1. sudo apt-get update
  2. sudo apt-get install apache2

sudo 명령을 사용하고 있기 때문에 이러한 작업은 루트 권한으로 실행됩니다. 의도를 확인하기 위해 일반 사용자의 비밀번호를 묻습니다.

암호를 입력하면 apt는 설치할 패키지와 추가 디스크 공간을 얼마나 차지할지 알려줍니다. y를 누르고 ENTER를 눌러 계속하면 설치가 진행됩니다.

구문 경고를 억제하도록 Global ServerName 설정

다음으로 /etc/apache2/apache2.conf 파일에 한 줄을 추가하여 경고 메시지를 억제합니다. 무해하지만 ServerName을 전체적으로 설정하지 않으면 구문 오류에 대한 Apache 구성을 확인할 때 다음 경고가 표시됩니다.

  1. sudo apache2ctl configtest
Output
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

텍스트 편집으로 기본 구성 파일을 엽니다.

  1. sudo nano /etc/apache2/apache2.conf

내부에서 파일 맨 아래에 기본 도메인 이름을 가리키는 ServerName 지시문을 추가합니다. 서버와 연결된 도메인 이름이 없는 경우 서버의 공용 IP 주소를 사용할 수 있습니다.

참고: 서버의 IP 주소를 모르는 경우 서버의 공용 IP 주소를 찾는 방법 섹션으로 건너뛰어 찾으십시오.

. . .
ServerName server_domain_or_IP

완료되면 파일을 저장하고 닫습니다.

다음으로 다음을 입력하여 구문 오류를 확인합니다.

  1. sudo apache2ctl configtest

전역 ServerName 지시문을 추가했으므로 다음과 같이 표시되어야 합니다.

Output
Syntax OK

변경 사항을 구현하려면 Apache를 다시 시작하십시오.

  1. sudo systemctl restart apache2

이제 방화벽 조정을 시작할 수 있습니다.

웹 트래픽을 허용하도록 방화벽 조정

다음으로 초기 서버 설정 지침에 따라 UFW 방화벽을 활성화했다고 가정하고 방화벽이 HTTP 및 HTTPS 트래픽을 허용하는지 확인하십시오. 다음과 같이 UFW에 Apache용 애플리케이션 프로필이 있는지 확인할 수 있습니다.

  1. sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Apache Full 프로필을 보면 포트 80 및 443에 대한 트래픽을 활성화한다고 표시되어야 합니다.

  1. sudo ufw app info "Apache Full"
Output
Profile: Apache Full Title: Web Server (HTTP,HTTPS) Description: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp

이 프로필에 대한 수신 트래픽 허용:

  1. sudo ufw allow in "Apache Full"

웹 브라우저에서 서버의 공용 IP 주소를 방문하여 모든 것이 계획대로 진행되었는지 확인하기 위해 바로 무작위 검사를 수행할 수 있습니다(이 정보가 없는 경우 공용 IP 주소가 무엇인지 알아보려면 다음 제목 아래의 참고 사항 참조) 이미):

http://your_server_IP_address

정보 제공 및 테스트 목적으로 제공되는 기본 Ubuntu 16.04 Apache 웹 페이지가 표시됩니다. 다음과 같아야 합니다.

이 페이지가 표시되면 이제 웹 서버가 올바르게 설치되었으며 방화벽을 통해 액세스할 수 있습니다.

서버의 공용 IP 주소 찾기

서버의 공용 IP 주소를 모르는 경우 여러 가지 방법으로 찾을 수 있습니다. 일반적으로 이것은 SSH를 통해 서버에 연결하는 데 사용하는 주소입니다.

명령줄에서 이를 몇 가지 방법으로 찾을 수 있습니다. 먼저 iproute2 도구를 사용하여 다음을 입력하여 주소를 가져올 수 있습니다.

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

이것은 당신에게 두세 줄을 돌려 줄 것입니다. 그것들은 모두 올바른 주소이지만 컴퓨터는 그 중 하나만 사용할 수 있으므로 자유롭게 각각 시도하십시오.

다른 방법은 curl 유틸리티를 사용하여 그것이 당신의 서버를 어떻게 보는지 알려주기 위해 외부인에게 연락하는 것입니다. IP 주소가 무엇인지 특정 서버에 요청하여 이를 수행할 수 있습니다.

  1. sudo apt-get install curl
  2. curl http://icanhazip.com

IP 주소를 얻기 위해 사용하는 방법에 관계없이 웹 브라우저의 주소 표시줄에 입력하여 서버에 연결할 수 있습니다.

2단계 - MySQL 설치

이제 웹 서버를 가동하고 실행 중이므로 MySQL을 설치할 차례입니다. MySQL은 데이터베이스 관리 시스템입니다. 기본적으로 사이트에서 정보를 저장할 수 있는 데이터베이스를 구성하고 액세스를 제공합니다.

다시 말하지만 apt를 사용하여 소프트웨어를 획득하고 설치할 수 있습니다. 이번에는 구성 요소가 서로 통신하는 데 도움이 되는 다른 "도우미\ 패키지도 설치합니다.

  1. sudo apt-get install mysql-server

참고: 이 경우 명령 전에 sudo apt-get update를 실행할 필요가 없습니다. 최근에 Apache를 설치하기 위해 위의 명령에서 실행했기 때문입니다. 컴퓨터의 패키지 색인은 이미 최신 상태여야 합니다.

다시 설치될 패키지 목록과 이들이 차지하는 디스크 공간이 표시됩니다. 계속하려면 Y를 입력합니다.

설치하는 동안 서버에서 MySQL "root\ 사용자의 암호를 선택하고 확인하도록 요청할 것입니다. 이것은 향상된 권한이 있는 MySQL의 관리 계정입니다. 서버 자체의 루트 계정과 유사하다고 생각하십시오. (하지만 지금 구성하고 있는 계정은 MySQL 전용 계정입니다.) 강력하고 고유한 암호인지 확인하고 공백으로 두지 마십시오.

설치가 완료되면 일부 위험한 기본값을 제거하고 데이터베이스 시스템에 대한 액세스를 약간 잠그는 간단한 보안 스크립트를 실행하려고 합니다. 다음을 실행하여 대화형 스크립트를 시작합니다.

  1. mysql_secure_installation

MySQL 루트 계정에 대해 설정한 비밀번호를 입력하라는 메시지가 표시됩니다. 다음으로 VALIDATE PASSWORD PLUGIN을 구성할 것인지 묻는 메시지가 표시됩니다.

경고: 이 기능을 활성화하는 것은 판단을 내리는 것입니다. 활성화되면 지정된 기준과 일치하지 않는 암호는 오류와 함께 MySQL에서 거부됩니다. phpMyAdmin용 Ubuntu 패키지와 같이 MySQL 사용자 자격 증명을 자동으로 구성하는 소프트웨어와 함께 취약한 암호를 사용하면 문제가 발생합니다. 유효성 검사를 비활성화한 상태로 두는 것이 안전하지만 데이터베이스 자격 증명에 대해 항상 강력하고 고유한 암호를 사용해야 합니다.

예를 나타내는 y 또는 활성화하지 않고 계속하려면 다른 항목을 대답합니다.

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:

암호 유효성 검사 수준을 선택하라는 메시지가 표시됩니다. 가장 강한 단계인 2를 입력하면 숫자, 대소문자, 특수문자가 포함되지 않거나 사전에 자주 사용되는 단어를 기반으로 하는 비밀번호를 설정하려고 하면 오류가 발생하므로 주의하십시오.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

암호 유효성 검사를 활성화한 경우 기존 루트 암호에 대한 암호 강도가 표시되고 해당 암호를 변경할지 묻는 메시지가 표시됩니다. 현재 암호가 마음에 들면 프롬프트에서 "no\를 의미하는 n을 입력하십시오.

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

나머지 질문의 경우 각 프롬프트에서 Y를 누르고 Enter 키를 눌러야 합니다. 이렇게 하면 일부 익명 사용자와 테스트 데이터베이스가 제거되고 원격 루트 로그인이 비활성화되며 이러한 새 규칙이 로드되어 MySQL이 변경 사항을 즉시 적용합니다.

이제 데이터베이스 시스템이 설정되었으며 계속 진행할 수 있습니다.

3단계 - PHP 설치

PHP는 동적 콘텐츠를 표시하기 위해 코드를 처리하는 설정의 구성 요소입니다. 스크립트를 실행하고, MySQL 데이터베이스에 연결하여 정보를 얻고, 처리된 콘텐츠를 웹 서버에 전달하여 표시할 수 있습니다.

다시 한 번 apt 시스템을 활용하여 구성 요소를 설치할 수 있습니다. PHP 코드가 Apache 서버에서 실행되고 MySQL 데이터베이스와 통신할 수 있도록 몇 가지 도우미 패키지도 포함할 것입니다.

  1. sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

아무 문제 없이 PHP를 설치해야 합니다. 우리는 이것을 잠시 후에 테스트할 것입니다.

대부분의 경우 디렉토리가 요청될 때 Apache가 파일을 제공하는 방식을 수정하려고 합니다. 현재 사용자가 서버에서 디렉토리를 요청하면 Apache는 먼저 index.html이라는 파일을 찾습니다. 우리는 웹 서버에 PHP 파일을 선호하도록 지시하고 싶기 때문에 Apache가 먼저 index.php 파일을 찾도록 할 것입니다.

이렇게 하려면 다음 명령을 입력하여 루트 권한으로 텍스트 편집기에서 dir.conf 파일을 엽니다.

  1. sudo nano /etc/apache2/mods-enabled/dir.conf

다음과 같이 표시됩니다.

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

위에서 강조 표시된 PHP 인덱스 파일을 다음과 같이 DirectoryIndex 사양 다음의 첫 번째 위치로 이동하려고 합니다.

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

완료되면 Ctrl-X를 눌러 파일을 저장하고 닫습니다. Y를 입력하여 저장을 확인한 다음 Enter 키를 눌러 파일 저장 위치를 확인해야 합니다.

그런 다음 변경 사항을 인식하려면 Apache 웹 서버를 다시 시작해야 합니다. 다음과 같이 입력하면 됩니다.

  1. sudo systemctl restart apache2

systemctl을 사용하여 apache2 서비스의 상태를 확인할 수도 있습니다.

  1. sudo systemctl status apache2
Sample Output
● apache2.service - LSB: Apache2 web server Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Wed 2016-04-13 14:28:43 EDT; 45s ago Docs: man:systemd-sysv-generator(8) Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS) Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS) Tasks: 6 (limit: 512) CGroup: /system.slice/apache2.service ├─13623 /usr/sbin/apache2 -k start ├─13626 /usr/sbin/apache2 -k start ├─13627 /usr/sbin/apache2 -k start ├─13628 /usr/sbin/apache2 -k start ├─13629 /usr/sbin/apache2 -k start └─13630 /usr/sbin/apache2 -k start Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server. Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server... Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: * Starting Apache httpd web server apache2 Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]: * Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.

PHP 모듈 설치

PHP의 기능을 향상시키기 위해 선택적으로 몇 가지 추가 모듈을 설치할 수 있습니다.

PHP 모듈 및 라이브러리에 사용 가능한 옵션을 보려면 apt-cache 검색 결과를 다른 명령의 출력을 스크롤할 수 있는 호출기인 less로 파이프할 수 있습니다. :

  1. apt-cache search php- | less

화살표 키를 사용하여 위아래로 스크롤하고 q를 사용하여 종료합니다.

결과는 설치할 수 있는 모든 선택적 구성 요소입니다. 각각에 대한 간단한 설명을 제공합니다.

libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
…
:

각 모듈이 수행하는 작업에 대한 자세한 정보를 얻으려면 인터넷을 검색하거나 다음을 입력하여 패키지에 대한 자세한 설명을 볼 수 있습니다.

  1. apt-cache show package_name

모듈이 제공하는 기능에 대한 더 긴 설명이 있는 Description-en이라는 하나의 필드와 함께 많은 출력이 있을 것입니다.

예를 들어 php-cli 모듈이 무엇을 하는지 알아보기 위해 다음과 같이 입력할 수 있습니다.

  1. apt-cache show php-cli

많은 양의 다른 정보와 함께 다음과 같은 것을 찾을 수 있습니다.

Output
… Description-en: command-line interpreter for the PHP scripting language (default) This package provides the /usr/bin/php command interpreter, useful for testing PHP scripts from a shell or performing general shell scripting tasks. . PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Debian's default PHP version (currently 7.0). …

조사한 후 패키지를 설치하기로 결정한 경우 다른 소프트웨어에 대해 했던 것처럼 apt-get install 명령을 사용하여 설치할 수 있습니다.

php-cli가 필요하다고 판단되면 다음과 같이 입력할 수 있습니다.

  1. sudo apt-get install php-cli

둘 이상의 모듈을 설치하려면 다음과 같이 apt-get install 명령에 따라 각 모듈을 공백으로 구분하여 나열하면 됩니다.

  1. sudo apt-get install package1 package2 ...

이 시점에서 LAMP 스택이 설치되고 구성됩니다. 그래도 여전히 PHP를 테스트해야 합니다.

4단계 - 웹 서버에서 PHP 처리 테스트

시스템이 PHP에 대해 올바르게 구성되었는지 테스트하기 위해 매우 기본적인 PHP 스크립트를 만들 수 있습니다.

우리는 이 스크립트를 info.php라고 부를 것입니다. Apache가 파일을 찾고 올바르게 제공하려면 웹 루트라고 하는 매우 구체적인 디렉토리에 파일을 저장해야 합니다.

Ubuntu 16.04에서 이 디렉토리는 /var/www/html/에 있습니다. 다음을 입력하여 해당 위치에 파일을 만들 수 있습니다.

  1. sudo nano /var/www/html/info.php

그러면 빈 파일이 열립니다. 유효한 PHP 코드인 다음 텍스트를 파일 안에 넣고 싶습니다.

<?php
phpinfo();
?>

완료되면 파일을 저장하고 닫습니다.

이제 웹 서버가 PHP 스크립트로 생성된 콘텐츠를 올바르게 표시할 수 있는지 테스트할 수 있습니다. 이를 시도하려면 웹 브라우저에서 이 페이지를 방문하기만 하면 됩니다. 서버의 공용 IP 주소가 다시 필요합니다.

방문하려는 주소는 다음과 같습니다.

http://your_server_IP_address/info.php

방문하는 페이지는 다음과 같아야 합니다.

이 페이지는 기본적으로 PHP의 관점에서 서버에 대한 정보를 제공합니다. 디버깅 및 설정이 올바르게 적용되는지 확인하는 데 유용합니다.

성공하면 PHP가 예상대로 작동하는 것입니다.

권한이 없는 사용자에게 실제로 서버에 대한 정보를 제공할 수 있기 때문에 이 테스트 후에 이 파일을 제거하는 것이 좋습니다. 이를 위해 다음을 입력할 수 있습니다.

  1. sudo rm /var/www/html/info.php

나중에 정보에 다시 액세스해야 하는 경우 언제든지 이 페이지를 다시 만들 수 있습니다.

결론

이제 LAMP 스택이 설치되었으므로 다음에 수행할 작업에 대한 많은 선택 사항이 있습니다. 기본적으로 서버에 대부분의 웹사이트와 웹 소프트웨어를 설치할 수 있는 플랫폼을 설치했습니다.

즉각적인 다음 단계로 HTTPS를 통해 웹 서버에 대한 연결을 제공하여 보안 연결을 보장해야 합니다. 여기서 가장 쉬운 옵션은 Let’s Encrypt를 사용하여 무료 TLS/SSL 인증서로 사이트를 보호하는 것입니다.

다른 인기 있는 옵션은 다음과 같습니다.

  • 인터넷에서 가장 인기 있는 콘텐츠 관리 시스템인 Wordpress를 설치하세요.
  • 웹 브라우저에서 MySQL 데이터베이스를 관리할 수 있도록 PHPMyAdmin을 설정합니다.
  • 데이터베이스 관리를 위한 MySQL에 대해 자세히 알아보세요.
  • SFTP를 사용하여 서버와 파일을 주고받는 방법을 알아보세요.