წარმოებ-განასახება
ეს სახელმძღვანელო HTTPS-ით, reverse proxy-ით, მონაცემ-ბაზ-გამაგრებითა და უსაფრთხოებ-საუკეთ-პრაქ-ით წარმოებ-გარემოში OpenPR-ის განასახებას მოიცავს.
არქიტექტურა
graph LR
INTERNET["Internet<br/>:443"] --> CADDY["Caddy<br/>Auto HTTPS"]
CADDY --> FE["Frontend<br/>Nginx :3000"]
FE --> API["API :8080"]
FE --> MCP["MCP :8090"]
API --> PG["PostgreSQL :5432"]
WORKER["Worker"] --> PGწინაპირობები
- სერვერი მინ. 2 CPU ბირთვითა და 2 GB RAM-ით
- სერვერის IP-ზე მიმართული დომენ-სახელი
- Docker და Docker Compose (ან Podman)
ნაბიჯი 1: გარემო-კონფ
წარმოებ .env ფაილის შექმნა:
# Database (use strong passwords)
DATABASE_URL=postgres://openpr:STRONG_PASSWORD_HERE@postgres:5432/openpr
POSTGRES_DB=openpr
POSTGRES_USER=openpr
POSTGRES_PASSWORD=STRONG_PASSWORD_HERE
# JWT (generate a random secret)
JWT_SECRET=$(openssl rand -hex 32)
JWT_ACCESS_TTL_SECONDS=86400
JWT_REFRESH_TTL_SECONDS=604800
# Logging
RUST_LOG=infoსაიდუმლოებები
.env ფაილები version control-ში არასოდეს შეიტანო. ფაილ-ნებართ-შეზღ-ისთ chmod 600 .env-ის გამოყენება.
ნაბიჯი 2: Caddy-ს გამართვა
ჰოსტ-სისტემაზე Caddy-ს ინსტალაცია:
sudo apt install -y caddyCaddyfile-ის კონფ:
# /etc/caddy/Caddyfile
your-domain.example.com {
reverse_proxy localhost:3000
}Caddy ავტომატურად Let's Encrypt TLS სერთიფიკატებს იძენს და განაახლებს.
Caddy-ს გაშვება:
sudo systemctl enable --now caddyალტ: Nginx
Nginx-ის გამოყენების შემთხვევაში 3000-ე პორტზე proxy pass-ის კონფ-ი და TLS სერთ-ისთვის certbot-ის გამოყენება.
ნაბიჯი 3: Docker Compose-ით განასახება
cd /opt/openpr
docker-compose up -dყველა სერვისის ჯანსაღობ-გადამოწმება:
docker-compose ps
curl -k https://your-domain.example.com/healthნაბიჯი 4: Admin-ანგარიშის შექმნა
ბრაუზერში https://your-domain.example.com გახსენი და admin-ანგარიში დარეგ.
პირველი მომხმარებელი
პირველი დარეგ-მომხ admin-ი ხდება. URL-ის გაზიარებამდე admin-ანგ-ის დარ.
უსაფრთხოებ-სია
ავთენტიფიკაცია
- [ ]
JWT_SECRETშემთხვ-32+-სიმ-მნ-ზე შეცვლა - [ ] შ-ტოკ-TTL-მნ-ის დაყ (access-ისთვ მოკლე, refresh-ისთ გრძელი)
- [ ] განასახ-შემდ-admin-ანგ-ის დაუყ-შექ
მონაცემ-ბაზა
- [ ] PostgreSQL-ისთვ ძლ-პ-ის გამოყ
- [ ] PostgreSQL-პ (5432) ინტ-ზ გამოჩ-ის არარ
- [ ] PostgreSQL SSL-ის ჩ (არარ-მოnar-მ-ბ-ის შ)
- [ ] რეგ-მ-ბ-backup-ების გამ
ქსელი
- [ ] Caddy-ს ან Nginx-ის HTTPS-ით (TLS 1.3) გამ
- [ ] ინტ-ზ მხოლოდ 443 (HTTPS) და სურვ 8090 (MCP)-ის გამოჩ
- [ ] Firewall-ის (ufw, iptables) წვდ-შეზ-ისთ გამ
- [ ] MCP სერვ-წვდ-ცნობ-IP-დ-შეზ-გათვ
აპლიკაცია
- [ ]
RUST_LOG=info-ის დ (debug ან trace არა წარ) - [ ] uploads-დ-დისკ-გ-მონ
- [ ] კონტ-ლოგ-rotation-ის გამ
მონაცემ-ბაზ-backup-ები
ავტ-PostgreSQL-backup-ების გამართვა:
#!/bin/bash
# /opt/openpr/backup.sh
BACKUP_DIR="/opt/openpr/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
docker exec openpr-postgres pg_dump -U openpr openpr | gzip > "$BACKUP_DIR/openpr_$DATE.sql.gz"
# Keep only last 30 days
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -deleteCron-ში დამატება:
# Daily backup at 2 AM
0 2 * * * /opt/openpr/backup.shმონიტორინგი
ჯანმრთ-შემოწ
სერვის-ჯანმრთ-endpoint-ების მონ:
# API
curl -f http://localhost:8080/health
# MCP Server
curl -f http://localhost:8090/healthლოგ-მონიტ
# Follow all logs
docker-compose logs -f
# Follow specific service
docker-compose logs -f api --tail=100მასშტ-მოსაზრებები
- API სერვ: load balancer-ის მიღმა მრ-replika-ში გაშვება შ. ყველა ინსტ ერთ PostgreSQL-ს უკ.
- Worker: ერთი ინსტ duplicate-სამ-გასაც.
- MCP სერვ: მრ-replika-ში გაშვ შ. ყ ინსტ stateless-ია.
- PostgreSQL: მაღ-ხელმ-ისთ PostgreSQL-repl-ის ან მართ-მ-ბ-სერვ-გათვ.
განახლება
OpenPR-ის განახლება:
cd /opt/openpr
git pull origin main
docker-compose down
docker-compose up -d --buildმ-ბ-მ-ები API სერვ-სტ-ზე ავტ-სრ.
შემდეგი ნაბიჯები
- Docker-განასახება -- Docker Compose-ცნობარი
- კონფიგ-ი -- გარ-ცვლ-ცნობ
- პრობლ-მოგ -- გავრ-წარ-პრ