uVersion
Türkçe
İndir →

Wiki

Sunucu yapılandırması ve taşıma

config.toml düzenleme, veri dizinini taşıma, başka bir yerdeki PostgreSQL veritabanını kullanma, yedekleme ve geri yükleme.

Her şey tek bir dosyada ayarlanır, /etc/uversion/config.toml. Yükleyici onu oluşturur; sonrasında serbestçe düzenleyebilirsiniz.

Yapılandırma dosyası

Düzenleyin, sonra yeniden başlatın: sunucu yapılandırmasını yalnızca başlangıçta okur.

sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server

Dokunacağınız alanlar şunlardır. Bu kısmi bir alıntıdır: dosyada başkaları da vardır ve bazı zorunlu alanlar aşağıda görünmez. Dosyanızı asla bu blokla üzerine yazmayın, yalnızca ilgili satırları düzenleyin.

# EXTRAIT PARTIEL : le fichier contient d'autres sections.
# N'ecrasez jamais votre fichier avec ce bloc, editez les lignes concernees.

[server]
bind_address = "0.0.0.0"
port = 8080

[database]
# Ou toute base PostgreSQL accessible : autre disque, autre machine, service manage.
url = "postgres://uversion:MOTDEPASSE@127.0.0.1:5432/uversion"

[security]
# Le secret qui signe les sessions. Obligatoire et SANS valeur par defaut :
# absent ou plus court que 32 caracteres, le serveur refuse de demarrer.
# L'installateur en genere un. Le remplacer deconnecte tout le monde une fois.
jwt_secret = "..."

[storage]
# Le contenu des fichiers (les chunks, morceaux de fichiers). C'est ce qui grossit.
path = "/var/lib/uversion/data/chunks"

[tls]
disabled = false
https_port = 8443

[licence]
key = "..."
Dosya izinleri Lisans anahtarını, oturumları imzalayan gizli anahtarı ve veritabanı parolasını içerir. 0640 root:uversion olarak ayarlıdır: bu şekilde tutun.

Verilerin bulunduğu yer

Üç ayrı konum var ve en çok şaşırtan nokta budur. Üçüncüsü, yapılandırma, yedeklemelerde en çok unutulan da odur:

NeNerede
Dosya içeriği (parçalar, dosya parçaları: yer kaplayan şey budur)/var/lib/uversion/data/chunks
TLS sertifikası, sunucu parmak izi/var/lib/uversion/data/tls
Sunucu kimliği, lisans çıpası/var/lib/uversion/server-id, last-validated-at
Meta veriler (dosyalar, revizyonlar, kullanıcılar, kilitler, izinler, görevler)PostgreSQL: /var/lib/postgresql/16/main
Yapılandırma: lisans anahtarı, oturum imzalama gizli anahtarı, veritabanı parolası/etc/uversion/config.toml, /etc/uversion/licence-key
Veritabanı veri dizinini takip etmez Veri dizinini değiştirmek parçaları ve sertifikaları taşır, veritabanını değil. Ve veritabanı parçalara parmak iziyle başvurur: birini diğeri olmadan taşırsanız, sunucu bulunamayan parçaları arar. İkisini de taşıyın, ya da hiçbirini.

Veri dizinini taşıma

Bu yaygın durumdur: içerik büyür, sistem bölümü küçüktür. Veritabanı ise küçük kalır (dosya boyutuyla değil, revizyon sayısıyla büyür).

1. Hizmeti durdurun

sudo systemctl stop uversion-server

2. Dizini kopyalayın

İzinleri ve sahipleri koruyan şey -a'dır. Taşımak yerine kopyalamak, son kontrole kadar geri dönüş imkânı bırakır.

sudo mkdir -p /srv/uversion
sudo rsync -a /var/lib/uversion/ /srv/uversion/
sudo chown -R uversion:uversion /srv/uversion
sudo chmod 0750 /srv/uversion

3. Yapılandırmayı yeni yola yönlendirin

Bu adım zorunludur ve bir sonrakinden önce gelir: aşağıdaki "Sıra önemlidir" kutusuna bakın.

sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml

4. Yeni yolu yükleyiciye bildirin

