Блогқа оралу
DevOps·2026 ж. 11 наурыз·Sayan Roor

Толық нұсқаулық: Docker, Nginx және SSL арқылы веб-қосымшаны продакшен серверге орналастыру

VPS-ке веб-қосымшаны орналастыру бойынша қадамдық нұсқаулық: Docker Compose, Nginx reverse proxy, Let's Encrypt SSL сертификаттары, PostgreSQL, Redis, MinIO, мониторинг, бэкаптар және CI/CD.

DockerNginxDevOpsDeploymentServer
2026 жылы Docker және Nginx арқылы веб-қосымшаны серверге орналастыру

Толық нұсқаулық: Docker, Nginx және SSL арқылы веб-қосымшаны продакшен серверге орналастыру

VPS-ке қосымшаны орналастыру бойынша қадамдық нұсқаулық. Әр қадамда команда, түсіндірме және күтілетін нәтиже бар. Next.js, NestJS немесе кез келген басқа стекке жарамды.


Мазмұны

  1. Серверге қойылатын талаптар
  2. Жоба архитектурасы
  3. Серверді дайындау
  4. Docker және Nginx орнату
  5. Docker Compose: сервистерді баптау
  6. Nginx — reverse proxy ретінде
  7. Let's Encrypt SSL сертификаттары
  8. Docker ішіндегі PostgreSQL, Redis және MinIO
  9. Ортаның айнымалылары мен құпиялар
  10. Файрволды баптау
  11. Мониторинг (Prometheus + Grafana)
  12. Автоматты бэкаптар
  13. GitHub Actions арқылы CI/CD
  14. Ақауларды жою
  15. Продакшен чеклисті

1. Серверге қойылатын талаптар

Бастамас бұрын, жеткілікті ресурстары бар VPS серверіңіз бар екеніне көз жеткізіңіз.

ПараметрМинимумҰсынылады
CPU2 vCPU4 vCPU
RAM4 ГБ8 ГБ
Диск40 ГБ SSD80+ ГБ SSD
ОЖUbuntu 22.04 LTSUbuntu 24.04 LTS
Желі100 Мбит/с1 Гбит/с

Сервер жалдау:

  • Hetzner — Еуропа, $4/ай-дан
  • DigitalOcean — $6/ай-дан
  • Timeweb Cloud — ~2000 тг/ай-дан
  • PS.kz — Қазақстан, жергілікті серверлер

Сондай-ақ сізге қажет:

  • Домен (мысалы, your-domain.com) DNS-баптауларға қолжетімділікпен
  • SSH-клиент (macOS/Linux-те кіріктірілген, Windows-та — PuTTY немесе Windows Terminal)

2. Жоба архитектурасы

Деплойды бастамас бұрын, компоненттердің қалай өзара әрекеттесетінін түсіну маңызды:

        Пайдаланушы (Браузер)
              |
              v
    +-------------------+
    |  Nginx (:80/443)  |  <-- Барлық сұрауларды қабылдап, бағыттайды
    +----+----------+---+
         |          |
         v          v
   +----------+  +----------+
   |   Web    |  |   API    |
   | (Next.js)|  | (NestJS) |  <-- Docker контейнерлеріндегі қосымшалар
   |  :3000   |  |  :3001   |
   +----------+  +--+-+-+---+
                    | | |
          +---------+ | +--------+
          v           v          v
   +----------+ +----------+ +---------+
   |PostgreSQL| |  Redis   | |  MinIO  |
   |  (ДБ)    | |  (кэш)  | |(файлдар)|
   |  :5432   | |  :6379   | |  :9000  |
   +----------+ +----------+ +---------+

Әр компоненттің рөлі:

  • Nginx — интернеттен сұрауларды қабылдайды, SSL терминациясы, контейнерлерге прокси жасайды
  • Web — фронтенд (SSR/SSG), пайдаланушы көретін нәрсе
  • API — серверлік логика (аутентификация, деректер, файлдар)
  • PostgreSQL — негізгі деректер қоры
  • Redis — кэштеу және кезектер
  • MinIO — S3-үйлесімді файлдар қоймасы

3. Серверді дайындау

3.1. Серверге қосылу

3.2. Жүйені жаңарту

Барлық қауіпсіздік жаңартуларын жүктеп, орнатады. 1-3 минут уақыт алады.

3.3. Негізгі утилиталарды орнату

Не орнаттық:

  • curl, wget — файлдарды жүктеу
  • git — кодты басқару
  • htop — жүктемені бақылау
  • ufw — файрвол
  • fail2ban — парольді іріктеуден қорғау

3.4. Deploy пайдаланушысын жасау

