Pouze pro návštěvníky našeho blogu Získejte další 3 měsíce zdarma + 10% slevu na tříletý plán YSBLOG10
Chyťte dohodu

Co je CI/CD na Linuxovém serveru? CI/CD Pipeline v Linuxu? Výukový program pro začátečníky

CI/CD na Linuxovém serveru je postup automatizace sestavování, testování a nasazení kódu s využitím hostitelského systému Linux jako prostředí pro spouštění a doručování. Propojuje váš repozitář s procesem, který průběžně integruje změny, spouští testy a nasazuje artefakty do stagingového nebo produkčního prostředí s opakovatelnými skripty, silným zabezpečením a minimálními prostoji.

Průběžná integrace a průběžné doručování (CI/CD) Instalace na linuxovém serveru je jedním z nejspolehlivějších způsobů, jak rychle dodat software bez přerušení produkčního procesu. V této příručce se dozvíte, jak funguje CI/CD, jaké nástroje si vybrat, jak jej nastavit na Ubuntu nebo podobných distribucích a jak jej bezpečně a opakovaně nasadit s nulovými prostoji.

Ať už nasazujete webovou aplikaci, API nebo mikroslužbu, tento návod pro začátečníky vám shrne vše potřebné. 15 + roky praktické zkušenosti s hostingem a DevOps do jasných kroků. Zaměříme se na praktické příklady s využitím GitLab CI a Dockeru s poznámkami k Jenkins a GitHub Actions, abyste si mohli osvojit nejvhodnější pipeline pro váš stack a tým.

Co je CI/CD na Linuxovém serveru?

Co je CI/CD na Linuxovém serveru?

CI/CD je DevOps pipeline, který automatizuje software. dodání od commitu do produkčního prostředí. Na linuxovém serveru to znamená, že vaše sestavení, testy a nasazení běží na linuxovém hostiteli (VM, VPS nebo bare metal) pomocí nástrojů jako GitLab CI, GitHub Actions nebo Jenkins. Výsledkem jsou rychlejší vydání, konzistentní prostředí a méně lidských chyb.

Jak funguje CI/CD: Od potvrzení (commit) k nasazení (deployment)

Průběžná integrace (CI)

CI se spouští při každém commitu nebo pull/merge požadavku. Pipeline instaluje závislosti, lintuje kód, spouští unit/integrační testy a sestavuje artefakty nebo obrazy Dockeru. Cílem je včas odhalit defekty a udržet hlavní větev vždy nasaditelnou.

Průběžné dodávání nebo nasazení (CD)

CD posouvá testované sestavení do fáze testování nebo produkce s řízeným schvalováním. „Dodání“ obvykle končí v kroku ručního schválení. „Nasazení“ plně automatizuje vydání do produkce. V Linuxu CD často používá SSH, Docker, systemd a Nginx pro stabilní a opakovatelné zavádění.

Typické fáze CI/CD pipeline

  • Zdroj: Kód odeslán do Gitu (GitHub, GitLab, Bitbucket).
  • Postava: Kompilace nebo zabalení; sestavení imagí Dockeru; vytvoření artefaktů.
  • Test: Spusťte skenování jednotek, integrace a zabezpečení (SAST/DAST).
  • Uvolnění: Označovat a odesílat obrazy do registru; podepisovat artefakty.
  • Nasazení: Aktualizace služeb na linuxovém serveru; spuštění migrací.
  • Ověřit: Kouřové testy, kontroly stavu a monitorovací výstrahy.

Výběr CI/CD stacku v Linuxu

Akce GitHubu vs. GitLab CI vs. Jenkins

  • Akce GitHubu: Nativní pro GitHub, snadné akce na tržišti, skvělé pro open-source a malé týmy. Podporovány jsou samostatně hostované Linuxové běžce.
  • GitLab CI: Iintegrované problémy, schválení MR, registr kontejnerů a prostředí. GitLab Runner na Linuxu je jednoduchý a škálovatelný.
  • Jenkins: Vysoce přizpůsobitelný, rozsáhlý ekosystém pluginů, ideální pro komplexní podnikové procesy. Vyžaduje více péče o zabezpečení a údržbu.

Mezi další možnosti patří CircleCI, Drone CI a Argo CD (pro GitOps/Kubernetes). Pokud hostujete své vlastní běhové moduly na linuxovém serveru, ujistěte se, že jsou izolované pomocí Dockeru, chráněné firewallem a aktualizované.

Předpoklady: Příprava Linuxového serveru

Základní nastavení

  • OS: Ubuntu 22.04+ nebo Debian 12+ (stabilní, široce podporovaný).
  • uživatelé: Vytvořte uživatele bez oprávnění root pro nasazení pomocí sudo pro řízené úlohy.
  • Sítě: Konfigurace statické IP adresy A/AAAA DNS záznamy a otevírat pouze požadované porty (80/443/22).
  • TLS: Pro HTTPS použijte certifikáty Let's Encrypt (Certbot).
  • Skladování: Pokud je to možné, oddělte svazky pro protokoly, Docker a zálohy.
