Sprintbox - Настройка Centos 7
0. Подготовка
Устанавливаем nano
1. Прокидываем ssh ключ
Открываем файл authorized_keys
1 nano /root/.ssh/authorized_keys
Вставляем публичный ключ и сохраняем Ctrl+O
2. Установка и настройка файрволла
Устанавливаем firewalld
1 yum install firewalld -y
Добавляем в автозагрузку
1 systemctl enable firewalld
Запускаем firewalld
1 systemctl start firewalld
Проверяем запустился ли firewalld
1 systemctl status firewalld
Открываем новый порт для ssh
1 firewall-cmd --permanent --zone=public --add-port=<новый_порт>/tcp
Перезапустим службу firewalld
Проверим установлен ли пакет semanage
1 yum list installed | grep semanage
Если не установлен, то установим
1 yum -y install policycoreutils-python
Разрешаем новый порт в SELinux
1 sudo semanage port -a -t ssh_port_t -p tcp <номер_порта>
3. Настраиваем sshd_config
1 nano /etc/ssh/sshd_config
Меняем номер порта из диапазона 49152—65535
Авторизация root пользователя по ключу
1 PermitRootLogin prohibit-password
Отключение аутентификации по паролю
1 PasswordAuthentication no
Перезапускаем ssh
или
4. Установка nginx
Перед установкой nginx необходимо установить EPEL репозиторий
1 yum install epel-release -y
Устанавливаем nginx
Запускаем nginx
Добавляем в автозагрузку
Чтобы получить доступ к сайтам из вне необходимо разрешить трафик для веб-сервера в
брандмауэре системы:
1 firewall-cmd --zone=public --permanent --add-service=http
1 firewall-cmd --zone=public --permanent --add-service=https
Остается лишь перезагрузить брандмауэр:
5. Установка GIT последней версии
Создаем новый файл конфигурации wandisco-git.repo
1 sudo nano /etc/yum.repos.d/wandisco-git.repo
Добавляем информацию в этот файл
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
Импортируем GPG ключи
1 sudo rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
Установка git без подтверждения
Проверяем версию git
6. Настройка GIT
Добавляем глобальные параметры для пользователя
1 2 git config --global user.email "mail@ya.ru"
git config --global user.name "Login"
Создаем ssh ключ
1 ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y > /dev/null 2>&1
Отобразим ключ в консоли и скопируем
Копируем ключ Ctrl + Shift + C и добавляем на github.com
github.com - Добавить
ключ
7. Подтягиваем настройки пользователя с git
Клонируем репозиторий
1 git clone git@github.com:Ameon/.dotfiles.git
Добавляем права с конфигом на выполнение
1 sudo chmod +x ~/.dotfiles/startup.sh
Выполняем скрипт
Перезапускаем оболочку bash
8. Настройка виртуальных хостов
Создадим папку для проекта
1 mkdir -p /var/www/<имя_проекта>
Далее необходимо настроить SElinux , чтобы не было ошибки 403 при указании папки
веб-серверу
1 # chcon -Rt httpd_sys_content_t <путь_к_папке_с_сайтами>
Создадим каталоги sites-available и sites-enabled
1 2 sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled
Откроем для редактирования конфигурационный файл nginx.conf
1 sudo nano /etc/nginx/nginx.conf
Добавим настройки, чтобы nginx считывал конфигурации из директории sites-enabled
1 2 include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
Скопируем шаблон конфигурации для нового виртуального хоста
1 sudo cp /etc/nginx/nginx.conf.default /etc/nginx/sites-available/<имя_сайта>.conf
Отредактируем скопированную конфигурацию для нового виртуального хоста
1 sudo nano /etc/nginx/sites-available/<имя_сайта>.conf
Пример конфигурации
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;
}
}
Создадим индексный файл
1 echo "<h1> Имя сайта</h1> " > /var/www/<имя_сайта>/index.html
Создаем ссылку на конфигурацию
1 2 sudo ln -s /etc/nginx/sites-available/<имя_сайта>.conf
/etc/nginx/sites-enabled/<имя_сайта>.conf
Перезагружаем Nginx
1 sudo systemctl restart nginx
9. Устанавливаем ssl сертификаты
Устанавливаем certbot и модуль для работы с сервером
1 yum install certbot python2-certbot-nginx -y
Запускаем получение сертификата
Указываем свой email-адрес
Принимаем соглашение
Отказываемся от новостей и прочего
Certbot проверит конфигурационные файлы nginx. Выбираем доменные имена
Для успешной работы Certbot необходимо, чтобы у вас были открыты порты 80 и
443
10. Настройка автоматического обновления сертификатов
Открываем для редактирование cron
Создадим задание на обновление всех сертификатов с помощью 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
Добавляем REMI репозиторий
1 sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
Устанавливаем дополнительные утилиты
1 sudo yum -y install yum-utils
Добавляем репозиторий с php8.1
1 sudo yum-config-manager --enable remi-php81
Обновляем репозитории
Устанавливаем php и дополнительные пакеты
Устанавливаем необходимые библиотеки
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
Настройка 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
Добавляем настройки 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/<имя_сайта>;
}
}
Добавляем php-fpm в автозагрузку
1 systemctl enable php-fpm
Запускаем php-fpm
12. Установка Maridb
Добавим официальный репозиторий разработчиков.
Для этого пройдите по ссылке mariadb.org .
Далее выбираем версию mariadb и копируем код в файл Mariadb.repo
Добавляем информацию о репозитории на сервер
1 sudo nano /etc/yum.repos.d/Mariadb.repo
Устанавливаем mariadb
1 yum install -y mariadb mariadb-server net-tools
Добавляем mariadb в автозагрузку
1 sudo systemctl enable mysql
Запускаем mariadb
1 sudo systemctl start mariadb
Проверяем статус
1 sudo systemctl status mariadb
Настраиваем безопасность 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
Устанавливаем wget unzip
1 yum install wget unzip -y
Вставляем ссылку и скачиваем phpmyadmin
1 wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip
Распаковываем скаченный архив
Удаляем архив
Создаем каталог для phpMyAdmin
1 mkdir /usr/share/phpMyAdmin
Перемещаем phpMyAdmin в новый каталог
1 mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/
Удаляем пустую папку
1 rmdir ~/phpMyAdmin-*-all-languages
Создаем символическую ссылку
1 sudo ln -s /usr/share/phpMyAdmin /var/www/<имя_сайта>
Измените контекст, чтобы NGINX (как процесс, помеченный контекстом httpd_t) мог получить
доступ к папке:
1 chcon -Rt httpd_sys_content_t /usr/share/phpMyAdmin
Добавим необходимые права для работы с файлами и сессией
Нужно дать права движку 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 sudo cp /etc/nginx/nginx.conf.default /etc/nginx/sites-available/pma.<имя_сайта>.conf
Откроем для редактирования данную конфигурацию
1 nano /etc/nginx/sites-available/pma.<имя_сайта>.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 {
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;
}
}
Создадим ссылку на конфигурацию
1 2 sudo ln -s /etc/nginx/sites-available/<имя_сайта>.conf
/etc/nginx/sites-enabled/<имя_сайта>.conf
Генерируем пароль
Создаем файл авторизации
1 sudo nano /usr/share/phpMyAdmin/pma_pass
Добавляем в него данные и сохраняем
1 <имя_пользователя>:<сгенерированный_пароль>
Перезагружаем Nginx
1 sudo systemctl restart nginx
15. Настройка phpMyAdmin
Создаем конфигурационный файл из шаблона
Переходим в папку с phpMyAdmin
1 cd /usr/share/phpMyAdmin
Создадим конфигурационный файл
1 cp config.sample.inc.php config.inc.php
Сгенерируем секретную фразу из 32 символов для blowfish_secret и вставим ее в
конфигурационный файл
1 head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo ''
Открываем для редактирование конфигурационный файл
Создадим каталог tmp для хранения временных файлов
1 mkdir /usr/share/phpMyAdmin/tmp
Укажем путь к созданной папке темп
1 $cfg['TempDir'] = '/tmp';
Также разрешим выполнение в SELinux
1 chcon -Rt httpd_sys_content_t /var/www/pma.<имя_сайта>/tmp
Настроим 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
Обновим права
1 chown -R nginx:nginx /usr/share/phpMyAdmin
Cоздадим базу данных и таблицы конфигурации phpMyAdmin
1 mysql -u root -p < /usr/share/phpMyAdmin/sql/create_tables.sql
Настроим php.ini, который можно посмотреть в phpinfo()
1 2 3 short_open_tag = On
upload_max_filesize = 100M
post_max_size = 100M
Заходим в консоль MariaDB
Создадим Администратора для входа в phpMyAdmin
Пароль устанавливаем без спецсимволов
1 2 3 CREATE USER '<имя_пользователя>'@'localhost' IDENTIFIED BY '<пароль>';
GRANT ALL PRIVILEGES ON *.* TO '<имя_пользователя>'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
В настоящее время для баз данных и таблиц MySQL рекомендуется использовать
кодировку utf8mb4_unicode_ci .
16. Установка ssl для phpMyAdmin
Запускаем получение сертификата
Certbot проверит конфигурационные файлы nginx. Выбираем доменные имена
17. Разворачиваем проект
Переходим в папку с сайтом
Клонируем репозиторий c конфигом
1 git clone <имя_репозитория> .
Пример
1 git clone ssh://git@<наш_ip>:<номер_порта>/ams/go.ams74.ru.git .