Новости:

SMF - Just Installed!

Главное меню

Последние сообщения

#91
If you get an error about the Remove-VM method being disabled by horizon.daas, you will first need to unprotect folders in vCenter. To do that run the following command using PowerCLI on the Horizon Connection Broker.

Код: bash
IcUnprotect.cmd -vc hostname_or_IP_address -uid user_ID -password password [-clusterId cluster_ID] [-includeFolders]

Я долго пытался найти в инете как найти user_id.. Не нашел, и просто запустил как Adminstrator@vsphere.local - все отработало

Удалить все orphaned:

Save the commands outlined in red into a .ps1 script file. 

Run the script using PowerCLI from the vCenter server. In case of an appliance, run it from any machine that has PowerCLI installed.

$vcserver = "vcenter.domain.com"
$vcusername = "vcenter_admin"
$vcpassword = "password"

Connect-VIServer -Server $vcserver -User $vcusername -Password $vcpassword

$allVMs=Get-VM
foreach ($vm in $allVMs) { if ($vm.ExtensionData.Runtime.ConnectionState -eq "orphaned") {$vm | Remove-VM}
}
#92
Настройки *nix (почта, web, система etc) / Раширить LVM раздел
Последний ответ от George - Окт. 09, 2022, 11:17
В панели управления облаком увеличим объем диска на один гигабайт. Отобразим информацию о нем в консоли:

Код: bash
echo 1 > /sys/block/sdd/device/rescan
Код: bash
parted /dev/sde/ print free

Мы видим, что у нас добавилось свободное дисковое пространство.


Разделы, использующие LVM, помечены соответствующим тегом. В этом конкретном примере мы будем увеличивать диск под номером три до необходимого нам объёма. Нам не придется ставить дополнительные утилиты, так как все инструменты по умолчанию присутствуют во всех популярных дистрибутивах Linux.

Мы воспользуемся возможностями parted. Но предварительно отобразим размер свободного пространства в мегабайтах для наглядности.

Код: bash
parted /dev/sde unit MB print free


Далее смотрим на ключевые столбцы — Start, End и Size. Свободное дисковое пространство заканчивается на точке в 6442 Мбайта.


Чтобы расширить последний раздел, прописываем команду:

Код: bash
parted /dev/sde resizepart 3 6441MB


Обратите внимание, что мы уменьшили цифровое значение в конце на один мегабайт. Проверим внесенные изменения:

Код: bash
parted /dev/sde print free

Свободное дисковое пространство уменьшилось до одного мегабайта, а наш второй раздел имеет объем в 3806 Мбайт.


Вернемся в GParted и обновим информацию по разделам. Сейчас LVM в /dev/sde3 не «растянут» до конца.


Посмотрим на объем текущего физического тома – для этого выполним:

Код: bash
pvdisplay



Как физические тома у нас помечены два устройства — sde2 и sde3. Последний имеет объем в 2,5 Гб, но в GParted эта цифра равна 3,5 Гб. Чтобы исправить ситуацию и синхронизировать значения, нужно выполнить команду:
Код: bash
pvresize /dev/sde3


Повторяем pvdisplay и видим, что объем физического раздела увеличился.


Чтобы отобразить существующие логические разделы, обратимся к команде:

Код: bash
lvscan

В нашей группе томов присутствуют два логических раздела — root и data.


Мы можем увеличить любой из этих томов. Для примера расширим /root следующей командой:

Код: bash
lvextend /dev/vg/root -l +100%FREE -r


Ключ -r автоматически расширит и раздел, и файловую систему внутри него (как в случае с xfr, так и с ext). Переходим в GParted и видим, что операция выполнена успешно:

image
Теперь, если прописать в консоли df -h, мы увидим, что устройство dev/mapper/vg-root имеет объем в два гигабайта, хотя изначально его объем был равен одному гигабайту.

#93
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 05, 2022, 12:54
3. Создание пользователя FTP

Для возможности подключения к сайту по FTP, создаем отдельного пользователя:

Код: bash
ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=site1.local --uid=33 --gid=33 --home=/var/www/$TMP_SITE --shell=/usr/sbin/nologin

* тут мы создадим пользователя site1.local, который будет иметь доступ к каталогу
/var/www/$TMP_SITE
.
#94
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 05, 2022, 12:47
2. Создание базы данных

Создаем базу данных для сайта командами:
Код: bash
mysql -uroot -p

Код: sql
 CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8mb4_general_ci;

Код: sql
 GRANT ALL PRIVILEGES ON site1.* TO dbuser@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

