Skip to content

dopos/dcape

Repository files navigation

Pусский | English


dopos/dcape

Π”Π΅ΠΏΠ»ΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с docker-compose ΠΈ make

GitHub Release GitHub code size in bytes GitHub license Hits

Dcape - это инструмСнт для развёртывания docker-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ GitOps, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ make ΠΈ docker-compose, позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ make up Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅
    • ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 80)
    • Π‘Π”
  • ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git push ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ прилоТСния Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…
  • Ρ‡Π΅Ρ€Π΅Π· АПИ ΠΈΠ»ΠΈ web-интСрфСйс ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ конфигурациями ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
  • ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ доступ ΠΊ интСрфСйсам управлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ПО
  • ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с letsencrypt сСртификатами wildcard-Π΄ΠΎΠΌΠ΅Π½ΠΎΠ²
  • ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ инфраструктурой docker

Dcape прСдставляСт собой Π½Π°Π±ΠΎΡ€ Makefile ΠΈ настроСк, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π° сСрвСрС комплСкс согласованных ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Dcape Π½Π΅ являСтся постоянно Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ сСрвисом.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнных Π·Π°Π΄Π°Ρ‡ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ docker-ΠΎΠ±Ρ€Π°Π·Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:

  • ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΡ€Ρ‚ - traefik
  • ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ прилоТСния - Woodpecker CI (Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅) ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌ - gitea (ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³)
  • ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ конфигурациями - enfist
  • ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ доступ - narra, Π² качСствС Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ организация gitea
  • wildcard-Π΄ΠΎΠΌΠ΅Π½Ρ‹ - powerdns
  • ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ инфраструктурой docker - portainer

Π—Π°Ρ‡Π΅ΠΌ dcape?

ВсС эти прилоТСния Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ нСзависимо ΠΎΡ‚ dcape ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€ΠΈ этом, Π² процСссС дСплоя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ

  • ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ настройку прилоТСния (Π‘Π”, ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅...)
  • настройку взаимодСйствия (адрСса для запросов, ΠΊΠ»ΡŽΡ‡ΠΈ доступа...)

Π’ максимальном Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ процСсс настройки всСго комплСкса ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ~90 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ dcape это количСство ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΎ Π΄ΠΎ 3Ρ… для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΡƒΡŽ схСму взаимодСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΡƒΡ‚

Dcape позволяСт ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСсс развСртывания ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

  • ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° основС ΡƒΠΆΠ΅ извСстных
  • для опрСдСлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ внСшнюю ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, KEY ?= $(shell openssl rand -hex 16; echo))
  • для опрСдСлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ конструкции (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ifneq ($(AUTH_TOKEN),))
  • make позволяСт любой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² строкС Π²Ρ‹Π·ΠΎΠ²Π°
  • инструмСнты dcape доступны ΠΏΡ€ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (см dcape-app-template )
  • исходный ΠΊΠΎΠ΄ dcape с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ настроСк всСх 8 сСрвисов - это
    • 10 Makefile, всСго 485 строк
    • 17 YAML, всСго 502 строки

ДокумСнтация

Π‘ΠΌ. dopos.github.io/dcape

Зависимости

  • linux + sudo apt -y install git make sed curl jq
  • docker + sudo apt -y install docker-compose-plugin

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования

Запуск прилоТСния локально

ВрСбования:

  • ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с linux, docker ΠΈ dcape
  • зарСгистрированныС (Π² /etc/hosts ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ DNS) ΠΈΠΌΠ΅Π½Π° для ip ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - mysite.dev.test, www.mysite.dev.test)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для статичСского сайта ΠΈ nginx

git clone https://github.com/dopos/dcape-app-nginx-sample.git
cd dcape-app-nginx-sample
make config-if
# <edit .env>
make up

ВсС Π³ΠΎΡ‚ΠΎΠ²ΠΎ - http://mysite.dev.test/ ΠΈ http://www.mysite.dev.test/ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹.

Запуск прилоТСния ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ

Установка dcape

