평범한 이야기들

[Ubuntu] Ubuntu 22.04 에 LEMP 설치하기 (Nginx, MariaDB, PHP8.2) 본문

평범한 개발 이야기/OS

[Ubuntu] Ubuntu 22.04 에 LEMP 설치하기 (Nginx, MariaDB, PHP8.2)

songsariya 2024. 2. 27. 15:52
728x90

 Laravel 10을 이용해 토이 프로젝트를 진행하면서 개발서버로 이용할 서버가 필요했습니다. 먼저 클라우드를 이용해 가상서버에 Ubuntu 22.04를 설치하였습니다. 모든 설치 과정은 root 계정으로 진행했습니다. (sudo 권한을 가진 계정으로 진행해도 됩니다.) 

 

설치 환경

  • Ubuntu 22.04.3 LTS
  • Nginx stable 1.18
  • php-fpm 8.2
  • MariaDB 10.6.16

 

Ubuntu 패키지 업데이트

먼저 설치된 우분투의 패키지를 업데이트했습니다. 이로 우분투의 패키지를 최신상태로 만들었습니다.

# 등록된 저장소 내 패키지 정보를 최신으로 업데이트 한다.
sudo apt update 

# 최신으로 업데이트 된 저장소 내 패키지 정보를 바탕으로 시스템에 설치된 패키지들을 업그레이드 해준다.
sudo apt upgrade

# 불필요해진 패키지를 자동으로 삭제한다.
sudo apt autoremove

 

Nginx 1.18.0 버전 설치

 

저는 우분투에서 제공되는 Nginx를 설치하였습니다. 우분투 22.04 기본 저장소에 있는 Nginx 설치 버전은 1.18.0입니다. 설치된 nginx 버전을 확인하려면 nginx -v 로 확인할 수 있습니다.

apt install nginx

nginx -v
version: nginx/1.18.0 (Ubuntu)

 

설치 후 해당 서버의 아이피를 이용해 브라우저로 접속을 하게 되면 아래와 같이 보실 수 있습니다.

Nginx 설치 후 접속 화면

 

 해당 페이지는 기본적으로 /var/www/html/ 에 존재합니다. 위치를 변경하고 싶으면 /etc/nginx/sites-available/default 파일에 있는 server 블록에 root 영역을 수정해 주시면 됩니다. 또한 location ~ \.php$ 블록을 주석해제 합니다. 앞으로 php를 설치해 사용할 예정이기 때문입니다.

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html; # 해당 부분 변경

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # 아래 부분의 주석을 제거한다. (앞으로 php를 설치하고 사용할 예정이기 때문입니다.)
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;

               # With php-fpm (or other unix sockets):
               fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
               # With php-cgi (or other tcp sockets):
               fastcgi_pass 127.0.0.1:9000;
        }
}

 

시스템 데몬에 등록해 서버가 재시작이 되더라도 자동으로 실행될 수 있도록 해주면 됩니다.

systemctl enable nginx

 

PHP 8.2 설치

 

 우분투 22.04에서 제공되는 php 버전은 8.1입니다. 따라서 서버에 PHP 8.2 버전을 설치하기 위해서는 Ondřej Surý 의 별도 저장소를 추가해 주어야 합니다. Ondřej Surý는 현재 PHP 리포지토리의 유지 관리자입니다.

add-apt-repository ppa:ondrej/php

apt update

apt install php8.2-fpm

php -v
PHP 8.2.15 (cli) (built: Jan 20 2024 14:17:05) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.15, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.15, Copyright (c), by Zend Technologies

 

PHP 8.2 버전이 정상적으로 설치가 되었습니다. 다음으로는 PHP 확장 모듈을 설치해 주시면 됩니다.

sudo apt install php8.2-zip php8.2-xmlrpc php8.2-gd php8.2-curl php8.2-intl php8.2-imagick php8.2-bcmath php8.2-memcached php8.2-mysql php8.2-dom

 

PHP fpm 설치경로는 아래와 같습니다.

cd /etc/php/8.2/fpm

 

 PHP 환경 설정값을 변경하려면 php.ini 파일의 내용을 수정하시면 됩니다. 보통 그대로 두어도 됩니다. 바꾸시기 원하시면 해당 파일을 백업하시고 수정하시는 게 좋습니다.

 

PHP8.2-fpm을 재시작하려면 아래와 같이 명령어를 입력해 주시면 됩니다.

systemctl restart php8.2-fpm

 

자동실행을 등록합니다.

/lib/systemd/systemd-sysv-install enable php8.2-fpm

 

