เปเบกเบทเปเบญเบเปเบญเบเบเบดเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบฎเบฑเบเปเบซเปเปเบเบเบเบฒเบเบเบญเบเบเปเบญเบเบกเบตเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. gitlab.com เปเบซเปเปเบเบทเปเบญเบเบกเบทเบเบฑเบเบซเบกเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบตเปเบเปเบงเบเบเบงเบฒเบกเปเบกเบเบเบฒ, เปเบฅเบฐเปเบเปเบเบญเบเบเปเบญเบเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเปเบเปเบเบฐเปเบซเบเบเบเบฒเบเบกเบฑเบ, เบเบดเบเปเบฅเปเบกเบฑเบเบญเบญเบเปเบฅเบฐเบเบฝเบ script เบเบฐเบซเบเบฒเบเบเปเบญเบ. เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบเบฑเบเบเบฐเบชเบปเบเบเบฒเบเบเบญเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฑเบเบเบธเบกเบเบปเบ.
TL; DR
- เบเบฑเปเบเบเปเบฒ VPS: เบเบดเบเบเบฒเบเปเบเปเบเบฒเบเบฎเบฒเบ, เปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเบเปเบงเบเบฅเบฐเบซเบฑเบเบเปเบฒเบ, เบเบดเบเบเบฑเปเบ dockerd, เบเบฑเปเบเบเปเบฒ ufw
- เบชเปเบฒเบเปเบเบขเบฑเปเบเบขเบทเบเบชเปเบฒเบฅเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบฅเบฐเบฅเบนเบเบเปเบฒ
docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl เปเบเบตเบเปเบเปเบเบฒเบเบเบงเบเบเบธเบก dockerd เบเปเบฒเบเบเปเบญเบเบชเบฝเบ tcp: เปเบญเบปเบฒเบเบปเบงเปเบฅเบทเบญเบ -H fd:// เบญเบญเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒ docker. - เบฅเบปเบเบเบฐเบเบฝเบเปเบชเบฑเปเบเบเบฒเบเปเบเบซเบฒเปเบเบขเบฑเปเบเบขเบทเบเปเบ docker.json
- เบฅเบปเบเบเบฐเบเบฝเบเบขเบนเปเปเบเบเบปเบงเปเบ gitlab เปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ CI/CD เบเบตเปเบกเบตเปเบเบทเปเบญเปเบเบเบญเบเปเบเบขเบฑเปเบเบขเบทเบ. เบเบฝเบเบชเบฐเบเบฃเบดเบ .gitlab-ci.yml เปเบเบทเปเบญเบเบณเปเบเป.
เบเปเบญเบเบเบฐเบชเบฐเปเบเบเบเบปเบงเบขเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบเบขเบฒเบ Debian.
เบเบฒเบเบเบดเบเบเบฑเปเบ VPS เปเบเบทเปเบญเบเบเบปเปเบ
เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเปเบเปเบเบทเปเบเบปเบงเบขเปเบฒเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบเบเบตเป
เบเบฒเบ เปเปเบฒ เบเป
เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเบดเบเบเบฑเปเบ ufw firewall:
apt-get update && apt-get install ufw
เบกเบฒเปเบเบตเบเบเบฒเบเบเบณเปเบเปเบเบฐเปเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ: เบเบฅเบฑเบญเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒเบเบฑเบเปเบปเบ, เบญเบฐเบเบธเบเบฒเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเบญเบญเบเบเบฑเบเปเบปเบ:
ufw default deny incoming
ufw default allow outgoing
เบชเบดเปเบเบชเปเบฒเบเบฑเบ: เบขเปเบฒเบฅเบทเบกเบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบเบทเปเบญเบกเบเปเปเบเปเบฒเบ ssh:
ufw allow OpenSSH
syntax เบเบปเปเบงเปเบเบกเบตเบเบฑเปเบเบเบตเป: เบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบเบทเปเบญเบกเบเปเปเปเบเบเบเบญเบ: ufw เบญเบฐเบเบธเบเบฒเบเปเบซเป 12345, เบเปเบญเบเบเบตเป 12345 เปเบกเปเบเบเบปเบงเปเบฅเบเบเบญเบเบซเบผเบทเบเบทเปเบเบญเบเบเปเบฅเบดเบเบฒเบ. เบเบฐเบเบดเปเบชเบ: ufw เบเบฐเบเบดเปเบชเบ 12345
เปเบเบตเบเปเบเบงเป:
ufw enable
เบเบงเบเปเบฎเบปเบฒเบญเบญเบเบเบฒเบเบเบญเบเบเบฐเบเบธเบกเปเบฅเบฐเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเบเปเบฒเบ ssh.
เปเบเบตเปเบกเบเบนเปเปเบเป, เบกเบญเบเบฅเบฐเบซเบฑเบเบเปเบฒเบเปเบซเปเบฅเบฒเบง, เปเบฅเบฐเปเบเบตเปเบกเบฅเบฒเบงเปเบเบปเปเบฒเปเบเปเบเบเบธเปเบก sudo.
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 daemon:
sudo systemctl reload sshd
เปเบเบเบฑเบเบเบธเบเบฑเบเบเปเบฒเบซเบฒเบเบงเปเบฒเบเปเบฒเบเบซเบผเบทเบเบปเบเบญเบทเปเบเบเบฐเบเบฒเบเบฒเบกเปเบเบปเปเบฒเบชเบนเปเบฅเบฐเบเบปเบเปเบเบฑเบเบเบนเปเปเบเปเบฎเบฒเบ, เบกเบฑเบเบเบฐเบเปเปเปเบฎเบฑเบเบงเบฝเบ.
เบเปเปเปเบ, เบเบดเบเบเบฑเปเบ dockerd, เบเปเบญเบเบเบฐเบเปเปเบญเบฐเบเบดเบเบฒเบเบเบฐเบเบงเบเบเบฒเบเบขเบนเปเบเบตเปเบเบตเป, เปเบเบฒเบฐเบงเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฝเบเปเบเบเปเบเป, เบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเปเบงเบฑเบเปเบเบเปเบเบฒเบเบเบฒเบเปเบฅเบฐเบเปเบฒเบเบเบฑเปเบเบเบญเบเบเบญเบเบเบฒเบเบเบดเบเบเบฑเปเบ docker เปเบเปเบเบทเปเบญเบ virtual เบเบญเบเบเปเบฒเบ:
เบเบฒเบเบชเปเบฒเบเปเบเบขเบฑเปเบเบขเบทเบ
เปเบเบทเปเบญเบเบงเบเบเบธเบก docker daemon เบเบฒเบเปเบฅเบเบฐเปเบ, เบเปเบฒเปเบเบฑเบเบเปเบญเบเบกเบตเบเบฒเบเปเบเบทเปเบญเบกเบเปเป TLS เบเบตเปเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเปเบงเป. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบกเบตเปเบเบขเบฑเปเบเบขเบทเบเปเบฅเบฐเบเบฐเปเบ, เปเบเบดเปเบเบเปเบญเบเบเบทเบเบชเปเบฒเบเปเบฅเบฐเปเบญเบเปเบเบซเบฒเปเบเบทเปเบญเบเบซเปเบฒเบเปเบเบชเบญเบเบซเบผเบตเบ. เบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบฑเปเบเบเบญเบเบเบตเปเปเบเปเบฅเบฐเบเบธเปเบงเปเปเบเบเปเบฒเปเบเบฐเบเปเบฒเบขเบนเปเปเบเปเบงเบฑเบเปเบเบเป docker เบขเปเบฒเบเปเบเบฑเบเบเบฒเบเบเบฒเบ:
เบเบฑเปเบเบเปเบฒ dockerd
เปเบเบชเบฐเบเบฃเบดเบเปเบเบตเบ docker daemon, เบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบปเบงเปเบฅเบทเบญเบ -H df://, เบเบปเบงเปเบฅเบทเบญเบเบเบตเปเบเปเบฒเบเบปเบเบงเปเบฒ host docker daemon เบชเบฒเบกเบฒเบเบเบงเบเบเบธเบกเปเบเป.
# 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
เบเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบ "เบชเบตเบเบฝเบง", เบเบงเบเปเบฎเบปเบฒเบเบดเบเบฒเบฅเบฐเบเบฒเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเปเบเบเปเบฒ docker เบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเปเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ.
เบเบฑเปเบเบเปเบฒเบเบฒเบเบเบฑเบเบชเบปเปเบเบขเปเบฒเบเบเปเปเปเบเบทเปเบญเบเปเบ gitlab
เปเบเบทเปเบญเปเบซเปเบเบฐเบเบฑเบเบเบฒเบ Gitalaba เบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเบฒเบชเบฑเปเบเบขเบนเปเปเบเปเบฎเบ Docker เบซเปเบฒเบเปเบเบชเบญเบเบซเบผเบตเบ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฑเบเบชเบดเบเปเบเบงเบดเบเบตเบเบฒเบเปเบฅเบฐเบเปเบญเบเบเบตเปเบเบฐเปเบเบฑเบเปเบเบขเบฑเปเบเบขเบทเบเปเบฅเบฐเบเบธเบเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบตเปเบเบทเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบเบฑเบ Dockerd. เบเปเบญเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบเบเบเบฝเบเปเบเปเปเบเบตเปเบกเบชเบดเปเบเบเปเปเปเบเบเบตเปเปเบชเปเบเบปเบงเปเบเปเบเบเบฒเบเบเบฑเปเบเบเปเบฒ gitlbab:
เบเบทเป Spoiler
เบเบฝเบเปเบเปเบญเบญเบเปเบเบทเปเบญเปเบเบเบญเบเปเบเบขเบฑเปเบเบขเบทเบเปเบฅเบฐเบฅเบฐเบซเบฑเบเบเปเบฒเบ cat: 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.sh
#!/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. เบเปเบญเบเบเปเปเบชเบฒเบกเบฒเบเบเบดเบเปเบเปเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเปเบกเปเบเปเบฒเบเบเบฒเบเปเบเบเบถเปเบเบเปเปเปเบฎเบฑเบเบงเบฝเบ. เบเปเบฝเบงเบเบฑเบเปเบเบปเปเบฒเบเบฒเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบเบดเปเบ log sudo journalctl -u docker, เบกเบตเบเปเปเบเบดเบเบเบฒเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบฑเบเบกเบท. เบเปเบญเบเบเบฑเบเบชเบดเบเปเบเปเบเบดเปเบเบชเบดเปเบเบเบตเปเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบเบเบปเปเบงเปเบเปเบเบเบปเบงเปเบ; เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบเบเบเบตเป: cat -A $DOCKER_CERT_PATH/key.pem. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเปโเปเบญเบปเบฒโเบเบฐโเบเบฐโเบเบงเบฒเบกโเบเบดเบโเบเบฒเบโเปเบเบโเบเบฒเบโเปเบเบตเปเบกโเบเบฒเบโเปเบเบโเบเปเบฒเบโเบเบญเบโเบเบปเบงโเบญเบฑเบโเบชเบญเบ carriage tr -d 'r'.
เบเปเปเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเปเบกเบงเบฝเบเบเบฒเบเบซเบผเบฑเบเบเบฒเบเบเปเบญเบเบเบปเบงเปเบซเปเบเบฑเบเบชเบฐเบเบฃเบดเบเบเบฒเบกเบเบฒเบเบเบฑเบเบชเบดเบเปเบเบเบญเบเบเปเบฒเบ. เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบชเบฐเบเบฑเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเบเบญเบเบเปเบญเบ
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com