Wolkra

Bələdçilər

VPS-də tətbiqi Docker Compose ilə yerləşdirin

VPS-də tətbiqi Docker Compose ilə yerləşdirin: Ubuntu və ya Debian-da Docker quraşdırın, compose.yaml yazın, Caddy ilə HTTPS əlavə edin, sirləri qoruyun, yeniləyin.

Yenilənib: 4 dəq oxu

VPS-də Docker Compose ilə yerləşdirmək üçün Docker Engine və Compose plaginini quraşdırın, layihə qovluğuna compose.yaml və .env faylı qoyun, docker compose up -d işlədin və HTTPS üçün qarşısına Caddy kimi reverse proxy qoyun. Bundan sonra yeniləmələr docker compose pull && docker compose up -d ilə edilir.

Bu bələdçi Ubuntu 24.04 və ya Debian 12 üzərində kiçik, lakin real stek qurur: veb tətbiq, Postgres verilənlər bazası və avtomatik HTTPS üçün Caddy.

1. Serveri hazırlayın

İlk addımları atılmış serverlə başlayın: yeniləmələr, sudo istifadəçisi, SSH açarları və firewall. Bu stek üçün 2 GB yaddaş məntiqli minimumdur.

HTTPS ilk cəhddə işləsin deyə başlamazdan əvvəl DNS qeydini serverə yönəldin:

text
app.example.com.   A      203.0.113.10        ; example address
app.example.com.   AAAA   2001:db8::10        ; example address

2. Docker Engine və Compose quraşdırın

Docker-in öz repozitoriyasından istifadə edin; distribusiya paketləri çox vaxt köhnə olur.

bash
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
sudo curl -fsSL "https://download.docker.com/linux/$ID/gpg" -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/$ID $VERSION_CODENAME stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

$ID dəyəri ubuntu və ya debian olur, ona görə də eyni sətirlər hər ikisində işləyir. Yoxlayın:

bash
sudo docker run --rm hello-world
docker compose version

İstifadəçinizə Docker-i sudo olmadan işlətməyə icazə verin (sonra çıxıb yenidən daxil olun):

bash
sudo usermod -aG docker $USER

docker qrupuna üzvlük faktiki olaraq root girişi deməkdir. Yalnız etibar etdiyiniz istifadəçiləri əlavə edin.

Qısa yol: Wolkra-dakı Docker bir kliklə tətbiqi Docker CE-ni Compose ilə birlikdə sizin üçün quraşdırır.

3. Layihənin strukturunu qurun

bash
mkdir -p ~/apps/myapp && cd ~/apps/myapp

Aydın struktur serveri aylar sonra da asan başa düşməyə kömək edir:

text
~/apps/myapp/
├── compose.yaml
├── .env            # secrets, not in git
└── Caddyfile

4. compose.yaml yazın

yaml
services:
  app:
    image: ghcr.io/example/myapp:1.4.2
    restart: unless-stopped
    env_file: .env
    environment:
      DATABASE_URL: postgres://myapp:${POSTGRES_PASSWORD}@db:5432/myapp
    depends_on:
      db:
        condition: service_healthy
    expose:
      - "3000"

  db:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_USER: myapp
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U myapp"]
      interval: 10s
      retries: 5

  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config

volumes:
  db-data:
  caddy-data:
  caddy-config:

Diqqət yetirməli məqamlar:

  • Image versiyalarını sabitləyin (1.4.2, 16) ki, yenidən başlatma heç vaxt gözlənilməz böyük versiya yeniləməsi çəkməsin.
  • Tətbiq və verilənlər bazası üçün ports deyil, expose. Onlara yalnız Compose şəbəkəsinin daxilindən çatmaq olur. Portları yalnız Caddy açır.
  • Adlı volume-lar konteynerlər yenidən yaradılanda məlumatları saxlayır.
  • Health check ilə depends_on Postgres bağlantı qəbul etməyə başlayana qədər gözləyir.

ghcr.io/example/myapp dəyərini öz image-iniz və portunuzla əvəz edin.

5. Sirləri .env faylında saxlayın

bash
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
APP_SECRET=$(openssl rand -hex 32)
EOF
chmod 600 .env

Compose ${...} əvəzləmələri üçün .env faylını layihə qovluğundan oxuyur, env_file isə onu tətbiqə ötürür. Qovluq git checkout-dursa, .env faylını .gitignore-a əlavə edin.

6. Caddy ilə HTTPS əlavə edin

Caddyfile yaradın:

text
app.example.com {
    encode zstd gzip
    reverse_proxy app:3000
}

DNS serverə yönələn və 80, 443 portları açılan kimi Caddy sertifikatı avtomatik alır və yeniləyir. Əlavə seçimlər üçün Caddy reverse proxy bələdçisinə baxın.

7. Steki işə salın

bash
docker compose up -d
docker compose ps
docker compose logs -f caddy

Caddy logda certificate obtained successfully yazanda https://app.example.com ünvanını açın.

8. Firewall-a diqqət edin

