웹사이트 검색

FreeBSD 11에 Nginx, MariaDB 및 PHP(FEMP 스택) 설치


이 페이지에서

  1. 1단계 – MariaDB 데이터베이스 설치
  2. 2단계 – Nginx 웹 서버 설치
  3. 3단계 – PHP 프로그래밍 언어 설치\n

이 튜토리얼에서는 FreeBSD 11.x에서 FEMP 스택을 설치하고 구성하는 과정을 설명합니다. FEMP 소프트웨어 스택은 일반적으로 Unix/Linux 운영 체제에 설치되고 주로 동적 웹 애플리케이션 배포에 사용되는 프로그램 그룹을 나타내는 약어입니다. 이 경우 FEMP 약어는 다음 응용 프로그램이 설치된 FreeBSD Unix와 유사한 운영 체제를 나타냅니다.

  • Nginx 웹 서버는 주로 HTML 콘텐츠를 제공하는 데 사용되는 빠르게 성장하는 대중적인 웹 서버이지만 웹 서버 또는 기타 네트워크 서비스에 로드 밸런싱, 고가용성 또는 리버스 프록시를 제공할 수도 있습니다.\n
  • 백엔드에서 데이터베이스 데이터를 조작하고 일반 HTML에 포함될 수 있는 동적 웹 콘텐츠를 생성하는 데 사용되는 PHP 동적 프로그래밍 언어 해석기. PHP 스크립트는 클라이언트 측(브라우저에서)이 아닌 서버 측에서만 실행됩니다.\n
  • Mariadb\\MySQL RDBMS는 데이터가 백업에 저장되는 곳이며 동적 처리는 PHP에 의해 처리됩니다. 이 튜토리얼에서는 현재 Oracle이 소유하고 개발한 MySQL 데이터베이스를 위해 MySQL의 커뮤니티 포크인 MariaDB 관계형 데이터베이스 관리 시스템을 설치하고 사용합니다.\n

요구 사항:

  • FreeBSD 11.x의 최소 설치.
  • 네트워크 인터페이스용으로 구성된 정적 IP 주소입니다.
  • 루트 권한으로 구성된 일반 계정 또는 루트 계정을 통해 시스템에 직접 액세스합니다.\n
  • 최소한의 DNS 레코드(A 및 CNAME 레코드)로 구성된 공개적으로 등록된 도메인 이름이 바람직합니다.\n

1단계 – MariaDB 데이터베이스 설치

첫 번째 단계에서는 웹 사이트의 동적 데이터를 저장하고 관리하는 데 사용할 FEMP 구성 요소인 MariaDB 데이터베이스 시스템을 설치합니다. MariaDB/MySQL은 Nginx 또는 Apache 웹 서버와 함께 세계에서 가장 많이 사용되는 오픈 소스 관계형 데이터베이스 중 하나입니다. 두 서버 모두 복잡한 웹 응용 프로그램이나 동적 웹 사이트를 만들고 개발하는 데 많이 활용됩니다. MariaDB는 PORTS 저장소에서 제공하는 바이너리에서 직접 FreeBSD에 설치할 수 있습니다. 그러나 FreeBSD 포트 데이터베이스 섹션에서 ls 명령을 사용한 간단한 검색은 다음 명령 출력과 같이 여러 버전의 MariaDB를 나타냅니다. 또한 패키지 관리자 pkg 명령을 실행해도 동일한 결과가 표시됩니다.

ls -al /usr/ports/databases/ | grep mariadb
pkg search mariadb

이 가이드에서는 아래 발췌문에 표시된 대로 pkg 명령을 사용하여 MariaDB 데이터베이스 및 클라이언트의 최신 릴리스를 설치합니다.

pkg install mariadb102-server mariadb102-client

MariaDB가 시스템에 설치되면 다음 명령을 실행하여 시스템 전체에서 MySQL 서버를 활성화합니다. 또한 아래와 같이 MariaDB 데몬을 시작했는지 확인하십시오.

