'2025/04/12'에 해당되는 글 1건

  1. 2025.04.12 Ubuntu 22.04 LTS에 PHP 8 설치 및 기본 설정 1
posted by 검신흑태자 2025. 4. 12. 23:00

Ubuntu에서 Nginx를 설치했으면 PHP를 설치할 차례입니다. 사실 PHP를 먼저 설치해도 상관은 없지만 제 경우 PHP를 먼저 설치하고 Nginx를 설치했을 때 오류가 난 경우 Nginx의 문제인지 PHP의 문제인지를 확인하는데 시간이 조금 걸려서 Nginx를 먼저 설치하고 PHP를 설치하는 방향으로 하고 있습니다.

 

이 포스팅에서 설치할 PHP 버전은 8.3인데 제가 설치를 할 무렵에는 이게 최신 버전이었던 걸로 기억하고 있고 지금 로컬에서 사용하는 버전이 윈도우+PHP 8.3이라 아마 이렇게 설치를 하지 않았나 싶습니다. 최신 버전을 설치하고 싶으신 분들은 8.3으로 되어있는 걸 8.4로 변경해 주시면 될 겁니다.

 

PHP 설치의 경우 Ubuntu 22.04 LTS 버전에서 내장되어 있는 패키지 버전이 7.x 버전이었기 때문에 바로 설치하지 않고 PHP 저장소를 추가해서 8.3 버전을 설치하는 방향으로 진행했습니다.

 

1. PHP 저장소를 # add-apt-repository ppa:ondrej/php 명령어로 추가합니다.

2. 우분투 패키지를 #apt update 명령어로 업데이트 합니다.

3. 확장 모듈과 함께 PHP를 설치합니다.

#apt install php8.3 php8.3-gd php8.3-cli php8.3-common php8.3-mysql php8.3-fpm php8.3-curl php8.3-json php8.3-opcache php8.3-mbstring php8.3-xml

4. 설치가 되면 php -v를 통해 버전을 확인합니다.

5. 설치가 완료된 다음에는 Nginx와 PHP-FPM 연동을 설정합니다. 저 같은 경우 Nginx 설치에서 말씀드렸다시피 sites-available의 설정과 nginx conf.d의 설정이 서로 제각각이라 어디에서 정확히 적용되는지 확인하고 수정하느라 시간이 걸렸습니다. 그래서 두 폴더에 있는 파일을 백업시켜 놓고 두 폴더에 있는 conf의 설정을 맞추고 conf를 수정합니다. 아래는 예시입니다.

# updated by the nginx packaging team.
#
# This file will automatically load configuration files provided by other
# applications, such as Drupal or Wordpress. These applications will be made
# available underneath a path with that package name, such as /drupal8.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
		# 아래는 실행될 파일의 기본 폴더 경로입니다.
        root /var/www/html;

        # Add index.php to the list if you are using PHP
        # index.php를 추가해줍니다.
        index index.html index.htm index.nginx-debian.html index.php;

        server_name ip 혹은 도메인;

        charset uft-8;

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

        # pass PHP scripts to FastCGI server
        #
        location ~ \.(php|html|htm)$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root

6. 설정을 모두 추가하고 디렉토리에도 이상이 없는데 index.php 파일 등을 추가했을 때(일반적으로 phpinfo()를 많이 씁니다.) 페이지가 로드되지 않을 경우 유저 권한 문제일 가능성이 많기에 /etc/php/버전명/fpm/fool.d 폴더 안에 있는 www.conf의 파일을 열고 user와 group을 www-data(nginx의 기본유저)로 변경처리 해줍니다. 

7. 페이지 로드가 되지 않는 경우 대부분은 권한 문제이기 때문에 위와 같이 처리해 주면 대부분의 문제는 해결이 되지만 다른 문제가 생기면 문제와 함께 해결법을 찾아서 추후에 추가할 수 있도록 하겠습니다.

8. 권한 문제까지 해결이 되었으면 본인의 ip주소/index.php로 접속해 보면 작성하신 코드가 뜰 겁니다.

9. index.html이 없을 경우 그냥 ip주소만 입력해도 index.php 파일의 내용이 뜹니다.

 

위의 작업까지 하시면 데이터베이스를 추가하는 것 외에는 기본 PHP 설정과 Nginx연동이 끝난 셈입니다. PHP도 그렇고 Nginx도 그렇고 많은 설정들과 심화된 내용이 있지만 거기까지 다루기에는 내용도 너무 많고 해서 일단은 간단히 바로 코드를 짜서 적용시킬 수 있는 설치법들만 작성했습니다. 이후 심화된 설정이나 내용들은 언제가 될지는 모르겠지만 다른 포스팅을 통해 작성해 볼 수 있도록 하겠습니다.