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-ის გარეშე, გადახდა კრიპტოთი.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.