Код: sql
 quit

* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.
#95
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 05, 2022, 12:28
Создание первого сайта

Настало время проверить наш сервер на реальном примере. Задаем переменную, значение которой будет домен сайта:
Код: bash
TMP_SITE=site1.local

* где site1.local заменить на имя домена, для которого создаем первый сайт. Нам будет намного удобнее копировать и вставлять команды с переменной (не придется править после копипасты).
1. Добавление виртуального домена

Создаем новый файл виртуального домена NGINX:
Код: bash
nano /etc/nginx/sites-enabled/$TMP_SITE.conf

* обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.

И добавляем следующее содержимое.

Для HTTP:

Код: apacheconf
server {
    listen      80;
    server_name  site1.local www.site1.local;
    set $root_path /var/www/site1.local/www;

    access_log /var/www/site1.local/log/nginx/access_log;
    error_log /var/www/site1.local/log/nginx/error_log;
    
    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1000;
    gzip_vary on;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    root  $root_path;
    index  index.php index.html index.htm;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect    off;
        proxy_set_header  Host            $host;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
            expires modified +1w;
    }
}

* где site1.local — домен, для которого создается виртуальный домен; /var/www/site1 — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
*** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.


Для HTTPS:
Код: apacheconf
server {
    listen 80;
    server_name site1.local www.site1.local;
    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl;
    ssl on;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/cert.key;

    server_name  site1.local www.site1.local;
    set $root_path /var/www/site1.local/www;

    access_log /var/www/site1.local/log/nginx/access_log;
    error_log /var/www/site1.local/log/nginx/error_log;
    
    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1000;
    gzip_vary on;
    gzip_proxied    expired no-cache no-store private auth;
    gzip_types      text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

    root   $root_path;
    index  index.php index.html index.htm;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect     off;
        proxy_set_header   Host             $host:$server_port;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
    
    location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
            expires modified +1w;
    }
}

* в первой секции server мы перенаправляем все запросы по незащищенному http на https.
** ssl_certificate и ssl_certificate_key — пути к публичному и приватному ключам соответственно.
*** для получения бесплатного сертификата читайте статью Получение бесплатного SSL сертификата Let's Encrypt.


Теперь создаем виртуальный домен в Apache:

Код: bash
nano /etc/apache2/sites-enabled/$TMP_SITE.conf
Код: php
<VirtualHost *:8080>
    Define root_domain site1.local
    Define root_path /var/www/site1.local

    ServerName ${root_domain}
    ServerAlias www.${root_domain}
    DocumentRoot ${root_path}/www

    ErrorLog     ${root_path}/log/apache/error_log
    TransferLog  ${root_path}/log/apache/access_log

    php_admin_value upload_tmp_dir ${root_path}/tmp
    php_admin_value doc_root ${root_path}
    php_admin_value open_basedir    ${root_path}:/usr/local/share/smarty:/usr/local/share/pear
    php_admin_value session.save_path 0;0660;${root_path}/tmp
</VirtualHost>

Создаем каталоги для сайта:
Код: bash
mkdir -p /var/www/$TMP_SITE/{www,tmp}

Код: bash
mkdir -p /var/www/$TMP_SITE/log/{nginx,apache}

Создаем индексный файл со следующим содержимым:

Код: bash
nano /var/www/$TMP_SITE/www/index.php

Код: bash
<?php echo "<h1>Hello from site1</h1>"; ?>

Задаем права на папки:

Код: bash
chown -R www-data:www-data /var/www/$TMP_SITE

Код: bash
chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

Код: bash
nginx -t

Код: bash
apachectl configtest

Перезапускаем веб-сервер:

Код: bash
systemctl reload nginx
Код: bash
systemctl reload apache2
Открываем сайт в браузере по нашему домену site1.local (он должен быть прописан в DNS или можно его задать в локальном файле hosts того компьютера, с которого мы открываем сайт в браузере). Мы должны увидит фразу «Hello from site1».
#96
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 05, 2022, 12:16
Тюнинг веб-сервера

PHP

Внесем небольшие изменения в нашу конфигурацию PHP:

    post_max_size — максимальный объем отправляемых на сервер данных;
    upload_max_filesize — максимально допустимый размер одного загружаемого файла;
    short_open_tag — разрешение использования короткого способа открытия php (<?);
    date.timezone — временная зона, которая будет использоваться веб-сервером, если ее не переопределить настройками в коде php или в файле .htaccess.

