ΠΠ° Π²ΡΠ΅ΠΊΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΏΡΠ΅ΡΡΡΠΏΡΠ²Π° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°ΡΠ°. ΠΠ΄Π½ΠΎ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°ΡΠΎ ΠΊΠ°ΡΠΎ Π½Π°ΡΠ°ΡΡΠ²Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π΅ ΡΠ° Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, Π΅Π΄Π²Π° Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΡΠΊ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΠ° ΠΈΠΌ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠΊΠΎΡΠΈ Π΄ΠΎ Π½Π΅Π±Π΅ΡΠΎ.
ΠΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ ΡΠ΅Π³Π° ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡ ΠΎΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΈ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ. ΠΠΈΠΊΡΠΎΡΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ»ΡΠΆΠΈ Π½Π° Π΅Π΄Π½Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° ΡΠ΅Π». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½Π° Π‘Π£ΠΠ, Π΅ΠΊΡΠΏΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠ»ΡΠ³Π° Solr.
Π Π½Π°ΡΠΈ Π΄Π½ΠΈ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²Π° ΡΠΎΡΡΡΠ΅ΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ. Π ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° Π½ΠΈ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Docker.
Π΄ΠΎΠΊΠ΅Ρ
ΠΠ»Π°ΡΡΠΎΡΠΌΠ°
ΠΠΎΠΊΠ΅Ρ ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠ°Π½Π΅
Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ
ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ Docker Compose, YAML ΡΠ°ΠΉΠ» ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡ Π½ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Docker Compose Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΎΠΏΠΈΡΠ²Π°Π½Π΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΈ Docker ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° Ρ
ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°
GNU Make
ΠΡΠΎΠ³ΡΠ°ΠΌΠ° make
, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎ Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΡ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄. ΠΠ°ΡΠΎ ΡΡΠ»ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠ°ΠΆΠ΅, ΡΠ΅ make
ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π½ΡΠΊΠ°ΠΊΡΠ² ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π΄ΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΊΡΠ°Π΅Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, Π΄ΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠ΅Π». Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ docker-compose
ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ ΡΠ΅Π»ΠΈ (
ΠΠ° ΠΊΠ°ΠΆΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° make
Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ ΠΎΡ Π½Π΅Ρ, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΠ°ΠΉΠ» Makefile
.
Π Π½Π°ΡΠ°ΡΠ° Makefile
ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ docker
ΠΈ docker-compose
, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, ΡΠΏΠΈΡΠ°Π½Π΅, ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π²Π»ΠΈΠ·Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠ°Π±ΠΎΡΠ° Ρ ΠΆΡΡΠ½Π°Π»ΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ.
Π’ΠΈΠΏΠΈΡΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Docker Compose
ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΡΠΈ ΡΠΈΠΏΠΈΡΠ½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠΌΠ° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ:
- TimescaleDB Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (Postgres).
- Express.js ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- Ping (ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ).
Π’ΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ 3 Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΡΠ°ΠΉΠ» docker-compose
A, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΡΠ΅ΠΊΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ timescale
ΡΠ΅ Π±ΡΠ΄Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΡΠΎΡΠΎ ΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, ΡΠΎΠΉ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- ΠΠ»Π΅Π·ΡΠ΅ Π² ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° Π½Π° Postgres.
- ΠΠΌΠΏΠΎΡΡ ΠΈ Π΅ΠΊΡΠΏΠΎΡΡ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ.
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅
pg_dump
ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈΠ»ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
Express.js ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, expressjs
, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ:
- ΠΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ²Π΅ΠΆΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΆΡΡΠ½Π°Π».
- ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² shell Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ
Π‘Π΅Π³Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π½Π°ΡΡΡΠΎΠΈΡ
ΠΌΠ΅ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker Compose, Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°ΠΌΠ΅ Ρ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. Π ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Docker Compose ΠΈΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° 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
ΠΠ° Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Docker Compose ΠΈ Π΄Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°ΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΎΠΏΠΈΡΠ²Π°, Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠ°ΠΉΠ» 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
ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΡΡΠΎΠΈΠΌ Π½Π° ΠΌΠ΅ΡΡΠ½ΠΎ Π½ΠΈΠ²ΠΎ. Π’ΠΎΡΠ½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°.
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Docker ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
make start
- ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°ΡΠΎmake start c=timescale
.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΡΠΊΠ°Π»Π°
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ping ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
make login-timescale
- Π²Π»Π΅Π·ΡΠ΅ Π² bash ΡΠ΅ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°timescale
.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° bash Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΡΠΊΠ°Π»Π°
make db-shell
- Π²Ρ ΠΎΠ΄ ΠΊΡΠΌpsql
Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρtimescale
Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° SQL Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ.
ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° psql Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ timescaledb
make stop
- ΡΠΏΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.
Π‘ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΡΠΊΠ°Π»Π°
make down
- ΡΠΏΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΠ° Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΡΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ -make down c=timescale
ΠΈΠ»ΠΈmake down c=api
.
Π‘ΠΏΡΠ΅ΡΠ΅ ΠΈ ΠΈΠ·ΡΡΠΈΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Docker Compose Π½ΠΈ Π΄Π°Π²Π° Π±ΠΎΠ³Π°Ρ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΠ΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΡΠ°Π²Π°Ρ Π΄ΡΠ»Π³ΠΈ ΠΈ ΡΡΡΠ΄Π½ΠΈ Π·Π° Π·Π°ΠΏΠΎΠΌΠ½ΡΠ½Π΅ Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ.
ΠΠ°ΡΠΈΠ½ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Makefile
Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π±ΡΡΠ·ΠΎ ΠΈ Π»Π΅ΡΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΎΡ ΡΠ°ΠΉΠ» docker-compose.yml
. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
- Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° ΡΠ°ΠΌΠΎ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π²
docker-compose.yml
, Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΠ°ΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π½Π΅ ΠΏΡΠ΅ΡΠ°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°. - Π ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ Π΄Π°Π΄Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ Π·Π°Π±ΡΠ°Π²Π΅Π½Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
make help
ΠΈ ΠΏΠΎΠ»ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠΌΠΎΡ Π·Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. - ΠΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Π΄ΡΠ»Π³ΠΈ ΡΠΏΠΈΡΡΡΠΈ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, Π·Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅ Π½Π΅ΡΠ° ΠΊΠ°ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ»ΠΈ Π²Π»ΠΈΠ·Π°Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°ΡΠΎ
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π²make db-shell
. - Π΄ΠΎΡΠΈΠ΅
Makefile
ΠΠΎΠΆΠ΅ΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΡΠ°ΡΡΠ΅, Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΡΠ²Π°ΡΠ΅ Π³ΡΠ²ΠΊΠ°Π²ΠΎ ΠΊΡΠΌ Π½Π΅Π³ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΡΠΌ Π½Π΅Π³ΠΎ, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. - ΠΠΊΠΎ Π³ΠΎΠ»ΡΠΌ Π΅ΠΊΠΈΠΏ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΡΠΎΡΠΎ
Makefile
, ΡΠΎΠ²Π° ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ° ΡΡΡΡΡΠ΄Π½ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅.
PS Π Π½Π°ΡΠ°ΡΠ°
Π£Π²Π°ΠΆΠ°Π΅ΠΌΠΈ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ! ΠΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Docker Compose?
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com