# Create deploy user and harden SSH
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo mkdir -p /home/deploy/.ssh && sudo chmod 700 /home/deploy/.ssh
# Add your public key to /home/deploy/.ssh/authorized_keys
sudo apt update && sudo apt install -y ufw fail2ban

# Basic firewall
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

Nainstalujte Docker, Nginxa inženýrské sítě

sudo apt install -y docker.io docker-compose-plugin nginx certbot python3-certbot-nginx jq
sudo usermod -aG docker deploy
sudo systemctl enable --now docker nginx
sudo certbot --nginx -d example.com -d www.example.com

Docker standardizuje prostředí, Nginx slouží jako reverzní proxy a systemd manageživotních cyklů služeb. Toto trio je osvědčeným základem pro spolehlivé nasazení na Linuxu.

Podrobný návod: Jednoduchý CI/CD pipeline v Linuxu (GitLab CI + Docker)

Tento příklad vytvoří obraz Dockeru, odešle ho do registru a nasadí ho na server Linux pomocí... SSHStejný vzorec upravte pro akce GitHubu nebo Jenkins.

Ukázkový soubor Dockerfile

# Dockerfile
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:stable-alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
HEALTHCHECK CMD wget -qO- http://localhost/ > /dev/null || exit 1

.gitlab-ci.yml

stages:
  - test
  - build
  - deploy

variables:
  IMAGE_NAME: registry.gitlab.com/namespace/project
  DOCKER_DRIVER: overlay2

test:
  image: node:20-alpine
  stage: test
  script:
    - npm ci
    - npm test -- --ci

build:
  image: docker:24.0.6
  stage: build
  services:
    - docker:24.0.6-dind
  script:
    - docker build -t "$IMAGE_NAME:$CI_COMMIT_SHA" .
    - docker push "$IMAGE_NAME:$CI_COMMIT_SHA"
    - docker tag "$IMAGE_NAME:$CI_COMMIT_SHA" "$IMAGE_NAME:latest"
    - docker push "$IMAGE_NAME:latest"
  only:
    - main

deploy_production:
  image: alpine:3.19
  stage: deploy
  before_script:
    - apk add --no-cache openssh-client
  script:
    - |
      ssh -o StrictHostKeyChecking=no deploy@your-server-ip '
        set -e
        docker pull '$IMAGE_NAME':latest
        docker compose -f /opt/app/docker-compose.yml up -d --no-deps --build app
        docker image prune -f
      '
  only:
    - tags
    - main

docker-compose.yml na serveru

version: "3.9"
services:
  app:
    image: registry.gitlab.com/namespace/project:latest
    restart: always
    networks: [web]
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://localhost || exit 1"]
    labels:
      - traefik.enable=false
networks:
  web: {}

Nginx Reverzní proxy (příklad)

server {
    listen 80;
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_read_timeout 60s;
    }

    access_log /var/log/nginx/app_access.log;
    error_log /var/log/nginx/app_error.log;
}

Navažte svůj kontejner na 127.0.0.1:8080 (nebo síť Docker) a nechte Nginx zacházet s SSL a HTTP/2 na okraji sítě. Toto oddělení zjednodušuje obnovu certifikátů a zlepšuje výkon.

Nasazení a vrácení zpět bez výpadků

Modrozelené nebo průběžné aktualizace

  • Modrozelená: Spusťte dva identické zásobníky (modrý a zelený). Přepněte provoz pomocí Nginx když je zelená zdravá, ponechte modrou jako návrat k původnímu stavu.
  • Válcování: Kontejnery postupně nahrazujte pomocí kontrol stavu. Funguje dobře s replikami Docker Compose nebo orchestrací (Swarm/K8s).
  • Kanárek: Přesměrujte malé procento provozu na novou verzi a poté, pokud metriky vypadají dobře, postup zvyšte.

Bezpečné migrace databází

  • Používejte zpětně kompatibilní migrace (vzor rozbalení-smlouvání).
  • Před přepnutím provozu spusťte migrace jako samostatnou úlohu CI/CD.
  • Zálohujte databázi a procvičte si její obnovu. Automatizujte vytváření snapshotů.

Nejlepší bezpečnostní postupy pro CI/CD v Linuxu

  • Správa tajemství: Tokeny obchodu, SSH klíče a přihlašovací údaje registru v tajných klíčích/proměnných CI/CD. Nikdy neposkytujte tajné klíče Gitu.
  • Nejmenší oprávnění: Omezte uživatele pro nasazení a v případě potřeby používejte sudoers s přesnými příkazy. Omezte odchozí síťový provoz od běžců.
  • Izolujte běžce: Pro samoobslužné spouštěče používejte vyhrazené virtuální počítače nebo kontejnery s Linuxem. Nespouštějte nedůvěryhodné žádosti o přístupnost na produkčních hostitelích.
  • Pravidelně opravujte: Automatizujte aktualizace zabezpečení pro balíčky a kontejnery operačního systému. Často obnovujte základní obrazy.
  • Zabezpečení obrazu: Naskenujte obrázky (Trivy, Grype), podepište je (Cosign) a připněte data pro deterministické nasazení.
  • SSH Hygiena: Použijte klíče Ed25519, zakažte ověřování heslem a pro přístup k bastionu zvažte ProxyJump nebo VPN.