MariaDB 설치

 

 Mysql 대안으로 오픈소스인 MariaDB(마리아 DB)를 설치합니다. Nginx와 함께 설치할 때에는 보통 마리아 DB를 많이 사용했던 것 같습니다. Ubuntu 22.04 패키지 업데이트를 하고 설치를 하면 마리아 DB는 10.6.16 버전이 설치가 됩니다. 더 높은 버전을 원하시면 별도 저장소를 추가 후 설치진행하시면 됩니다. (저는 기본으로 설치합니다.)

sudo apt install mariadb-server mariadb-client -y

 

설치가 정상적으로 되었는지 확인할 수 있습니다.

service mysql status

# 출력 화면
● mariadb.service - MariaDB 10.6.16 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2024-02-21 23:29:52 KST; 5 days ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/

 

정상적으로 설치가 된 것을 확인할 수 있습니다.

 

자동 실행을 등록해 줍니다.

/lib/systemd/systemd-sysv-install enable mariadb

 

다음으로는 마리아 DB의 보안스크립트를 실행해야 합니다. 이 부분은 반드시 실행해야 합니다. 그 이유는 아래와 같습니다.

 

  • 데이터베이스 root 계정의 암호가 설정되어 있지 않습니다.
  • TEST 데이터베이스가 포함되어 있습니다.
  • root 계정에 대해 외부 접속을 제한합니다.
  • 데이터베이스 테스트(익명) 계정이 포함되어 있다.

따라서 반드시 실행해주어야 합니다.

mysql_secure_installation

 

질문에 대한 내용은 아래와 같습니다.

  • unix_socket 인증으로 전환
    ‘Y’를 선택하여 Unix_socket 인증 방식을 활성화했다. 이로써 시스템의 root 사용자만 MariaDB의 root 계정에 접근할 수 있게 되었다.
  • Root 비밀번호 변경 건너뛰기
    root 계정의 암호를 변경하면 됩니다. (변경하기 싫으시면 N을 선택하시면 됩니다.)
  • 익명 사용자 제거
    ’Y’를 선택하여 MariaDB 설치 시 기본적으로 생성되는 익명 사용자를 제거합니다.
  • 원격에서의 Root 로그인 금지
    ‘Y’를 선택하여 root 계정이 원격에서 로그인하는 것을 금지합니다. (다른 계정을 추가해 접속을 하게 해야 합니다.)
  • Test 데이터베이스 제거
    ‘Y’를 선택하여 MariaDB의 테스트용 데이터베이스를 제거합니다.
  • 권한 테이블 재로딩
    ‘Y’를 선택하여 모든 변경 사항이 즉시 적용되도록 권한 테이블을 다시 불러옵니다.

MariaDB 계정 추가

root 사용자가 아닌 일반 사용자 계정을 추가하도록 하겠습니다. 아래와 같이 mariadb에 접속합니다.

mysql -uroot -p

 

사용할 데이터베이스를 생성해 주면 됩니다. (예 : toy)

create database toy

 

toy 데이터베이스를 사용할 사용자를 생성해 줍니다.

create user toy@localhost;

# 외부에서 접속할 수 있도록 추가한다.
create user toy@'%';

 

생성된 계정의 암호를 생성해 줍니다.

SET PASSWORD FOR toy@localhost=PASSWORD("패스워드");

# 외부에서 접속할 수 있도록 계정을 추가했다면.
SET PASSWORD FOR toy@'%'=PASSWORD("패스워드");

 

생선 된 계정에 권한을 갱신하고 적용한다.

GRANT ALL PRIVILEGES ON dw_erp.* TO toy@localhost IDENTIFIED BY '패스워드';

# 외부에서 접속할 수 있도록 계정을 추가했다면
GRANT ALL PRIVILEGES ON dw_erp.* TO toy@'%' IDENTIFIED BY '패스워드';

FLUSH PRIVILEGES;

 

MariaDB 외부 접속 허용

 

 MariaDB 설치 후, 외부 접속을 허용하는 과정이 필요합니다. (외부 접속을 하지 않을 경우 이 과정은 무시하셔도 됩니다.) 해당 설정 정보는 /etc/mysql/mariadb.conf.d/50-server.cnf 에 존재합니다.

 

 

위와 같이 되어있는 부분을 주석처리 하면 됩니다.

 

그리고 MariaDB를 재시작하면 됩니다.

systemctl restart mysql

 

 

이렇게 Ubuntu 22.04에 기본적으로 사용할 수 있는 Nginx, MariaDB, PHP를 설치하게 되었습니다.

728x90
Comments