Sprintbox - Настройка Centos 7
Войти

Sprintbox - Настройка Centos 7

Sprintbox - Настройка Centos 7

0. Подготовка

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

1. Прокидываем ssh ключ

  1. Открываем файл authorized_keys
    1
    nano /root/.ssh/authorized_keys
    Вставляем публичный ключ и сохраняем Ctrl+O

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

  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. Открываем новый порт для ssh
    1
    firewall-cmd --permanent --zone=public --add-port=<новый_порт>/tcp
  6. Перезапустим службу firewalld
    1
    firewall-cmd --reload
  7. Проверим установлен ли пакет semanage
    1
    yum list installed | grep semanage
  8. Если не установлен, то установим
    1
    yum provides semanage
    1
    yum -y install policycoreutils-python
  9. Разрешаем новый порт в SELinux
    1
    sudo semanage port -a -t ssh_port_t -p tcp <номер_порта>

3. Настраиваем sshd_config

1
nano /etc/ssh/sshd_config
  1. Меняем номер порта из диапазона 49152—65535
    1
    Port <номер_порта>
  2. Авторизация root пользователя по ключу
    1
    PermitRootLogin prohibit-password
  3. Отключение аутентификации по паролю
    1
    PasswordAuthentication no
  4. Перезапускаем ssh
    1
    service sshd restart
    или
    1
    systemctl restart sshd

4. Установка 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

5. Установка GIT последней версии

  1. Создаем новый файл конфигурации wandisco-git.repo
    1
    sudo nano /etc/yum.repos.d/wandisco-git.repo
  2. Добавляем информацию в этот файл
    1
    2
    3
    4
    5
    6
    [wandisco-git] 
    
    name=Wandisco GIT Repository 
    
    baseurl=http://opensource.wandisco.com/centos/7/git/$basearch/ 
    
    enabled=1 
    
    gpgcheck=1 
    
    gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
  3. Импортируем GPG ключи
    1
    sudo rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
  4. Установка git без подтверждения
    1
    sudo yum install git -y
  5. Проверяем версию git
    1
    git --version

6. Настройка GIT

  1. Добавляем глобальные параметры для пользователя
    1
    2
    git config --global user.email "mail@ya.ru" 
    git config --global user.name "Login"
  2. Создаем ssh ключ
    1
    ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
  3. Отобразим ключ в консоли и скопируем
    1
    cat ~/.ssh/id_rsa.pub
  4. Копируем ключ Ctrl + Shift + C и добавляем на github.com
    github.com - Добавить ключ

7. Подтягиваем настройки пользователя с git

  1. Клонируем репозиторий
    1
    git clone git@github.com:Ameon/.dotfiles.git
  2. Добавляем права с конфигом на выполнение
    1
    sudo chmod +x ~/.dotfiles/startup.sh
  3. Выполняем скрипт
    1
    ~/.dotfiles/startup.sh
  4. Перезапускаем оболочку bash
    1
    exec bash

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

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

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

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

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

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

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

11. Установка PHP 8.1

  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. Добавляем репозиторий с php8.1
    1
    sudo yum-config-manager --enable remi-php81
  4. Обновляем репозитории
    1
    sudo yum update -y
  5. Устанавливаем php и дополнительные пакеты
    1
    sudo yum install php -y
  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
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    server { 
      server_name <имя_сайта> www.<имя_сайта>; 
      charset UTF-8; 
      client_max_body_size 20m; 
      client_body_buffer_size 128k; 
      root /var/www/<имя_сайта>; 
      index index.php index.html index.htm;
     
      location / { 
        try_files $uri $uri/ /index.php?$args; 
      } 
    
      location ~ \.php$ { 
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME /var/www/<имя_сайта>$fastcgi_script_name; 
        set $root_path /var/www/<имя_сайта>; 
        include fastcgi_params; 
        fastcgi_send_timeout 300; 
        fastcgi_read_timeout 300; 
        fastcgi_param DOCUMENT_ROOT /var/www/<имя_сайта>; 
      } 
    } 
    
  9. Добавляем php-fpm в автозагрузку
    1
    systemctl enable php-fpm
  10. Запускаем php-fpm
    1
    systemctl start php-fpm

12. Установка 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. Добавляем mariadb в автозагрузку
    1
    sudo systemctl enable mysql
  4. Запускаем mariadb
    1
    sudo systemctl start mariadb
  5. Проверяем статус
    1
    sudo systemctl status mariadb
  6. Настраиваем безопасность Mariadb
    1
    mariadb-secure-installation
    • Switch to unix_socket authentication - Y
    • Change the root password? - Y
      и устанавливаем пароль для root
    • Remove anonymous users? - Y
    • Disallow root login remotely? - Y
    • Remove test database and access to it? - Y
    • Reload privilege tables now? - Y