sysrc mysql_enable=”YES”
service mysql-server start

다음으로 mysql_secure_installation 스크립트를 실행하여 MariaDB 데이터베이스를 보호해야 합니다. 스크립트를 실행하는 동안 일련의 질문을 받게 됩니다. 이러한 질문의 목적은 MySQL 루트 사용자에 대한 루트 암호 설정, 익명 사용자 제거, 루트 사용자에 대한 원격 로그인 비활성화 및 테스트 데이터베이스 삭제와 같은 MySQL 엔진에 대한 보안 수준을 제공하는 것입니다. MySQL 루트 사용자에 대한 강력한 암호를 선택한 후 스크립트의 아래 샘플에 설명된 대로 모든 질문에 예라고 대답합니다. MariaDB 데이터베이스 루트 사용자와 시스템 루트 사용자를 혼동하지 마십시오. 이러한 계정의 이름은 root로 동일하지만 동일하지 않으며 하나는 시스템 관리용이고 다른 하나는 데이터베이스 관리용으로 서로 다른 용도로 사용됩니다.

/usr/local/bin/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!

마지막으로 MariaDB 데이터베이스 보안을 완료한 후 다음 명령을 실행하여 루트 계정에서 데이터베이스에 대한 로컬 로그인을 수행할 수 있는지 테스트합니다. 데이터베이스 프롬프트에 연결되면 quit 또는 exit를 입력하여 데이터베이스 콘솔을 종료하고 아래 스크린샷과 같이 시스템 사용자 콘솔 프롬프트로 돌아갑니다.

mysql -u root -p
MariaDB> quit

FreeBSD에서 sockstat 명령을 실행하면 MariaDB가 외부 네트워크 연결에 열려 있고 3306/TCP 포트를 통해 모든 네트워크에서 원격으로 액세스할 수 있다는 사실이 빠르게 드러납니다.

sockstat -4 -6

MariaDB에 대한 원격 네트워크 연결을 완전히 비활성화하려면 아래 명령을 사용하여 /etc/rc.conf 파일에 다음 줄을 추가하기만 하면 mysql 네트워크 소켓이 loopback 인터페이스에 바인딩되도록 강제해야 합니다.

sysrc mysql_args="--bind-address=127.0.0.1"

그런 다음 MariaDB 데몬을 다시 시작하여 변경 사항을 적용하고 sockstat 명령을 다시 실행하여 mysql 서비스에 대한 네트워크 소켓을 표시합니다. 이번에는 MariaDB 서비스가 localhost:3306 소켓에서만 네트워크 연결을 수신해야 합니다.

service mysql-server restart
sockstat -4 -6|grep mysql

이 컴퓨터의 데이터베이스에 액세스해야 하는 원격 웹 애플리케이션을 개발하는 경우 mysql_args="--bind-address=127.0.0.1" 줄을 제거하거나 주석을 달아 지금까지 수행한 MySQL 소켓 변경 사항을 되돌립니다. /etc/rc.conf 파일에서 데이터베이스를 다시 시작하여 변경 사항을 반영합니다. 이 경우 방화벽을 로컬로 실행하고 원격 로그인이 필요한 클라이언트의 IP 주소를 필터링하거나 로그인에 허용된 적절한 IP 주소로 MySQL 사용자를 생성하는 등 MySQL에 대한 원격 액세스를 제한하거나 허용하지 않는 다른 대안을 고려해야 합니다. 서버.

2단계 – Nginx 웹 서버 설치

FEMP 스택을 위해 FreeBSD에 설치할 다음으로 중요한 데몬은 Nginx 서비스로 표시되는 웹 서버입니다. FreeBSD에 Nginx 웹 서버를 설치하는 과정은 매우 간단합니다. Nginx 웹 서버는 FreeBSD 11.x Ports에서 제공하는 바이너리에서 설치할 수 있습니다. www 섹션의 포트 리포지토리를 통해 간단한 검색을 수행하면 아래 명령 발췌문에 표시된 것처럼 Nginx 소프트웨어에 사용할 수 있는 사전 컴파일된 버전 목록이 표시될 수 있습니다.

