Подготавливаю почву для перевода своих ресурсов с Ubuntu 16.04 (LEMP)
на Ubuntu 20.04 (LEMP)
, обычно в роли Web
-сервиса используется стек: LAMP & LEMP
- LAMP – Linux, Apache, MySQL, PHP
- LEMP – Linux, Nginx, MySQL, PHP
Я по большей части использую LEMP
– мне этого достаточно и есть шаблоны под каждый сервис. Сейчас я хочу составить полное руководство, как установить CMS
систему WordPress
на Ubuntu 20.04 Server
. У меня CMS WordPress
– это система заметок, плюс заметки с платным доступом (приватные) где я делюсь своими секретами, рабочими моментам. Обучение бесплатным бывает только в меру.
Я все задачи разбиваю на шаги и сегодняшняя не исключение, так проще потом. Сперва обкатываю на виртуальной машине виртуального полигона, базирующегося на Debian 10 + Proxmox 6.4-13:
RAM = 4Gb
HDD: 50Gb
CPU = 1 sockets, 4 cores
Шаг №1:
Подготавливаю сперва установленную систему из iso
образа систему Ubuntu 20.04 Server
к дальнейшему использованию:
ekzorchik@srv-us2004a:~$ sudo apt-get install mercurial ekzorchik@srv-us2004a:~$ hg clone http://172.35.35.8/hg/dproject http authorization required for http://172.35.35.8/hg/dproject realm: Private Zone Project user: ekzorchik password: destination directory: dproject requesting all changes adding changesets adding manifests adding file changes added 32 changesets with 33 changes to 7 files (+1 heads) new changesets 5fe9ad8f69df:1621d1772b62 updating to branch default 6 files updated, 0 files merged, 0 files removed, 0 files unresolved ekzorchik@srv-us2004a:~$ ekzorchik@srv-us2004a:~$ sudo ./dproject/S2004
где
172.35.35.8 – это в моей домашней сети систему на которой развернут Mercurial Web где я храню наработки скриптов.
Шаг №2:
Устанавливаю в систему необходимые пакеты стека LEMP (Linux, Nginx, MySQL, PHP)
для разворачивания CMS
сервиса WordPress
который будет обслуживать мой блог(и):
ekzorchik@srv-us2004a:~$ sudo apt-get install php-cli nginx mysql-server mysql-client php-fpm php-common php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-mysql php-cli php-zip php-curl -y kzorchik@srv-us2004a:~$ php -v PHP 7.4.3 (cli) (built: Aug 13 2021 05:39:12) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies ekzorchik@srv-us2004a:~$ ekzorchik@srv-us2004a:~$ nginx -v nginx version: nginx/1.18.0 (Ubuntu)
Шаг №3:
Произвожу настройки nginx
и php:
ekzorchik@srv-us2004a:~$ sudo rm /etc/nginx/sites-available/default ekzorchik@srv-us2004a:~$ sudo rm /etc/nginx/sites-enabled/default ekzorchik@srv-us2004a:~$
Изменяю php.ini
для себя и сервиса wordpress:
ekzorchik@srv-us2004a:~$ sudo nano /etc/php/7.4/fpm/php.ini upload_max_filesize = 32M post_max_size = 48M memory_limit = 128M max_execution_time = 300 max_input_vars = 3000 max_input_time = 60 ekzorchik@srv-us2004a:~$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf user = www-data group = www-data listen.owner = www-data listen.group = www-data ekzorchik@srv-us2004a:~$ sudo php-fpm7.4 -t [11-Oct-2021 09:48:47] NOTICE: configuration file /etc/php/7.4/fpm/php-fpm.conf test is successful ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.4-fpm
Шаг №4:
Теперь нужно проверить, что Web
—сервис nginx
успешно обрабатывает php
скрипты:
ekzorchik@srv-us2004a:~$ sudo nano /etc/nginx/sites-enabled/phptest.conf server { listen 80; # listen [::]:80; root /var/www/html; index phpinfo.php; server_name 172.33.33.115; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } } ekzorchik@srv-us2004a:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.4-fpm.service ekzorchik@srv-us2004a:~$ sudo nano /var/www/html/phpinfo.php <?php phpinfo();?> ekzorchik@srv-us2004a:~$ sudo chmod +x /var/www/html/phpinfo.php ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.4-fpm.service
Если обратиться через браузер на URL
адрес (http://IP&DNS/phpinfo.php
) системы где проделываю действия по установке wordpress
, то я должен увидеть результат выполнения скрипта phpinfo.php
— представленный скриншот должен быть таким:
ekzorchik@srv-us2004a:~$ sudo rm /etc/nginx/sites-enabled/phptest.conf
Либо через консоль:
ekzorchik@srv-us2004a:~$ php -f /var/www/html/phpinfo.php
Шаг №5:
Создаю под CMS
сервис WordPress
базу, пользователя и пароль:
На заметку: Пароль на учетные записи в mysql должен быть длиннее 8 символов и содержать в себе: цифры, специальные символы, буквы разного регистра. К примеру: 712mbddr@!"Aa1234567
sudo mysqladmin -u root password 712mbddr@ sudo mysql -u root -p712mbddr@ -e "delete from mysql.user where user=''" sudo mysql -u root -p712mbddr@ -e "delete from mysql.user where user='root' and host not in ('localhost','127.0.0.1','::1')" sudo mysql -u root -p712mbddr@ -e "drop database if exists test" sudo mysql -u root -p712mbddr@ -e "delete from mysql.db where db='test' or db='test\\_%'" sudo mysql -u root -p712mbddr@ -e "drop database if exists db_wp" sudo mysql -u root -p712mbddr@ -e "create database db_wp character set utf8 collate utf8_general_ci"; sudo mysql -u root -p712mbddr@ -e "drop user if exists 'us_wp'@'localhost'" sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by '612mbddr@'" sudo mysql -u root -p712mbddr@ -e "grant all on db_wp.* to 'us_wp'@'localhost'";
Шаг №6:
Скачиваю WordPress
и помещаю в директорию /var/www/html:
ekzorchik@srv-us2004a:~$ sudo wget -c https://wordpress.org/latest.tar.gz ekzorchik@srv-us2004a:~$ tar zxf latest.tar.gz ekzorchik@srv-us2004a:~$ rm -f latest.tar.gz ekzorchik@srv-us2004a:~$ sudo mv wordpress /var/www/html/wordpress ekzorchik@srv-us2004a:~$ sudo chown -R www-data:www-data /var/www/html/wordpress/ ekzorchik@srv-us2004a:~$ sudo chmod -R 755 /var/www/html/wordpress/
Шаг №7:
Создаю конфигурацию описывающую поведение nginx
для работы с CMS
сервисом WordPress:
ekzorchik@srv-us2004a:~$ sudo nano /etc/nginx/sites-available/wordpress.conf server { listen 80; server_name 172.33.33.115; root /var/www/html/wordpress; index index.php; access_log /var/log/access-wp.log; error_log /var/log/error-wp.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; gzip on; # gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; location ~ /\. { deny all; } location ~ /.well-known { allow all; } location ~* /(?:uploads|files)/.*\.php$ { deny all; } location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } } } ekzorchik@srv-us2004a:~$ sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/wordpress.conf ekzorchik@srv-us2004a:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@srv-us2004a:~$
Шаг №8:
Произвожу настройку CMS WordPress
на работу с базой, пользователем и паролем MySQL:
ekzorchik@srv-us2004a:~$ sudo mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php ekzorchik@srv-us2004a:~$ sudo nano /var/www/html/wordpress/wp-config.php define( 'DB_NAME', 'db_wp' ); define( 'DB_USER', 'us_wp' ); define( 'DB_PASSWORD', '612mbddr@' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8' ); define( 'DB_COLLATE', '' ); define( 'AUTH_KEY', '!put your unique phrase here' ); define( 'SECURE_AUTH_KEY', '@put your unique phrase here' ); define( 'LOGGED_IN_KEY', '#put your unique phrase here' ); define( 'NONCE_KEY', '$put your unique phrase here' ); define( 'AUTH_SALT', '%put your unique phrase here' ); define( 'SECURE_AUTH_SALT', '^put your unique phrase here' ); define( 'LOGGED_IN_SALT', '&put your unique phrase here' ); define( 'NONCE_SALT', '*put your unique phrase here' ); table_prefix = 'wp_cms_db'; ekzorchik@srv-us2004a:~$ sudo chown -R www-data:www-data /var/www/html/wordpress/ ekzorchik@srv-us2004a:~$ sudo systemctl restart nginx php7.4-fpm
Шаг №9:
Затем обращаюсь через браузер с основной системы к системе где развернут WordPress
и произвожу окончательную настройку:
http://172.33.33.115/wp-admin/install.php
Язык: выбираю Русский
И нажимаю "Продолжить"
Указываю именование сайта, административный логин и пароль
Название сайта: tips_db_home
Имя пользователя: ekzorchik
Пароль: 712mbddr@
Ваш e-mail: support@ekzorchik.ru
и нажимаю "Установить WordPress"
После чего, вижу
Поздравляем!
WordPress установлен. Желаем успешно работы!
Имя пользователя: ekzorchik
Пароль: Выбранный вами пароль
Нажимаю "Войти"
и URL
-ссылка в браузере трансформируется в http://172.33.33.115/wp-login.php
Шаг №10:
Теперь настраиваю базовую защиту от посягательств к блогу:
ekzorchik@srv-us2004a:~$ sudo rm -rf /var/www/html/wordpress/{license.txt,readme.html}
- Убираю болтливость nginxом путем добавления опции
server_tokens off
; в/etc/nginx/nginx.conf
- Доступ к серверу с сервисом
wordpress
только черезssh
и только через публичные ключи если не ключи, а по логину и паролю, то защищаемfail2ban + ssh (<any>/tcp)
- Установить Брандмауэер
firewall-cmd (80,22,443)
и ограничить порты которые доступны на подключение к системе. - Настроить
fail2ban
для блокировки тех, кто пытается подобрать пароль к странице авторизации. - Доступ к сайту только через
https
, а для этого используемLet’s Encrypt.
Защита WordPress и сервера на Ubuntu 20.04
Итак, базовая установка WordPress on Ubuntu 20.04 Server
успешно завершена в шагах. На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.