웹사이트 검색

Debian 9의 LAMP에 Wordpress 설치


이 튜토리얼에서는 Debian 9 - Stretch의 LAMP 스택 위에 최신 버전 WordPress를 설치하고 구성하는 방법을 보여줍니다. 의심할 여지 없이 Wordpress는 요즘 인터넷 게시에 사용되는 가장 인기 있는 오픈 소스 콘텐츠 관리 시스템 또는 CMS 중 하나이며 소규모 블로그 사이트이든 유명 유명 브랜드이든 상관없이 전 세계적으로 6천만 개 이상의 웹사이트를 지원합니다. PHP 및 MySQL 엔진을 기반으로 하는 Wordpress는 종종 전용 서버 또는 가상 사설 서버 또는 공유 웹 호스팅 공급자에 설치된 LAMP 컬렉션과 연결됩니다. LAMP 약어는 선택한 배포판에 관계없이 일반적으로 Linux 오픈 소스 커널로 구성되는 소프트웨어 번들이라고도 하는 소프트웨어 모음을 설명합니다. Apache HTTP 서버는 안정성, 유연성 및 성능으로 인해 인터넷에서 가장 인기 있는 오픈 소스 웹 서버, PHP 서버측 해석 프로그래밍 언어 및 MariaDB 관계형 데이터베이스 관리 시스템(RDBMS) 가장 널리 사용되는 데이터베이스 소프트웨어 중 하나로, 원본 MySQL에서 오픈 소스 커뮤니티에 의해 포크되고 동시에 개발되었습니다.

요구 사항:

  • 가상 사설 서버나 가상 머신 또는 자체 전용 베어메탈 머신에 직접 Debian 9 운영 체제를 새로 설치합니다.
  • VPS나 원격 서버의 경우 SSH 원격 접속 또는 콘솔 직접 접속
  • 서버에 구성된 네트워크 인터페이스에 대한 최소한의 정적 IP 주소
  • 웹페이지가 인터넷에서 공개적으로 사용 가능해야 하는 경우 적절한 DNS 레코드가 구성된 등록된 공개 도메인 이름이 필요합니다. 이 튜토리얼에서는 linuxbox.ml 을 예제 도메인으로 사용하고 기본 라우터 뒤에 있는 NAT의 개인 공간에서 고정 IP 주소를 사용할 것입니다. 라우터 쪽에서 내부 자체 호스팅 가상 머신 LAN으로 Apache 80 및 443 포트를 포워딩하여 인터넷에서 도메인에 액세스할 수 있습니다.

1부 – LAMP 소프트웨어 번들 설치

  1. 모든 LAMP 구성 요소 설치를 시작하기 전에 가장 먼저 할 일은 Debian 9 서버에 로그인하여 커널 업그레이드, 패키지 업데이트 또는 보안 패치와 같은 모든 시스템 구성 요소에 대한 최신 절차를 수행하는 것입니다. 루트 권한으로 다음 명령을 실행합니다.

apt-get update
apt-get upgrade
apt-get dist-upgrade

  1. 다음 단계에서는 아래 명령을 실행하여 호스트 이름 변수를 자신의 설명 이름으로 대체하여 시스템 이름을 설정해야 합니다. 새 호스트 이름을 적절하게 적용하려면 시스템을 재부팅해야 할 수도 있습니다.

hostnamectl set-hostname hostname.yourdomain.com

  1. 나중에 다양한 문제 해결에 유용한 다음 유틸리티도 설치해야 합니다.

apt install net-tools sudo wget curl bash-completion

  1. 머신 호스트 이름이 적용된 후 루트 권한으로 다시 로그인하고 기본적으로 바이너리 패키지로 미리 컴파일되고 Debian 9 리포지토리에서 제공되는 Apache HTTP 서버를 설치합니다.

apt install apache2

  1. 다음으로 다음 명령을 실행하여 Wordpress CMS를 배포하기 위해 최신 버전의 PHP 언어 인터프리터와 Apache 웹 서버에 필요한 모든 필수 모듈을 설치합니다.

apt install libapache-mod-php7.0 php7.0 php7.0-gd php7.0-xml php7.0-curl php7.0-mbstring php7.0-mcrypt php7.0-xmlrpc

  1. LAMP 스택을 완성하기 위해 지금 누락된 마지막 구성 요소는 MariaDB 데이터베이스 서버입니다. 다음 명령을 실행하여 Apache HTTP 서버에서 데이터베이스에 액세스하는 데 필요한 PHP 모듈과 함께 MariaDB 서버를 설치합니다.

apt install php7.0-mysql mariadb-server mariadb-client