root астында жұмыс істеу қауіпті — бір қате бүкіл серверді бұзуы мүмкін. Жеке пайдаланушы жасаймыз.

3.5. SSH кілтін баптау

3.6. SSH қорғанысы

SSH конфигурациясын ашыңыз:

Келесі жолдарды өзгертіңіз:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

SSH-ті қайта іске қосыңыз:

Маңызды: ағымдағы сессияны жаппас бұрын, жаңа терминал ашып, қосыла алатыныңызды тексеріңіз: ssh deploy@YOUR_SERVER_IP

3.7. Deploy пайдаланушысына ауысу

Осы сәттен бастап барлық командаларды deploy атынан орындаймыз:


4. Docker және Nginx орнату

4.1. Docker

Тексеру:

Күтілетін нәтиже:

Docker version 27.x.x, build ...
Docker Compose version v2.x.x

4.2. Nginx

Тексеру:

Active: active (running) жолын көруіңіз керек.

4.3. Certbot (SSL үшін)


5. Docker Compose: сервистерді баптау

Жобаңыздың түбірінде docker-compose.prod.yml файлын жасаңыз. Бұл — барлық сервистерді сипаттайтын негізгі файл.

Ескертпе: барлық инфрақұрылымдық порттар 127.0.0.1-ге байланған — олар интернеттен тікелей қолжетімді емес, тек Nginx арқылы.


6. Nginx — reverse proxy ретінде

Nginx интернеттен сұрауларды қабылдап, оларды Docker контейнерлеріне бағыттайды. Nginx-сіз сайт домен бойынша қолжетімді болмайды.

6.1. Негізгі сайт конфигурациясы

Маңызды: конфигтерді тек HTTP-мен (80 порт) жасаңыз. SSL блоктарын certbot автоматты түрде қосады.

6.2. API конфигурациясы

6.3. Конфигтерді белсендіру

6.4. Тексеру және қайта жүктеу

Күтілетін нәтиже:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

7. Let's Encrypt SSL сертификаттары

SSL пайдаланушы мен сервер арасындағы байланысты шифрлайды. Онсыз браузер «Қауіпті сайт» ескертуін көрсетеді. Let's Encrypt тегін сертификаттар береді.

7.1. DNS баптау

Сертификаттарды алмас бұрын DNS жазбаларының дұрыс бапталғанына көз жеткізіңіз:

ТүріАтауыМәніTTL
A@YOUR_SERVER_IP3600
AwwwYOUR_SERVER_IP3600
AapiYOUR_SERVER_IP3600

Тексеру:

7.2. Сертификаттарды алу

Certbot email сұрайды және HTTP-ден HTTPS-ке бағыттауды ұсынады — «Redirect» таңдаңыз.

7.3. Автоматты жаңартуды тексеру

Күтілетін нәтиже: Congratulations, all simulated renewals succeeded

Сертификаттар әр 60 күн сайын автоматты түрде жаңартылады. Қосымша ештеңе істеу қажет емес.


8. Docker ішіндегі PostgreSQL, Redis және MinIO

8.1. Инфрақұрылымды іске қосу

Алдымен қосымша тәуелді базалық сервистерді іске қосамыз:

ДБ инициализациясы үшін 15 секунд күтіңіз:

8.2. Тексеру

Барлық 3 сервис Up (healthy) күйінде болуы керек.

8.3. MinIO баптау

MinIO Client орнатыңыз:

Қосылып, бакет жасаңыз:

8.4. Қосымшаны құрастыру және іске қосу

8.5. Деректер қорын инициализациялау

Күтілетін нәтиже: Your database is now in sync with your Prisma schema.


9. Ортаның айнымалылары мен құпиялар

9.1. Құпияларды генерациялау

Әр пароль мен құпия бірегей болуы керек. Мысалдардағы парольдерді ешқашан пайдаланбаңыз!

9.2. .env файлы

docker-compose.prod.yml файлының қасына .env файлын жасаңыз:

Қауіпсіздік: .env файлдарын ешқашан Git-ке коммит жасамаңыз. Оларды .gitignore-ға қосыңыз.


10. Файрволды баптау

Файрвол қажетті порттардан басқа бәрін бұғаттайды. Онсыз кез келген адам деректер қорыңызға тікелей қосыла алады!

Тексеру:

Күтілетін нәтиже:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere

3000, 3001, 5432, 6379, 9000 порттары сыртқа АШЫҚ ЕМЕС — олар тек Nginx арқылы қолжетімді.

fail2ban баптау

3 сәтсіз кіру әрекетінен кейін IP-мекенжай 1 сағатқа бұғатталады.


11. Мониторинг (Prometheus + Grafana)

Мониторинг міндетті емес, бірақ продакшен ортасы үшін өте ұсынылады.

