PHP: Установка и настройка

PHP: Установка и настройка

Инструкция по установке и первичной настройке #PHP.

Репозиторий

  • Скачать и установить ключ репозитория:
1
curl -fsSLo '/etc/apt/keyrings/php.gpg' 'https://lib.onl/ru/2025/02/9bd1261d-3842-5859-8202-2e1d7a5ba9f4/php.gpg'
  • Создать файл репозитория /etc/apt/sources.list.d/php.sources со следующим содержимым:
1
. '/etc/os-release' && echo -e "X-Repolib-Name: PHP\nEnabled: yes\nTypes: deb\nURIs: https://packages.sury.org/php\n#URIs: https://packages.sury.su/php\nSuites: ${VERSION_CODENAME}\nComponents: main\nArchitectures: $( dpkg --print-architecture )\nSigned-By: /etc/apt/keyrings/php.gpg\n" | tee '/etc/apt/sources.list.d/php.sources' > '/dev/null'

Установка

  • Установить пакеты:
1
v='8.4'; apt update && apt install --yes php${v} php${v}-{fpm,bcmath,bz2,cli,curl,gd,gmp,imagick,imap,intl,ldap,mbstring,memcached,mysql,odbc,opcache,pgsql,redis,uploadprogress,xml,zip,zstd}

Настройка

В этом разделе приведена конфигурация с моими предпочтениями.

PHP

  • Создать файл /etc/php/8.4/fpm/conf.d/99-php.local.ini со следующим содержимым:
php.local.ini
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
; -------------------------------------------------------------------------------------------------------------------- ;
; GENERAL
; -------------------------------------------------------------------------------------------------------------------- ;

disable_functions = posix_uname,eval,pcntl_wexitstatus,posix_getpwuid,xmlrpc_entity_decode,pcntl_wifstopped,pcntl_wifexited,pcntl_wifsignaled,phpAds_XmlRpc,pcntl_strerror,ftp_exec,pcntl_wtermsig,mysql_pconnect,proc_nice,pcntl_sigtimedwait,posix_kill,pcntl_sigprocmask,fput,phpinfo,system,phpAds_remoteInfo,ftp_login,inject_code,posix_mkfifo,highlight_file,escapeshellcmd,show_source,pcntl_wifcontinued,fp,pcntl_alarm,pcntl_wait,ini_alter,posix_setpgid,parse_ini_file,ftp_raw,pcntl_waitpid,pcntl_getpriority,ftp_connect,pcntl_signal_dispatch,pcntl_wstopsig,ini_restore,ftp_put,passthru,proc_terminate,posix_setsid,pcntl_signal,pcntl_setpriority,phpAds_xmlrpcEncode,pcntl_exec,ftp_nb_fput,ftp_get,phpAds_xmlrpcDecode,pcntl_sigwaitinfo,shell_exec,pcntl_get_last_error,ftp_rawlist,pcntl_fork,posix_setuid
expose_php = Off
max_file_uploads = 20
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 32M

; -------------------------------------------------------------------------------------------------------------------- ;
; EXTENDED SETTINGS
; -------------------------------------------------------------------------------------------------------------------- ;

date.timezone = 'Etc/UTC'
cgi.fix_pathinfo = 0
mail.add_x_header = Off
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.func_overload = 0

PHP-FPM

  • Сохранить оригинальный файл конфигурации:
1
f='/etc/php/8.4/fpm/pool.d/www.conf'; [[ -f "${f}" && ! -f "${f}.orig" ]] && mv "${f}" "${f}.orig"
  • Создать файл /etc/php/8.4/fpm/pool.d/www.conf со следующим содержимым:
php.pool.www.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[www]
user = www-data
group = www-data

listen = /run/php/php-fpm.sock
listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 100
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 100

request_terminate_timeout = 60s
request_slowlog_timeout = 10s

access.log = /var/log/php-fpm/$pool.access.log
slowlog = /var/log/php-fpm/$pool.slow.log