Настройка Centos 7 LXC контейнера с поддержкой nginx и php-fpm

Установите контейнер LXC Centos 7 командой:

lxc-create -t download -n test-centos -- --dist centos --release 7 --arch amd64

Подключитесь к LXC контейнеру.

lxc-attach --name test-centos

Установите репозиторий epel

rpm --import https://www.centos.org/keys/RPM-GPG-KEY-CentOS-7
rpm --import https://archive.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
yum install epel-release -y

Установите репозиторий remi

cd /tmp
rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi
wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
rm -f remi-release-7.rpm

Обновите контейнер и установите необходимый софт

yum update -y
yum install wget deltarpm mc nano htop less man net-tools supervisor screen cronie crontabs logrotate zip unzip -y

Настройка статического IP адреса контейнера

В конфиге на хост машине отредактируйте конфиг. Файл /var/lib/lxc/test-centos/config

# Template used to create this container: /usr/share/lxc/templates/lxc-download
# Parameters passed to the template: --dist centos --release 7 --arch amd64
# Template script checksum (SHA-1): 273c51343604eb85f7e294c8da0a5eb769d648f3
# For additional config options, please look at lxc.container.conf(5)

# Uncomment the following line to support nesting containers:
#lxc.include = /usr/share/lxc/config/nesting.conf
# (Be aware this has security implications)


# Distribution configuration
lxc.include = /usr/share/lxc/config/common.conf
lxc.include = /usr/share/lxc/config/userns.conf
lxc.arch = x86_64


# Container specific configuration
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536
lxc.rootfs.path = dir:/var/lib/lxc/test-centos/rootfs
lxc.uts.name = test-centos


# Network configuration
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.name = eth0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:16:3e:7e:90:26
lxc.net.0.ipv4.address = 10.0.3.10/24
lxc.net.0.ipv4.gateway = 10.0.0.1

# Auto start
lxc.start.auto = 1
lxc.start.delay = 15

В LXC контейнере выполните команду nano /etc/sysconfig/network-scripts/ifcfg-eth0

Файл должен содержать примерно следующее. Параметры HOSTNAME, IPADDR, NETMASK, GATEWAY, DNS укажите свои

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
HOSTNAME=test-centos
NM_CONTROLLED=no
TYPE=Ethernet
MTU=
IPADDR=10.0.3.10
NETMASK=255.255.255.0
GATEWAY=10.0.3.1
DNS1=1.1.1.1
DNS2=8.8.8.8

либо для автоматической выдачи IP адреса:

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
HOSTNAME=test-centos
NM_CONTROLLED=no
TYPE=Ethernet
MTU=
DNS1=1.1.1.1
DNS2=8.8.8.8

Установка PHP 7.1

yum install php71 php71-php-cli php71-php-common php71-php-fpm php71-php-gd php71-php-intl php71-php-json php71-php-mbstring php71-php-mcrypt php71-php-mysqlnd php71-php-pdo php71-php-pear php71-php-pecl-zip php71-php-process php71-php-soap php71-php-xml php71-runtime -y
ln -s /usr/bin/php71 /usr/bin/php
ln -s /usr/bin/php71-cgi /usr/bin/php-cgi

Установите Composer:

cd /tmp

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

mv composer.phar /usr/bin/composer

Установка NGINX

Выполните команду

yum install nginx -y
systemctl enable nginx
systemctl start nginx

Настройка NGINX

Создайте файл

nano /etc/nginx/conf.d/app.conf

Со следующим содержимым:

server {
	listen 80 default_server;
	server_name_in_redirect off;
	root /var/www/html;
	
	index index.php index.html;
	autoindex off;
	
	location /.well-known {
		root /var/www/html;
		allow all;
		break;
	}

	location ~ /\.svn.* { deny all; }
	location ~ /\.hg.* { deny all; }
	location ~ /\.ht.* { deny all; }
	location ~ /\.git.* { deny all; }
	location ~ /\.composer.* { deny all; }
	location ~ \.sql$ { deny all; }
	
	
	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9071;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
		break;
	}
	location ~* ^.+\.(css|js|jpg|jpeg|png|bmp|ico|svg)$ {
		expires max;
	}
	
}

Настройка PHP-FPM

Создайте файл 

nano /etc/init.d/php71-fpm

Со следующим содержимым:

#!/bin/bash
#
### BEGIN INIT INFO
# Provides: php71-fpm
# Required-Start: $local_fs $network $syslog $remote_fs
# Required-Stop: $local_fs $network $syslog $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start up the php-fpm server daemon
# Description:   PHP-FPM 7.1
### END INIT INFO

#groupadd -g 502 -r www
#useradd -g 502 -u 502 -r -s /sbin/nologin -M www

RETVAL=0
BASEPATH="/opt/remi/php71/root"

start_cmd(){
	${BASEPATH}/usr/sbin/php-fpm -D
	echo "Started"
}

stop_cmd(){
    pidfile="/var/opt/remi/php71/run/php-fpm/php-fpm.pid"
    sleep 1
    if [ -f $pidfile ]; then
        cat $pidfile | xargs kill
        rm $pidfile > /dev/null 2>&1
		echo "Stoped. "
    else
		echo "Fail stop. "
    fi
	return 1
	#killall php-fpm
}

case "$1" in
	start)
		start_cmd
		;;
	stop)
		stop_cmd
		;;
	restart)
		stop_cmd
		sleep 2
		start_cmd
		;;
	*)
		echo "Usage: service php71-fpm {start|stop|restart}"
		RETVAL=1
esac

exit $RETVAL

Установите права на выполнение для этого файла

chmod +x /etc/init.d/php71-fpm

Создайте пользователей www

groupadd -r --gid 1000 www
useradd -r -m --uid 1000 -g www www

Отредактируйте файл /etc/opt/remi/php71/php-fpm.d/www.conf

Поменяйте строчки:

user = www
group = www
listen = 127.0.0.1:9071

Установка NodeJS

Установите репозиторий NodeJS

curl -sL https://rpm.nodesource.com/setup_10.x | bash -

 Выполните команды:

yum install gcc-c++ make nodejs

Установите глобально пакеты NodeJS

npm install --global gulp
npm install --global bower