11.1. Docker Compose-ға мониторинг сервистерін қосу

docker-compose.prod.yml файлына мына сервистерді қосыңыз:

11.2. Мониторингті іске қосу

11.3. Нені бақылау керек

МетрикаСипаттамасыАлерт шегі
CPUПроцессор жүктемесі> 80%
RAMЖады пайдалану> 85%
ДискДискінің толуы> 90%
PostgreSQLБелсенді қосылыстар> 80
RedisЖады пайдалану> 200 МБ
APIЖауап уақыты, 5xx қателер> 2с / > 1%

12. Автоматты бэкаптар

Ереже: қалпына келтіруді тексермесеңіз — бэкап жоқ.

12.1. Бэкап скрипті

12.2. Cron арқылы жоспарлау

Мына жолды қосыңыз:

0 3 * * * /home/deploy/backup.sh >> /home/deploy/backups/backup.log 2>&1

Бэкап күн сайын сағат 3:00-де орындалады.

12.3. Бэкаптан қалпына келтіру


13. GitHub Actions арқылы CI/CD

13.1. SSH кілтін дайындау

Серверде:

Жеке кілтті көшіріңіз.

13.2. GitHub-тағы құпиялар

Settings > Secrets and variables > Actions > New repository secret бөліміне өтіңіз

Құпия атауыМәні
DEPLOY_HOSTСервер IP-мекенжайы
DEPLOY_USERdeploy
DEPLOY_SSH_KEYЖеке кілт

13.3. GitHub Actions Workflow

.github/workflows/deploy.yml файлын жасаңыз:

Енді main-ге push жасаған сайын қосымша серверде автоматты жаңартылады.


14. Ақауларды жою

502 Bad Gateway

Nginx жұмыс істеуде, бірақ қосымша іске қосылмаған немесе құлаған.

Connection Refused

Nginx жұмыс істемейді.

Құрастыру кезінде RAM жетіспеушілігі

Docker құрастыру ~2 ГБ RAM қажет етеді. Swap қосыңыз:

Контейнер үнемі қайта іске қосылады

Жиі кездесетін себептер:

  • .env-дағы дұрыс емес айнымалылар
  • ДБ қолжетімді емес
  • Порт бос емес

Дискілік кеңістік жетіспеушілігі

Диагностика үшін пайдалы командалар


15. Продакшен чеклисті

Қауіпсіздік

  • SSH: root кіруі өшірілген, тек кілт арқылы
  • UFW: тек 22, 80, 443 порттары ашық
  • fail2ban бапталған және жұмыс істеуде
  • SSL сертификаттары орнатылған және автоматты жаңартылады
  • JWT құпиялары бірегей
  • ДБ паролі генерацияланған
  • MinIO паролі генерацияланған
  • .env файлдары Git-те жоқ

Инфрақұрылым

  • PostgreSQL жұмыс істеуде (healthcheck жасыл)
  • Redis жұмыс істеуде (healthcheck жасыл)
  • MinIO жұмыс істеуде, бакет жасалған
  • Nginx reverse proxy ретінде бапталған
  • Инфрақұрылым порттары 127.0.0.1-ге байланған

Қосымша

  • Сайт HTTPS арқылы ашылады
  • API health эндпоинтіне жауап береді
  • Аутентификация жұмыс істейді
  • Файлдарды жүктеу жұмыс істейді
  • CORS дұрыс доменге бапталған

Қызмет көрсету

  • Cron бэкап бапталған (күн сайын)
  • Сынақ қалпына келтіру жүргізілген
  • CI/CD workflow жұмыс істейді
  • Мониторинг бапталған (міндетті емес)
  • Маңызды метрикаларға алерттер орнатылған

Қорытынды

Сіз толық продакшен ортасын орналастырдыңыз:

  1. Сервер — deploy пайдаланушысымен қорғалған
  2. Docker Compose — барлық сервистер оқшауланған және қайта шығарылатын
  3. Nginx — статикалық файлдарды кэштеумен reverse proxy
  4. SSL — автоматты жаңартумен тегін Let's Encrypt сертификаттары
  5. Файрвол — тек қажетті порттар ашық
  6. Бэкаптар — ротациямен автоматты, күнделікті
  7. CI/CD — main-ге push кезінде автоматты деплой
  8. Мониторинг — Grafana арқылы метрикалар мен алерттер

Бұл архитектура дұрыс кэштеу және контейнерлерді көлденең масштабтау кезінде 10 000 RPS-ке дейін көтере алады. Сәтті деплой!

Sayan Roor

Full‑stack әзірлеуші. Next.js және TypeScript‑те өнімділік пен конверсияға фокуспен веб‑қосымшалар жасаймын.