PHP7.3.18-MariaDB-phpmyadmin-NginX (orangePI)

Эта инструкция была собрана из мануалов и кучи других инструкцией и проверена на orange pi (Armbian).
Также подходит под сборку на Debian

Обновляем репозиторий

apt-get update

Установка nginx

apt-get install nginx

Для начала установим все необходимые для сборки и работы PHP 7 зависимости:

apt-get install build-essential autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config libpng-dev libxml2-dev libxml2 libcurl3

Если вы хотите добавить другие модули, возможно, понадобиться дополнительно установить необходимые для сборки пакеты. Иначе в процессе выполнения команды ./configure вы получите ошибку.
Все действия будем выполнять в директории:

cd /usr/src

Скачиваем и распаковываем исходники PHP 7.3.18:

wget http://de1.php.net/get/php-7.3.18.tar.bz2/from/this/mirror -O php-7.3.18.tar.bz2
tar -xvjf php-7.3.18.tar.bz2

Если на момент чтения этой статьи, уже вышла более свежая версия PHP 7, скачайте самостоятельно исходники с официального сайта. http://de1.php.net/downloads.php
Переходим в каталог с исходниками PHP 7:

cd php-7.3.18

Для того чтобы установить PHP 7, нам необходимо выполнить компиляцию из исходников. Перед тем как начать, добавьте или удалите неиспользуемые модули из состава PHP 7 и укажите параметры сборки.

./buildconf --force

CONFIGURE_STRING="--prefix=/usr/local/php-fpm
--enable-fpm
--enable-mysqlnd
--enable-mbstring
--disable-pdo
--disable-phar
--with-config-file-scan-dir=/usr/local/php-fpm/etc/conf.d
--with-curl
--with-gd
--with-fpm-user=www-data
--with-fpm-group=www-data
--with-mysql-sock=/var/run/mysqld/mysqld.sock
--with-mysqli=mysqlnd
--with-zlib
--without-sqlite3
--without-pdo-sqlite"

Если вы хотите добавить в PHP 7 другие модули, найдите их в списке доступных параметров сборки:

./configure --help

Для компиляции и установки PHP 7, необходимо выполнить команду:

./configure $CONFIGURE_STRING
make && make install

Настройка PHP 7
Если в процессе компиляции не было ошибок, файлы PHP 7 должны быть расположены в директории:
/usr/local/php-fpm
Нам осталось внести изменения в конфигурационный файлы и добавить PHP 7 в автозагрузку. Для начала скопируем файл php.ini из каталога с исходниками в каталог установки PHP 7:

cp /usr/src/php-7.3.18/php.ini-production /usr/local/php-fpm/lib/php.ini

Чтобы включить модуль Zend OPcache, создайте файл:

mkdir -p /usr/local/php-fpm/etc/conf.d/
nano /usr/local/php-fpm/etc/conf.d/modules.ini

Скопируйте в него следующие параметры:

# Zend OPcache
zend_extension=opcache.so

Для настройки работы PHP-FPM создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.conf

И добавьте в него следующие параметры:

[global]

pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
include=/usr/local/php-fpm/etc/php-fpm.d/*.conf

Затем создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.d/www.conf

И добавьте в него параметры:

[www]
 user = www-data
 group = www-data

listen = /var/run/php7-fpm.sock
 listen.owner = www-data
 listen.group = www-data
 listen.mode = 0777

pm = dynamic
 pm.max_children = 5
 pm.start_servers = 2
 pm.min_spare_servers = 1
 pm.max_spare_servers = 3

Добавим PHP 7 в автозагрузку, создадим символическую ссылку на файл php-fpm:

ln -s /usr/local/php-fpm/sbin/php-fpm /usr/local/php-fpm/sbin/php7-fpm

Создадим в каталоге init.d скрипт для запуска PHP-FPM:

nano /etc/init.d/php-fpm

Добавьте содержимое :

#! /bin/sh

### BEGIN INIT INFO
# Provides:          php-fpm
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO

prefix=/usr/local/php-fpm
exec_prefix=${prefix}

php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm.conf
php_fpm_conf_PID=$(sed -n 's/^pid[ =]*//p' $php_fpm_CONF)
php_fpm_PID=${php_fpm_conf_PID:-/var/run/php-fpm.pid}

php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"


wait_for_pid () {
	try=0

	while test $try -lt 35 ; do

		case "$1" in
			'created')
			if [ -f "$2" ] ; then
				try=''
				break
			fi
			;;

			'removed')
			if [ ! -f "$2" ] ; then
				try=''
				break
			fi
			;;
		esac

		echo -n .
		try=`expr $try + 1`
		sleep 1

	done

}

