ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²:
- Django ΡΠ΅ΡΠ²Π΅Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ GraphQL API (ΠΏΠ°ΠΏΠΊΠ°
server) - SSR Nuxt ΠΊΠ»ΠΈΠ΅Π½Ρ (ΠΏΠ°ΠΏΠΊΠ°
client)
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΎΠ±Π° ΡΠ΅ΡΠ²ΠΈΡΠ°.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ PyCharm.
ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ:
- Vue.js
- Pug
- GraphQL
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ:
- GitToolBox
- Conventional Commit
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
| ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ | ΠΠ΅ΡΡΠΈΡ |
|---|---|
| Python | 3.10 |
| Poetry | latest |
| PostgreSQL | latest |
| Redis | latest |
ΠΠ»Ρ Windows Redis ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ WSL, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π½Π° ΡΠ°ΠΉΡΠ΅ Redis, ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠΎΠΌ.
Π ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ , Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ docx Π² pdf ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ LibreOffice. ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ°ΠΊΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΈΠ· Windows ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Django ΡΠ΅ΡΠ²Π΅Ρ Π² WSL Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ LibreOffice.
ΠΠ΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅ Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ server, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
cd serverΠΡΠ΅ΡΠΈΠΊΡ poetry run Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΡΠ΅Π½
ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅.
ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠ΅ΠΊΡΠΈΠΈ "ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ PyCharm".
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ PostgreSQL.
ΠΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ - devind.
- Π‘ΠΎΠ·Π΄Π°ΡΡ
.envΡΠ°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅server.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° .env.example Ρ Π½ΠΎΠ²ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ .env.
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ :
- ΠΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
(ΠΊΠ»ΡΡ
DB_APP_NAME) - ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (ΠΊΠ»ΡΡ
DB_APP_USER) - ΠΠ°ΡΠΎΠ»Ρ (ΠΊΠ»ΡΡ
DB_APP_PASSWORD)
ΠΠ° Windows ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈΠ· ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π²ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° #.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Python
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Python Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
poetry install- Π£Π±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Redis ΡΠ΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½
ΠΠ° Linux ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
sudo service redis-server restartΠΠ° macOS Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
brew services start redisΠΠ° Windows Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΉΡΠΈ Π² Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ Π·Π°Π΄Π°Ρ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ»ΡΠΆΠ±Ρ Redis,
Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°.
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΊΡΠΈΠΏΡ, Π·Π°ΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ
Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
# Unix
poetry run python3 manage.py migrate
poetry run python3 manage.py load_fixtures
# Windows
poetry run python manage.py migrate
poetry run python manage.py load_fixturesΠΠ°Π»Π΅Π΅ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
# Unix
poetry run python3 manage.py runserver
# Windows
poetry run python manage.py runserverΠΠ»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ ΠΈΠ· PyCharm Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- ΠΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Python ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅
ΠΠ»Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ File, Settings, Project: dcis, Python interpreter.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΡΠ΅ΡΡΠ΅ΡΠ΅Π½ΠΊΠΎΠΉ, Π΄Π°Π»Π΅Π΅ ΠΊΠ½ΠΎΠΏΠΊΠ° Add.
Π ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Π½Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ½ΠΊΡ Poetry Environment, Π΄Π°Π»Π΅Π΅ Existing Environment.
Pycharm Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΡΡΡ ΠΊ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ poetry install.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ok Π² ΠΎΠ±ΠΎΠΈΡ
ΠΌΠ΅Π½Ρ.
- ΠΠ°ΡΡΡΠΎΠΈΡΡ Django
ΠΠ»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Django Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ File, Settings, Languages & Frameworks, Django.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ½ΠΊΡ Enanle Django Support,
Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠ°ΠΏΠΊΡ server Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Django project root,
Π° ΡΠ°ΠΉΠ» server/deving/settings.py Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Settings, Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΠΊ.
- ΠΠ°ΡΡΡΠΎΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ Π²ΠΎΠ·Π»Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Run.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ»ΠΈ Add Configuration..., Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Π°,
ΠΈΠ»ΠΈ Edit Configurations..., Π΅ΡΠ»ΠΈ ΡΠ°Π½Π΅Π΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ + Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ,
Π²ΡΠ±ΡΠ°ΡΡ Django Server ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°, Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "server")
ΠΈ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ok.
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΈΠ· PyCharm
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Database, Π·Π°ΡΠ΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ +, Π΄Π°Π»Π΅Π΅ Π²ΡΠ±ΡΠ°ΡΡ DataSource, PostgreSQL.
Π ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°, Π΅ΡΠ»ΠΈ PyCharm Π΅Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ, Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠ»Ρ
Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° .env ΠΈ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ok.
ΠΠΎΡΠ»Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ:
- ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π±Π΅Π· ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
poetry run. - ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ
Python Consolec Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ ΠΈ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΌ Django. - ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΡΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
Run. - ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ ΠΈΠ· PyCharm.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
| ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ | ΠΠ΅ΡΡΠΈΡ |
|---|---|
| Node.js | latest LTS |
| Yarn | latest |
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ
.envΡΠ°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅client.
Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° .env.example Ρ Π½ΠΎΠ²ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ .env.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Node.js.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Node.js Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΏΠ°ΠΏΠΊΡ client ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
yarn- Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
ΠΠ»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ
Π½Π° ΠΏΠ°ΠΏΠΊΡ server/storage Π² ΠΏΠ°ΠΏΠΊΠ΅ client/static.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² Unix Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
python3 init.pyΠ Windows Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΊΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΠΈ Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
python init.pyΠΠ°Π»Π΅Π΅ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ client ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
yarn run devΠΠ»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ ΠΈΠ· PyCharm Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠ°Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ Π²ΠΎΠ·Π»Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Run.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΈΠ»ΠΈ Add Configuration..., Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π½Π°,
ΠΈΠ»ΠΈ Edit Configurations..., Π΅ΡΠ»ΠΈ ΡΠ°Π½Π΅Π΅ Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ + Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ ΠΈ
Π²ΡΠ±ΡΠ°ΡΡ npm ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°.
ΠΠ°ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "client"),
Π²ΡΠ±ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΉΠ»Π° package.json ΡΠ°ΠΉΠ»Π° client/package.json,
Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Scripts ΠΊΠΎΠΌΠ°Π½Π΄Ρ dev. Π ΠΊΠΎΠ½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΠΊ.
ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΡΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Run.
ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° Node v18+ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ ΡΠ»Π°Π³
NODE_OPTIONS=--openssl-legacy-provider.
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°:
- ΠΠ‘: Π»ΡΠ±ΠΎΠΉ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Linux(Ubuntu, Debian ΠΈ Ρ. Π΄.)
- ΠΠ²ΡΡ ΡΡΠ΄Π΅ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ 2 ΠΠΡ ΠΈΠ»ΠΈ Π»ΡΡΡΠ΅
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 4 ΠΠ±
- 32 ΠΠ± ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π½Π° ΠΆΠ΅ΡΡΠΊΠΎΠΌ Π΄ΠΈΡΠΊΠ΅
ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
| ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ | ΠΠ΅ΡΡΠΈΡ |
|---|---|
| PostgreSQL | latest |
| docker | latest |
| docker-compose | latest |
| Nginx | latest |
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΎΠΌΠΎΡΡΠ΅ΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ:
- ΠΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ΅Π΅ΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²:
docker login ghcr.io -u USERNAME -p TOKEN
- Π‘ΠΎΠ·Π΄Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΠ»Π΅ΡΡΠΎΠ½Π½ΠΎΠΉ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
sudo mkdir /var/www/eleden/storage
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»
.envΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ:# Client settings # Data connection APP_NAME='DCIS' URL=https://example.ru API_URL=http://192.168.1.3:8000/graphql/ API_URL_BROWSER=https://example.ru/graphql/ WS_URL=wss://example.ru/graphql/ CLIENT_ID= CLIENT_SECRET= # Settings for sentry SENTRY_CLIENT_DSN= TINYMCE_API= ASK= # Server settings SECRET_KEY= DEBUG=False # Application database data DB_APP_HOST= DB_APP_NAME= DB_APP_USER= DB_APP_PASSWORD= # Email settings EMAIL_HOST= EMAIL_HOST_USER= EMAIL_HOST_PASSWORD= EMAIL_HOST_SUPPORT= # Sentry integration SENTRY_DNS= # Notification service interation FCM_API_KEY= # Settings for celery REDIS_SERVER=redis # Data for celery BROKER_URL=redis://redis:6379 BROKER_BACKEND=redis://redis:6379 TASK_SERIALIZER=json RESULT_SERIALIZER=json - Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»
docker-compose.ymlΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ:version: '3.7' services: client: container_name: client image: ghcr.io/devind-team/eleden/eleden-client:latest command: node .output/server/index.mjs restart: always ports: - "3000:3000" env_file: .env api: container_name: api image: ghcr.io/devind-team/eleden/eleden-server:latest command: poetry run daphne -b 0.0.0.0 -p 8000 devind.asgi:application restart: always ports: - "8000:8000" env_file: .env volumes: - "/var/www/eleden/storage:/usr/src/app/storage" celery: container_name: celery image: ghcr.io/devind-team/eleden/eleden-server:latest command: poetry run celery -A devind worker -B -E -l INFO restart: always env_file: .env volumes: - "/var/www/eleden/storage:/usr/src/app/storage" redis: image: redis restart: always
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ:
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΄ΠΎΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ:
ΠΠΎΠΌΠ°Π½Π΄Ρ
docker-composeΠ²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠ»docker-compose.yml# ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·Π° sudo docker-compose pull # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡΡΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² sudo docker-compose up -d
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°Π΄ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ :
# ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ PostgreSQL sudo psql -U postgrescreate user username with encrypted password 'user_password'; create database database_name; grant all privileges on database database_name to username; grant connect on database database_name TO username;- ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» PostgreSQL(
/etc/postgresql/latest_version/main/), Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ Π·Π°ΠΏΠΈΡΠΈ:
host database_name username ip_addres_docker_container/24 md5- ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ PostgreSQL
sudo service postgresql restart
- ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ:
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ sudo docker-compose run api poetry run python manage.py migrate # ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ sudo docker-compose run api poetry run python manage.py fs
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
nginx- Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Π²
/etc/nginx/sites-availableΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ:
upstream channels-site { server localhost:8000; } server { listen 443 ssl http2; server_name site.ru www.site.ru; access_log /var/log/nginx/site.ru.access.log; error_log /var/log/nginx/site.ru.error.log; client_max_body_size 32m; #ssl on; ssl_certificate /etc/ssl/certificate/site.crt; ssl_certificate_key /etc/ssl/certificate/site.key; location /storage/ { alias /var/www/site/storage/; } location /graphql/ { proxy_pass http://channels-site; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; } location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; server_name site.ru www.site.ru; return 301 https://$host$request_uri; }
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΡΡ ΡΡΡΠ»ΠΊΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π²
/etc/nginx/sites-enabled:
ln -s /etc/nginx/sites-available/file_name.conf /etc/nginx/sites-enabled
- ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ
nginx
sudo service nginx restart - Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Π²
Π ΠΏΠ°ΠΏΠΊΠ΅ docs:
sphinx-apidoc -o . ..
make markdown # ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ md ΡΠ°ΠΉΠ»ΠΎΠ²
make html # ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ html ΡΠ°ΠΉΠ»ΠΎΠ²