เชœเซ‹ เชคเชฎเชจเซ‡ เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เชตเชพเชคเชพเชตเชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เชœเซ‡เชจเช•เชฟเชจเซเชธเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ

เชœเซ‹ เชคเชฎเชจเซ‡ เช˜เชฃเชพเช‚ เชตเชฟเชตเชฟเชง เชตเชพเชคเชพเชตเชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เชœเซ‡เชจเช•เชฟเชจเซเชธเชฎเชพเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ

เชนเซ‡เชฌเชฐ เชชเชฐ เชœเซ‡เชจเช•เชฟเชจเซเชธ เชตเชฟเชถเซ‡ เช˜เชฃเชพ เชฒเซ‡เช–เซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‡เชจเช•เชฟเชจเซเชธ เช…เชจเซ‡ เชกเซ‹เช•เชฐ เชเชœเชจเซเชŸเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชฌเชนเซ เช“เช›เชพ เชฒเซ‹เช•เซ‹ เชตเชฐเซเชฃเชตเซ‡ เช›เซ‡. เชฌเชงเชพ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชฟเชฒเซเชก เชŸเซ‚เชฒเซเชธ เชœเซ‡เชฎ เช•เซ‡ เชกเซเชฐเซ‹เชจ.เช†เชˆเช“, เชฌเชฟเชŸเชฌเช•เซ‡เชŸ เชชเชพเช‡เชชเชฒเชพเช‡เชจ, GitLab, GitHub เช•เซเชฐเชฟเชฏเชพเช“ เช…เชจเซ‡ เช…เชจเซเชฏ เชฒเซ‹เช•เซ‹ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชฌเชงเซเช‚ เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡. เชชเชฃ เชœเซ‡เชจเช•เชฟเชจเซเชธเชจเซเช‚ เชถเซเช‚?

เช†เชœเซ‡ เชธเชฎเชธเซเชฏเชพเชจเซ‹ เช‰เช•เซ‡เชฒ เช›เซ‡: เชœเซ‡เชจเช•เชฟเชจเซเชธ 2 เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชฎเชพเช‚ เช‰เชคเซเชคเชฎ เช›เซ‡ เชกเซ‹เช•เชฐ เชเชœเชจเซเชŸเซ‹เช† เชฒเซ‡เช–เชฎเชพเช‚, เชนเซเช‚ เชฎเชพเชฐเซ‹ เช…เชจเซเชญเชต เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช…เชจเซ‡ เชคเชฎเชจเซ‡ เชฌเชคเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เช† เชœเชพเชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชฎเซ‡เช‚ เช† เชธเชฎเชธเซเชฏเชพเชจเซ‹ เช‰เช•เซ‡เชฒ เช•เซ‡เชฎ เชถเชฐเซ‚ เช•เชฐเซเชฏเซ‹?

