EP24 - Deploying a sample website using gitlab and gitlab-runner

Описание к видео EP24 - Deploying a sample website using gitlab and gitlab-runner

In this episode
---
Install GitLab and GitLab Runner using Docker (as a quick lab setup)
Create a sample website (Nginx) with Docker
Use a GitLab project as the website's index.html
Automatically update index.html when the project is updated

gitlab resource requirement
---
https://docs.gitlab.com/ee/install/re...
cpu*8,ram*8g

docker pull
---
docker pull gitlab/gitlab-ce
docker pull gitlab/gitlab-runner
docker pull debian:stable-slim


gitlab installation
---
https://docs.gitlab.com/ee/install/do...

cd /opt
sudo mkdir gitlab
sudo chown rui:docker gitlab
sudo chmod 2775 gitlab
cd gitlab
mkdir config logs data

```

cat > .env << EOF
GITLAB_VERSION=latest
GITLAB_HOME=/opt/gitlab
EOF

***

cat > compose.yml << EOF
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:\$GITLAB_VERSION
container_name: gitlab
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
Add any other gitlab.rb configuration here, each on its own line
external_url 'https://gitlab.example.com'
ports:
'80:80'
'443:443'
volumes:
'\$GITLAB_HOME/config:/etc/gitlab'
'\$GITLAB_HOME/logs:/var/log/gitlab'
'\$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
EOF
```
cat compose.yml | grep example
#resolve for external_url in compose.yml
echo "$(hostname -I| cut -d' ' -f1) gitlab.example.com" | sudo tee -a /etc/hosts

start gitlab instance
---
docker-compose up -d

#wait for state to become healthy
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------
gitlab /assets/wrapper Up (healthy) 22/tcp, 0.0.0.0:443 ...omit

docker-compose exec gitlab cat /etc/gitlab/initial_root_password
OacZDeW1EepyaBbCjJyesX3QdbxYr9GBEYcmn+g/KtI=


new cert for www.example.com
---
cd /opt/gitlab/
docker-compose exec gitlab bash
cd /etc/gitlab/ssl/
openssl x509 -noout -text -in gitlab.example.com.crt | grep -E "After|CN|Alternative" -A1 # no san, only valid for 1m
mkdir cert-ori
mv gitlab.example.com.* cert-ori

gitlabdomain=gitlab.example.com
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ${gitlabdomain}.key -out ${gitlabdomain}.crt -subj "/CN=${gitlabdomain}" -addext "subjectAltName = DNS:${gitlabdomain}"

openssl x509 -noout -text -in gitlab.example.com.crt | grep -Ei "subject|after" -A1 # 10y cert with san

gitlab-ctl restart && gitlab-ctl status # restart gitlab

docker cp gitlab:/etc/gitlab/ssl/gitlab.example.com.crt .
#cert for runner

webgui
---
https://gitlab.example.com
bottom left | help | gitlab version #2024-09-17 version is 17.3

create a project
---
webgui | projects | create project "proj-web1"
click (proj-web1/+) | new file index.html | myindex v0.1

proj | settings | repository | deploy tokens | runner1 | runner1 | read_repository
token= gldt-h5QvXnV6W5eNagiGWdyL


proj | build | pipeline editor (already update to latest version)

```
stages:
deploy

deploy_to_web1:
stage: deploy
script:
ssh root@${DEPLOY_SERVER} -p ${DEPLOY_PORT} "cd /var/www/html ;git pull https://${DEPLOY_USERNAME}:${DEPLOY_TOKEN}@gitlab.example.com/root/proj-web1.git "
only:
main
```

proj setting | ci/cd | variables
DEPLOY_SERVER=192.168.122.248
DEPLOY_PORT=8022
DEPLOY_USERNAME=runner1
DEPLOY_TOKEN=gldt-h5QvXnV6W5eNagiGWdyL

nginx dockerfile
---
cd /opt
sudo mkdir mynginx
sudo chown rui:docker mynginx
sudo chmod 2775 mynginx
cd mynginx


```
cat > Dockerfile << EOF
FROM debian:stable-slim
RUN apt-get update && \
apt-get install -y nginx openssh-server git curl && \
apt-get clean && \
mkdir /var/run/sshd && \
echo 'root:mypassword' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

EXPOSE 80 22

CMD ["sh", "-c", "service ssh start && nginx -g 'daemon off;'"]
EOF
```

docker build . -t mynginx
docker images

echo "docker run -d --restart always --name mynginx -p 8080:80 -p 8022:22 mynginx" > mynginx.sh
bash -x mynginx.sh

echo "mynginx" | index.html
scp -P 8022 index.html root@localhost:/var/www/html
curl localhost:8080

gitlab runner - create
---
sudo mkdir /opt/runner
sudo chown rui:docker /opt/runner
sudo chmod 2775 /opt/runner
cd /opt/runner
https://docs.gitlab.com/runner/instal...
echo "docker run -d --name gitlab-runner --restart always gitlab/gitlab-runner:latest" > runner.sh
bash -x runner.sh

docker cp /opt/gitlab/gitlab.example.com.crt gitlab-runner:/etc/gitlab-runner/certs

gitlab runner - register
---
webgui | admin | ci/cd | runner | untag runner

```copy register cmd
gitlab-runner register --url https://gitlab.example.com --token glrt-_2fUrvP-3xWxdycvXTNo
```

Комментарии

Информация по комментариям в разработке