Loading...
Извольте ждать
Menu
Установка LAMP для хостинга

Установка LAMP для хостинга

 Установка LAMP

Навстройка сети:

/etc/network/interfaces

auto eth0
allow-hotplug eth0
iface eth0 inet static
address 172.16.3.3
netmask 255.255.255.0
gateway 172.16.3.1

или, если установлен netplan

/etc/netplan/01-netcfg.yaml

network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses: [172.16.3.3/24]
gateway4: 172.16.3.1
nameservers:
search: [domain.com]
addresses: [8.8.8.8, 172.16.3.1]

 

 

 

Apache2:
# apt-get install apache2 

Включение mpm-itk
# a2enmod mpm_itk

MariaDB:
# apt-get install mariadb-server

Настройка:
# mysql_secure_installation

PHP:
# apt install sqlite3 curl php php-cli php-common libapache2-mod-php php-mysql php-curl php-gd php-sqlite3 php-xml php-mbstring php-fpm
Проверка:
php -m
или

 phpinfo();

 

 mpm-itk:

apt-get install libapache2-mpm-itk 

Привести test1.conf к виду  

<VirtualHost *:80>
        ServerName mydomain.com
        ServerAlias www.mydomain.com
        DocumentRoot /var/www/html
 
        <Directory "/var/www/html">
        AllowOverride All
        Options -Indexes +FollowSymLinks
        </Directory>
 
         <IfModule mpm_itk_module>
         AssignUserId www-data wwwdata-
        </IfModule>
#
#AssignUserID  wwwdata wwwdata
#
 
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
 
</VirtualHost>
 
или
 
mod_ruid2: 
apt-get install libapache2-mod-ruid2

/etc/apache2/apache2.conf:
RUidGid ${APACHE_RUN_USER} ${APACHE_RUN_GROUP}

В test1.conf:
RUidGid webadmin admins
Одновременно ставить оба мода не надо.

Проверить работу мода можно кодом на РНР:
print `id`;


 
 
Перезапустить apache2
/etc/init.d/apache2 restart
Проверить моды и конфигурацию
apachectl -t -D DUMP_MODULES | grep mpm
Проверить мод префорк /etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
        StartServers              5
        MinSpareServers           5
        MaxSpareServers           10
        MaxRequestWorkers         150
        MaxConnectionsPerChild   0
</IfModule>
Для расчета MaxRequestWorkers  (MaxClients)
ps aux |grep apache2
root      10605  0.0  0.1 1282276 16780 ?       Ss   02:05   0:01 /usr/sbin/apache2 -k start
www-data  13929  5.6  0.5 1299920 66256 ?       S    10:28   2:34 /usr/sbin/apache2 -k start
www-data  14027  5.6  0.6 1318024 83468 ?       S    10:43   1:40 /usr/sbin/apache2 -k start
, где найти строку с root - родительский процесс, в данном случае 10605
 pmap -d 10605   | tail -1
mapped: 1282276K    writeable/private: 16692K    shared: 1048648K
, в данном случае - 16,7М
MaxRequestWorkers = (ОбщийОбъемПамяти-ПамятьДляДругихПроцессов)/ПамятьНа1ПроцессАпача = (12000-2000)/16,7=~550

Включение дополнительных модулей(при необходимости)

 

 

 

 
 
Включить сжатие:
a2enmod deflate
 
Добавить в htaccess
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
 
Проблемы:
1. При возникновении ошибки
Cannot adopt OID in NET-SNMP-EXAMPLES

Удалить зрз-ытьз
sudo apt-get remove php5-snmp
sudo apt-get remove php7.0-snmp

2. Ошибка authz_core error
Проверить, чтобы конфигурационные файлы хостингов заканчивались на .conf
Вписать Require all granted в секцию

3. Отображение сайта в неверной кодировке при cp1251
Прописать в .htaccess
AddDefaultCharset WINDOWS-1251
php_value default_charset cp1251