MariaDB 데이터베이스가 설치된 후 데몬을 시작하고 아래 발췌문에 설명된 대로 실행 중인 mysql_secure_installation 스크립트 내 데이터베이스를 보호합니다. 스크립트가 묻는 모든 질문에 주로 로 대답하십시오. 또한 루트 계정에 대해 강력한 암호를 선택했는지 확인하십시오. MySQL 루트 계정은 Linux 루트 계정과 동일하지 않습니다. 첫 번째는 MariaDB 데이터베이스를 관리하는 데만 사용되며 두 번째는 모든 Linux 시스템의 수퍼유저 계정입니다. 이러한 계정은 시스템에서 겹치지 않습니다.

systemctl start mariadb
mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none):
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] 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? [Y/n] y
 ... Success!
By default, MariaDB 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? [Y/n] 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? [Y/n] y
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

  1. 아직 MariaDB 데이터베이스 보안이 끝나지 않았습니다. 기본적으로 비밀번호를 묻지 않고 데이터베이스 루트 계정으로 localhost에서 MariaDB에 로그인할 수 있습니다. 가능한 보안 문제를 방지하려면 루트 사용자로 데이터베이스에 로그인하고 다음 명령을 실행하십시오.

mysql –u root
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> quit

이제 암호 없이 root 계정으로 로그인을 시도하여 데이터베이스를 테스트하십시오. MariaDB 데이터베이스에 대한 액세스가 거부되어야 합니다.

  1. 다음 단계에서는 기본적으로 비활성화되어 있는 Apache 웹 서버용 TLS 및 재작성 모듈을 활성화 및 구성합니다. 아래 명령을 실행하여 두 모듈을 모두 활성화하십시오.

a2enmod rewrite ssl
a2ensite default-ssl.conf

  1. 그런 다음 활성화된 두 사이트에 대한 Apache 구성 파일을 열고 다음 스크린샷에 표시된 대로 DocumentRoot 지시문 아래에 다음 블록을 추가합니다.

nano /etc/apache2/sites-enabled/000-default.conf
nano /etc/apache2/sites-enabled/default-ssl.conf

한 번에 하나씩 편집되는 두 구성 파일에서 다음 코드 블록을 추가합니다.

    <Directory /var/www/html>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Require all granted
    </Directory>

  1. Apache default-ssl.conf TLS 구성 파일에서 Apache SSL 프로토콜의 보안을 위조하기 위해 존재하지 않는 경우 아래 콘텐츠를 추가할 수도 있습니다. 이러한 코드 줄은 일반적인 SSL 취약점을 수정해야 합니다.

SSLProtocol all -SSLv2 -SSLv3
# Add SSL Cipher in one long line
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire
 
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

위 발췌문에 설명된 줄이 Apache SSL 구성 파일에 이미 있는 경우 위에서 설명한 것처럼 보이도록 수정해야 합니다. 이러한 설정을 적용하려면 Apache 헤더 모듈을 활성화하고 다음 명령을 실행하여 서비스를 다시 시작하십시오.

a2enmod headers
systemctl restart apache2.service

프로덕션 웹 사이트의 경우 WordPress CMS가 PHP 게이트웨이를 통해 대부분 동적 콘텐츠를 생성하고 내부 사용자를 위한 인증 프로세스도 처리하기 때문에 Apache TLS 모듈을 활성화하는 것이 필수입니다. TLS 기술을 사용하면 전송된 정보가 양 끝에서 암호화되고 연결이 보호됩니다. 제3자 또는 중간자(man-in-the-middle)는 트래픽을 가로챌 수 있지만 정보가 일반 텍스트로 전달되지 않기 때문에 콘텐츠를 해독할 수 없습니다.

  1. 위의 모든 변경을 수행한 후 잠재적인 구문 오류를 감지하기 위해 Apache 구성을 테스트하고 모든 것이 정상이면 LAMP 데몬을 다시 시작하여 지금까지 변경된 모든 변경 사항을 반영하고 다음 명령을 실행하여 서비스를 시스템 전체에 활성화합니다. 다음 명령.

apachectl –t
systemctl restart apache2.service mariadb.service
systemctl enable apache2.service mariadb.service

  1. 마지막으로 netstat 명령을 실행하여 Apache 및 MariaDB 서비스가 청취 상태에서 포트를 열었는지 확인하고 egrep을 사용하여 출력을 필터링합니다. , Apache 웹 서버에는 일반적으로 노출되는 포트 80 및 443(http 및 https 프로토콜에 해당)이 있어야 하며 MariaDB는 localhost:3306 소켓에서만 바인딩되어야 합니다. netstat 명령에 대해 -n 플래그를 사용하여 서비스 이름 표시를 억제합니다.

netstat -tlp| egrep 'http|mysql'

  1. HTTP 및 HTTPS 프로토콜을 통해 인터넷에서 웹 서버에 액세스할 수 있는지 확인하려면 브라우저를 열고 도메인 이름으로 이동합니다. HTTPS 프로토콜을 통해 탐색하면 브라우저에 인증서 오류가 표시됩니다. Apache 기본 TLS 구성 파일이 자체 서명된 인증서를 사용하도록 구성되어 있기 때문입니다. TLS 오류를 수락하고 아래 그림과 같이 기본 웹 페이지로 계속 이동해야 합니다.