Данные изменения вносятся в разные файлы в зависимости от версии PHP и обработчике. Например, для php версии 7.4 и Apache мы открываем на редактирование следующий файл:
Код: bash
nano /etc/php/8.1/apache2/php.ini

И правим следующее:
Код: vim
post_max_size = 1G
...
upload_max_filesize = 512M
...
short_open_tag = On
...
date.timezone = "Europe/Moscow"

Но мы упростим задачу. Для начала, создадим две переменные:

Код: bash
PHP_VER=8.1
Код: bash
INT=apache2

Теперь мы можем упростить настройку для Apache:

Код: bash
sed -e "s/post_max_size = 8M/post_max_size = 1G/" -i /etc/php/$PHP_VER/$INT/php.ini

Код: bash
sed -e "s/upload_max_filesize = 2M/upload_max_filesize = 512M/" -i /etc/php/$PHP_VER/$INT/php.ini

Код: bash
sed -e "s/short_open_tag = Off/short_open_tag = On/" -i /etc/php/$PHP_VER/$INT/php.ini

Код: bash
sed -e "s/;date.timezone =/date.timezone ='Europe\/Moscow'/" -i /etc/php/$PHP_VER/$INT/php.ini

Посмотреть результат можно командой:

Код: bash
cat /etc/php/$PHP_VER/$INT/php.ini | grep -e "^post_max_size\|^upload_max_filesize\|^short_open_tag\|^date.timezone"
Теперь меняем интерпретатор:

Код: bash
INT=fpm

И повторяем:

Код: bash
sed -e "s/post_max_size = 8M/post_max_size = 1G/" -i /etc/php/$PHP_VER/$INT/php.ini

Код: bash
sed -e "s/upload_max_filesize = 2M/upload_max_filesize = 512M/" -i /etc/php/$PHP_VER/$INT/php.ini
Код: bash
sed -e "s/short_open_tag = Off/short_open_tag = On/" -i /etc/php/$PHP_VER/$INT/php.ini

Код: bash
sed -e "s/;date.timezone =/date.timezone ='Europe\/Moscow'/" -i /etc/php/$PHP_VER/$INT/php.ini

Проверяем:

Код: bash
cat /etc/php/$PHP_VER/$INT/php.ini | grep -e "^post_max_size\|^upload_max_filesize\|^short_open_tag\|^date.timezone"

Перезапускаем php-fpm и apache:

Код: bash
systemctl restart php8.1-fpm

Код: bash
systemctl restart apache2


NGINX

Открываем на редактирование следующий файл:

Код: bash
nano /etc/nginx/nginx.conf

И внутри секции http добавляем:

Код: vim
client_max_body_size 512M;

После перезапускаем nginx:
Код: bash
systemctl reload nginx
#97
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 05, 2022, 12:03
Postfix


В качестве агента MTA мы будем использовать удобный в настройке и надежный Postfix.
Установка, настройка и запуск

Устанавливаем пакет postfix:

Код: bash
apt install postfix -y

Вносим некоторые изменения в настройки:

Код: bash
nano /etc/postfix/main.cf

Код: vim
myorigin = $mydomain
smtp_generic_maps = hash:/etc/postfix/generic_map

* mydomain — домен сервера; myorigin — имя домена, которое будет подставляться всем отправляемым сообщениям без явного указания оного; smtp_generic_maps указывает на карту с общими правилами пересылки.

Открываем карту пересылки:

Код: bash
nano /etc/postfix/generic_map

И добавляем:
Код: bash
@example.org    no-reply@example.org

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@dmosk.local.

Создаем карту:

Код: bash
postmap /etc/postfix/generic_map

Включаем автозапуск почтового сервера и перезапускаем его службу:

Код: bash
systemctl enable postfix

Код: bash
systemctl restart postfix
Корректная отправка

Для того, чтобы сервер мог отправлять сообщения на внешние ящики, необходимо корректно настроить в DNS, как минимум, записи A и PTR.

Для добавления А-записи, необходимо в настройках панели управления нашим доменом создать запись типа. Ее имя и IP-адрес должны соответствовать имени и адресу нашего сервера.

Для создания PTR-записи необходимо написать письмо Интернет-провайдеру, к которому подключен наш сервер. Если наш сервер арендуется у хостинговой компании, необходимо либо написать данное письмо данной хостинговой компании, либо данная возможность может быть предоставлена в панели управления хостинговыми услугами.
#98
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 04, 2022, 11:55
Apache Real IP


Запросы на apache приходят от NGINX, и они воспринимаются первым как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей. Для решения проблемы будем использовать модуль remoteip.