เช…เชฎเซ‡ เช•เช‚เชชเชจเซ€เชฎเชพเช‚ เชนเซ‹เชตเชพเชฅเซ€ เชธเชฟเชŸเซเชฐเซ‹เชจเชฟเชฏเชฎ เช†เชชเชฃเซ‡ เชตเชฟเชตเชฟเชง เชŸเซ‡เช•เชจเซ‹เชฒเซ‹เชœเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเชพ เชนเซ‹เชตเชพเชฅเซ€, เชฌเชฟเชฒเซเชก เชฎเชถเซ€เชจ เชชเชฐ Node.JS, Gradle, Ruby, JDK เช…เชจเซ‡ เช…เชจเซเชฏเชจเชพ เชตเชฟเชตเชฟเชง เชตเชฐเซเชเชจ เชœเชพเชณเชตเชตเชพ เชชเชกเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชตเชฐเซเชเชจ เชตเชฟเชฐเซ‹เชงเชพเชญเชพเชธ เช˜เชฃเซ€เชตเชพเชฐ เช…เชจเชฟเชตเชพเชฐเซเชฏ เชนเซ‹เชฏ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชเชฎ เช•เชนเซ€ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ nvm เช…เชจเซ‡ rvm เชœเซ‡เชตเชพ เชตเชฟเชตเชฟเชง เชตเชฐเซเชเชจ เชฎเซ‡เชจเซ‡เชœเชฐเซ‹ เช›เซ‡, เชคเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชธเชฐเชณ เชจเชฅเซ€ เชนเซ‹เชคเชพ, เช…เชจเซ‡ เช† เช‰เช•เซ‡เชฒเซ‹เชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชนเซ‹เชฏ เช›เซ‡:

  • เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชฐเชจเชŸเชพเช‡เชฎเซเชธ เชœเซ‡เชจเซ‡ เชกเซ‡เชตเชฒเชชเชฐเซเชธ เชธเชพเชซ เช•เชฐเชตเชพเชจเซเช‚ เชญเซ‚เชฒเซ€ เชœเชพเชฏ เช›เซ‡;
  • เชธเชฎเชพเชจ เชฐเชจเชŸเชพเช‡เชฎเชจเชพ เชตเชฟเชตเชฟเชง เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชตเชšเซเชšเซ‡ เชตเชฟเชฐเซ‹เชงเชพเชญเชพเชธ เช›เซ‡;
  • เชฆเชฐเซ‡เช• เชกเซ‡เชตเชฒเชชเชฐเชจเซ‡ เช˜เชŸเช•เซ‹เชจเชพ เช…เชฒเช— เชธเซ‡เชŸเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เช›เซ‡.

เชฌเซ€เชœเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชชเชฃ เช›เซ‡, เชชเชฃ เชนเซเช‚ เชคเชฎเชจเซ‡ เชคเซ‡เชจเชพ เช‰เช•เซ‡เชฒ เชตเชฟเชถเซ‡ เชœเชฃเชพเชตเซ€เชถ.

เชกเซ‹เช•เชฐเชฎเชพเช‚ เชœเซ‡เชจเช•เชฟเชจเซเชธ

เชกเซ‹เช•เชฐ เชนเชตเซ‡ เชตเชฟเช•เชพเชธเชจเซ€ เชฆเซเชจเชฟเชฏเชพเชฎเชพเช‚ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชธเซเชฅเชพเชชเชฟเชค เชฅเชˆ เช—เชฏเซเช‚ เชนเซ‹เชตเชพเชฅเซ€, เชฒเช—เชญเช— เชฌเชงเซเช‚ เชœ เชกเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชšเชฒเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชฎเชพเชฐเซ‹ เช‰เช•เซ‡เชฒ เช เช›เซ‡ เช•เซ‡ เชกเซ‹เช•เชฐเชฎเชพเช‚ เชœเซ‡เชจเช•เชฟเชจเซเชธ เชนเซ‹เชฏ เช…เชจเซ‡ เชนเซเช‚ เช…เชจเซเชฏ เชกเซ‹เช•เชฐ เช•เชจเซเชŸเซ‡เชจเชฐ เชšเชฒเชพเชตเซ€ เชถเช•เซเช‚. เช† เชชเซเชฐเชถเซเชจ เชธเซŒเชชเซเชฐเชฅเชฎ 2013 เชฎเชพเช‚ "" เชฒเซ‡เช–เชฎเชพเช‚ เชธเช‚เชฌเซ‹เชงเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹.เชกเซ‹เช•เชฐ เชนเชตเซ‡ เชกเซ‹เช•เชฐเชจเซ€ เช…เช‚เชฆเชฐ เชšเชพเชฒเซ€ เชถเช•เซ‡ เช›เซ‡".

เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชกเซ‹เช•เชฐเชจเซ‡ เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชซเชพเช‡เชฒเชจเซ‡ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. /var/run/docker.sock.

เช…เชนเซ€เช‚ เชœเซ‡เชจเช•เชฟเชจเซเชธ เชฎเชพเชŸเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ€ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡.

FROM jenkins/jenkins:lts

USER root

RUN apt-get update && 

