summaryrefslogtreecommitdiff
path: root/LINUX/WORDPRESS.md
blob: 68cfc81e123db22d357c516312bdc195fc30504a (plain)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
## Установка WordPress: техническая часть

### Проверим пользователя

Убедимся, что мы находимся в нужной папке (директории) и не под пользователем root:

```
serveruser@ИМЯСЕРВЕРА:/root$
```

Если у Вас как на примере выше (вместо serveruser может быть другой пользователь, главное, чтобы не root), то все хорошо. А если у Вас так:

```
root@ИМЯСЕРВЕРА:~#
```

То выполите инструкции по созданию нового пользователя из этой статьи: [Установка Nginx, MySQL 8, PHP8.1-FPM на Ubuntu 22.04 LTS с нуля](https://dnevnik.dev/2022/07/11/ustanovka-nginx-mysql-8-php8-1-fpm-na-ubuntu-22-04-lts-s-nulya/).

### Скачаем WordPress

Перейдем в нужный каталог, введем:

```
cd /var/www/
```

Затем, нужно создать каталог для нашего будущего сайта (у меня НАЗВАНИЕ_САЙТА это dnevnik):

```
sudo mkdir НАЗВАНИЕ_САЙТА
sudo chown -R www-data:www-data НАЗВАНИЕ_САЙТА
sudo find /var/www/НАЗВАНИЕ_САЙТА/ -type d -exec chmod 750 {} \;
sudo find /var/www/НАЗВАНИЕ_САЙТА/ -type f -exec chmod 640 {} \;
```

Если нужно проверить, свободно ли выбранное Вами название сайта, то сделать это можно здесь: [https://reg.ru](https://www.reg.ru/domain/new/?rlink=reflink-10793423).

Переместимся в созданный каталог, и скачаем WordPress:

```
cd НАЗВАНИЕ_САЙТА
sudo -u www-data wget https://wordpress.org/latest.tar.gz
```

Распакуем архив:

```
sudo -u www-data tar -xzvf latest.tar.gz
```

И удалим его:

```
sudo -u www-data rm latest.tar.gz
```

Затем переместим содержимое папки wordpress в родительскую для ее директорию:

```
sudo -u www-data mv wordpress/* .
```

И удалим папку wordpress:

```
sudo -u www-data rm -R wordpress
```

### Создадим базу данных в MySQL

Войдем в командную строку MySQL:

```
sudo mysql
```

Создадим новую базу данных:

```
CREATE DATABASE НАЗВАНИЕ_САЙТА;
```

Создадим нового пользователя:

```
CREATE USER 'НАЗВАНИЕ_САЙТА'@'localhost' IDENTIFIED BY 'aef@234R345t2iJhfvar';
```

«aef@234R345t2iJhfvar» — это пароль пользователя НАЗВАНИЕ_САЙТА.

Дадим пользователю НАЗВАНИЕ_САЙТА права на базу данных НАЗВАНИЕ_САЙТА:

```
GRANT ALL ON НАЗВАНИЕ_САЙТА.* TO 'НАЗВАНИЕ_САЙТА'@'localhost';
```

Выйдем из командной строки MySQL:

```
exit
```

Теперь давайте войдем в командную строку MySQL под новым MySQL-пользователем:

```
mysql -u НАЗВАНИЕ_САЙТА -p
```

Вас попросят ввести пароль, введите его. Если Вы не меняли его в примере выше, то он будет такой:

```
aef@234R345t2iJhfvar
```

Вот мы и вошли под новым пользователем. Посмотрим, какие базы данных ему видны, введем:

```
SHOW DATABASES;
```

Результат будет такой:

```
+---------------------------+
| Database                  |
+---------------------------+
| information_schema        |
| НАЗВАНИЕ_САЙТА            |
+---------------------------+
2 rows in set (0.06 sec)
```

Видим нашу базу НАЗВАНИЕ_САЙТА, отлично, выйдем из командной строки MySQL:

```
exit
```

Давайте двигаться дальше, настроим Nginx.

### Настроим Nginx

Тут нужно сказать, что я буду иметь в виду под «НАЗВАНИЕ_САЙТА», «НАЗВАНИЕ_САЙТА.ДОМЕН» и «www.НАЗВАНИЕ_САЙТА.ДОМЕН».

На примере моего сайта это будет так:

НАЗВАНИЕ_САЙТА = dnevnik  
НАЗВАНИЕ_САЙТА.ДОМЕН = dnevnik.dev  
www.НАЗВАНИЕ_САЙТА.ДОМЕН = www.dnevnik.dev

Если Вам нужен домен, советую приобретать его здесь: [https://reg.ru](https://www.reg.ru/domain/new/?rlink=reflink-10793423). К примеру, домен этого сайта (dnevnik.dev) зарегистрирован именно там.

Создадим новый конфигурационный файл для Nginx, для этого введем:

```
sudo vim /etc/nginx/sites-available/НАЗВАНИЕ_САЙТА
```

Команда выше создаст новый пустой файл. Вставим в него содержимое:

```
server {
    listen 80;
    server_name НАЗВАНИЕ_САЙТА.ДОМЕН www.НАЗВАНИЕ_САЙТА.ДОМЕН;
    root /var/www/НАЗВАНИЕ_САЙТА;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}
```

И для сохранения файла, нажмите «:wq», а затем Enter. Файл сохранен.

Активируем конфигурацию этой командой:

```
sudo ln -s /etc/nginx/sites-available/НАЗВАНИЕ_САЙТА /etc/nginx/sites-enabled/
```

Перезапустим Nginx, чтобы изменения вступили в силу:

```
sudo systemctl reload nginx
```
========================================
Сначала вы проверяете, что порт 80 уже работает,

```
sudo netstat -plunt | grep 80

tcp6   0   0    :::80    :::*   LISTEN      1573456/apache2
```

Если он запущен, то отключите apache:

```
sudo service apache2 stop
```

Теперь запустите Nginx:

```
sudo service nginx start
```
========================================

Теперь нужно настроить WordPress.

### Настроим WordPress

Переместимся в директорию сайта:

```
cd /var/www/НАЗВАНИЕ_САЙТА
```

Переименуем файл wp-config-sample.php:

```
sudo -u www-data mv wp-config-sample.php wp-config.php
```

И откроем его для редактирования:

```
sudo -u www-data vim wp-config.php
```

Увидим что-то вроде этого:

```
<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database_name_here' );

/** Database username */
define( 'DB_USER', 'username_here' );

/** Database password */
define( 'DB_PASSWORD', 'password_here' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
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' );

/**#@-*/

/**
 * WordPress database table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://wordpress.org/support/article/debugging-in-wordpress/
 */
define( 'WP_DEBUG', false );

/* Add any custom values between this line and the "stop editing" line. */



/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
```

Тут нам нужно заменить следующее:

- **database_name_here** на **НАЗВАНИЕ_САЙТА**
- **username_here** на **НАЗВАНИЕ_САЙТА**
- **password_here** на **aef@234R345t2iJhfvar** (или на тот пароль, который Вы придумали)
- **put your unique phrase here** на набор случайных букв и символов

Сохраним файл. Нажмем «:wq», затем Enter.

Всё, мы готовы к запуску установки WordPress!

## Установка WordPress: запуск скрипта установки

Чтобы начать скрипт установки WordPress, нужно перейти по адресу:

```
http://НАЗВАНИЕ_САЙТА.ДОМЕН
```

И увидим это:

![](https://dnevnik.dev/wp-content/uploads/2022/07/image-3-1024x576.png)

Выберем язык, и увидим подобное:

![](https://dnevnik.dev/wp-content/uploads/2022/07/image-4-1024x868.png)

Введите данные, и нажмите «Установить WordPress». После успешной установки увидите такой экран:

![](https://dnevnik.dev/wp-content/uploads/2022/07/image-5-1024x505.png)

Далее нажмите «Войти», и введите только что придуманные имя пользователя и пароль:

![](https://dnevnik.dev/wp-content/uploads/2022/07/image-6-1024x576.png)

Ещё раз нажмите «Войти», и, добро пожаловать в WordPress!

![](https://dnevnik.dev/wp-content/uploads/2022/07/image-7-1024x576.png)

## Заключение

Вот и завершена установка WordPress на Ubuntu 22.04 LTS! Если у Вас остались какие-то вопросы, пожелания, или возникли ошибки в процессе установки — задавайте их в сообщения сообщества [https://vk.com/webdevdiary](https://vk.com/webdevdiary), буду рад помочь!

Пока!

## А вот и нет!

Адрес сайта сейчас **http**://НАЗВАНИЕ_САЙТА.ДОМЕН, а должен быть **https**://НАЗВАНИЕ_САЙТА.ДОМЕН.

Давайте исправлять!

### Установка Certbot

Введем команду:

```
sudo snap install core; sudo snap refresh core
```

А затем:

```
sudo snap install --classic certbot
```

И, наконец:

```
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```

### Запуск Certbot

Введем:

```
sudo certbot
```

Выведется это:

```
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel):
```

Нужно ввести свой e-mail — вводим, и жмем «Enter». Далее везде отвечаем «Y», и выведется такое:

```
Account registered.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: НАЗВАНИЕ_САЙТА.ДОМЕН
2: www.НАЗВАНИЕ_САЙТА.ДОМЕН
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
```

Далее можете просто нажать «Enter», и сертификаты установятся для обоих адресов:

```
Requesting a certificate for НАЗВАНИЕ_САЙТА.ДОМЕН and www.НАЗВАНИЕ_САЙТА.ДОМЕН

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/НАЗВАНИЕ_САЙТА.ДОМЕН/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/НАЗВАНИЕ_САЙТА.ДОМЕН/privkey.pem
This certificate expires on 2022-10-14.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for НАЗВАНИЕ_САЙТА.ДОМЕН to /etc/nginx/sites-enabled/НАЗВАНИЕ_САЙТА
Successfully deployed certificate for www.НАЗВАНИЕ_САЙТА.ДОМЕН to /etc/nginx/sites-enabled/НАЗВАНИЕ_САЙТА
Congratulations! You have successfully enabled HTTPS on https://НАЗВАНИЕ_САЙТА.ДОМЕН and https://www.НАЗВАНИЕ_САЙТА.ДОМЕН

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
```

После этого, когда Вы зайдете на свой сайт **http**://НАЗВАНИЕ_САЙТА.ДОМЕН, Вы будете автоматически перенаправлены на **https**://НАЗВАНИЕ_САЙТА.ДОМЕН.

Если Вам нужен сертификат с более высоким статусом, советую приобретать его здесь: [https://reg.ru](https://www.reg.ru/domain/new/?rlink=reflink-10793423).

Теперь точно все!