PΡΡΡΠΊΠΈΠΉ | English
ΠΠ΅ΠΏΠ»ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ docker-compose ΠΈ make
Dcape - ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ docker-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ GitOps, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ make ΠΈ docker-compose, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
- ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ
make up
Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅- ΠΎΠ±ΡΠΈΠΉ ΠΏΠΎΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 80)
- ΠΠ
- ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
git push
ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ - ΡΠ΅ΡΠ΅Π· ΠΠΠ ΠΈΠ»ΠΈ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
- ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π³ΡΡΠΏΠΏΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΠ
- ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ letsencrypt ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°ΠΌΠΈ wildcard-Π΄ΠΎΠΌΠ΅Π½ΠΎΠ²
- ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ docker
Dcape ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ Makefile ΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Dcape Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ docker-ΠΎΠ±ΡΠ°Π·Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:
- ΠΎΠ±ΡΠΈΠΉ ΠΏΠΎΡΡ - traefik
- ΠΠ - postgresql
- ΡΠ΄Π°Π»Π΅Π½Π½ΠΎ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ - Woodpecker CI (Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅) ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΎΠ΄Π½ΠΎΠΌ - gitea (ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³)
- ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ - enfist
- ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ - narra, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π³ΡΡΠΏΠΏΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ gitea
- wildcard-Π΄ΠΎΠΌΠ΅Π½Ρ - powerdns
- ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΎΠΉ docker - portainer
ΠΡΠ΅ ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ 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 ΡΡΡΠΎΠΊΠΈ
- 10
Π‘ΠΌ. dopos.github.io/dcape
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ linux, docker ΠΈ dcape
- Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ (Π² /etc/hosts ΠΈΠ»ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ DNS) ΠΈΠΌΠ΅Π½Π° Π΄Π»Ρ ip ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ -
mysite.dev.test
,www.mysite.dev.test
)
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/
Π·Π°ΠΏΡΡΠ΅Π½Ρ.
- ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
- ΠΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ linux, docker ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ
- Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² DNS Π΄Π»Ρ ip ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° wildcard-Π΄ΠΎΠΌΠ΅Π½ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ -
*.srv1.domain.tld
)
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
$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-% run git for every app. Sample: make git-status-s
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)
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
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-org-create create VCS org via VCS API
oauth2-app-create create OAuth2 app via VCS API
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
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]