http://www.yourdomain.com

https://www.yourdomain.com

인터넷에서 도메인 기본 웹 페이지를 방문할 수 없는 경우 먼저 시스템의 일부 방화벽 규칙이 요청을 차단하고 있는지 확인하거나 서버가 NAT 뒤에 있는 경우 라우터의 적절한 포트가 내부 LAN으로 전달되는지 확인해야 합니다. -ed 네트워크. 도메인 등록 기관 패널에서 DNS 레코드를 확인하여 WAN IP를 가리키는지, 레코드가 인터넷에서 전파를 완료했는지 확인할 수도 있습니다.

  1. PHP가 서버 측에서 예상대로 작동하는지 테스트하려면 /var/에 PHP php를 만듭니다. Apache 웹 서버의 기본 웹 문서 루트 경로인 www/html/ 시스템 경로에서 아래 명령을 실행하고 브라우저에서 다음 URI로 이동하여 결과를 얻습니다: http://www. yourdomain.com/info.php

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

2부 – Wordpress 설치

  1. 이제 LAMP 스택이 완전히 구성되었으므로 Wordpress CMS 설치는 비교적 간단합니다. 먼저 MariaDB 데이터베이스에 로그인하고 아래 명령을 실행하여 Wordpress CMS 설치 및 관리를 위한 적절한 암호를 가진 사용자 및 Wordpress용 설치 데이터베이스를 생성합니다. 자신의 요구 사항에 맞게 데이터베이스 이름과 데이터베이스 자격 증명을 자유롭게 바꾸십시오.

mysql –u root -p
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress-user'@'localhost' IDENTIFIED BY 'wordpress-pass';
FLUSH PRIVILEGES;

  1. 다음으로 wget 유틸리티를 사용하여 공식 웹사이트에서 최신 Wordpress tarball을 다운로드하고 tar 유틸리티로 압축된 아카이브를 추출합니다. 아래 명령을 실행하여 설치 파일을 Apache 웹 서버 문서 루트 경로에 복사합니다. 또한 기본 index.html 웹페이지를 제거했는지 확인하십시오.

wget http://wordpress.org/latest.tar.gz
tar xfz latest.tar.gz
cp -rf wordpress/* /var/www/html/
rm /var/www/html/index.html

  1. 웹 서버 www-data 그룹에 설치 디렉토리에 대한 전체 쓰기 권한을 부여하기 위해 아래 설명된 대로 Apache 웹루트 경로의 권한을 수정합니다. 이 구성을 사용하면 Apache 웹 서버가 이 특정 시스템 경로에서 파일 및 디렉토리를 생성하거나 수정할 수 있습니다. 가장 중요한 것은 Apache 기능을 제어하고 확장하는 데 사용할 수 있는 uploads 디렉토리와 .htaccess 파일입니다.

chmod –R 775 /var/www/html/
chgrp –R www-data /var/www/html/
ls –al /var/www/html

  1. 이제 모든 것이 준비되었으므로 Wordpress 설치를 시작하겠습니다. 설치 프로세스는 브라우저에서 수행됩니다. 브라우저를 열고 HTTPS 프로토콜을 통해 도메인을 방문하십시오. 설치 첫 화면에서 Let's go 버튼을 눌러 설치를 시작합니다.

  1. 다음 설치 화면에서 이전에 Wordpress 설치를 위해 만든 데이터베이스 이름, 데이터베이스 액세스 자격 증명 및 데이터베이스 호스트를 추가하고 제출 버튼을 눌러 계속합니다. 데이터베이스 구성은 /var/www/html/wp-config.php에 저장됩니다. 특별한 Wordpress 목적을 위해 나중에 파일을 수동으로 수정할 수 있습니다.

  1. 다음 화면에서 설치 실행 버튼을 클릭하고 웹사이트 제목, 웹사이트 관리자 자격 증명 및 이메일 주소를 입력합니다. 강력한 암호는 설치 스크립트에 의해 자동으로 생성되어야 합니다. 이 비밀번호를 저장하거나 자신만의 강력한 비밀번호를 제공하도록 선택할 수 있습니다. 완료되면 Wordpress 설치 버튼을 눌러 설치 프로세스를 완료합니다.

  1. 마지막으로 설치가 성공적으로 완료되면 설치 과정에서 생성된 자격 증명으로 Wordpress 대시보드에 로그인하고 자신의 웹사이트 관리를 시작합니다.

축하해요! 코드네임 Stretch인 Debian 9의 LAMP 소프트웨어 번들 위에 최신 버전의 Wordpress CMS를 성공적으로 설치했습니다.