Shíl mé uair amháin faoi imscaradh mo thionscadail a uathoibriú. Soláthraíonn gitlab.com na huirlisí go léir le haghaidh seo, agus ar ndóigh chinn mé é a úsáid trína figuring amach agus scríobh script imscaradh beag. San Airteagal seo, roinnim mo thaithí leis an bpobal.
TL; DR
- Socraigh VPS: díchumasaigh fréamh, logáil isteach pasfhocail, suiteáil dockerd, cumraigh ufw
- Gin teastais don fhreastalaí agus don chliant Cumasaigh rialú dockerd trí soicéad tcp: bain an rogha -H fd:// ó chumraíocht an docker.
- Socraigh cosáin chuig teastais in docker.json
- Cláraigh sna hathróga gitlab sna socruithe CI / CD le hábhar na ndeimhnithe. Scríobh script .gitlab-ci.yml le himscaradh.
Taispeánfaidh mé gach sampla ar dháileadh Debian.
Socrú tosaigh VPS
Anseo cheannaigh tú sampla mar shampla ar , is é an chéad rud atá le déanamh ná do fhreastalaí a chosaint ón domhan ionsaitheach lasmuigh. Ní dhéanfaidh mé aon rud a chruthú ná a dhearbhú, ní thaispeánfaidh mé ach logáil /var/log/messages mo fhreastalaí fíorúil:
Screenshot
Gcéad dul síos, suiteáil balla dóiteáin ufw:
apt-get update && apt-get install ufwCumasaigh an polasaí réamhshocraithe: bac le gach nasc isteach, ceadaigh gach nasc amach:
ufw default deny incoming
ufw default allow outgoingTábhachtach: ná déan dearmad nasc a cheadú trí ssh:
ufw allow OpenSSHIs é an chomhréir ghinearálta: Ceadaigh nasc ar an gcalafort: ceadaigh ufw 12345, áit arb é 12345 uimhir an phoirt nó ainm na seirbhíse. Séanadh: ufw shéanadh 12345
Cuir balla dóiteáin ar siúl:
ufw enableScoirimid an seisiún agus logáil isteach arís trí ssh.
Cuir úsáideoir leis, sann pasfhocal dó, agus cuir leis an ngrúpa sudo é.
apt-get install sudo
adduser scoty
usermod -aG sudo scotyAnsin, de réir an phlean, ba cheart duit logáil isteach pasfhocail a dhíchumasú. Chun é seo a dhéanamh, cóipeáil d'eochair ssh chuig an bhfreastalaí:
ssh-copy-id root@10.101.10.28Caithfidh IP an fhreastalaí a bheith agatsa. Anois déan iarracht logáil isteach faoin úsáideoir a cruthaíodh níos luaithe, ní gá duit pasfhocal a chur isteach níos mó. Ansin, sna socruithe cumraíochta, athraigh an méid seo a leanas:
sudo nano /etc/ssh/sshd_configdíchumasaigh logáil isteach pasfhocail:
PasswordAuthentication noAtosaigh an deamhan sshd:
sudo systemctl reload sshdAnois má dhéanann tú féin nó duine éigin eile iarracht logáil isteach mar fhréamh, teipfidh sé.
Ansin, déanaimid dockerd a shuiteáil, ní dhéanfaidh mé cur síos ar an bpróiseas anseo, toisc gur féidir gach rud a athrú cheana féin, lean an nasc chuig an láithreán gréasáin oifigiúil agus téigh trí na céimeanna a bhaineann le docker a shuiteáil ar do mheaisín fíorúil:
Giniúint Teastas
Chun an deamhan docker a rialú go cianda, tá nasc TLS criptithe ag teastáil. Chun seo a dhéanamh, ní mór duit teastas agus eochair a bheith agat a theastaíonn uait a ghiniúint agus a aistriú chuig do chianinneall. Lean na céimeanna a thugtar sna treoracha ar láithreán gréasáin oifigiúil an docker: Ba cheart gach comhad *.pem a ghintear don fhreastalaí, eadhon ca.pem, server.pem, key.pem, a chur san eolaire /etc/docker ar an bhfreastalaí.
socrú docker
Sa script tosaithe deamhan docker, bain an rogha -H df: //, insíonn an rogha seo cé acu óstach ar féidir an deamhan docker a rialú.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerdAnsin, cruthaigh comhad socruithe mura bhfuil sé ann cheana féin agus socraigh na roghanna:
/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
}Ceadaigh naisc ar phort 2376:
sudo ufw allow 2376Atosaigh dockerd le socruithe nua:
sudo systemctl daemon-reload && sudo systemctl restart dockerDéanaimis seiceáil:
sudo systemctl status dockerMá tá gach rud glas, ansin measann muid go bhfuil muid tar éis docker a chumrú go rathúil ar an bhfreastalaí.
Seachadadh leanúnach a shocrú ar gitlab
Ionas go mbeidh an t-oibrí gitalab in ann orduithe a fhorghníomhú ar óstach docker cianda, ní mór duit cinneadh a dhéanamh maidir le conas agus cén áit ar cheart teastais a stóráil agus eochair do nasc criptithe le dockerd. Réitigh mé an fhadhb seo trí scríobh chuig na hathróga sna socruithe gitlbab:
teideal spoiler
Aschuir inneachar na dteastas agus na heochrach trí cat: cat ca.pem. Cóipeáil agus greamaigh isteach i luachanna athraitheacha.
Scríobhaimis script le himscaradh trí gitlab. Bainfear úsáid as an íomhá 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 # скрипт деплоя тут
Ábhar na scripte imscartha le tuairimí:
bin/imscaradh.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
Ba í an phríomhfhadhb ná "tarraingt amach" inneachar na ndeimhnithe sa ghnáthfhoirm ó na hathróga gitlab CI/CD. Níorbh fhéidir liom a dhéanamh amach cén fáth nár oibrigh an nasc leis an gcianóstach. D'fhéach mé ar an logáil sudo journalctl -u docker ar an ósta, tá earráid leis an handshake. Chinn mé chun breathnú ar an méid atá stóráilte go ginearálta in athróga, le haghaidh seo is féidir leat a fheiceáil cat -A $DOCKER_CERT_PATH/key.pem. Sáraíodh an earráid trí bhaint an charachtair caret tr -d 'r' a chur leis.
Ina theannta sin, is féidir leat tascanna iarscaoilte a chur leis an script de do rogha féin. Is féidir leat an leagan oibre a sheiceáil i mo stór
Foinse: will.com