13. Установка PhpMyAdmin

  1. Устанавливаем wget unzip
    1
    yum install wget unzip -y
  2. Вставляем ссылку и скачиваем phpmyadmin
    1
    wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip
  3. Распаковываем скаченный архив
    1
    unzip phpmyadmin.zip
  4. Удаляем архив
    1
    rm ~/phpmyadmin.zip
  5. Создаем каталог для phpMyAdmin
    1
    mkdir /usr/share/phpMyAdmin
  6. Перемещаем phpMyAdmin в новый каталог
    1
    mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/
  7. Удаляем пустую папку
    1
    rmdir ~/phpMyAdmin-*-all-languages
  8. Создаем символическую ссылку
    1
    sudo ln -s /usr/share/phpMyAdmin /var/www/<имя_сайта>
  9. Измените контекст, чтобы NGINX (как процесс, помеченный контекстом httpd_t) мог получить доступ к папке:
    1
    chcon -Rt httpd_sys_content_t /usr/share/phpMyAdmin
  10. Добавим необходимые права для работы с файлами и сессией Нужно дать права движку 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

14. Добавляем виртуальный хост для PhpMyAdmin и защищаем его

  1. Скопируем шаблон конфигурации для нового виртуального хоста
    1
    sudo cp /etc/nginx/nginx.conf.default /etc/nginx/sites-available/pma.<имя_сайта>.conf
  2. Откроем для редактирования данную конфигурацию
    1
    nano /etc/nginx/sites-available/pma.<имя_сайта>.conf
  3. Добавляем двойную авторизацию в настройки хоста
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    server {
     
      listen 80; 
      server_name pma.<имя_сайта> www.pma.<имя_сайта>; 
      charset UTF-8; 
      client_max_body_size 100m; 
      client_body_buffer_size 128k;
     
      location / { 
        root /usr/share/phpMyAdmin; 
        index index.php index.html index.htm; 
      }
     
      location ~ \.php$ { 
        auth_basic "Admin Login"; 
        auth_basic_user_file /usr/share/phpMyAdmin/pma_pass; 
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME /var/www/pma.<имя_сайта>$fastcgi_script_name; 
        include fastcgi_params; 
        fastcgi_send_timeout 300; 
        fastcgi_read_timeout 300; 
      }
     
    }
  4. Создадим ссылку на конфигурацию
    1
    2
    sudo ln -s /etc/nginx/sites-available/<имя_сайта>.conf 
    /etc/nginx/sites-enabled/<имя_сайта>.conf
  5. Генерируем пароль
    1
    openssl passwd
  6. Создаем файл авторизации
    1
    sudo nano /usr/share/phpMyAdmin/pma_pass
  7. Добавляем в него данные и сохраняем
    1
    <имя_пользователя>:<сгенерированный_пароль>
  8. Перезагружаем Nginx
    1
    sudo systemctl restart nginx

15. Настройка 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';
    Также разрешим выполнение в SELinux
    1
    chcon -Rt httpd_sys_content_t /var/www/pma.<имя_сайта>/tmp
  4. Настроим config.inc.php
    1
    2
    3
    4
      $cfg['Servers'][$i]['host'] = 'localhost';
      $cfg['Servers'][$i]['hide_db'] = '(information_schema|phpmyadmin|mysql|performance_schema|sys)';
    
    1
    // Раскомментируем блок  Storage database and tables
  5. Обновим права
    1
    chown -R nginx:nginx /usr/share/phpMyAdmin
  6. Cоздадим базу данных и таблицы конфигурации phpMyAdmin
    1
    mysql -u root -p < /usr/share/phpMyAdmin/sql/create_tables.sql
  7. Настроим php.ini, который можно посмотреть в phpinfo()
    1
    2
    3
    short_open_tag = On 
    
    upload_max_filesize = 100M 
    
    post_max_size = 100M
  8. Заходим в консоль MariaDB
    1
    sudo mysql -u root -p
  9. Создадим Администратора для входа в phpMyAdmin
    Пароль устанавливаем без спецсимволов
    1
    2
    3
    CREATE USER '<имя_пользователя>'@'localhost' IDENTIFIED BY '<пароль>'; 
    GRANT ALL PRIVILEGES ON *.* TO '<имя_пользователя>'@'localhost' WITH GRANT OPTION; 
    FLUSH PRIVILEGES;
  10. В настоящее время для баз данных и таблиц MySQL рекомендуется использовать кодировку utf8mb4_unicode_ci.

16. Установка ssl для phpMyAdmin

  1. Запускаем получение сертификата
    1
    certbot --nginx
  2. Certbot проверит конфигурационные файлы nginx. Выбираем доменные имена

17. Разворачиваем проект

  1. Переходим в папку с сайтом
    1
    cd /var/www/<имя_сайта>
  2. Клонируем репозиторий c конфигом
    1
    git clone <имя_репозитория> .
    Пример
    1
    git clone ssh://git@<наш_ip>:<номер_порта>/ams/go.ams74.ru.git .
Теги:
php