Centos 7 (чистый) - полная настройка
Войти

Centos 7 (чистый) - полная настройка

Centos 7 (чистый) - полная настройка

(ненужно) Устанавливаем обновления (если вам нужно)
1
sudo yum update -y

Установка и настройка файрволла

  1. Устанавливаем firewalld
    1
    yum install firewalld -y
  2. Добавляем в автозагрузку
    1
    systemctl enable firewalld
  3. Запускаем firewalld
    1
    systemctl start firewalld
  4. Проверяем запустился ли firewalld
    1
    systemctl status firewalld
  5. Разрешаем трафик для http и https(80,443)
    1
    2
    sudo firewall-cmd --permanent --zone=public --add-service=http
    
    sudo firewall-cmd --permanent --zone=public --add-service=https
  6. Перезапустим службу firewalld
    1
    sudo systemctl restart firewalld

Подготовка

  1. Устанавливаем nano
    1
    yum install nano -y

Установка nginx

  1. Перед установкой nginx необходимо установить EPEL репозиторий
    1
    yum install epel-release -y
  2. Устанавливаем nginx
    1
    yum install nginx -y
  3. Запускаем nginx
    1
    systemctl start nginx
  4. Добавляем в автозагрузку
    1
    systemctl enable nginx
  5. Чтобы получить доступ к сайтам из вне необходимо разрешить трафик для веб-сервера в брандмауэре системы:
    1
    firewall-cmd --zone=public --permanent --add-service=http
    1
    firewall-cmd --zone=public --permanent --add-service=https
  6. Остается лишь перезагрузить брандмауэр:
    1
    firewall-cmd --reload
  7. Далее необходимо настроить SElinux, чтобы не было ошибки 403 при указании папки веб-серверу
    1
    # chcon -Rt httpd_sys_content_t <путь_к_папке_с_сайтами>