Monitorování, protokolování a řízení nákladů

  • Monitoring: Použijte Prometheus + Grafana nebo lehký node_exporter pro CPU, RAM, disk a metriky aplikací.
  • Protokolování: Centralizujte pomocí stacku ELK/Elastic nebo Loki + Promtail. Uchovávejte protokoly na oddělených úložištích a agresivně je rotujte.
  • Zdravotní kontroly: Propojení koncových bodů stavu s Nginx a kouřové testy CI. Upozornění na hodnoty jiné než 200 a špičky latence.
  • Optimalizace nákladů: Upravte velikost svého Linuxového VPS, povolte automatické prořezávání starých obrazů a archivujte artefakty po uplynutí nastavené doby.

Časté chyby, kterým je třeba se vyhnout

  • Sestavení na produkčním serveru namísto dodávání předpřipravených artefaktů nebo imagí.
  • Míchání kódu aplikace a konfigurace serveru v ad hoc skriptech (používejte infrastrukturu jako kód nebo alespoň verzované konfigurace).
  • Vynechávání testů a kontrol stavu, což vede k nefunkčním hlavním větvím a neúspěšným implementacím.
  • Pevně ​​​​kódujte tajné kódy ve skriptech; použijte proměnné CI nebo trezor.
  • Ignorování plánů na vrácení předchozích verzí; vždy zachovat předchozí obraz a Nginx konfigurace šikovná.

Vzory nastavení v reálném světě

  • Malé týmy: Akce GitHubu nebo GitLab CI s jedním běžcem Linux VPS, Dockerizovaná aplikace, Nginx proxy, noční zálohy.
  • Rostoucí startupy: Samostatně hostovaný pool GitLab Runner na Linuxu, úložiště registru a artefaktů, pracovní a produkční prostředí, modrozelená.
  • Podniky: Jenkins s linuxovými agenty, zásadami jako kódem, podepsanými artefakty, více prostředími, verzemi Canary, jednotným přihlašováním (SSO) a auditními protokoly.

Kdy zvolit spravovaný hosting nebo pomoc

Pokud se raději zaměříte na svou aplikaci, zvažte spolehlivý Linux VPS nebo managecloud od poskytovatele, který rozumí pracovním postupům CI/CD. YouStable, poskytujeme rychlé instance Linux VPS, IPv4/IPv6, Zdarma SSLa nepřetržitou podporu – ideální pro hostování aplikací Dockerized za Nginx a integraci GitHub/GitLab pipelines bez problémů.

FAQs

Jaký je rozdíl mezi CI a CD na Linuxovém serveru?

CI se zaměřuje na sestavování a testování každého commitu na linuxovém běžícím prostředí, aby byl kód vždy k dispozici. CD automatizuje doručování otestovaného kódu do stagingového nebo produkčního prostředí na linuxovém hostiteli pomocí skriptů, Dockeru, Nginxa systemd, často se schváleními a kontrolami stavu.

Které nástroje jsou nejlepší pro CI/CD v Linuxu?

Pro většinu týmů: Skvělým začátkem jsou GitHub Actions nebo GitLab CI se samostatně hostovanými Linuxovými běhovými servery. Pro komplexní procesy s vysokým počtem pluginů je Jenkins na Linuxových agentech výkonný. Registry kontejnerů, Docker a Nginx jsou společné pro všechny přístupy.

Jak mohu provést nasazení bez prostojů na Linuxu?

Používejte modrozelené nebo průběžné nasazení s kontrolami stavu. Udržujte spuštěné dvě verze a přepínejte je. Nginx Jakmile bude provoz v pořádku, přepněte provoz do nové verze a ponechte starou verzi pro okamžité vrácení zpět. U databází nejprve použijte zpětně kompatibilní migrace.

Je Docker vyžadován pro CI/CD na Linuxovém serveru?

Ne, ale Docker zjednodušuje reprodukovatelné sestavení a nasazení. Bez Dockeru můžete nasazovat služby systemd nebo virtualenv, ale budete potřebovat přísnější závislosti. managea pečlivější konfiguraci serveru pro dosažení stejné konzistence.

Jak zabezpečím kanály a tajné kódy CI/CD?

Ukládat tajné kódy do proměnných CI nebo úložiště, omezovat oprávnění běžců, zakazovat SSH Přihlašovací heslo, pravidelně aktualizujte operační systém a obrazy a skenujte závislosti a kontejnery. Podepisujte obrazy, pinujte soubory a auditujte, kdo může spouštět nasazení v produkčním prostředí.

Sdílet přes:

Sanjeet Chauhan

Sanjeet Chauhan je bloger a SEO expert, který se věnuje pomoci webovým stránkám s organickým růstem. Sdílí praktické strategie, užitečné tipy a poznatky pro zvýšení návštěvnosti, zlepšení pozic ve vyhledávání a maximalizaci online přítomnosti.

Zanechat komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

Přejděte na začátek