Бэкапирование по rsync



apt-get install rsync

10.10.10.2 - рабочий сервер
10.10.10.3 - сервер бэкапов (с него коннектимся к рабочему)

1. Создание ключа

На 10.10.10.3:

# ssh-keygen -f ~/.ssh/id_rsa -q -P "" -b 4096

# cat ~/.ssh/id_rsa.pub

Вывод скопировать

На 10.10.10.2:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys
В файл ~/.ssh/authorized_keys копируем содержимое публичного ключа, скопированного выше
/etc/init.d/sshd restart
Проверка c 10.10.10.3
ssh -i /home/user2/.ssh/id_rsa -p 22 user1@10.10.10.2
Пример rsync:

#!/bin/sh

snapshot_dir=/var/backup/snaps-site.ru/`date '+%y-%m-%d'`
mkdir $snapshot_dir

rsync -ahz -r --delete --hard-links \
--delete-excluded --exclude-from=/root/scripts/siteru.exclude \
--backup --backup-dir=$snapshot_dir \
-e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
user@10.10.10.2:/var/www/site.ru/ /var/www/site.ru/


Монтирование yandex диска

apt-get install davfs2
sudo mkdir -p /mnt/yandex

/etc/davfs2/secret:
/mnt/yandex username@yandex.ru password

/etc/fstab:
https://webdav.yandex.ru /mnt/yandex davfs noauto,user 0 0

mount /mnt/yandex
umount /mnt/yandex



Вместо всего вышеописанного можно установить VestaCP
Для этого нужна чистая установка (из пакетов доустановить openssh-server и curl)/
Зайти на http://vestacp.com/install/ , выбрать желаемые параметры и выполнить инструкцию в SSH.



БЭКАПИРОВАНИЕ СЕРВЕРА



RSYNC по SSH

Создать ключ
# ssh-keygen -t rsa
Скопировать на синхронизируемый сервер
№ ssh-copy-id -p22 -i /home/user1/.ssh/id_rsa.pub user1@10.10.1.3

Скрипт

#!/bin/sh

snapshot_dir=/var/data/snaps-www/`date '+%y-%m-%d'`
mkdir $snapshot_dir

rsync -ahz -r --delete --hard-links \
--delete-excluded --exclude-from=/root/scripts/www.exclude \
--backup --backup-dir=$snapshot_dir \
-e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
user1@10.10.1.3:/var/www/ /var/data/www/

rsync -avzhe "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
user1@10.10.1.3:/backup/bases/*.sql.gz /var/data/bd/



----SFTP доступ. ----
Ограничение пользователя в директории

Заменить подсистему sftp в /etc/ssh/sshd_config:
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match User user1
#Match Group sftpusers
ChrootDirectory /home/user1
# ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

Владец директории должен быть root, иначе:
fatal: bad ownership or modes for chroot directory
Задать
chown root:user1 /home/user1

Линковка лиректории из /tmp (tmpfs)

Я использую HLS сервер, который генерит сегменты в /tmp/folder
/tmp смонтирован в память - tmpfs через /etc/systemd/system/tmp.mount
Также я пытаюсь прилинковать эту
/tmp/folder в корень виртуального хостинга, и получаю
 AH00037: Symbolic link not allowed or link target not accessible:
Не смотря на то, что в .htaccess прописано
Options -SymLinksIfOwnerMatch +FollowSymlinks
Дело в том, что apache не любит линковаться в /tmp, потому что в /etc/systemd/system/multi-user.target.wants/apache2.service прописано
PrivateTmp=true
Пофиксив сие на false и послав безопасность можно лететь дальше.


CertBot

Скачать скрипт certbot:

wget https://dl.eff.org/certbot-auto

chmod a+x ./certbot-auto

 

Прописать репозитории:

Debian wheezy: 

Debian jessie: 

Lisolog 2021