EQVPS

როგორ განვათავსოთ Docker Compose სტეკი VPS-ზე

განათავსე მრავალკონტეინერიანი სტეკი VPS-ზე Docker Compose-ით: დაწერე docker-compose.yml, შეინახე საიდუმლოები .env-ში, აწიე ის გადატვირთვის-შემდეგ-გადაშვებით და გამოაქვეყნე მხოლოდ ის პორტები, რომლებსაც ნამდვილად გულისხმობ. copy-paste მაგალითი ვებ აპლიკაციით, მონაცემთა ბაზითა და reverse proxy-ით.

Docker Compose მრავალკონტეინერიან სტეკს აღწერს ერთ ფაილში და უშვებს მას ერთი ბრძანებით. ეს არის განთავსების how-to; ჯერ დააინსტალე Docker, თუ არ გაქვს. AI-აგენტისთვის სპეციფიკური სტეკისთვის (აგენტი + vector DB + Redis) იხ. docker-compose AI აგენტებისთვის.

1. სტეკი: აპი + მონაცემთა ბაზა + reverse proxy

# /opt/stack/docker-compose.yml
services:
  app:
    image: your/app:latest
    restart: unless-stopped
    env_file: [.env]
    depends_on: [db]
    # no ports: — reached only through the proxy below

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes: ["pg:/var/lib/postgresql/data"]   # internal only

  caddy:                                        # HTTPS automatically
    image: caddy:2
    restart: unless-stopped
    ports: ["80:80", "443:443"]                 # the only public entrypoint
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

volumes: { pg: {}, caddy_data: {} }

საიდუმლოები .env-ში ცხოვრობს, არასდროს compose ფაილში:

# /opt/stack/.env  (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string

მინიმალური Caddyfile შენს დომენს აპლიკაციაზე ამისამართებს და HTTPS-ს თავად იღებს:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. აწიე ის

cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app

restart: unless-stopped თითო სერვისზე + ჩატვირთვისას ჩართული Docker = სტეკი გადატვირთვის შემდეგ თავად ბრუნდება.

3. ყოველდღიური ბრძანებები

docker compose pull && docker compose up -d   # update images
docker compose down                            # stop the stack
docker compose restart app                     # restart one service

ნაწილი, რომელშიც ხალხი ცდება: გამოვლენილი პორტები

Docker პორტებს iptables-ის გავლით აქვეყნებს, ამიტომ კონტეინერი ports: ["5432:5432"]-ით ინტერნეტიდან ხელმისაწვდომია იმ UFW ფაირვოლის უკანაც კი, რომელიც დახურულად გეგონა. გამოაქვეყნე მხოლოდ საჯარო შესასვლელი წერტილი (proxy 80/443-ზე); მონაცემთა ბაზები და ქეშები compose ქსელზე ან 127.0.0.1-ზე მიბმული დატოვე. ყველაფერს, რაც ვებ ტრაფიკს ემსახურება, გამოყოფილი-IP გეგმა სჭირდება; დააწყვილე UFW ფაირვოლთან.

ერთი IP-ის უკან მთელი სტეკისთვის იხ. რამდენიმე სერვისის self-host. root დაახლოებით ერთ წუთში, NVMe, KYC-ის გარეშე, გადახდა კრიპტოთი.

ხდკ

როგორ განვათავსო Docker Compose სტეკი VPS-ზე?

დააინსტალე Docker Compose დანამატით, დაწერე docker-compose.yml, რომელიც აღწერს თითო სერვისს, შეინახე საიდუმლოები git-ის მიერ იგნორირებულ .env-ში, შემდეგ docker compose up -d. დააყენე restart: unless-stopped თითო სერვისზე და ჩართე Docker ჩატვირთვისას, რომ სტეკმა გადატვირთვებს გადაურჩეს. ქვემოთ მოცემული მაგალითი უშვებს ვებ აპლიკაციას, Postgres-სა და Caddy reverse proxy-ს.

სად მიდის საიდუმლოები — compose ფაილში?

არა. ჩადე ისინი .env ფაილში (chmod 600, git-ის მიერ იგნორირებული) და მიმართე მათ როგორც ${VAR} compose-ში, ან გამოიყენე Docker secrets. არასდროს დააკომიტო პაროლები ან API გასაღებები docker-compose.yml-ში — გაჟონილი ფაილი ცოცხალი მონაცემებით კლასიკური შეცდომაა.

დაბრუნდება სტეკი გადატვირთვის შემდეგ?

მხოლოდ თუ ეტყვი. დააყენე restart: unless-stopped (ან always) თითო სერვისზე და ჩართე Docker ჩატვირთვისას (systemctl enable docker). მაშინ docker compose up -d გადატვირთვებს გადაურჩება და გაშვებულ კონტეინერებს ხელახლა უშვებს.

რომელი პორტები ვლინდება?

მხოლოდ ის, რასაც ports:-ით აქვეყნებ. მიაბი შიდა სერვისები (მონაცემთა ბაზები, ქეშები) compose ქსელს ან 127.0.0.1-ს და გამოაქვეყნე მხოლოდ საჯარო შესასვლელი წერტილი — ჩვეულებრივ reverse proxy 80/443-ზე. Docker აქვეყნებს iptables-ის გავლით, ამიტომ შემთხვევითი ports: ხაზი ინტერნეტიდან ხელმისაწვდომია იმ UFW-ის უკანაც კი, რომელიც დახურულად გეგონა.

ითხოვთ პირადობას ან ბარათს?

არა. ელფოსტა რეგისტრაციისთვის, გადახდა USDC-ით ან USDT-ით — დოკუმენტების გარეშე, ბარათის გარეშე. root დაახლოებით ერთ წუთში.

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.