ΠΠ²Π°Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΡΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΠ²ΠΌΠ΅ Π°ΠΌΠ±ΠΈΡΠΈΠΎΠ·Π½ΠΈ ΡΠ΅Π»ΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈΠΌΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΎΡ.
ΠΠ΅ΠΊΠΎΠΈ Π·Π°Π΄Π°ΡΠΈ Π±Π°ΡΠ°Π°Ρ ΡΠ΅ΡΠΈΠΎΠ·Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°, Π·Π° ΡΡΠΎ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅: Π³ΠΈ ΠΏΠΎΠΊΠ°Π½ΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅, ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ, Π»ΠΈΠ΄Π΅ΡΠΈΡΠ΅ Π½Π° ΡΠΈΠΌΠΎΠ²ΠΈΡΠ΅ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠ°Π»ΠΈΡΡΠΈΡΠ΅ Π½Π° ΠΡΠ±Π΅ΡΠ½Π΅ΡΡ Π²ΠΎ ΠΊΠ°Π½ΡΠ΅Π»Π°ΡΠΈΡΠ°ΡΠ°.
ΠΠΎ Π½Π΅ΠΊΠΎΠΈ, ΠΈΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π½Π° ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ ΡΠ»ΡΡΠ°ΡΠΎΡ
ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π±Π°ΡΠ°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΡΠ°ΡΠΎΠ²ΠΈ Π·Π° ΡΠ°Π·Π²ΠΎΡ, Π½ΠΎ ΠΏΠ°Π·Π°Ρ - ΡΠΎΡΠ΅ΠΌΠ° Π΄ΡΡΠ³Π° ΠΏΡΠΈΠΊΠ°Π·Π½Π°. Π‘ΠΎ Π΄ΠΎΠ°ΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΡΠ½ΠΈΠΌΠΊΠΈΡΠ΅, ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅ΠΌΠ΅ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π°Ρ ΡΠ»ΠΈΠΊΠ° Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ° Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ Π½Π° ΠΏΠ°Π·Π°ΡΠΎΡ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ Π·Π° Π΅Π΄Π΅Π½ Π΄Π΅Π½.
ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ΄ΠΎΠ½Π΅ΡΠ΅ Π·Π°
ΠΠ°ΠΊΠΎ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Gitlab ΡΠ°Π±Π»ΠΎΠ½ Π½Π° Centos 8
ΠΠ° Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Gitlab, ΠΡΡΠ° ΠΈΠ·Π±ΡΠ° ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ 8 GB RAM ΠΈ 2 ΡΠ°Π΄ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ (4 GB ΠΈ 1 ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΈ, Π½ΠΎ Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ ΡΠ΅ ΠΌΠΎΡΠ° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ swap Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° Gitlab Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ ΡΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ½ΠΈΡΠΊΠΈ.
ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° Gitlab:
sudo dnf install -y curl policycoreutils
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΠΎΡΠ²ΠΎΡΠΈΠΌΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ Π΄ΠΎ ΠΏΠΎΡΡΠΈΡΠ΅ 80 ΠΈ 443:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ Gitlab:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
ΠΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΎ ΠΈΠΌΠ΅ DNS, ΡΠΎΠ³Π°Ρ Gitlab ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ. ΠΠΊΠΎ Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΡ https://, Gitlab Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Lets Encrypt ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ.
ΠΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΡΠ°Π²Π΅Π²ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ Π·Π° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, Π° ΠΏΠΎΡΠΎΠ° ΠΡΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ (ΠΊΠΎΡΠ° ΠΏΠΎΡΠΎΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π° Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ):
sudo EXTERNAL_URL="http://0.0.0.0" dnf install -y gitlab-ee
ΠΠΎ ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π° Gitlab ΡΠ°Π±ΠΎΡΠ°Ρ ΡΠΎ ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ
http://vps_ip_address/
ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΠ΅ Π²Π΅ ΠΏΠΎΡΡΠΈΠΊΠ½Π΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎΡΠ΅ΡΠ½Π° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° Π·Π° root Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ°ΡΠ° ΡΠΌΠ΅ΡΠΊΠ°.
ΠΠΎ ΠΎΠ²Π°Π° ΡΠ°Π·Π°, ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, Π° ΠΏΠΎΡΠΎΠ° ΡΠ΅ Π³ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ.
Π ΡΠΎΠ° Π΅ ΡΓ¨!
ΠΠΎΠ½ΡΡ: ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠΎΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΡΠ°Π±ΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎ ΠΏΡΠΎΡΠΈΡΡΠ²Π°ΡΠ΅
Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π½Π° Gitlab ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Grafana
ΠΡΠ΅Π΄ ΡΡΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ, ΡΠΈΠΌΠΎΡ Π½Π° Gitlab ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ΅Π½ Π±ΡΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ Π½Π° Gitlab.
ΠΡΡΠΎΠ³Π°Ρ, Gitlab Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° Π³ΠΎ ΠΈΡΠΏΠΎΡΠ°ΡΡΠ²Π° ΡΠ²ΠΎΡΠΎΡ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎ Prometheus Π·Π° Π΄Π° ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π΄Π° Π³ΠΈ ΠΈΡΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈ ΠΎΠ΄ Prometheus.
ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ Π΅ ΠΎΡΠ²ΠΎΡΠ΅Π½Π° (Apache 2.0) Π²ΡΠ΅ΠΌΠ΅Π½ΡΠΊΠ° ΡΠ΅ΡΠΈΡΠ° DBMS Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ Go ΠΈ ΠΏΡΠ²ΠΈΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ΅Π½Π° Π²ΠΎ SoundCloud. Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΠΎΠ²Π°Π° ΡΠ°Π±ΠΎΡΠ° Π³ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡΠ° Π²Π°ΡΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π½Π° Prometheus Π΅ ΡΠΎΠ° ΡΡΠΎ ΡΠΎΡ ΡΠ°ΠΌΠΈΠΎΡ ΠΏΠΎΠ²Π»Π΅ΠΊΡΠ²Π° ΠΌΠ΅ΡΡΠΈΠΊΠ° ΠΎΠ΄ Π΄Π°Π΄Π΅Π½ ΡΠ΅Ρ Π½Π° ΡΡΠ»ΡΠ³ΠΈ (ΠΏΡΠ°Π²ΠΈ Π²Π»Π΅ΡΠ΅ΡΠ΅). ΠΠΎΡΠ°Π΄ΠΈ ΠΎΠ²Π°, ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΡΠ½Π°Ρ ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΅Π΄ΠΈΡΠΈ ΠΈΠ»ΠΈ Π½Π΅ΡΡΠΎ ΡΠ»ΠΈΡΠ½ΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π΅ΠΊΠ° ΡΠ»Π΅Π΄Π΅ΡΠ΅ΡΠΎ Π½ΠΈΠΊΠΎΠ³Π°Ρ Π½Π΅ΠΌΠ° Π΄Π° ΡΡΠ°Π½Π΅ ΡΠ΅ΡΠ½ΠΎ Π³ΡΠ»ΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ. ΠΡΠΎΠ΅ΠΊΡΠΎΡ Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π±ΠΈΠ΄Π΅ΡΡΠΈ Π²ΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π½Π΅ Π½ΡΠ΄ΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΡΠΊΠ°Π»ΠΈΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ Π²ΠΈΡΠΎΠΊΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡ.
ΠΡΠ΅Π΄ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π°, ΡΠΈΠΌΠΎΡ Π½Π° Gitlab Π·Π°ΠΊΠ»ΡΡΠΈ Π΄Π΅ΠΊΠ° ΠΌΠ΅ΡΡΠΈΠΊΠ°ΡΠ° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π±Π΅Π· ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈ. Π’Π°ΠΊΠ°, ΡΠΈΠ΅ ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π° Grafana ΡΠΎ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠ°Π±Π»ΠΈ Π·Π° Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π΄Π° Π³ΠΈ Π²ΠΈΠ·ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ°Π°Ρ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π±Π΅Π· Π΄Π° ΠΌΠΎΡΠ° Π΄Π° ΡΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π°Ρ Grafana ΡΠ°ΡΠ½ΠΎ.
ΠΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 12.0, Gitlab ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ Grafana, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π° ΡΠΎ SSO, ΠΈ
ΠΠΎΡΡΠΎΡΠ°Ρ Π΄Π²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Gitlab ΡΠΎ ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ:
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π½Π° GitLab (ΠΠΌΠ½ΠΈΠ±ΡΡ)
- Π‘Π»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ GitLab Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ Kubernetes
ΠΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅
βΠΠΌΠ½ΠΈΠ±ΡΡβ Π΅ ΠΎΠ½Π° ΡΡΠΎ GitLab Π³ΠΎ Π½Π°ΡΠ΅ΠΊΡΠ²Π° ΡΠ²ΠΎΡΠΎΡ Π³Π»Π°Π²Π΅Π½ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΡΠ°ΡΠ°Π½Π°
ΠΠ»Π΅Π·ΠΎΡ ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°ΡΠ° Π½Π° Grafana ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΈ (Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ Π΅ ΡΠ°ΠΌΠΎ Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° SSO), Π½ΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π½Π°ΡΠ°Π²ΠΈΡΠ΅ Π½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈ ΠΏΡΠ°Π²Π° ΠΈΠ»ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ°Π²ΠΈΡΠ΅ ΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎ ΠΈΠΌΠ΅ ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ ΠΎΠ²Π° Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Gitlab Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° /etc/gitlab/gitlab .rb ΡΠΎ ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°:
grafana['disable_login_form'] = false
Π ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ Gitlab Π·Π° Π΄Π° Π³ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅:
sudo gitlab-ctl reconfigure
ΠΠΊΠΎ ΡΡΠ΅ Π³ΠΎ Π»Π°Π½ΡΠΈΡΠ°Π»Π΅ Gitlab ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΎΠ΄ Π½Π°ΡΠΈΠΎΡ ΠΏΠ°Π·Π°Ρ, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π΄ΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π²Π°ΡΠΈΠΎΡ URL Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΡΠΎ ΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ° Π²ΠΎ /etc/gitlab/gitlab.rb:
external_url = 'http://gitlab.mydomain.ru'
ΠΠ·Π²Π΅Π΄Π΅ΡΠ΅ ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°:
sudo gitlab-ctl reconfigure
Π ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ Π³ΠΎ URI Π·Π° ΠΏΡΠ΅Π½Π°ΡΠΎΡΡΠ²Π°ΡΠ΅ Π·Π° Grafana
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π° ΠΎΠ±Π»Π°ΡΡ > ΠΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ > GitLab Grafana
ΠΡΠ²ΠΈΠΎΡ ΠΏΠ°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ Π½Π°ΡΠ°Π²ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ SSO, Gitlab ΡΠ΅ ΠΏΠΎΠ±Π°ΡΠ° Π΄ΠΎΠ·Π²ΠΎΠ»Π° Π΄Π° Π³ΠΎ ΠΎΠ²Π»Π°ΡΡΠΈ Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Grafana.
ΠΠ΅ΡΡΠΈΠΊΠ°
ΠΠΎ ΠΡΠ°ΡΠ°Π½Π°, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠ°Π±Π»ΠΈ Π½Π° Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ ΠΈ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠ°ΡΠ° Gitlab Omnibus.
ΠΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π°ΡΠ° ΡΠ°Π±Π»Π°
ΠΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠ°Π±Π»Π° Π·Π° ΠΌΠ΅ΡΡΠΈΠΊΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°
- ΠΡΠ΅Π³Π»Π΅Π΄ - ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠ°Π±Π»Π° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ ΡΡΠΎ Π³ΠΎ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° ΡΡΠ°ΡΡΡΠΎΡ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅, ΡΠ΅Π΄ΠΈΡΠΈΡΠ΅ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ
- Gitaly - ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π½Π° ΡΡΠ»ΡΠ³ΠΈ ΡΡΠΎ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ RPC Π΄ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ°ΡΠ° Π½Π° Gitlab
- NGINX VTS - ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΡΠΎΠΎΠ±ΡΠ°ΡΠ°ΡΠΎΡ Π½Π° ΡΡΠ»ΡΠ³ΠΈ ΠΈ HTTP ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΠΏΠΎ Π±Π°ΡΠ°ΡΠ΅
- PostgreSQL - ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π·Π° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡΠ° ΠΈ ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ PostgreSQL
- Praefect - ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ΡΠΎ Π²ΠΈΡΠΎΠΊΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡ Praefect
- Rails App - ΠΏΡΠ΅Π³Π»Π΅Π΄Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π° ΡΠ°Π±Π»Π° Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ Rails
- Π Π΅Π΄ΠΈΡ - ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π Π΅Π΄ΠΈΡ
- Π Π΅Π³ΠΈΡΡΠ°Ρ - ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΡΠ΅Π³ΠΈΡΡΠ°ΡΠΎΡ Π½Π° ΡΠ»ΠΈΠΊΠΈ
- ΠΠ΅ΡΡΠΈΠΊΠ° Π½Π° ΡΠ΅ΡΠ²ΠΈΡΠ½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° - ΠΌΠ΅ΡΡΠΈΠΊΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΡΠΎ ΡΠ° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΎΡΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΎΠ΄ Gitlab, Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, Π±ΡΠΎΡΠΎΡ Π½Π° Π±Π°ΡΠ°ΡΠ° Π·Π° RPC ΠΈ Π±ΡΠΎΡΠΎΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ Π΄ΠΎΡΡΠ° ΡΠ΅ΠΎΠΏΡΠ°ΡΠ½Π° ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅ Π½Π° Gitlab ΠΈΠΌΠ°Π°Ρ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π°Ρ Π²ΠΈΠ·ΡΠ΅Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π½Π° Gitlab Π²Π΅Π΄Π½Π°Ρ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΡΡΠΈΡΠ°ΡΠ°.
ΠΠΎ Gitlab, ΠΏΠΎΡΠ΅Π±Π΅Π½ ΡΠΈΠΌ Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ ΠΈ Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈ, Π° ΡΠΏΠΎΡΠ΅Π΄ ΠΠ΅Π½ ΠΠΎΡΠΈ, ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π·Π° SRE Π²ΠΎ Gitlab, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠ°Π±Π»ΠΈ ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΈ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ.
Π ΡΠ΅Π³Π° Π³Π»Π°Π²Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ°: Π°ΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΏΠ°Π·Π°Ρ Π·Π°Π΅Π΄Π½ΠΎ
Π‘Π°ΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ° ΠΏΠΎΠΊΠ°Π½ΠΈΠΌΠ΅ ΡΠ΅Π»Π°ΡΠ° Π·Π°Π΅Π΄Π½ΠΈΡΠ° Π₯Π°Π±Ρ Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΠ°Π·Π°ΡΠΎΡ. ΠΠΎΡΡΠΎΡΠ°Ρ ΡΡΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ΄ΡΡΠΆΠΈΡΠ΅:
ΠΠΎΠ΄Π³ΠΎΡΠ²Π΅ΡΠ΅ ΡΠ° ΡΠ»ΠΈΠΊΠ°ΡΠ° ΡΠ°ΠΌΠΈ ΠΈ Π΄ΠΎΠ±ΠΈΡΡΠ΅ 3000 ΡΡΠ±Π»ΠΈ Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΡΠ°Π»Π΄ΠΎ
ΠΠΊΠΎ ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π²Π΅Π΄Π½Π°Ρ Π΄Π° ΡΠ΅ Π²ΡΡΡΠ½Π΅ΡΠ΅ Π²ΠΎ Π±ΠΈΡΠΊΠ° ΠΈ ΡΠ°ΠΌΠΈ Π΄Π° ΡΠ° ΡΠΎΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ»ΠΈΠΊΠ°ΡΠ° ΡΡΠΎ Π²ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ²Π°, ΡΠ΅ Π²ΠΈ Π·Π°ΡΠ»ΡΠΆΠΈΠΌΠ΅ 3000 ΡΡΠ±Π»ΠΈ Π½Π° Π²Π°ΡΠΈΠΎΡ Π²Π½Π°ΡΡΠ΅ΡΠ΅Π½ Π±ΠΈΠ»Π°Π½Ρ - ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΈ.
ΠΠ°ΠΊΠΎ Π΄Π° ΡΠ° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π²Π°ΡΠ°ΡΠ° ΡΠ»ΠΈΠΊΠ°:
- ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠΌΠ΅ΡΠΊΠ° ΡΠΎ Π½Π°Ρ
ΠΠ½Π»Π°ΡΠ½ - ΠΠ°ΠΆΠ΅ΡΠ΅ ΠΌΡ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°ΡΠ° Π΄Π΅ΠΊΠ° ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ»ΠΈΠΊΠΈ
- ΠΠ΅ Π²ΠΈ ΠΊΡΠ΅Π΄ΠΈΡΠΈΡΠ°ΠΌΠ΅ 3000 ΡΡΠ±Π»ΠΈ ΠΈ ΡΠ΅ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠ½ΠΈΠΌΠΊΠΈ
- ΠΠ°ΡΠ°ΡΠ°ΡΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ ΡΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ
- ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΡΠΎΡΡΠ²Π΅ΡΠΎΡ Π½Π° ΠΎΠ²ΠΎΡ VPS ΠΈ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ
- ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΏΠ°ΡΡΡΠ²Π° ΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡΠ° Π·Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΎΡΡΠ²Π΅ΡΠΎΡ
- ΠΠ°ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠ»ΠΈΠΊΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ
- ΠΠ°ΡΠ°ΡΠ°ΡΡΠ΅ Π½ΠΎΠ² Π²ΠΈΡΡΡΠ΅Π»Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΊΡΠ΅ΠΈΡΠ°Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π²ΠΎ ΠΏΠ°ΡΠ°ΡΠΊΠ°ΡΠ° Π»ΠΈΡΡΠ° βΠ¨Π°Π±Π»ΠΎΠ½ Π·Π° ΡΠ΅ΡΠ²Π΅Ρβ
- ΠΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, ΠΏΡΠ΅ΡΡΠ»Π΅ΡΠ΅ Π³ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ Π½Π° ΡΠ΅ΠΊΠΎΡ 6 Π½Π° ΡΠ΅Ρ Π½ΠΈΡΠΊΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ°
- ΠΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° Π³ΡΠ΅ΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΏΡΠΈΡΠΈΠ½Π°ΡΠ° ΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ
ΠΠ° ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΡΠΈ Π½Π° Π±ΠΈΠ·Π½ΠΈΡΠΈ: ΠΏΠΎΠ½ΡΠ΄Π΅ΡΠ΅ Π³ΠΎ Π²Π°ΡΠΈΠΎΡ ΡΠΎΡΡΠ²Π΅Ρ
ΠΠΊΠΎ ΡΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Ρ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ ΠΊΠΎΡ Π΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π½ Π½Π° VPS, ΡΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π²Π΅ Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ Π½Π° ΠΏΠ°Π·Π°ΡΠΎΡ. ΠΠ° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ΠΌΠ΅ Π΄Π° Π²Π½Π΅ΡΠ΅ΡΠ΅ Π½ΠΎΠ²ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ ΠΈ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡ.
Π‘Π°ΠΌΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅ΡΠ΅ Π½ΠΈ ΡΠ»ΠΈΠΊΠ° Π²ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ
ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΎ ΠΊΠΎΡ ΡΠΎΡΡΠ²Π΅Ρ Π±ΠΈ ΡΠ°ΠΊΠ°Π»Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΠΈΡΠ΅ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΡΠΎ Π΅Π΄Π΅Π½ ΠΊΠ»ΠΈΠΊ?
Π¨ΡΠΎ Π²ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠ²Π° Π½Π° ΠΏΠ°Π·Π°ΡΠΎΡ RUVDS?
Π¨ΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π²ΠΊΠ»ΡΡΠΈ ΡΠ΅ΠΊΠΎΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° Π·Π° Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠΎΡΠΈΡΡΠ²Π° ΡΠ°ΠΌΠΎ-ΠΏΠΎΡΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ²ΠΎΡΠΎΡ ΠΏΠ°Π·Π°Ρ?
Π‘Π°ΠΌΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π°Ρ Π²ΠΎ Π°Π½ΠΊΠ΅ΡΠ°ΡΠ°.
ΠΠΎΠΈ ΡΠ»ΠΈΠΊΠΈ ΠΏΡΠ²ΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ Π½Π° ΠΏΠ°Π·Π°ΡΠΎΡ?
-
50,0%ΠΠΠΠ10
-
15,0%ΠΡΡΠΏΠ°Π»3
-
10,0%Joomla2
-
5,0%ΠΠΎΠΊΡ1
-
0,0%PacVim0
-
0,0%Runcloud0
-
5,0%ΠΊΠΎΠ΄-ΡΠ΅ΡΠ²Π΅Ρ 1
-
15,0%Ghost3
-
5,0%WikiJs1
-
0,0%ΠΠΈΡΠΊΡΡΡ0
-
0,0%Rstudio0
-
5,0%OpenCart1
-
35,0%Django7
-
40,0%ΠΠ°ΡΠ°Π²Π΅Π»8
-
20,0%Ruby on Rails4
-
55,0%NodeJs11
ΠΠ»Π°ΡΠ°Π° 20 ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ. 12 ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π±Π΅Π° Π²ΠΎΠ·Π΄ΡΠΆΠ°Π½ΠΈ.
ΠΠ·Π²ΠΎΡ: www.habr.com