"Data directory" sorusuna yeni yolu yanıtlayın. Yükleyici bu yanıttan systemd birimini yeniden yazar, sonra hizmeti yeniden başlatır.

sudo dpkg-reconfigure uversion-server
#   Data directory : /srv/uversion

5. Birimin gerçekten oraya işaret ettiğini doğrulayın

systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
dpkg-reconfigure üzerinden gidin, systemd birimini kendiniz yazmayın Yükleyici /etc/systemd/system/uversion-server.service.d/10-data-dir.conf dosyasını kendisi yazar ve verdiğiniz yanıttan her yapılandırmada yeniden yazar. Elle konan bir dosya bir sonraki güncellemeye kadar, Update now düğmesinin tetiklediği güncelleme dahil, hayatta kalır: birim o zaman yeniden eski klasörü gösterirken yapılandırma yenisine yazar. Sertleştirilmiş hizmet (ProtectSystem=strict) normal başlar ve haftalar sonra ilk dosya gönderiminde bozulur.
Sıra önemlidir: önce config.toml'u düzenleyin Tek başına dpkg-reconfigure yeterli değildir. Yükleyici [storage].path'i yalnızca orada bulduğu klasör artık yoksa düzeltir: hâlâ mevcut olan özel bir yol, bilinçli bir seçim sayılır ve olduğu gibi bırakılır. Taşımak yerine kopyaladığınız için eski klasör hâlâ vardır ve dolayısıyla yukarıdaki 2. adım zorunludur. Her şey doğrulandıktan ve sunucu yeni yolda çalışır duruma geldikten sonra eski klasörü silebilirsiniz.
Asla /home veya /root altında değil Hizmet, sertleştirilmiş bir sistem kullanıcısı olarak çalışır (ProtectHome=true, ve bir kişisel dizin bir sistem hesabı tarafından geçilemez). /home veya /root altındaki bir yol başlatmayı engeller (226/NAMESPACE veya 200/CHDIR). Bir sistem yolu seçin: /srv, /opt veya bağlanmış bir disk.

Veritabanını başka yere koyma

Yükleyici yerel bir veritabanı oluşturur, ama sizi buna bağlayan hiçbir şey yok. url'yi erişilebilir herhangi bir PostgreSQL veritabanına yönlendirin: ayrı bir küme olarak bağlanmış başka bir disk, başka bir makine veya yönetilen bir hizmet.