ls /usr/ports/www/ | grep nginx

패키지 관리 명령을 실행하면 아래 이미지와 같은 결과가 표시될 수 있습니다.

pkg search –o nginx

FreeBSD에서 가장 일반적인 Nginx 버전을 설치하려면 아래 명령을 실행하십시오. 바이너리 패키지를 설치하는 동안 패키지 관리자는 Nginx 패키지 다운로드 및 설치에 동의하는지 묻습니다. 일반적으로 설치 프로세스를 시작하려면 프롬프트에 단어 yes 또는 y를 입력해야 합니다. 프롬프트를 피하려면 pkg –y install nginx 명령을 실행하는 동안 –y 플래그를 추가하십시오.

pkg install nginx

시스템에 Nginx 웹 서버 소프트웨어를 설치한 후 아래 명령을 실행하여 서비스를 활성화하고 실행해야 합니다.

sysrc nginx_enable=”yes”
service nginx start

Nginx 서비스가 시스템에서 시작되었는지, 어떤 네트워크 소켓에 바인딩되어 있는지 확인하기 위해 sockstat 명령을 실행할 수 있습니다. 일반적으로 *:80 TCP 소켓에 기본적으로 바인딩해야 합니다. grep 명령줄 필터를 사용하여 nginx 서버와 일치하는 소켓만 표시할 수 있습니다.

sockstat -4 -6 | grep nginx

Nginx 기본 웹 페이지를 방문하려면 네트워크의 컴퓨터에서 브라우저를 열고 HTTP 프로토콜을 통해 서버의 IP 주소로 이동합니다. 도메인 이름을 등록했거나 구내에서 로컬 DNS 서버를 사용하는 경우 컴퓨터의 정규화된 도메인 이름 또는 브라우저의 URI 필드에 도메인 이름을 쓸 수 있습니다. 다음 스크린샷과 같이 "Welcome to nginx!" 라는 제목 메시지가 몇 개의 HTML 줄과 함께 브라우저에 표시되어야 합니다.

  • http://도메인.com

FreeBSD 11.x에서 Nginx용 웹 파일이 저장되는 위치는 /usr/local/www/nginx/ 디렉토리입니다. 이 디렉토리는 nginx-dist 디렉토리에 대한 심볼릭 링크입니다. 웹 사이트를 배포하려면 html 또는 php 스크립트 파일을 이 디렉토리에 복사하십시오. Nginx 기본 webroot 디렉토리를 변경하려면 /usr/local/etc/nginx/ 디렉토리에서 Nginx 구성 파일을 열고 아래 예와 같이 루트 명령줄을 업데이트합니다.

nano /usr/local/etc/nginx/nginx.conf

이것이 Nginx의 새로운 웹루트 경로가 됩니다.

root       /usr/local/www/new_html_directory;

3단계 – PHP 프로그래밍 언어 설치

기본적으로 Nginx 웹 서버는 PHP 스크립트를 직접 구문 분석할 수 없으며 Nginx는 FastCGI 게이트웨이를 통해 PHP 코드를 PHP 스크립트를 해석하고 실행하는 PHP-FPM 데몬으로 전달해야 합니다. FreeBSD에 PHP-FPM 데몬을 설치하려면 아래 명령을 실행하여 사용 가능한 PHP 미리 컴파일된 바이너리 패키지를 검색하십시오.

ls /usr/ports/lang/ | grep php
pkg search –o php

FreeBSD Ports 저장소에서 사용할 수 있는 여러 PHP 버전 중에서 다음 명령을 실행하여 최신 버전의 PHP 인터프리터(현재 PHP 7.1 릴리스)를 설치하도록 선택합니다.

pkg install php71

복잡한 웹 애플리케이션을 배포하는 데 필요할 수 있는 일부 추가 PHP 확장을 설치하려면 아래 명령을 실행하십시오. 공식적으로 지원되는 PHP 확장 목록은 다음 링크를 방문하여 찾을 수 있습니다. http://php.net/manual/en/extensions.alphabetical.php