apt-get -y install apt-transport-https 
     ca-certificates 
     curl 
     gnupg2 
     git 
     software-properties-common && 
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && 
add-apt-repository 
   "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") 
   $(lsb_release -cs) 
   stable" && 
apt-get update && 
apt-get -y install docker-ce && 
usermod -aG docker jenkins

RUN curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose 

RUN apt-get clean autoclean && apt-get autoremove โ€”yes && rm -rf /var/lib/{apt,dpkg,cache,log}/

USER jenkins

เช†เชฎ, เช†เชชเชฃเชจเซ‡ เชเช• เชกเซ‹เช•เชฐ เช•เชจเซเชŸเซ‡เชจเชฐ เชฎเชณเซเชฏเซเช‚ เชœเซ‡ เชนเซ‹เชธเซเชŸ เชฎเชถเซ€เชจ เชชเชฐ เชกเซ‹เช•เชฐ เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡.

เชฌเชฟเชฒเซเชก เชธเซ‡เชŸเช…เชช

เชฅเซ‹เชกเชพ เชธเชฎเชฏ เชชเชนเซ‡เชฒเชพ, เชœเซ‡เชจเช•เชฟเชจเซเชธเซ‡ เชคเซ‡เชจเชพ เชจเชฟเชฏเชฎเซ‹เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เชฎเซ‡เชณเชตเซ€ เชนเชคเซ€ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเชฟเชจเซเชŸเซ‡เช•เซเชธ, เชœเซ‡ เชฌเชฟเชฒเซเชก เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‡ เชฌเชฆเชฒเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

เชคเซ‹ เชšเชพเชฒเซ‹ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชœ เชเช• เช–เชพเชธ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ เชฎเซ‚เช•เซ€เช, เชœเซ‡เชฎเชพเช‚ เชฌเชฟเชฒเซเชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฌเชงเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“ เชนเชถเซ‡. เช† เชฐเซ€เชคเซ‡, เชกเซ‡เชตเชฒเชชเชฐ OPS เชจเซ‡ เชนเซ‹เชธเซเชŸ เชชเชฐ Node.JS เชจเซเช‚ เชšเซ‹เช•เซเช•เชธ เชธเช‚เชธเซเช•เชฐเชฃ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซเช‚ เช•เชนเซเชฏเชพ เชตเชฟเชจเชพ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชตเชพเชคเชพเชตเชฐเชฃ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

FROM node:12.10.0-alpine

RUN npm install yarn -g

เช† เชฌเชฟเชฒเซเชก เช‡เชฎเซ‡เชœ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ Node.JS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡. เชชเชฐเช‚เชคเซ, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเซ‹ เชคเชฎเชจเซ‡ เชธเซ‹เชจเชพเชฐ เชธเซเช•เซ‡เชจเชฐ เช‡เชจเซเชŸเชฟเช—เซเชฐเซ‡เชŸเซ‡เชก เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡ JVM เช‡เชฎเซ‡เชœเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เชถเซเช‚? เชคเชฎเซ‡ เชฌเชฟเชฒเซเชก เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เช˜เชŸเช•เซ‹ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเชตเชคเช‚เชคเซเชฐ เช›เซ‹.

FROM adoptopenjdk/openjdk12:latest

RUN apt update 
    && apt install -y 
        bash unzip wget