Создаем конфигурационный файл со следующим содержимым:

Код: bash
nano /etc/apache2/mods-available/remoteip.conf
Код: vim
<IfModule remoteip_module>
  RemoteIPHeader X-Forwarded-For
  RemoteIPTrustedProxy 127.0.0.1/8
</IfModule>

Активируем модуль:

Код: bash
a2enmod remoteip

Перезапускаем apache:

Код: bash
systemctl restart apache2

Для проверки настройки открываем браузер и вводим в адресную строку http://<IP-адрес сервера>, где откроется наша страница phpinfo. В разделе Apache Environment мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу в опции REMOTE_ADDR.
#99
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 04, 2022, 11:50
NGINX + Apache

Ранее мы настроили связку nginx + php-fpm. Теперь настроим nginx + apache. Открываем конфигурационный файл nginx для сайта по умолчанию:

Код: bash
nano /etc/nginx/sites-enabled/default

Находим наш настроенный location для php-fpm:

...
Код: apacheconf
        location ~ \.php$ {
            set $root_path /var/www/html;
            fastcgi_pass unix:/run/php/php7.4-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $root_path;
        }
...

и меняем на:

...
Код: apacheconf
        location ~ \.php$ {
            proxy_pass http://127.0.0.1:8080;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
...

Проверяем и перезапускаем nginx:

Код: bash
nginx -t

Код: bash
systemctl reload nginx

Пробуем открыть в браузере http://<IP-адрес сервера> — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Проверка работоспособности Apache + NGINX
#100
Web servers / От: NGINX + Apache + MariaDB (...
Последний ответ от George - Окт. 04, 2022, 11:34
Apache

Для поддержки файла .htaccess, который используется многими сайтами, необходимо установить и настроить веб-сервер Apache.

Устанавливаем apache и модуль для php:

Код: bash
apt install apache2 libapache2-mod-php

Заходим в настройки портов:

Код: bash
nano /etc/apache2/ports.conf

И редактируем следующее:
Код: vim
Listen 8080

#<IfModule ssl_module>
#       Listen 443
#</IfModule>

#<IfModule mod_gnutls.c>
#       Listen 443
#</IfModule>

* мы настроили прослушивание на порту 8080, так как на 80 уже работает NGINX. Также мы закомментировали прослушивание по 443, так как и он будет слушаться NGINX.

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

Код: bash
nano /etc/apache2/mods-available/dir.conf

И добавляем впереди индексных файлов index.php:
Код: vim
<IfModule dir_module>
    DirectoryIndex index.php index.html ...
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html и так далее.

Открываем основной конфигурационный файл для apache:

Код: bash
nano /etc/apache2/apache2.conf

Рядом с опциями Directory дописываем:

Код: vim
<Directory /var/www/*/www>
    AllowOverride All
    Options Indexes ExecCGI FollowSymLinks
    Require all granted
</Directory>

* где Directory указывает на путь, для которого мы хотим задать настройки; AllowOverride — позволит переопределить все настройки с помощью файла .htaccess; Options задает некоторые настройки: Indexes разрешает списки каталогов, ExecCGI разрешает запуск cgi скриптов, Require all granted — предоставляет всем доступ к сайтам в данном каталоге.

Ниже допишем:

Код: vim
<IfModule setenvif_module>
    SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>

* этой настройкой мы при получении заголовка X-Forwarded-Proto со значением https задаем переменную $_SERVER['HTTPS'] равную on. Данная настройки критична для функционирования некоторых CMS.

Запрещаем mpm_event:
Код: bash
a2dismod mpm_event

* по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль не поддерживает php 7 и выше.

Разрешаем модуль мультипроцессовой обработки mpm_prefork:

Код: bash
a2enmod mpm_prefork

Разрешаем модуль php:

Код: bash
a2enmod php8.1

* в данном примере установлен php версии 8.1.

Разрешаем модуль setenvif:

Код: bash
a2enmod setenvif

Разрешаем модуль rewrite:

Код: bash
a2enmod rewrite

 

В процессе включения модулей, если мы видим «Module ... already enabled», значит модуль уже включен.

Разрешаем автозапуск Apache и перезапускаем службу:

Код: bash
systemctl enable apache2

Код: bash
systemctl restart apache2
Открываем браузер и вводим в адресную строку http://<IP-адрес сервера>:8080. Мы должны увидеть привычную страницу:

Проверка работоспособности Apache с помощью phpinfo

* в разделе Server API мы должны увидеть Apache.
🡱 🡳

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