Настройка 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