Bu kılavuz etiketli bir Cluster ERP sürümünü staging veya üretim için tek bir Linux düğümüne kurar ve daha sonra aynı komutla yükseltir. İşletim sistemi için deploy/bootstrap-node.sh, uygulama için deploy/install.sh izlenir. Staging ile üretim ayrımının gerekçeleri ortamlar ve terfi sayfasındadır.
Ön koşullar¶
- Root erişimli, temiz bir Ubuntu 24.04 düğümü; hazırlık betiği başka sistemleri reddeder (
deploy/bootstrap-node.sh:52-55). - Yöneticinin OpenSSH açık anahtar dosyası (
deploy/bootstrap-node.sh:46-51). - Düğümde bir PostgreSQL 16 sunucusu.
install.shyalnız PostgreSQL istemcisini kurar (deploy/install.sh:114) vepg-tune.sh, PostgreSQL 16 yapılandırma dizini yoksa durur (deploy/pg-tune.sh:23-31). - Uzak depoda bulunan bir sürüm etiketi ve düğümden o uzak depoya okuma erişimi (
deploy/install.sh:47-54,deploy/install.sh:85-90). - Üretim için: aynı commit üzerinde
staging-ok/<tag>terfi kaydı (deploy/install.sh:101-107).
Adımlar¶
- İşletim sistemini root olarak bir kez hazırlayın. Kaynak:
deploy/bootstrap-node.sh:8-23,deploy/bootstrap-node.sh:36-44.
bash
bash bootstrap-node.sh --admin <name> --pubkey <public-key-file> --admin-cidr <cidr>
--admin-cidr isteğe bağlıdır; verilmezse SSH bağlantı noktası her adrese açık kalır ve betik bir not yazar (deploy/bootstrap-node.sh:139-145). Betik gözetimsiz güvenlik güncellemelerini açar, saati NTP ile UTC'ye ayarlar, yöneticiyi sudo yetkisi ve anahtarla oluşturur, her ayrıcalıklı oturumu kaydeder, SSH'yi yalnız anahtara geçirir ve güvenlik duvarında yalnız SSH, HTTP ve HTTPS'yi açar (deploy/bootstrap-node.sh:57-149).
-
Root oturumunu kapatmadan önce anahtarla yeni bir oturum açın. 1. adımdan sonra root girişi ve parolalar kapalıdır (
deploy/bootstrap-node.sh:151-154). -
Deponun bir kopyasından PostgreSQL'i düğümün belleğine ve işlemci sayısına göre ayarlayın. Betik tek bir yapılandırma dosyası yazar ve PostgreSQL'i yeniden başlatır. Kaynak:
deploy/pg-tune.sh:20,deploy/pg-tune.sh:48-69.
bash
sudo deploy/pg-tune.sh
deploy/postgres-roles.sqliçindeki iki parola yer tutucusunu değiştirin, sonra uygulama rolünü ve yedek rolünü oluşturun. Kaynak:deploy/postgres-roles.sql:1-11. Bkz. PostgreSQL rolleri ve ayarı.
bash
psql -U postgres -f deploy/postgres-roles.sql
- Kurucuyu etiket, genel ana makine adı ve rolle çalıştırın. Kaynak:
deploy/install.sh:11-13.
bash
sudo deploy/install.sh --tag <tag> --domain erp.example.com --role staging
Ortam dosyası olmayan bir düğümde betik deploy/env.example dosyasını 0640 kipinde yerine kopyalar ve dosya hâlâ <...> yer tutucuları içerdiği için durur (deploy/install.sh:171-179).
-
Ortam dosyasındaki her yer tutucu değeri doldurun. Değişkenler yapılandırma başvurusunda listelenir.
-
Düğümün henüz TLS sertifikası yoksa betiğin yazdığı komutla bir sertifika alın. Kaynak:
deploy/install.sh:204-209.
bash
certbot certonly --webroot -w /var/www/html -d erp.example.com -m <mailbox> --agree-tos -n
-
Aynı
install.shkomutunu yeniden çalıştırın. Artık sekiz adımın hepsini koşar: sistem paketleri, servis kullanıcısı ve dizinler, etiketteki kod,requirements.lockdosyasından hash'li sanal ortam, ortam dosyası denetimi, nginx sitesi ve cron tablosuyla systemd birimi, önce yedek alınan veritabanı göçü ve hazırlık denetimli başlatma veya yeniden yükleme (deploy/install.sh:26-34,deploy/install.sh:110-261). -
Düğüm bir üretim düğümüyse önce geçen staging bataryasını sürüm commit'i üzerinde kaydedin, sonra kurucuyu
--role productionile çalıştırın. Kaynak:deploy/install.sh:20-21.
bash
git tag -a staging-ok/<tag> <tag> -m "<battery log, date>"
git push origin staging-ok/<tag>
sudo deploy/install.sh --tag <tag> --domain erp.example.com --role production
- Daha sonra yükseltmek için aynı komutu yeni etiketle çalıştırın (
deploy/install.sh:13). Betik çalışan servisi yeniden yükler. Ortam dosyası servis başladıktan sonra değiştiyse, birim dosyası değiştiyse veyarequirements.lockdeğiştiyse bunun yerine servisi yeniden başlatır (deploy/install.sh:228-246).
Sonucu doğrulayın¶
- Betik
Cluster ERP <tag> is live on this <role> node (<domain>).satırıyla biter (deploy/install.sh:261). Bu satırı yalnız/readybeş dakika içinde HTTP 200 döndürdükten veresidency_check0 koduyla çıktıktan sonra yazar (deploy/install.sh:247-259). - Hazırlık yanıtı her arka depoyu
passveyafailile adlandırır (src/cluster_erp/server/app.py:1476-1504). Bkz. security.txt ve hazırlık. - Servis kullanıcısının cron tablosu
deploy/cluster-erp.cronişlerini içerir (deploy/install.sh:210). Bkz. zamanlanmış işler ve saklama.
Sorun giderme¶
| Belirti | Koddaki neden | Çözüm |
|---|---|---|
--tag is required: production runs a tagged release, never a branch tip |
--tag bayrağı yok (deploy/install.sh:77) |
Var olan bir sürüm etiketi verin. |
production refuses <tag>: no staging-ok/<tag> record |
Uzak depoda terfi etiketi yok (deploy/install.sh:104-105) |
Etiketi staging'e kurun, bataryayı koşun, terfi etiketini itin. |
staging-ok/<tag> points at ... the promotion record does not belong to this release |
İki etiket farklı commit'lere çözülüyor (deploy/install.sh:106) |
Terfi etiketini sürüm commit'ine atın. |
this node is recorded as '<role>' ... a node never changes role |
Rol, kayıtlı rolden farklı (deploy/install.sh:123-125) |
Düğümü temiz bir imajdan yeniden kurun. |
... still contains <...> placeholders; the service is not started with a template |
Bir değer satırında hâlâ yer tutucu var (deploy/install.sh:177-179) |
Değeri doldurun ve betiği yeniden çalıştırın. |
no certificate yet for <domain> |
Alan adı için sertifika dosyası yok (deploy/install.sh:204-209) |
Yazılan certbot komutunu, ardından betiği yeniden çalıştırın. |
/ready did not answer 200 within 5 minutes |
Servis hazır olmadı; betik son günlük satırlarını yazar (deploy/install.sh:254-257) |
Günlük satırlarını okuyun; bkz. servis ve süreç yöneticisi. |
residency_check reported findings |
Bir ayar beyan edilen ülkeyle çelişiyor (deploy/install.sh:258-259) |
Beyanı düzeltin; bkz. veri ikameti denetimi. |
this script is written for Ubuntu 24.04 |
Başka bir işletim sistemi (deploy/bootstrap-node.sh:54-55) |
Bir Ubuntu 24.04 imajı kullanın. |
sshd rejected the new configuration; passwords are still on |
SSH yapılandırma sınaması başarısız (deploy/bootstrap-node.sh:132) |
Koddan belirlenemedi. Betik yeni yapılandırma etkin olmadan durur. |
Tanıtılan terimler¶
| Terim | Kod tanımlayıcısı | Tanım | Türkçe terim | Kaynak |
|---|---|---|---|---|
| ortam dosyası | ENV_FILE |
deploy/env.example dosyasından kopyalanan ve servisle betiklerin ayarlarını okuduğu düğüm dosyası. |
ortam dosyası | deploy/install.sh:45 |
| servis kullanıcısı | SERVICE_USER |
Çalışma kopyasının sahibi olan ve servisle cron işlerini koşan sistem hesabı. | servis kullanıcısı | deploy/install.sh:46 |
| varlık damgası | cluster_asset_stamp |
Gönderilen dosyalar değiştiğinde değişen, web uygulamasının varlık adreslerindeki kısa belirteç; sunucu onu dosyaların özeti olarak hesaplar, nginx ise sürüm etiketini alır. | varlık damgası | deploy/install.sh:197-200 |
İlgili sayfalar¶
92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.