[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"

Sonra yeniden başlatın. Sunucu geçişlerini başlangıçta uygular: veritabanının yapısını kendi kendine günceller. Boş bir veritabanı ilklendirilir, daha eski bir veritabanı yükseltilir, elle çalıştıracağınız hiçbir şey yoktur.

Yalnızca belirtilen rolün hedef veritabanında tablo oluşturabilmesi gerekir.

Veri diskindeki veritabanı

Önceki bölüm, başka bir yerde yönettiğiniz bir veritabanını varsayar. Amacınız farklıysa: makine öldüğünde hayatta kalan tek bir diskin sunucuyu yeniden ayağa kaldırmaya yetmesi istiyorsanız, o zaman yükleyici veritabanını veri dizininin içine, özel bir PostgreSQL kümesi biçiminde yerleştirebilir: kendi klasörü ve kendi bağlantı noktası olan, sisteminkinden bağımsız, ayrı bir PostgreSQL örneği.

Bu soru kurulumda sorulur. Zaten çalışan bir Debian sunucusunda etkinleştirmek için:

sudo dpkg-reconfigure uversion-server
#   Data directory                     : /srv/uversion
#   Put the database on the data directory too?  Yes

Windows'ta

Aynı vaat, farklı mekanik. Windows'ta adlandırılmış küme yoktur: yükleyici PostgreSQL örneğinin kendisini veri dizinine taşır ve hizmeti yeniden yönlendirir. Bu seçim, kurulum sırasında betiğin parametrelerine -DbOnDataDir eklenerek yapılır. Bir soruyla sunulmaz: betik yalnızca etkinleştirme kodunu ister, dolayısıyla bu parametreyi geçirmezseniz veritabanı varsayılan konumunda kalır. Komutun tam biçimi için Windows'a kurulum sayfasına bakın; tek satırlık komutun hiçbir parametre alamayacağını unutmayın.

# PowerShell en administrateur, installation en ligne de commande
& ([scriptblock]::Create((iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing).Content)) `
    -LicenceKey "UV-XXXX-XXXX-XXXX" -DataDir "D:\uVersion" -DbOnDataDir

# verifier ensuite ou pointe le service PostgreSQL
(Get-CimInstance Win32_Service -Filter "Name='postgresql-x64-16'").PathName

Örnek, uVersion'ınki dışında veritabanları barındırıyorsa veya dizini kendine yeter değilse, taşıma nedeni gösterilerek reddedilir: bir tablespace varlığı, bir kavşak (junction) ile taşınmış bir pg_wal veya postgresql.conf içine yazılmış mutlak bir yol. Hiçbir şey asla silinmez: yükleyici kopyalar, doğrular, hizmeti yeni kopya üzerinde başlatır ve ancak o zaman eski dizini yeniden adlandırır.

Linux'tan iki fark Windows bir hizmeti bir diskin ardından bekletemez: RequiresMountsFor'un bir karşılığı yoktur. Geç gelen bir harici disk bu nedenle bir bağımlılıkla değil, hizmetin kurtarma eylemleriyle telafi edilir. Ve PostgreSQL, Windows'ta dizini üzerinde hiçbir izin denetimi yapmaz: onları kısıtlayan yükleyicidir, sunucu tarafında bir güvenlik ağı yoktur.

Disk o zaman her şeyi içerir:

/srv/uversion/
├── data/chunks       contenu des fichiers
├── data/tls          certificat, empreinte
├── pgdata/16         LA BASE (cluster PostgreSQL dedie)
└── recovery/         procedure + fichiers necessaires a la reprise
    ├── RESTORE.md
    ├── pgconf/       postgresql.conf, pg_hba.conf, pg_ident.conf
    ├── etc/          copie de config.toml et du mot de passe
    └── cluster.env

Küme, otomatik olarak atanan kendi bağlantı noktasını alır (boşsa 5433) ve config.toml onu gösterecek şekilde güncellenir. Sistem kümesine dokunulmaz: başka veritabanları barındırmayı sürdürebilir.

Evet demeden önce bilinmesi gereken iki bedel Bir PostgreSQL veri dizini yalnızca onu oluşturan ana sürümle açılır: üç yıl sonraki bir kurtarma, PostgreSQL 16'yı açıkça kurmayı gerektirebilir. Ve disk artık lisans anahtarını, oturumları imzalayan gizli anahtarı ve veritabanı parolasını, yalnızca root'un erişebildiği bir dizinde taşır: bu diski bir kimlik bilgisi gibi ele alın.
Zaten dolu veritabanı: yükleyici onu taşımayı reddeder Sunucunuz zaten verilerle çalışıyorsa, seçeneği etkinleştirmek hiçbir şeyi taşımaz: bir paket güncellemesinin ortasında kesilen bir taşınma, hiç taşınmamaktan daha kötü olur. Yükleyici sizi olduğunuz durumda bırakır ve elle yapılacak prosedürü yazdırır (durdurma, pg_dump, kümeyi oluşturma, geri yükleme, url'yi güncelleme).

Sunucuyu yeni bir makinede yeniden kurma

Disk yazılımları içermez: PostgreSQL'i ve uVersion paketini hazır bulundurun; her ikisinin diskin yanında saklanan bir kopyası, gün geldiğinde hoş olmayan bir sürprizi önler.

# sur la machine neuve
sudo apt install postgresql-16
# montez le disque, par exemple sur /srv/uversion
sudo apt install ./uversion-server_*.deb
#   dossier de donnees : le point de montage du disque
#   base sur le dossier de donnees : oui

Yükleyici veritabanını diskte bulur, PostgreSQL yapılandırma dosyalarını yerine geri koyar (pg_createcluster onları dizinin dışına, sistem diskine taşımıştı), kümeyi kaydeder, sahipleri düzeltir, sonra config.toml içindeki bağlantı noktasını ve parça yolunu yeniden hizalar. Disk öncekinden farklı bir bağlama noktasında geri gelirse, yalnızca yeni yolu yanıtlayın.

Yeniden kurulum olmadan çalışan varyant dahil eksiksiz prosedür, diskin kendisine yazılmıştır: recovery/RESTORE.md.

Yedekleme ve geri yükleme

Eksiksiz bir yedek üç öğedir: veritabanının dışa aktarımı (dump), veri dizini ve yapılandırma dizini.

Veritabanını yedekleyin

Meta veriler: dosyalar, revizyonlar, kullanıcılar, kilitler.

sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql

Veri dizinini yedekleyin

Dosyaların içeriği, yani yer kaplayan şey.

sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .

Yapılandırmayı yedekleyin

Lisans anahtarı, oturum imzalama gizli anahtarı, veritabanı parolası. Veri dizininde bulunmaz.

sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
/etc/uversion'u unutmayın Bu üçüncü öğedir ve unutulması en kolay olanıdır: veri dizininde bulunmaz. /etc/uversion/config.toml lisans anahtarını, oturumları imzalayan gizli anahtarı ve veritabanı parolasını taşır; /etc/uversion/licence-key lisansın kendisini taşır. Bunlar olmadan, yeni bir makinede bir geri yükleme yeni bir gizli anahtarla yeniden başlar, dolayısıyla tüm ekibin bağlantısı tek seferde kesilir ve yeniden bir lisans istemek gerekir: kayıt sırasında alınan etkinleştirme kodu tek kullanımlıktır ve zaten tüketilmiştir, yalnızca onun ürettiği lisans anahtarı yeniden kullanılabilir.

Yeni bir makinede geri yüklemek için: paketi kurun, sonra üç öğeyi bu sırayla yerine koyun.

1. Veritabanını geri yükleyin

sudo -u postgres createdb -O uversion uversion      # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql

2. Verileri geri yükleyin

Parçaları doğru izinlerle yerine koyun:

sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion

3. İki yapılandırma satırını aktarın

Dosyanın tamamını değil: yükleyicinin az önce yazdığı dosya, kendisinin yeniden tanımladığı veritabanı parolasını taşır.

# N'ECRASEZ PAS le fichier neuf : ouvrez l'ancien a cote et recopiez-en
# deux lignes, et deux seulement.
#   [security] jwt_secret  -> sinon toute l'equipe est deconnectee
#   [licence]  key         -> sinon il faut redemander une licence
# Gardez le [database] url que l'installateur vient d'ecrire : il porte le
# mot de passe qu'il a lui-meme redefini.
sudo nano /etc/uversion/config.toml

4. Yeniden başlatın

sudo systemctl restart uversion-server
Mevcut bir veritabanının üzerine kurma Yükleyici hiçbir şeyi yok etmez: uversion veritabanını zaten bulursa, onu olduğu gibi yeniden kullanır ve yalnızca rolün parolasını sıfırlar. Böylece önce dump'ınızı geri yükleyip sonra kurabilirsiniz.

PostgreSQL kümesini taşıma

Nadiren gerekir: veritabanı küçüktür. Israr ederseniz, bu standart bir PostgreSQL işlemidir, uVersion yükleyicisinin ele aldığı bir şey değil. Dikkat: bu küme (sistemin PostgreSQL örneği, kendi klasörü ve bağlantı noktasıyla) uVersion'ınki dışında veritabanları barındırabilir.

sudo systemctl stop uversion-server
sudo pg_ctlcluster 16 main stop

sudo mkdir -p /srv/pgdata
sudo rsync -a /var/lib/postgresql/16/main/ /srv/pgdata/16/main/
sudo chown -R postgres:postgres /srv/pgdata

sudo sed -i "s#^data_directory =.*#data_directory = '/srv/pgdata/16/main'#" \
  /etc/postgresql/16/main/postgresql.conf

sudo pg_ctlcluster 16 main start
sudo systemctl start uversion-server

Sonra pg_lsclusters ile kümenin yeni yolda çevrimiçi olduğunu doğrulayın.