Docker UFW-dən əvvəl işləyən iptables qaydaları əlavə edir. ports: ilə açılmış porta UFW bloklandığını desə belə internetdən çatmaq olur. Təhlükəsiz qalmağın üç yolu:

  1. Yalnız reverse proxy-ni açın (yuxarıdakı kimi).
  2. Qalan hər şeyi localhost-a bağlayın: "127.0.0.1:5432:5432".
  3. Serverin qarşısında Docker-in yan keçə bilmədiyi bulud firewall-u ilə süzün. 80 və 443-ə hər yerdən, 22-yə isə yalnız öz ünvanınızdan icazə verin.

9. Problemsiz yeniləyin

compose.yaml faylında image tag-ını dəyişin, sonra:

bash
docker compose pull
docker compose up -d
docker image prune -f

Compose yalnız image-i və ya konfiqurasiyası dəyişmiş servisləri yenidən yaradır. Geri qaytarmaq üçün köhnə tag-ı yazın və up -d əmrini yenidən işlədin. Dump və bərpa tələb edən yeni Postgres böyük versiyası kimi ciddi yeniləmələrdən əvvəl snapshot çəkin.

10. Məlumatların ehtiyat nüsxəsini çıxarın

Volume-lar /var/lib/docker/volumes altında yerləşir. Verilənlər bazası üçün məntiqi dump faylları kopyalamaqdan daha təhlükəsizdir:

bash
docker compose exec -T db pg_dump -U myapp myapp | gzip > ~/backups/myapp-$(date +%F).sql.gz

Bunu hər gecə cron ilə işlədin və faylları serverdən kənara köçürün. Server səviyyəsində ehtiyat nüsxələr də kömək edir: Wolkra-da gündəlik ehtiyat nüsxələr server qiymətinin 20%-i qədərdir və 7 bərpa nöqtəsi saxlayır. Ehtiyat nüsxə strategiyası bələdçisi hamısını bir yerə toplayır.

11. Loglar və limitlər

Standart Docker logları limitsiz böyüyür. Onları /etc/docker/daemon.json faylında qlobal olaraq məhdudlaşdırın:

json
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}

Sonra sudo systemctl restart docker işlədin. Bir konteynerin digərlərini resurssuz qoymaması üçün hər servisin yaddaşını mem_limit: 512m ilə də məhdudlaşdıra bilərsiniz.

12. Açılışda avtomatik başlatma

restart: unless-stopped və aktiv Docker servisi stekin yenidən başlatmadan sonra geri qayıtmasını təmin edir. Bunu bir dəfə yoxlayın:

bash
sudo reboot
# log in again
docker compose -f ~/apps/myapp/compose.yaml ps

13. CI-dan yerləşdirin

Stek işləməyə başladıqdan sonra yerləşdirmələr avtomatik ola bilər. CI tapşırığı yeni tag ilə image build edib push edir, sonra serverə SSH ilə qoşulub bunu işlədir:

bash
cd ~/apps/myapp
sed -i 's|myapp:.*|myapp:1.4.3|' compose.yaml
docker compose pull app
docker compose up -d app

SSH açarları bələdçisində təsvir edildiyi kimi CI tapşırığına yalnız bu serverlə məhdudlaşan öz SSH açarını verin.

Bir serverdən nə vaxt kənara çıxmalı

Bir serverdə Compose ilə çox şey etmək olar. Daha çoxu lazım olduqda adi növbəti addımlar bunlardır:

Çoxlu tətbiqi veb interfeys vasitəsilə idarə etmək üçün Coolify bir kliklə tətbiqi eyni Docker təməli üzərində qurulub. Daha çox ideya Docker hostinqi səhifəsindədir.

Tez-tez verilən suallar

Docker Compose production üçün kifayətdirmi?

Bir server üçün bəli. Bir çox kiçik və orta tətbiq illərlə Compose üzərində işləyir. Orkestratora yalnız bir neçə host, avtomatik failover və ya maşınlar arasında mərhələli yeniləmələr lazım olduqda keçin.

Docker Compose üçün nə qədər böyük VPS lazımdır?

Hər konteynerin istifadə etdiyini toplayın. Postgres və Redis ilə veb tətbiq 2-4 GB yaddaşla rahat işləyir; image-ləri serverdə build edirsinizsə, bunun üçün də yer saxlayın.

Niyə UFW konteyner portlarımı bloklamır?

Docker UFW-dən əvvəl işləyən öz iptables qaydalarını əlavə edir. Portları 127.0.0.1-də açın və qarşısına reverse proxy qoyun, yaxud bulud firewall-u ilə süzün.

Image-ləri serverdə build etməliyəmmi?

Kiçik layihələr üçün bu işləyir. Təkrarlana bilən yerləşdirmələr üçün CI-da build edin, reyestrə push edin və serverdə yalnız pull edin.

Docker-i özüm quraşdırmadan keçə bilərəmmi?

Bəli. Wolkra-da server yaradarkən Docker CE bir kliklə tətbiqini seçin; o, Docker və Compose plagini quraşdırılmış halda gəlir.

Frankfurtda server işə salın

Hesab yaradın, balansı artırın və ayda €3.49-dan server işlədin, yalnız istifadə etdiyiniz saatlar üçün ödəyin. Bütün planlarda ölçülməyən trafik.