case "$1" in
	start)
		echo -n "Starting php-fpm "

		$php_fpm_BIN --daemonize $php_opts

		if [ "$?" != 0 ] ; then
			echo " failed"
			exit 1
		fi

		wait_for_pid created $php_fpm_PID

		if [ -n "$try" ] ; then
			echo " failed"
			exit 1
		else
			echo " done"
		fi
	;;

	stop)
		echo -n "Gracefully shutting down php-fpm "

		if [ ! -r $php_fpm_PID ] ; then
			echo "warning, no pid file found - php-fpm is not running ?"
			exit 1
		fi

		kill -QUIT `cat $php_fpm_PID`

		wait_for_pid removed $php_fpm_PID

		if [ -n "$try" ] ; then
			echo " failed. Use force-quit"
			exit 1
		else
			echo " done"
		fi
	;;

	status)
		if [ ! -r $php_fpm_PID ] ; then
			echo "php-fpm is stopped"
			exit 0
		fi

		PID=`cat $php_fpm_PID`
		if ps -p $PID | grep -q $PID; then
			echo "php-fpm (pid $PID) is running..."
		else
			echo "php-fpm dead but pid file exists"
		fi
	;;

	force-quit)
		echo -n "Terminating php-fpm "

		if [ ! -r $php_fpm_PID ] ; then
			echo "warning, no pid file found - php-fpm is not running ?"
			exit 1
		fi

		kill -TERM `cat $php_fpm_PID`

		wait_for_pid removed $php_fpm_PID

		if [ -n "$try" ] ; then
			echo " failed"
			exit 1
		else
			echo " done"
		fi
	;;

	restart)
		$0 stop
		$0 start
	;;

	reload)

		echo -n "Reload service php-fpm "

		if [ ! -r $php_fpm_PID ] ; then
			echo "warning, no pid file found - php-fpm is not running ?"
			exit 1
		fi

		kill -USR2 `cat $php_fpm_PID`

		echo " done"
	;;

	configtest)
		$php_fpm_BIN -t
	;;

	*)
		echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
		exit 1
	;;

esac

Дадим права на запуск, добавим скрипт в автозагрузку:

chmod +x /etc/init.d/php-fpm
update-rc.d php-fpm defaults

Затем необходимо выполнить команду:

service php-fpm restart

Открываем конфигурацию php.ini путь /usr/local/php-fpm/lib
правим строчки, расскоментируем cgi.fix_pathinfo=1, и правим на cgi.fix_pathinfo=0 .

Устанавливаем базу данных MariaDB

apt-get install mariadb-client mariadb-server

mysql_secure_installation
Since we need to tough the security loopholes let’s make MySQL more secure…
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…
ERROR 1008 (HY000) at line 1: Can’t drop database ‘test’; database doesn’t exist
… Failed! Not critical, keep moving…
– 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!

Устанавливаем PHPMyAdmin.
Добавляем ссылку.
Перезагружаем сервис.

apt-get install phpmyadmin
ln -s /usr/share/phpmyadmin/ /var/www/html/
sudo service nginx restart

Во время установки вам будет предложено выбрать веб-сервер (Apache или Lighttpd), ничего не выбираем. Следующее окно выбираем Да и вводим пароль для доступа к PHPMyAdmin.

Если рут пользователя нету, то можно создать нового.

mysql -u root -p
CREATE USER 'user'@'localhost' IDENTIFIED BY 'userPassword';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

User — на своего ,userPassword — придумываем свой

PHPMyAdmin будет доступен по ссылке http://IP_or_DomainName/phpmyadmin (после конфигурирования и перезапуска NGINX’s Server)

Конфигурация NGINX’s Server Blocks

правим по пути /etc/nginx/sites-available/default , удаляем все и вставляем конфигурацию.
Не забудьте изменить имя домена из указанных ниже конфигураций.

server {
 listen 80 default_server;
 root /var/www/html;
 index index.php index.html index.htm;
 server_name blabla.com www.blabla.com;
 charset UTF-8;
 location / {
 try_files $uri/ /index.php?$args;
 }
 location ~ .php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+.php)(/.+)$;
 fastcgi_pass unix:/run/php7-fpm.sock;
 fastcgi_index index.php;
 include fastcgi.conf;
 }
 location ~* .(js|css|png|jpg|jpeg|gif|ico|eot|otf|ttf|woff)$ {
 add_header Access-Control-Allow-Origin *;
 access_log off; log_not_found off; expires 30d;
 }
 location = /robots.txt { access_log off; log_not_found off; }
 location ~ /. { deny all; access_log off; log_not_found off; }
 }

Этот конфиг проверен по минимальному, ему сильно нужна доработку, немного позже выложу новый,

Перезагрузка всех служб.

service nginx restart
service php-fpm restart
service mysql restart

Возникла ошибка NGINX’s при старте служб, не было каталога логов по пути, добавление каталогов исправило ситуацию

Все готово!

Дополнительные настройки.

Увеличение файла загрузки, путем правки PHP, возникает ошибка ограничения в 2МБ. Идем в путь /usr/local/php-fpm/lib/php.ini и правим файл. Ищем строчки и правим их.

upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300

Так же дополнительно нужно добавить настройку в nginx.
Правим конфиг /etc/nginx/nginx.conf

user www-data;
 worker_processes auto;
 pid /run/nginx.pid;
 events {
     worker_connections 768;
     # multi_accept on;
 }
 http {
##
# Basic Settings 
## 
client_max_body_size 150m; 
large_client_header_buffers 4 16k; 
sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_timeout 65; 
types_hash_max_size 2048; 
# server_tokens off; 
# server_names_hash_bucket_size 64; 
# server_name_in_redirect off; 
include /etc/nginx/mime.types; 
default_type application/octet-stream; 
## 
# SSL Settings 
## 
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
# Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; 
## 
# Logging Settings 
## 
access_log /var/log/nginx/access.log; 
error_log /var/log/nginx/error.log; 
## 
# Gzip Settings 
## 
gzip on; 
gzip_disable "msie6"; 
# gzip_vary on; 
# gzip_proxied any; 
# gzip_comp_level 6; 
# gzip_buffers 16 8k; 
# gzip_http_version 1.1; 
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; 
## 
# Virtual Host Configs 
## 
include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*;
 }

Команда добавление ярлыка сайта для nginx

ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

You may also like...