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 = "..."
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:
| Ne | Nerede |
|---|---|
| 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 |
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.
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.
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.
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.
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
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.