https://github.com/ilyamur/myposts_app
The blog app with rich auth functionality build from scratch on the PHP On Rails framework
https://github.com/ilyamur/myposts_app
authentication aws-api blog-app from-scratch mailjet-api
Last synced: 7 months ago
JSON representation
The blog app with rich auth functionality build from scratch on the PHP On Rails framework
- Host: GitHub
- URL: https://github.com/ilyamur/myposts_app
- Owner: IlyaMur
- Created: 2021-12-12T22:02:53.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2022-05-23T12:30:34.000Z (over 3 years ago)
- Last Synced: 2025-01-30T02:43:07.688Z (9 months ago)
- Topics: authentication, aws-api, blog-app, from-scratch, mailjet-api
- Language: PHP
- Homepage:
- Size: 258 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# MyPosts


[](https://codeclimate.com/github/IlyaMur/myposts_app/maintainability)**[π¬π§ English readme](https://github.com/IlyaMur/myposts_app/blob/master/README_en.md)**
**Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅**
- [Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ](#ΠΎ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ)
- [Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°](#ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°)
- [Π‘Π±ΠΎΡΠΊΠ° Π² Docker](#ΡΠ±ΠΎΡΠΊΠ°-Π²-docker)
- [Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ](#ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°-Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ)
- [ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ](#ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ)
- [ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ](#ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ)
- [ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅](#ΠΊΠ°ΠΊ-ΡΠ°Π±ΠΎΡΠ°Π΅Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅)
- [Π‘ΠΈΡΡΠ΅ΠΌΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ](#ΡΠΈΡΡΠ΅ΠΌΠ°-Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ-ΠΈ-Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ)
- [Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ](#ΡΠ°Π±ΠΎΡΠ°-Ρ-ΠΏΠΎΡΡΠ°ΠΌΠΈ)
- [Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ](#ΡΠ°Π±ΠΎΡΠ°-Ρ-ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ)
- [Π₯ΡΡΡΠ΅Π³ΠΈ](#Ρ ΡΡΡΠ΅Π³ΠΈ)
- [Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ](#Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ)
- [Π¨Π°Π±Π»ΠΎΠ½Ρ](#ΡΠ°Π±Π»ΠΎΠ½Ρ)
- [ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ](#Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π°Ρ-ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ)
- [ΠΡΠΈΠ±ΠΊΠΈ](#ΠΎΡΠΈΠ±ΠΊΠΈ)## Π ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
**MyPosts** - ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-Π±Π»ΠΎΠ³ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ Π½Π° Π±Π°Π·Π΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° [PHP On Rails](https://github.com/IlyaMur/php_on_rails_mvc).
ΠΠ»ΠΎΠ³ ΡΠΎΠ·Π΄Π°Π½ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π±ΠΎΠ³Π°ΡΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ.ΠΠ΅ΠΏΠ»ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ Π½Π° ΡΠ΅ΡΠ²ΠΈΡ Heroku.
MyPosts Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ - http://myposts-app.herokuapp.com (Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ AWS S3).Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ:
- ΠΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
- ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° ΠΈ ΡΠ±ΡΠΎΡ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎ ΠΏΠΎΡΡΠ΅ (ΡΠ°ΡΡΡΠ»ΠΊΠ° ΠΏΠΈΡΠ΅ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½Π° Π½Π° Π±Π°Π·Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° MailJet).
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠ°ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π½Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ΅ (AWS S3).
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π².
- Π₯ΡΡΡΠ΅Π³ΠΈ.
- ΠΡΠΎΡΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
- CAPTCHA ΠΈ Π±Π°Π·ΠΎΠ²Π°Ρ Π·Π°ΡΠΈΡΠ° ΠΎΡ ΡΠΏΠ°ΠΌΠ°.
- ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ.ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Ρ Π½ΡΠ»Ρ, Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠ·Π±Π΅Π³Π°Π»ΠΈΡΡ.
ΠΡΠ½ΠΎΠ²ΠΎΠΉ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ [Twig](https://twig.symfony.com/), ΠΊΠ°ΠΊ Π³ΠΈΠ±ΠΊΠΎΠ΅ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ.
## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π² Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ : ΡΠ±ΠΎΡΠΊΠΈ Π² Docker ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
$ git clone https://github.com/IlyaMur/myposts_app.git
$ cd myposts_appΠ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠ» `.env`
$ make env-prepare
ΠΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΠ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅ `.env`, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² AWS ΠΈ MailJet.
```dotenv
MYSQL_USER='user'
MYSQL_HOST='mariadb'
APACHE_DEFAULT_PORT='80'
MYSQL_PASSWORD='testpassword'
...
```### Π‘Π±ΠΎΡΠΊΠ° Π² Docker
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π² Docker.
Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
$ make docker-start
ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ
$ make docker-stop
Π’Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ:
$ make docker-bash # Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΠΈΡ bash Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅
$ make docker-test # Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ: `http://localhost`
### Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ
`PHP >= 8.0`
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ:
$ make install
Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ root Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ `public/`
Π Π²ΡΠ±ΡΠ°Π½Π½ΡΡ Π‘Π£ΠΠ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ SQL ΠΈΠ· ΡΠ°ΠΉΠ»Π° `database/myposts_db.sql`
Π `config/config.php` Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΠ, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.### ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΡΠ°ΠΉΠ»Π΅ [config.php](config/config.php)
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ:
- ΠΠ°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΠ.
- ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π°/ΡΠΊΡΡΡΠΈΡ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ.
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π΄Π»Ρ Ρ ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½ΠΎΠ².ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ.
### ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΡΠΎΡΠ»Π° ΡΠ΅Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Ρ Π½ΡΠ»Ρ, Π² MyPosts ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
- Twig Template Engine
- SDK Mailjet
- SDK AWS
- Gregwar/Captcha
- vlucas/phpdotenv## ΠΠ°ΠΊ Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
### Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ Π½ΡΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π€ΠΎΡΠΌΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠ°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΏΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΏΠΈΡΡΠΌΠΎ Ρ ΡΡΡΠ»ΠΊΠΎΠΉ Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±ΡΠΎΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠΎΠ»Ρ Π½Π° ΠΏΠΎΡΡΡ. Π£ ΡΠΎΠΊΠ΅Π½Π° ΡΠ±ΡΠΎΡΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠΎΠΊ Π³ΠΎΠ΄Π½ΠΎΡΡΠΈ.Π Π°ΡΡΡΠ»ΠΊΠ° ΠΏΠΈΡΠ΅ΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½Π° ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ° MailJet ΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° [Mail](src/Service/Mail.php), ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΡΠΎΠ»ΡΠΌΠΈ ΠΈ ΡΠΎΠΊΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² [src/Views/Password](src/Views/Password)
ΠΠΎΠ³ΠΈΠ½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ΅ΡΠ΅Π· [RememberedLogin](src/Models/RememberedLogin.php). Π’ΠΎΠΊΠ΅Π½ Π»ΠΎΠ³ΠΈΠ½Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΎΠΊ Π΄Π°Π²Π½ΠΎΡΡΠΈ.
ΠΠ»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΠ΅ΡΡΠΈΡΠΌΠΈ ΠΈ ΠΊΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡ [Auth](src/Service/Auth.php), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.### Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΡΠ°ΠΌΠΈ
ΠΡΠ½ΠΎΠ²ΠΎΠΉ Π±Π»ΠΎΠ³Π° ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ½ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅, ΡΠ°ΠΊ ΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ.
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊ ΠΏΠΎΡΡΠ°ΠΌ, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΡΡΡ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΆΠΈΠ΅ ΠΈ ΡΠ²ΠΎΠΈ ΠΏΠΎΡΡΡ.
Π’Π°ΠΊ ΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ XSS-Π°ΡΠ°ΠΊΠ°ΠΌ.
ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ (ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ JS ΠΈ HTML5-Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ), ΡΠ°ΠΊ ΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ [Post](src/Models/Post.php), ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.### Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΈ ΡΡΠΆΠΈΠΌΠΈ ΠΏΠΎΡΡΠ°ΠΌΠΈ. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠΎΠ·Π΄Π°Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ [Comment](src/Models/Comment.php) ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ [Comments](src/Controllers/Comments.php).
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠΉΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ΅ΡΠ΅Π· Π²Π²ΠΎΠ΄ CAPTCHA.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Π΅Π³ΠΎ ΠΏΡΠΎΡΠΈΠ»Π΅.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΊ ΠΆΠ΅ Π²Π°Π»ΠΈΠ΄ΠΈΡΡΡΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ Π½Π° XSS.### Π₯ΡΡΡΠ΅Π³ΠΈ
ΠΠ°ΠΊ ΠΈ Π»ΡΠ±ΠΎΠΉ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π±Π»ΠΎΠ³ MyPosts ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Ρ ΡΡΡΠ΅Π³ΠΈ. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΡΡΠ° ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΡΡΠΈΡΡΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Ρ ΡΡΡΠ΅Π³ΠΎΠ².
ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Ρ ΡΡΡΠ΅Π³Π°ΠΌΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ [Hashtag](src/Controllers/Hashtag.php).
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 10 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ Ρ ΡΡΡΠ΅Π³ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅. ΠΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ Ρ ΡΡΡΠ΅Π³Ρ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΠΏΠΎΡΡΡ.### Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°.
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ° AWS S3. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ AWS SDK.
- Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ.ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ AWS S3 Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²Π²Π΅ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° Π² ΡΠ°ΠΉΠ»Π΅ [config.php](config/config.php) ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ `AWS_STORING` Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `true`.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ [S3Helper](src/Service/S3Helper.php), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ SDK ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ.ΠΠ»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ `AWS_STORING` Π² `false`. ΠΠ°ΡΡΠΈΠ½ΠΊΠΈ Π±ΡΠ΄ΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `public/upload/`.
ΠΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π²Π°Π»ΠΈΠ΄ΠΈΡΡΡΡΡΡ.
### Π¨Π°Π±Π»ΠΎΠ½Ρ
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡΠ° [Twig](https://twig.symfony.com/), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
Π¨Π°Π±Π»ΠΎΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ `src/Views`, Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ - [base.html.twig](src/Views/base.html.twig).
ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `src/Views/partials` Π²ΡΠ½Π΅ΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ.ΠΠ»Ρ ΠΏΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΠ³ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ CSS Framework - Bootstrap.
### ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π±Π»ΠΎΠ³Π° ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΡ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ Π½Π΅ΠΉΠΌΡΠΏΠ΅ΠΉΡΠ΅ `Ilyamur\PhpMvc\Controllers\Admin`.
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π²ΠΈΠ΄ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠ°Ρ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠΎΠ΄Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ .### ΠΡΠΈΠ±ΠΊΠΈ
ΠΡΠΈΠ±ΠΊΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Ρ:
```
set_error_handler('Ilyamur\PhpMvc\Service\ErrorHandler::errorHandler');
set_exception_handler('Ilyamur\PhpMvc\Service\ErrorHandler::exceptionHandler');
```ΠΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅ `SHOW_ERRORS` (Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² [config.php](config/config.php)) ΡΠ°Π²Π½ΠΎΠΉ `true`, Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π±ΡΠ°ΡΠ·Π΅Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ»Π½Π°Ρ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠ»ΠΈ `SHOW_ERRORS` ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `false` Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π»ΠΈΡΡ ΠΎΠ±ΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² [404.html.twig](src/Views/404.html.twig) ΠΈΠ»ΠΈ [500.html.twig](src/Views/500.html.twig) Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠ΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ `logs/`.