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?

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 enableNainstalujte 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.comDocker 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
- maindocker-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í.