ВрСбования:

  • ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с linux, docker ΠΈ установлСнными зависимостями
  • зарСгистрированный Π² DNS для ip этого ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° wildcard-Π΄ΠΎΠΌΠ΅Π½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ - *.srv1.domain.tld)

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ gitea

MY_HOST=demo.dcape.ru
MY_IP=${MY_IP:-192.168.23.10}
[email protected]

git clone https://github.com/dopos/dcape.git
cd dcape
make install ACME=wild DNS=wild DCAPE_DOMAIN=${MY_HOST} \
  TRAEFIK_ACME_EMAIL=${LE_ADMIN} PDNS_LISTEN=${MY_IP}:53
make echo-gitea-admin-pass

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ gitea

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования для рСгистрации ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ gitea

  • $AUTH_TOKEN для gitea API
MY_HOST=${MY_HOST:-srv1.domain.tld}
LE_ADMIN=${LE_ADMIN:-admin@domain.tld}
GITEA_URL=${GITEA_URL:-https://git.domain.tld}
GITEA_ORG=${GITEA_ORG:-dcape}
GITEA_USER=${GITEA_USER:-dcapeadmin}

git clone https://github.com/dopos/dcape.git
cd dcape
make install ACME=wild DNS=wild DCAPE_DOMAIN=${MY_HOST} \
  TRAEFIK_ACME_EMAIL=${LE_ADMIN} \
  DCAPE_ADMIN_ORG=${GITEA_ORG} \
  DCAPE_ADMIN_USER=${GITEA_USER} \
  PDNS_LISTEN=${MY_IP}:53 \
  GITEA=${GITEA_URL} \
  AUTH_TOKEN=${AUTH_TOKEN}
make echo-gitea-admin-pass

ВсС Π³ΠΎΡ‚ΠΎΠ²ΠΎ - сСрвСр srv1.domain.tld Π³ΠΎΡ‚ΠΎΠ² ΠΊ дСплою ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, интСрфСйсы ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ dcape доступны ΠΏΠΎ адрСсу https://srv1.domain.tld.

ИспользованиС

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ (targets) Makefile. ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ список: make[ help].

Git commands

    git-%           run git for every app. Sample: make git-status-s

Docker-compose commands

    build-compose   create docker-compose image 
    ps              show stack containers 
    up              (re)start container(s) 
    up-%            start container 
    reup-%          restart container 
    reup            restart container(s) 
    down            stop (and remove) container(s) 

Database commands

    psql            exec psql inside db container 
    db-create       create database and user 
    db-drop         drop database and user 
    psql-docker     exec psql inside db container from apps. Example: make psql-docker DCAPE_STACK=yes
    psql-local      run local psql from apps. Example: make psql-local DCAPE_STACK=yes PGPORT=5433

App config storage commands

    env-get         get env tag from store, `make env-get TAG=app--config--tag` 
    env-ls          list env tags in store 
    env-set         set env tag in store, `make env-set TAG=app--config--tag` 

OAuth2 setup

    oauth2-org-create create VCS org via VCS API 
    oauth2-app-create create OAuth2 app via VCS API 

.env operations

    config          generate sample config 
    config-force    generate sample config and rename it to .env 
    config-if       generate sample config and rename it to .env if not exists 

Other

    echo-%          print config var. Sample: make echo-gitea-admin-pass
    clean-noname    delete unused docker images w/o name (you should use portainer for this)
    clean-volume    delete docker dangling volumes (you should use portainer for this)
    help            list Makefile targets (this is default target)

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Имя По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ОписаниС
DCAPE_DOMAIN dev.test dcape containers hostname domain
DCAPE_ROOT $(PWD) dcape root directory
DCAPE_TAG dcape container name prefix
DCAPE_ADMIN_USER dcapeadmin CICD & gitea admin user
DCAPE_ADMIN_ORG dcape user group with access to auth protected resources
APPS - dcape apps
calculated by install
used in make only

ЛицСнзия

The MIT License (MIT), see LICENSE.

Copyright (c) 2017-2024 АлСксСй ΠšΠΎΠ²Ρ€ΠΈΠΆΠΊΠΈΠ½ [email protected]