RUN mkdir -p /usr/local/sonarscanner 
    && cd /usr/local/sonarscanner 
    && wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip 
    && unzip sonar-scanner-cli-3.3.0.1492-linux.zip 
    && mv sonar-scanner-3.3.0.1492-linux/* ./ 
    && rm sonar-scanner-cli-3.3.0.1492-linux.zip 
    && rm -rf sonar-scanner-3.3.0.1492-linux 
    && ln -s /usr/local/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner

ENV PATH $PATH:/usr/local/sonarscanner/bin/
ENV SONAR_RUNNER_HOME /usr/local/sonarscanner/bin/

เช…เชฎเซ‡ เชฌเชฟเชฒเซเชก เชชเชฐเซเชฏเชพเชตเชฐเชฃเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‡เชจเช•เชฟเชจเซเชธเชจเซ‹ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชถเซเช‚ เชธเช‚เชฌเช‚เชง เช›เซ‡? เชœเซ‡เชจเช•เชฟเชจเซเชธ เชเชœเชจเซเชŸเซ‹ เช† เชกเซ‹เช•เชฐ เช›เชฌเซ€เช“ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เช…เช‚เชฆเชฐ เชฌเชฟเชฒเซเชก เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

stage("Build project") {
    agent {
        docker {
            image "project-build:${DOCKER_IMAGE_BRANCH}"
            args "-v ${PWD}:/usr/src/app -w /usr/src/app"
            reuseNode true
            label "build-image"
        }
    }
    steps {
        sh "yarn"
        sh "yarn build"
    }
}

เชจเชฟเชฐเซเชฆเซ‡เชถเช• agent เชฎเชฟเชฒเช•เชคเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ docker, เชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹:

  • เชคเชฎเชพเชฐเซ€ เชจเชพเชฎเช•เชฐเชฃ เชจเซ€เชคเชฟ เช…เชจเซเชธเชพเชฐ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซเช‚ เชจเชพเชฎ;
  • เชฌเชฟเชฒเซเชก เช•เชจเซเชŸเซ‡เชจเชฐ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฆเชฒเซ€เชฒเซ‹, เชœเซเชฏเชพเช‚ เช†เชชเชฃเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชตเชฐเซเชคเชฎเชพเชจ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชจเซ‡ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ€ เช…เช‚เชฆเชฐ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชคเชฐเซ€เช•เซ‡ เชฎเชพเช‰เชจเซเชŸ เช•เชฐเซ€เช เช›เซ€เช.

เช…เชจเซ‡ เชฌเชฟเชฒเซเชก เชธเซเชŸเซ‡เชชเซเชธเชฎเชพเช‚, เช†เชชเชฃเซ‡ เชกเซ‹เช•เชฐ เชฌเชฟเชฒเซเชก เชเชœเชจเซเชŸเชฎเชพเช‚ เช•เชฏเชพ เช†เชฆเซ‡เชถเซ‹ เชšเชฒเชพเชตเชตเชพ เชคเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเซ€เช เช›เซ€เช. เช† เช•เช‚เชˆเชชเชฃ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชนเซเช‚ Ansible เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชชเชฃ เชšเชฒเชพเชตเซเช‚ เช›เซเช‚.

เชจเซ€เชšเซ‡ เชนเซเช‚ เชเช• เชธเชพเชฎเชพเชจเซเชฏ Jenkinsfile เชฌเชคเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เชœเซ‡ เชเช• เชธเชฐเชณ Node.JS เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡.

def DOCKER_IMAGE_BRANCH = ""
def GIT_COMMIT_HASH = ""

pipeline { 
    options {
        buildDiscarder(
            logRotator(
                artifactDaysToKeepStr: "",
                artifactNumToKeepStr: "",
                daysToKeepStr: "",
                numToKeepStr: "10"
            )
        )
        disableConcurrentBuilds()
    }

    agent any

    stages {

        stage("Prepare build image") {
            steps {
                sh "docker build -f Dockerfile.build . -t project-build:${DOCKER_IMAGE_BRANCH}"
            }
        }

        stage("Build project") {
            agent {
                docker {
                    image "project-build:${DOCKER_IMAGE_BRANCH}"
                    args "-v ${PWD}:/usr/src/app -w /usr/src/app"
                    reuseNode true
                    label "build-image"
                }
            }
            steps {
                sh "yarn"
                sh "yarn build"
            }
        }

    post {
        always {
            step([$class: "WsCleanup"])
            cleanWs()
        }
    }

}

เชคเซ‹ เชถเซเช‚ เชฅเชฏเซเช‚?

เช† เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชนเชฒ เช•เชฐเซ€:

  • เชฌเชฟเชฒเซเชก เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸเชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซ‹ เชธเชฎเชฏ เชชเซเชฐเชคเชฟ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช˜เชŸเชพเชกเซ€เชจเซ‡ 10-15 เชฎเชฟเชจเชฟเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡;
  • เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชฟเชฒเซเชก เชตเชพเชคเชพเชตเชฐเชฃ, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชชเชฐ เชชเชฃ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡;
  • เชฌเชฟเชฒเซเชก เชŸเซ‚เชฒเซเชธเชจเชพ เชตเชฟเชตเชฟเชง เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชตเชšเซเชšเซ‡ เชคเช•เชฐเชพเชฐ เชธเชพเชฅเซ‡ เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เชจเชฅเซ€;
  • เชนเช‚เชฎเซ‡เชถเชพ เชธเซเชตเชšเซเช› เช•เชพเชฐเซเชฏเชธเซเชฅเชณ เชœเซ‡ เช…เชตเซเชฏเชตเชธเซเชฅเชฟเชค เชจ เชฐเชนเซ‡.

เช† เช‰เช•เซ‡เชฒ เชชเซ‹เชคเซ‡ เชœ เชธเชฐเชณ เช…เชจเซ‡ เชธเซเชชเชทเซเชŸ เช›เซ‡, เช…เชจเซ‡ เชคเซ‡ เชซเช•เซเชค เชซเชพเชฏเชฆเชพ เชœ เช†เชชเซ‡ เช›เซ‡. เชนเชพ, เชธเชฐเชณ เชฌเชฟเชฒเซเชก เช•เชฎเชพเชจเซเชกเซเชธ เช•เชฐเชคเชพ เชชเซเชฐเชตเซ‡เชถ เช…เชตเชฐเซ‹เชง เชฅเซ‹เชกเซ‹ เชตเชงเชพเชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเชตเซ‡ เช—เซ‡เชฐเช‚เชŸเซ€ เช›เซ‡ เช•เซ‡ เชฌเชฟเชฒเซเชก เชนเช‚เชฎเซ‡เชถเชพ เช•เชพเชฎ เช•เชฐเชถเซ‡, เช…เชจเซ‡ เชกเซ‡เชตเชฒเชชเชฐ เชคเซ‡เชฎเชจเซ€ เชฌเชฟเชฒเซเชก เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฌเชงเซเช‚ เชชเชธเช‚เชฆ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡.

เชคเชฎเซ‡ เชฎเซ‡เช‚ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ‡เชฒเซ€ เช›เชฌเซ€เชจเซ‹ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เชœเซ‡เชจเช•เชฟเชจเซเชธ + เชกเซ‹เช•เชฐเชฌเชงเชพ เชธเซเชคเซเชฐเซ‹เชค เช–เซเชฒเซเชฒเชพ เช›เซ‡ เช…เชจเซ‡ เชธเซเชฅเชฟเชค เช›เซ‡ เชฐเซเชนเชพเชฎเชฆเช—เชพเชฒเซ€เชต/เชœเซ‡เชจเช•เชฟเชจเซเชธ_เชกเซ‹เช•เชฐ.

เช† เชฒเซ‡เช– เชฒเช–เชคเซ€ เชตเช–เชคเซ‡, เชชเซเชฒเช—เช‡เชจ เชตเชกเซ‡ เชฎเชพเชธเซเชŸเชฐ เชจเซ‹เชก เชฒเซ‹เชก เช•เชฐเชตเชพเชจเซเช‚ เชŸเชพเชณเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชธเชฐเซเชตเชฐ เชชเชฐ เชเชœเชจเซเชŸเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชตเชฟเชถเซ‡ เชšเชฐเซเชšเชพ เชฅเชˆ เชนเชคเซ€. เชกเซ‹เช•เชฐ-เชชเซเชฒเช—เช‡เชจเชชเชฃ เชนเซเช‚ เชคเชฎเชจเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช† เชตเชฟเชถเซ‡ เชœเชฃเชพเชตเซ€เชถ.

เชธเซ‹เชฐเซเชธ: www.habr.com

DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐ เชงเชฐเชพเชตเชคเซ€ เชธเชพเช‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ ๐Ÿ”ฅ DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐเซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ | ProHoster