แแ แแฎแแ แแคแแฅแ แแแแ แฉแแแ แแ แแแฅแขแแก แแแแแแแแแแก แแแขแแแแขแแแแชแแแแ. gitlab.com แแแแแแแแแ แงแแแแ แแแกแขแ แฃแแแแขแก แแแแกแแแแแก แแ, แ แ แแฅแแ แฃแแแ, แแ แแแแแแฌแงแแแขแ แแแแแแแงแแแแแแแ แแแกแ แแแแแ แแแ แแ แแชแแ แ แแแแแแแแแแก แกแแ แแแขแแก แแแฌแแ แ. แแ แกแขแแขแแแจแ แแ แแฃแแแแ แแ แฉแแแก แแแแแชแแแแแแแก แกแแแแแแแแแแแก.
TL; DR
- แแแแงแแแแ VPS: แแแแแ แแแ root, แแแ แแแแ แจแแกแแแ, แแแแแแกแขแแแแ แแ dockerd, แแแแแแแคแแแฃแ แแ แแ ufw
- แจแแฅแแแแแ แกแแ แแแคแแแแขแแแ แกแแ แแแ แแกแ แแ แแแแแแขแแกแแแแก
docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl แฉแแ แแแ dockerd แแแแขแ แแแ tcp แกแแแแขแแก แกแแจแฃแแแแแแ: แแแแแฆแแ -H fd:// แแแ แแแแขแ แแแแแ แแก แแแแคแแแฃแ แแชแแแแแ. - แแแแงแแแแ แแแแแแแแ แกแแ แขแแคแแแแขแแแแกแแแ docker.json-แจแ
- แแแ แแแแกแขแ แแ แแแ gitlab แชแแแแแแแจแ CI / CD แแแ แแแแขแ แแแจแ แกแแ แแแคแแแแขแแแแก แจแแแแแ แกแแ. แแแฌแแ แแ .gitlab-ci.yml แกแแ แแแขแ แแแแแแแแแแกแแแแก.
แแ แแแฉแแแแแ แงแแแแ แแแแแแแแก Debian แแแแแฌแแแแแแก แจแแกแแฎแแ.
แกแแฌแงแแกแ VPS แแแงแแแแแ
แแฅ แแฅแแแ แแงแแแแ แแแแแแแแแ, แแแแแแแแแ
Screenshot
แแแ แแแแ, แแแแแแกแขแแแแ แแ ufw firewall:
apt-get update && apt-get install ufw
แฉแแ แแแ แแแแฃแแแกแฎแแแแ แแแแแขแแแ: แแแแแแแแ แงแแแแ แจแแแแแแแแแ แแแแจแแ แ, แแแฃแจแแแ แงแแแแ แแแแแแแแ แแแแจแแ แ:
ufw default deny incoming
ufw default allow outgoing
แแแแจแแแแแแแแแแ: แแ แแแแแแแฌแงแแแ แแแแจแแ แแก แแแจแแแแ ssh-แแก แกแแจแฃแแแแแแ:
ufw allow OpenSSH
แแแแแแ แกแแแขแแฅแกแแ: แแแ แขแแ แแแแจแแ แแก แแแจแแแแ: ufw allow 12345, แกแแแแช 12345 แแ แแก แแแ แขแแก แแแแแ แ แแ แกแแ แแแกแแก แกแแฎแแแ. แฃแแ แงแแคแ: ufw deny 12345
แฉแแ แแแ firewall:
ufw enable
แฉแแแ แแแแแแแแแแ แ แกแแกแแแแแ แแ แจแแแแแแแ แ แฎแแแแฎแแ ssh-แแก แกแแจแฃแแแแแแ.
แแแแแแขแแ แแแแฎแแแ แแแแแ, แแแแแแญแแ แแแก แแแ แแแ แแ แแแแแแขแแ แแแ แกแฃแแ แฏแแฃแคแจแ.
apt-get install sudo
adduser scoty
usermod -aG sudo scoty
แจแแแแแแ, แแแแแแก แแแฎแแแแแ, แฃแแแ แแแแแ แแแ แแแ แแแแก แจแแกแแแ. แแแแกแแแแแก แแแแแแแแ แแ แแฅแแแแ ssh แแแกแแฆแแแ แกแแ แแแ แแ:
ssh-copy-id [email protected]
แกแแ แแแ แแก IP แฃแแแ แแงแแก แแฅแแแแ. แแฎแแ แจแแแชแแแแ แจแแฎแแแแแ แแแ แ แจแแฅแแแแแ แแแแฎแแแ แแแแแก แฅแแแจ, แแแ แแแแก แจแแงแแแแ แแฆแแ แแญแแ แแแแแ. แจแแแแแแ, แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แแแจแ, แจแแชแแแแแ แจแแแแแแ:
sudo nano /etc/ssh/sshd_config
แแแ แแแแก แจแแกแแแแก แแแแแ แแแ:
PasswordAuthentication no
แแแแแขแแแ แแแ sshd แแแแแแ:
sudo systemctl reload sshd
แแฎแแ, แแฃ แแฅแแแ แแ แแแแแ แกแฎแแ แชแแแแแแ แจแแกแแแแก, แ แแแแ แช root, แแก แแแ แแแฎแแ แฎแแแแ.
แจแแแแแแ, แฉแแแ แแแแแกแขแแแแ แแแ dockerd-แก, แแ แแ แแฆแแฌแแ แแ แแชแแกแก แแฅ, แ แแแแแ แงแแแแแคแแ แ แฃแแแ แจแแแซแแแแ แจแแแชแแแแแก, แแแฐแงแแแแ แแแฃแแก แแคแแชแแแแฃแ แแแแกแแแขแแ แแ แแแแแ แแ แแแแแ แแก แแแงแแแแแแก แแแแแฏแแแ แแฅแแแแก แแแ แขแฃแแแฃแ แแแแฅแแแแแ:
แกแแ แแแคแแแแขแแก แแแแแ แแชแแ
แแแแแ แแแแแแแก แแแกแขแแแชแแฃแ แแ แแแกแแแแแขแ แแแแแแแ แกแแญแแ แแ แแแจแแคแ แฃแแ TLS แแแแจแแ แ. แแแแกแแแแแก แแฅแแแ แฃแแแ แแฅแแแแแ แกแแ แแแคแแแแขแ แแ แแแกแแฆแแแ, แ แแแแแแช แฃแแแ แแแแแ แแ แแแ แแ แแแแแแขแแแแ แแฅแแแแก แแแกแขแแแชแแฃแ แแแฌแงแแแแแแแแแ. แแแฐแงแแแแ แแแกแขแ แฃแฅแชแแแแจแ แแแชแแแฃแ แแแแแฏแแแก แแแแแ แแก แแคแแชแแแแฃแ แแแแกแแแขแแ:
แแแแแ แแก แแแงแแแแแ
Docker daemon-แแก แแแจแแแแแก แกแแ แแแขแจแ แแแแแฆแแ -H df:// แแคแชแแ, แแก แแแ แแแแขแ แ แแแแฉแแแแแแก, แ แแแแ แฐแแกแขแแ แจแแแซแแแแ แแแแแ แแแแแแแก แแแแขแ แแแ.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
แจแแแแแแ, แจแแฅแแแแแ แแแ แแแแขแ แแแแก แคแแแแ, แแฃ แแก แฃแแแ แแ แแ แกแแแแแก แแ แแแแงแแแแ แแแ แแแแขแ แแแ:
/etc/docker/docker.json
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2376"
],
"labels": [
"is-our-remote-engine=true"
],
"tls": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server.pem",
"tlskey": "/etc/docker/key.pem",
"tlsverify": true
}
2376 แแแ แขแแ แแแแจแแ แแแแก แแแจแแแแ:
sudo ufw allow 2376
แแแแแขแแแ แแแ dockerd แแฎแแแ แแแ แแแแขแ แแแแ:
sudo systemctl daemon-reload && sudo systemctl restart docker
แแแแแ แจแแแแแแฌแแแ:
sudo systemctl status docker
แแฃ แงแแแแแคแแ แ แแฌแแแแแ, แแแจแแ แแแแแแฉแแแ, แ แแ แฉแแแ แฌแแ แแแขแแแแ แแแแแแแแคแแแฃแ แแ แแ แแแแแ แ แกแแ แแแ แแ.
แฃแฌแงแแแขแ แแแฌแแแแแแก แแแงแแแแแ gitlab-แแ
แแแแกแแแแแก, แ แแ gitalab-แแก แแฃแจแแแแ แจแแซแแแก แแ แซแแแแแแแแก แจแแกแ แฃแแแแ แแแกแขแแแชแแฃแ แแแแแ แฐแแกแขแแ, แแฅแแแ แฃแแแ แแแแแฌแงแแแขแแ แ แแแแ แแ แกแแ แจแแแแแฎแแ แกแแ แแแคแแแแขแแแ แแ แแแกแแฆแแแ แแแจแแคแ แฃแแ แแแแจแแ แแกแแแแก dockerd-แแแ. แแ แแแแแแฌแงแแแขแ แแก แแ แแแแแแ แฃแแ แแแแ แฉแแฌแแ แ แชแแแแแแแแ gitlbab แแแ แแแแขแ แแแจแ:
แกแแแแแแ แแก แกแแแแฃแ แ
แฃแแ แแแแ แแแแแแขแแแแ แกแแ แแแคแแแแขแแแแก แแ แแแกแแฆแแแแก แจแแแแแ แกแ แแแขแแก แกแแจแฃแแแแแแ: cat ca.pem
. แแแแแแแแ แแ แแ แฉแแกแแแ แชแแแแ แแแแจแแแแแแแแแจแ.
แแแแแ แแแแฌแแ แแ แกแแ แแแขแ แแแแแแแแแแกแแแแก gitlab-แแก แกแแจแฃแแแแแแ. แแแแแงแแแแแฃแแ แแฅแแแแ docker-in-docker (dind) แกแฃแ แแแ.
.gitlab-ci.yml
image:
name: docker/compose:1.23.2
# ะฟะตัะตะฟะธัะตะผ entrypoint , ััะพะฑั ัะฐะฑะพัะฐะปะพ ะฒ dind
entrypoint: ["/bin/sh", "-c"]
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
services:
- docker:dind
stages:
- deploy
deploy:
stage: deploy
script:
- bin/deploy.sh # ัะบัะธะฟั ะดะตะฟะปะพั ััั
แแแแแแแแแแก แกแแ แแแขแแก แจแแแแแ แกแ แแแแแแขแแ แแแแ:
bin/deploy.แจ
#!/usr/bin/env sh
# ะะฐะดะฐะตะผ ััะฐะทั, ะตัะปะธ ะฒะพะทะฝะธะบะปะธ ะบะฐะบะธะต-ัะพ ะพัะธะฑะบะธ
set -e
# ะัะฒะพะดะธะผ, ัะพ , ััะพ ะดะตะปะฐะตะผ
set -v
#
DOCKER_COMPOSE_FILE=docker-compose.yml
# ะัะดะฐ ะดะตะฟะปะพะธะผ
DEPLOY_HOST=185.241.52.28
# ะััั ะดะปั ัะตััะธัะธะบะฐัะพะฒ ะบะปะธะตะฝัะฐ, ัะพ ะตััั ะฒ ะฝะฐัะตะผ ัะปััะฐะต - gitlab-ะฒะพัะบะตัะฐ
DOCKER_CERT_PATH=/root/.docker
# ะฟัะพะฒะตัะธะผ, ััะพ ะฒ ะบะพะฝัะตะนะฝะตัะต ะฒัะต ะธะผะตะตััั
docker info
docker-compose version
# ัะพะทะดะฐะตะผ ะฟััั (ัะตะนัะฐั ัะฐะฑะพัะฐะตะผ ะฒ ะบะปะธะตะฝัะต - ะฒะพัะบะตัะต gitlab'ะฐ)
mkdir $DOCKER_CERT_PATH
# ะธะทัะผะฐะตะผ ัะพะดะตัะถะธะผะพะต ะฟะตัะตะผะตะฝะฝัั
, ะฟัะธ ััะพะผ ัะดะฐะปัะตะผ ะปะธัะฝะธะต ัะธะผะฒะพะปั ะดะพะฑะฐะฒะปะตะฝะฝัะต ะฟัะธ ัะพั
ัะฐะฝะตะฝะธะธ ะฟะตัะตะผะตะฝะฝัั
.
echo "$CA_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/ca.pem
echo "$CERT_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/cert.pem
echo "$KEY_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/key.pem
# ะฝะฐ ะฒััะบะธะน ัะปััะฐะน ะดะฐะตะผ ัะพะปัะบะพ ัะธัะฐัั
chmod 400 $DOCKER_CERT_PATH/ca.pem
chmod 400 $DOCKER_CERT_PATH/cert.pem
chmod 400 $DOCKER_CERT_PATH/key.pem
# ะดะฐะปะตะต ะฝะฐัะธะฝะฐะตะผ ัะถะต ัะฐะฑะพัะฐัั ั ัะดะฐะปะตะฝะฝัะผ docker-ะดะตะผะพะฝะพะผ. ะกะพะฑััะฒะตะฝะฝะพ, ัะฐะผ ะดะตะฟะปะพะน
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://$DEPLOY_HOST:2376
# ะฟัะพะฒะตัะธะผ, ััะพ ะบะพะฝะฝะตะบัะธััั ะฒัะต ััะฟะตัะฝะพ
docker-compose
-f $DOCKER_COMPOSE_FILE
ps
# ะปะพะณะธะฝะธะผัั ะฒ docker-ัะตะณะธัััะธ, ััั ะผะพะถะตัะต ัะบะฐะทะฐัั ัะฒะพะน "ะผะตััะฝัะน" ัะตะณะธัััะธ
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
docker-compose
-f $DOCKER_COMPOSE_FILE
pull app
# ะฟะพะดะฝะธะผะฐะตะผ ะฟัะธะปะพะถะตะฝะธะต
docker-compose
-f $DOCKER_COMPOSE_FILE
up -d app
แแแแแแ แ แแ แแแแแแ แแงแ แกแแ แแแคแแแแขแแแแก แจแแแแแแกแแก แแแ แแแแฃแ แ แคแแ แแแ โแแแแแขแแแโ gitlab CI / CD แชแแแแแแแแแแ. แแแ แแแแแ แแแแ, แ แแขแแ แแ แแฃแจแแแแแ แแแแจแแ แ แแแกแขแแแชแแฃแ แฐแแกแขแแแ. แแแแฎแแแ sudo journalctl -u docker log-แก แฐแแกแขแแ, แจแแชแแแแแ แฎแแแแก แฉแแแแ แแแแแแกแแก. แแ แแแแแแฌแงแแแขแ แแแแแฎแ แ แ แแ แแก แแแแแแแ แจแแแแฎแฃแแ แชแแแแแแแจแ, แแแแกแแแแแก แจแแแแซแแแแ แแแฎแแ แแแขแ -A $DOCKER_CERT_PATH/key.pem. แแแซแแแแก แจแแชแแแแ tr -d 'r' แกแแแแแแแก แแแแฆแแแแก แแแแแขแแแแ.
แแแ แแ แแแแกแ, แแฅแแแ แจแแแแซแแแแ แแแแแแขแแ แแแแแจแแแแแก แจแแแแแแแ แแแแชแแแแแ แกแแ แแแขแจแ แแฅแแแแ แจแแฎแแแฃแแแแแกแแแแแ . แแฅแแแ แจแแแแซแแแแ แจแแแแแฌแแแ แกแแแฃแจแแ แแแ แกแแ แฉแแแก แกแแชแแแจแ
แฌแงแแ แ: www.habr.com