콘텐츠 관리 시스템을 기반으로 웹사이트를 구축할 계획이라면 CMS 문서를 검토하여 시스템 요구사항, 특히 어떤 PHP 모듈 또는 확장 프로그램이 필요한지 알아보세요.

php71-mcrypt mod_php71 php71-mbstring php71-curl php71-zlib php71-gd php71-json

설정에서 데이터베이스 서버를 실행하고 있기 때문에 PHP 인터프리터가 MariaDB 데이터베이스에 연결하는 데 사용하는 PHP 데이터베이스 드라이버 확장도 설치해야 합니다.

pkg install php71-mysqli

다음으로 PHP-FPM 구성 파일을 편집하여 Nginx 런타임 사용자와 일치하도록 PHP-FPM 사용자 및 그룹을 업데이트합니다. 아래 발췌문과 같이 사용자 및 그룹 라인 변수를 www로 변경합니다.

cp /usr/local/etc/php-fpm.d/www.conf{,.backup}
nano /usr/local/etc/php-fpm.d/www.conf

다음 줄을 아래와 같이 변경합니다.

user = www
group = www

기본적으로 Nginx 데몬은 nobody 시스템 사용자의 권한으로 실행됩니다. /usr/local/etc/nginx/nginx.conf 파일을 편집하여 Nginx 런타임 사용자를 PHP-FPM 런타임 사용자와 일치하도록 변경하고 다음 줄을 업데이트합니다.

user www;

기본적으로 FreeBSD의 PHP-FPM 데몬은 수신 상태에서 localhost:9000 TCP 포트의 네트워크 소켓을 엽니다. 이 소켓을 표시하려면 아래 예와 같이 sockstat 명령을 사용할 수 있습니다.

sockstat -4 -6| grep php-fpm

Nginx 웹 서버가 127.0.0.1:9000 네트워크 소켓에서 PHP FastCGI 게이트웨이와 PHP 스크립트를 교환하려면 Nginx 구성 파일을 열고 아래 샘플과 같이 PHP-FPM 블록을 업데이트합니다.

Nginx용 PHP FastCGI 게이트웨이 예:

        location ~ \.php$ {
        root               /usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;   
        include        fastcgi_params;
               }

위의 모든 변경을 수행한 후 다음 명령을 실행하여 기본 프로덕션 파일을 기반으로 PHP용 구성 파일을 생성합니다. php.ini 파일에 있는 변수를 편집하여 PHP 런타임 설정을 변경할 수 있습니다.

ln -s /usr/local/etc/php.ini-production /usr/local/etc/php.ini

마지막으로 지금까지의 모든 변경 사항을 적용하려면 시스템 전체에서 PHP-FPM 데몬을 활성화하고 아래 명령을 실행하여 PHP-FPM 및 Nginx 서비스를 다시 시작합니다.

sysrc php_fpm_enable=yes
service php-fpm restart

구문 오류에 대한 nginx 구성 테스트:

nginx –t  
service nginx restart

FreeBSD에서 FEMP 스택에 사용할 수 있는 현재 PHP 정보를 얻으려면 다음 명령을 실행하여 서버 문서 루트 디렉터리에 phpinfo.php 파일을 만듭니다.

echo "<?php phpinfo(); ?>" | tee /usr/local/www/nginx/phpinfo.php

그런 다음 브라우저를 열고 아래 스크린샷과 같이 /phpinfo.php 파일 다음에 서버 도메인 이름 또는 공개 IP 주소를 방문하여 phpinfo.php 페이지로 이동합니다.

  • http://domain.com/phpinfo.php

그게 다야! FreeBSD 11에서 FEMP 스택을 성공적으로 설치 및 구성했습니다. 이제 환경이 준비되었으며 온전한 기능을 발휘하여 구내에서 동적 웹 애플리케이션 배포를 시작할 수 있습니다.