Π‘Π²Π°ΠΊΠΈΡ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½Π°, ΠΈΠ½Π΄ΡΡΡΡΠΈΡΠ° ΡΠ°Π·Π²ΠΎΡΠ° ΡΠΎΡΡΠ²Π΅ΡΠ° ΠΏΡΠΎΠ»Π°Π·ΠΈ ΠΊΡΠΎΠ· ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅. ΠΠ΅Π΄Π°Π½ ΠΎΠ΄ ΠΎΠ²ΠΈΡ ΡΠ΅Π½ΠΎΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ΅ ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°ΡΠΈ ΠΊΠ°ΠΎ ΡΠ°ΡΡΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠ°ΠΊΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ Π½ΠΈΡΠ΅ Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ°, ΡΠ΅ΠΊ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠ΅ ΡΠ΅Π½Π° ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΎΡΡ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΠΏΠΎΡΠ°ΡΠ»Π°.
ΠΠ΅Π»ΠΈΠΊΠ΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½Π΅ ΡΡΠ»ΡΠ³Π΅ ΡΠ°Π΄Π° ΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΈΠΌ, Π°ΡΡΠΎΠ½ΠΎΠΌΠ½ΠΈΠΌ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΠΌΠ°. ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΡΠΌΠ°ΡΡΠ°ΡΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΎΠΌ ΠΊΠΎΡΠ° ΡΠ»ΡΠΆΠΈ ΡΠ΅Π΄Π½ΠΎΡ ΠΈ Π²Π΅ΠΎΠΌΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΡ ΡΠ²ΡΡΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΡΠ΅Π»Π°ΡΠΈΠΎΠ½ΠΈ ΠΠΠΠ‘, ΠΠΊΠΏΡΠ΅ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, Π‘ΠΎΠ»Ρ ΡΠ΅ΡΠ²ΠΈΡ.
ΠΠ²ΠΈΡ
Π΄Π°Π½Π° ΡΠ΅ ΡΠ΅ΡΠΊΠΎ Π·Π°ΠΌΠΈΡΠ»ΠΈΡΠΈ ΡΠ°Π·Π²ΠΎΡ Π½ΠΎΠ²ΠΎΠ³ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΎΠ³ ΡΠΈΡΡΠ΅ΠΌΠ° Π±Π΅Π· ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°. Π ΠΎΠ²Π° ΡΠΈΡΡΠ°ΡΠΈΡΠ° Π½Π°Ρ, Π·Π°ΡΠ·Π²ΡΠ°Ρ, Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΠΎΡΠΊΠ΅Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅.
Π»ΡΡΠΊΠΈ ΡΠ°Π΄Π½ΠΈΠΊ
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°
ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅
Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ
ΠΠ°Π΄Π° ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ° ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅, ΠΠΠΠ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΠ»ΡΠ³Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΠ΅ ΡΠΈΡ ΠΎΠ²Π΅ ΠΌΠ΅ΡΡΡΠΎΠ±Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅. ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅ ΡΠ΅ ΡΡΠΎΠ³Π° Π°Π»Π°ΡΠΊΠ° Π·Π° ΠΎΠΏΠΈΡΠΈΠ²Π°ΡΠ΅ ΠΈ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΠΎΡΠΊΠ΅Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΡΠ° Π²ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
ΠΠ²Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΡΠ°Π΄Π΅ Π½Π° Ρ
ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠΠ£ ΠΠ°ΠΊΠ΅
ΠΡΠΎΠ³ΡΠ°ΠΌ make
, ΡΠ΅ Ρ ΡΡΡΡΠΈΠ½ΠΈ Π°Π»Π°Ρ Π·Π° Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡ ΠΈΠ·Π³ΡΠ°Π΄ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠ· ΠΈΠ·Π²ΠΎΡΠ½ΠΎΠ³ ΠΊΠΎΠ΄Π°. ΠΠ΅Π½Π΅ΡΠ°Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΡΠΎ ΡΠ΅ΡΠΈ make
ΠΏΡΠΈΠΌΠ΅ΡΡΡΠ΅ ΡΠ΅ Π½Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΊΠΎΡΠΈ ΡΠΊΡΡΡΡΡΠ΅ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΡΠ½ΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡΡ Π½Π΅ΠΊΠΈΡ
ΡΠ»Π°Π·Π½ΠΈΡ
ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»Π° Ρ Π½Π΅ΠΊΠΈ ΠΈΠ·Π»Π°Π·Π½ΠΈ ΠΎΠ±Π»ΠΈΠΊ, Ρ Π½Π΅ΠΊΠΈ ΡΠΈΡ. Π£ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΠΌΠ°Π½Π΄Π΅ docker-compose
ΡΠ΅ ΡΠ΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°ΡΠΈ Ρ Π°ΠΏΡΡΡΠ°ΠΊΡΠ½Π΅ ΡΠΈΡΠ΅Π²Π΅ (
ΠΠ° ΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡ make
ΠΎ ΡΠΎΠΌΠ΅ ΡΡΠ° ΠΆΠ΅Π»ΠΈΠΌΠΎ ΠΎΠ΄ ΡΠΎΠ³Π°, ΠΏΠΎΡΡΠ΅Π±Π½Π° Π½Π°ΠΌ ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Makefile
.
Π£ Π½Π°ΡΠ΅ΠΌ Makefile
ΡΠ°Π΄ΡΠΆΠ°ΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ docker
ΠΈ docker-compose
, ΠΊΠΎΡΠΈ ΡΡ Π΄ΠΈΠ·Π°ΡΠ½ΠΈΡΠ°Π½ΠΈ Π΄Π° ΡΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΠ°ΠΈΠΌΠ΅, Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ ΠΎ ΡΠ°ΡΡΠ°Π²ΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°, ΠΎ ΡΠ΅Π³ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΡ, Π·Π°ΡΡΡΠ°Π²ΡΠ°ΡΡ, ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΡ, ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΡΠ°Π²ΡΠΈΠ²Π°ΡΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΎ ΡΠ°Π΄Ρ ΡΠ° Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΠΌΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΈ ΠΎ ΡΠ΅ΡΠ°Π²Π°ΡΡ Π΄ΡΡΠ³ΠΈΡ
ΡΠ»ΠΈΡΠ½ΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π’ΠΈΠΏΠΈΡΠ½ΠΈ ΡΠ»ΡΡΠ°ΡΠ΅Π²ΠΈ ΡΠΏΠΎΡΡΠ΅Π±Π΅ Π·Π° ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅
ΠΠ°ΠΌΠΈΡΠ»ΠΈΠΌΠΎ ΠΎΠ±ΠΈΡΠ½Ρ Π²Π΅Π± Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΊΠΎΡΠ° ΠΈΠΌΠ° ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅:
- Π’ΠΈΠΌΠ΅ΡΡΠ°Π»Π΅ΠΠ Π±Π°Π·Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° (ΠΠΎΡΡΠ³ΡΠ΅Ρ).
- ΠΠΊΠΏΡΠ΅ΡΡ.ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
- ΠΠΈΠ½Π³ (ΡΠ°ΠΌΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π½Π΅ ΡΠ°Π΄ΠΈ Π½ΠΈΡΡΠ° ΠΏΠΎΡΠ΅Π±Π½ΠΎ).
ΠΠ²ΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π½Π° 3 ΠΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° docker-compose
, ΠΊΠΎΡΠΈ ΡΠ°Π΄ΡΠΆΠΈ ΡΠΏΡΡΡΡΠ²Π° Π·Π° ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ°. Π‘Π²Π°ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ΅ ΠΈΠΌΠ°ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π΄ΠΎΠ΄ΠΈΡΠ½Π΅ ΡΠ°ΡΠΊΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΠΌ timescale
Π±ΠΈΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ°Π΄ΠΈΡΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ Π½Π° ΠΈΡΡΠΈ Π½Π°ΡΠΈΠ½ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΠ°Π΄Π΅ ΡΠ° Π±Π°Π·Π°ΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°. ΠΠ°ΠΈΠΌΠ΅, ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΡΠ°Π΄ΡΠ΅:
- ΠΡΠΈΡΠ°Π²ΡΠΈΠ²Π°ΡΠ΅ Ρ ΠΠΎΡΡΠ³ΡΠ΅Ρ ΡΡ Π΅Π»Π».
- Π£Π²ΠΎΠ· ΠΈ ΠΈΠ·Π²ΠΎΠ· ΡΠ°Π±Π΅Π»Π°.
- ΡΡΠ²Π°ΡΠ°ΡΠ΅
pg_dump
ΡΠ°Π±Π΅Π»Π΅ ΠΈΠ»ΠΈ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠΊΠΏΡΠ΅ΡΡ.ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, expressjs
, ΠΌΠΎΠΆΠ΅ ΠΈΠΌΠ°ΡΠΈ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ:
- ΠΠ±Π΅Π·Π±Π΅ΡΠΈΠ²Π°ΡΠ΅ ΡΠ²Π΅ΠΆΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΎΠ³ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ°.
- ΠΡΠΈΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ Π½Π° ΡΡΡΠΊΡ Π΄Π° Π±ΠΈΡΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΠ»ΠΈ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.
ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ°
ΠΠ°Π΄Π° ΡΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅, Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°ΠΌΠΎ ΡΠ° ΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ°. Π£ ΠΎΠΊΠ²ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅ ΠΏΠΎΡΡΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° docker-compose
, ΠΎΠΏΡΠΈΡΠ° ΠΏΠΎΠ΄ΡΡΠΊΠ΅ -f
, ΡΡΠΎ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΠΏΡΠ΅Π½Π΅ΡΠ΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ Ρ ΡΠΈΡΡΠ΅ΠΌ docker-compose.yml
.
ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ ΠΎΠ²Π΅ ΠΎΠΏΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΡ ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠ°ΠΌΠΎ Π½Π° ΠΎΠ½Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΊΠΎΡΠΈ ΡΡ ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ Ρ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ docker-compose.yml
.
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ° ΠΊΠ°Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ docker-compose
. ΠΠΊΠΎ Π·Π°ΠΌΠΈΡΠ»ΠΈΠΌΠΎ Π΄Π° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ°Π²ΠΈΠΌΠΎ Ρ ΡΡΡΠΊΡ psql
, ΡΠ°Π΄Π° Π±ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠ³Π»Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΎΠ²Π°ΠΊΠΎ:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
ΠΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΡΠ° ΡΠ΅ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ΅ docker-compose
Π docker
, ΠΌΠΎΠΆΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΠΈ ΠΎΠ²Π°ΠΊΠΎ:
docker exec -it edp_timescale_1 psql -Upostgres
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° ΡΠ΅ Ρ ΡΠ°ΠΊΠ²ΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π²ΠΈΠΌΠ° ΡΠ²Π΅ΠΊ ΠΏΠΎΠΆΠ΅ΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ docker
, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° docker-compose
, ΡΠ΅Ρ ΠΎΠ²ΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Ρ Π·Π° ΠΏΠ°ΠΌΡΠ΅ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
ΠΠ±Π΅ Π³ΠΎΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½ΠΈΡΡ ΡΠ°ΠΊΠΎ ΡΠ΅ΡΠΊΠ΅. ΠΠ»ΠΈ Π°ΠΊΠΎ Π±ΠΈΡΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ βΠΎΠΌΠΎΡΠ°Ρβ Ρ ΠΎΠ±ΡΠ°ΡΡΡ Makefile
, ΠΊΠΎΡΠΈ Π±ΠΈ Π½Π°ΠΌ Π΄Π°ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Ρ ββΠΎΠ±Π»ΠΈΠΊΡ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ ΡΠ°ΠΌ Π±ΠΈ ΠΏΠΎΠ·Π²Π°ΠΎ ΡΠ»ΠΈΡΠ½Π΅ Π΄ΡΠ³Π°ΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΠΎΠ½Π΄Π° Π±ΠΈ ΡΠ΅ ΠΈΡΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡΡΠΈΡΠΈ ΠΎΠ²Π°ΠΊΠΎ:
make db-shell
Π‘Π°ΡΠ²ΠΈΠΌ ΡΠ΅ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ Π΄Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Makefile
ΡΠΈΠ½ΠΈ ΡΠ°Π΄ ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π»Π°ΠΊΡΠΈΠΌ!
Π Π°Π΄Π½ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ Π³ΠΎΡΡΠ΅Π³ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠ° ΠΏΡΠΎΡΠ΅ΠΊΡΠ°, Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ docker-compose.yml
:
version: '3.3'
services:
api:
build: .
image: mywebimage:0.0.1
ports:
- 8080:8080
volumes:
- /app/node_modules/
depends_on:
- timescale
command: npm run dev
networks:
- webappnetwork
timescale:
image: timescale/timescaledb-postgis:latest-pg11
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
networks:
- webappnetwork
ping:
image: willfarrell/ping
environment:
HOSTNAME: "localhost"
TIMEOUT: 300
networks:
webappnetwork:
driver: bridge
ΠΠ° ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΡ ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ° ΠΊΠΎΡΠ΅ ΠΎΠΏΠΈΡΡΡΠ΅, ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΡ Makefile
:
THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
make -pRrq -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
docker-compose -f docker-compose.yml build $(c)
up:
docker-compose -f docker-compose.yml up -d $(c)
start:
docker-compose -f docker-compose.yml start $(c)
down:
docker-compose -f docker-compose.yml down $(c)
destroy:
docker-compose -f docker-compose.yml down -v $(c)
stop:
docker-compose -f docker-compose.yml stop $(c)
restart:
docker-compose -f docker-compose.yml stop $(c)
docker-compose -f docker-compose.yml up -d $(c)
logs:
docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
docker-compose -f docker-compose.yml ps
login-timescale:
docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
ΠΠ΅ΡΠΈΠ½Π° ΠΎΠ²Π΄Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡΡΠ΅ ΡΠ΅ Π½Π° ΡΠ²Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, Π°Π»ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΎΠΏΡΠΈΡΡ c=
ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΠΎΠ±ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π° ΡΠ΅Π΄Π°Π½ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ.
ΠΠΎΡΠ»Π΅ Makefile
ΡΠΏΡΠ΅ΠΌΠ°Π½, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΎΠ²Π°ΠΊΠΎ:
make help
β ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ Π»ΠΈΡΡΠ΅ ΡΠ²ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π°make
.
ΠΠΎΠΌΠΎΡ Π·Π° Π΄ΠΎΡΡΡΠΏΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅
make build
- ΡΠ°ΡΡΠ°Π²ΡΠ°ΡΠ΅ ΡΠ»ΠΈΠΊΠ΅ ΠΈΠ·Dockerfile
. Π£ Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΡΠΌΠΎ ΠΏΠΎΡΡΠΎΡΠ΅ΡΠ΅ ΡΠ»ΠΈΠΊΠ΅timescale
ΠΈping
. ΠΠ»ΠΈ ΡΠ»ΠΈΠΊΠ°api
ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΈΠΊΡΠΏΡΠ°ΠΌΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ. Π£ΠΏΡΠ°Π²ΠΎ ΡΠΎ ΡΠ΅ Π±ΠΈΡΠΈ ΡΡΠ°ΡΠ΅Π½ΠΎ Π½Π°ΠΊΠΎΠ½ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅.
ΠΡΠ°Π²ΡΠ΅ΡΠ΅ ΠΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
make start
β Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ ΡΠ²ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΠ° Π±ΠΈΡΡΠ΅ ΠΏΠΎΠΊΡΠ΅Π½ΡΠ»ΠΈ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄Π°Π½ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΏΡΡmake start c=timescale
.
ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΎΠ³ ΠΎΠΊΠ²ΠΈΡΠ°
ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΏΠΈΠ½Π³ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
make login-timescale
β ΠΏΡΠΈΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ Π½Π° Π±Π°ΡΡ ΡΠ΅ΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°timescale
.
ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ Π±Π°ΡΡ
-Π° Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ΅ ΡΠΊΠ°Π»Π΅
make db-shell
- ΡΠ»Π°Π· Ρpsql
Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΡtimescale
Π·Π° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ΅ Π‘ΠΠ ΡΠΏΠΈΡΠ° ΠΏΡΠ΅ΠΌΠ° Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΏΡΠΊΠ»-Π° Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΡ ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ΅ΠΌ
make stop
β Π·Π°ΡΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
ΠΠ°ΡΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ΅ ΡΠΊΠ°Π»Π΅
make down
β Π·Π°ΡΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΈ ΡΠΊΠ»Π°ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΊΠ»ΠΎΠ½ΠΈΠ»ΠΈ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΎΠ²Ρ Π½Π°ΡΠ΅Π΄Π±Ρ ΠΊΠΎΡΠ° Π½Π°Π²ΠΎΠ΄ΠΈ ΠΆΠ΅ΡΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ -make down c=timescale
ΠΈΠ»ΠΈmake down c=api
.
ΠΠ°ΡΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΈ Π±ΡΠΈΡΠ°ΡΠ΅ ΡΠ²ΠΈΡ
ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ
ΠΠ°ΠΊΠΎ Π½Π°ΠΌ ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅ Π΄Π°ΡΠ΅ Π±ΠΎΠ³Π°Ρ ΡΠΊΡΠΏ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ°, ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ ΠΎΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠ³Ρ ΠΏΠΎΡΡΠ°ΡΠΈ Π΄ΡΠ³Π°ΡΠΊΠ΅ ΠΈ ΡΠ΅ΡΠΊΠΎ ΠΈΡ ΡΠ΅ Π·Π°ΠΏΠ°ΠΌΡΠΈΡΠΈ.
ΠΠ°ΡΠΈΠ½ ΡΠΏΠΎΡΡΠ΅Π±Π΅ Makefile
ΠΏΠΎΠΌΠΎΠ³Π»Π° Π½Π°ΠΌ ΡΠ΅ Π΄Π° ΡΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠΎ Π±ΡΠ·Ρ ΠΈ Π»Π°ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΡ ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ° ΠΈΠ· Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ docker-compose.yml
. ΠΠ°ΠΈΠΌΠ΅, Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ ΠΎ ΡΠ»Π΅Π΄Π΅ΡΠ΅ΠΌ:
- ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅Ρ ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ° ΡΠ°ΠΌΠΎ ΡΠ° ΠΏΡΠΎΡΠ΅ΠΊΡΠ½ΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠΌΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΌ Ρ
docker-compose.yml
, ΡΠ°Π΄ Π½Π΅ ΠΎΠΌΠ΅ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠΊΡΠ΅ΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ. - Π£ ΡΠ»ΡΡΠ°ΡΡ Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π±ΠΎΡΠ°Π²ΡΠ΅Π½Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΡΠΈ
make help
ΠΈ Π΄ΠΎΠ±ΠΈΡΠΈ ΠΏΠΎΠΌΠΎΡ Π·Π° Π΄ΠΎΡΡΡΠΏΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. - ΠΠ΅ ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΠ°ΠΌΡΠΈΡΠ΅ Π΄ΡΠ³Π°ΡΠΊΠ΅ Π»ΠΈΡΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Π°ΡΠ° Π΄Π° Π±ΠΈΡΡΠ΅ ΠΈΠ·Π²ΡΡΠΈΠ»ΠΈ ΡΠ°Π΄ΡΠ΅ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ Π΄ΠΎΠ±ΠΈΡΠ°ΡΠ΅ Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠΈΡ
ΡΠ½ΠΎΡΠ° Ρ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ°Π²ΡΠΈΠ²Π°ΡΠ΅ Ρ ΡΠΈΡΡΠ΅ΠΌ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΏΡΡ
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
ΠΏΡΠ΅ΡΠ²Π°ΡΠ° Ρmake db-shell
. - ΡΠ°ΡΠ»
Makefile
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΌΡ ΡΠ΅ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ°ΡΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π»Π°ΠΊΠΎ ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½Π΅ ΠΊΠΎΠΏΠΈΡΠ΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΠ±Π°Π²ΡΠ°ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ Π΄ΡΡΠ³Π΅ ΡΠ°Π΄ΡΠ΅. - ΠΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠΈ ΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΠΈΡΡΠΎ
Makefile
, ΠΎΠ²ΠΎ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΡΡΠ΅ ΡΠ°ΡΠ°Π΄ΡΡ ΠΈ ΡΠΌΠ°ΡΡΡΠ΅ Π³ΡΠ΅ΡΠΊΠ΅.
ΠΠ‘ Π£ Π½Π°ΡΠ΅ΠΌ
ΠΡΠ°Π³ΠΈ ΡΠΈΡΠ°ΠΎΡΠΈ! ΠΠ°ΠΊΠΎ Π°ΡΡΠΎΠΌΠ°ΡΠΈΠ·ΡΡΠ΅ΡΠ΅ ΠΠΎΡΠΊΠ΅Ρ Π¦ΠΎΠΌΠΏΠΎΡΠ΅?
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