Настройка виртуальных хостов

  1. Создадим каталоги sites-available и sites-enabled
    1
    2
    sudo mkdir /etc/nginx/sites-available  
    sudo mkdir /etc/nginx/sites-enabled
  2. Откроем для редактирования конфигурационный файл nginx.conf
    1
    sudo nano /etc/nginx/nginx.conf
  3. Добавим настройки, чтобы nginx считывал конфигурации из директории sites-enabled
    1
    2
    include /etc/nginx/sites-enabled/*.conf;  
    server_names_hash_bucket_size 64;
  4. Скопируем шаблон конфигурации для нового виртуального хоста
    1
    sudo cp /etc/nginx/nginx.conf.default /etc/nginx/sites-available/<имя_сайта>.conf
  5. Отредактируем скопированную конфигурацию для нового виртуального хоста
    1
    sudo nano /etc/nginx/sites-available/site.conf
  6. Пример конфигурации
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    server {
       listen       80;
       server_name <имя_сайта> www.<имя_сайта>;
       charset UTF-8;
    
       location / {
          root   /var/www/<имя_сайта>;
          index  index.php index.html index.htm;
       }
    }
  7. Создадим папку
    1
    mkdir -p /var/www/<имя_сайта>
  8. Создадим индексный файл
    1
    echo "<h1>Имя сайта</h1>" > /var/www/<имя_сайта>/index.html
  9. Создаем ссылку на конфигурацию
    1
    sudo ln -s /etc/nginx/sites-available/<имя_сайта>.conf /etc/nginx/sites-enabled/<имя_сайта>.conf
  10. Перезагружаем Nginx
    1
    sudo systemctl restart nginx

Устанавливаем ssl сертификаты

  1. Устанавливаем certbot и модуль для работы с сервером
    1
    yum install certbot python2-certbot-nginx -y
  2. Запускаем получение сертификата
    1
    certbot --nginx
  3. Указываем свой email-адрес
  4. Принимаем соглашение
  5. Certbot проверит конфигурационные файлы nginx. Выбираем доменные имена

Для успешной работы Certbot необходимо, чтобы у вас были открыты порты 80 и 443

Настройка автоматического обновления сертификатов

  1. Открываем для редактирование cron
    1
    nano /etc/crontab
  2. Создадим задание на обновление всех сертификатов с помощью certbot
    1
    0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q
    ;

Установка PHP 7.4

  1. Добавляем REMI репозиторий
    1
    sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
  2. Устанавливаем дополнительные утилиты
    1
    sudo yum -y install yum-utils
  3. Добавляем репозиторий с php7.4
    1
    sudo yum-config-manager --enable remi-php74
  4. Обновляем репозитории
    1
    sudo yum update -y
  5. Устанавливаем php и дополнительные пакеты
    1
    sudo yum install php
  6. Устанавливаем необходимые библиотеки
    1
    yum install -y php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-xmlrpc php-mbstring php-snmp php-soap
  7. Настройка php-fpm.sock Открываем для редактирования
    1
    nano /etc/php-fpm.d/www.conf
    Редактируем настройки
    1
    2
    3
    4
    5
    user = nginx
    
    listen = /var/run/php-fpm/php-fpm.sock
    
    listen.owner = nginx
    
    listen.group = nginx
    
    listen.mode = 0660
  8. Добавляем настройки php-fpm в конфигурацию nginx нашего сайта по следующему пути
    /etc/nginx/sites-available/<имя_сайта>.conf
    1
    nano /etc/nginx/sites-available/<имя_сайта>.conf
    1
    2
    3
    4
    5
    6
    7
    location ~ \.php$ {
      fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      try_files $uri =404;
    }

Установка Maridb

  1. Добавим официальный репозиторий разработчиков.
    Для этого пройдите по ссылке mariadb.org.
    Далее выбираем версию mariadb и копируем код в файл Mariadb.repo
    Добавляем информацию о репозитории на сервер
    1
    sudo nano /etc/yum.repos.d/Mariadb.repo
  2. Устанавливаем mariadb
    1
    yum install -y mariadb mariadb-server net-tools
  3. Обновляем репозитории
    1
    sudo yum update -y
  4. Обновляем системные таблицы и перезапустить сервер
    1
    sudo mysql_upgrade
  5. Добавляем mariadb в автозагрузку
    1
    sudo systemctl enable mysql
  6. Запускаем mariadb
    1
    sudo systemctl start mariadb
  7. Проверяем статус
    1
    sudo systemctl status mariadb
  8. Настраиваем безопасность Mariadb
    1
    mariadb-secure-installation
    • Switch to unix_socket authentication - Y
    • Change the root password? - Y
    • Remove anonymous users? - Y
    • Disallow root login remotely? - Y
    • Remove test database and access to it? - Y
    • Reload privilege tables now? - Y

Установка PhpMyAdmin

  1. Устанавливаем wget unzip
    1
    yum install wget unzip -y
  2. Переходим на официальный сайт phpmyadmin и копируем ссылку последней версии phpmyadmin phpmyadmin.net
  3. Вставляем ссылку и скачиваем phpmyadmin
    1
    wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip
  4. Распаковываем скаченный архив
    1
    unzip phpMyAdmin-*-all-languages.zip
  5. Создаем каталог для phpmyadmin
    1
    mkdir /usr/share/phpMyAdmin
  6. Измените контекст, чтобы NGINX (как процесс, помеченный контекстом httpd_t) мог получить доступ к папке:
    1
    chcon -Rt httpd_sys_content_t /usr/share/phpMyAdmin
  7. Добавим необходимые права для работы с файлами и сессией Нужно дать права движку web-сервера на операции с файлами и сессиями

    1
    2
    3
    4
    5
    6
    chown -R nginx:nginx /var/lib/php/session
    chown -R root:nginx /var/lib/php/wsdlcache
    chown -R root:nginx /var/lib/php/opcache
    chmod -R 755 /var/lib/php/session
    chmod -R 755 /var/lib/php/wsdlcache
    chmod -R 755 /var/lib/php/opcache

Защита phpMyAdmin: добавляем двойную авторизацию

  1. Генерируем пароль
    1
    openssl passwd
  2. Создаем файл авторизации
    1
    sudo nano /usr/share/phpMyAdmin/pma_pass
  3. Добавляем в него данные и сохраняем
    1
    <имя_пользователя>:<сгенерированный_пароль>
  4. В настройках nginx добавляем блок location
    1
    2
    auth_basic "Admin Login";
    auth_basic_user_file /usr/share/phpMyAdmin/pma_pass;

  5. Настройка phpMyAdmin

    1. Создаем конфигурационный файл из шаблона

      Переходим в папку с phpMyAdmin
      1
      cd /usr/share/phpMyAdmin
      Создадим конфигурационный файл
      1
      cp config.sample.inc.php config.inc.php
    2. Сгенерируем секретную фразу из 32 символов для blowfish_secret и вставим ее в конфигурационный файл
      1
      head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo ''
      Открываем для редактирование конфигурационный файл
      1
      nano config.inc.php
    3. Создадим каталог tmp для хранения временных файлов
      1
      mkdir /usr/share/phpMyAdmin/tmp
      Укажем путь к созданной папке темп
      1
      $cfg['TempDir'] = './tmp/';
    4. Обновим права
      1
      chown -R nginx:nginx /usr/share/phpMyAdmin
    5. Cоздадим базу данных и таблицы конфигурации phpMyAdmin
      1
      mysql -u root -p < /usr/share/phpMyAdmin/sql/create_tables.sql
    6. Настроим php.ini, который можно посмотреть в phpinfo()
      1
      2
      3
      short_open_tag = On
      
      upload_max_filesize = 100M
      
      post_max_size = 100M
    7. Создадим специального пользователя pma и дадим ему привилегии на phpmyadmin
      1
      2
      3
      CREATE USER 'pma'@'localhost' IDENTIFIED BY 'pmapass';
      GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' WITH GRANT OPTION;
      FLUSH PRIVILEGES;
    8. В настоящее время для баз данных и таблиц MySQL рекомендуется использовать кодировку utf8mb4_unicode_ci.


      Ссылки по теме:

      1. losst.ru
      2. jtprog.ru
      3. pocketadmin.tech - Получение сертификатов
      4. infoit.com.ua - Установка php7.4
      5. infoit.com.ua - Настройка phpMyAdmin
      6. linoxide.com
      7. itzgeek.com
      8. cloudwafer.com
      9. maddot.ru
      Теги:
      php