uVersion
Türkçe
İndir →

Wiki

Docker ile dağıtım

uVersion sunucusu ve PostgreSQL konteyner olarak, anahtar teslim: imajı indirin, yükleyin, .env dosyasını yapılandırın, başlatın. Verilerin ve veritabanının konumu yapılandırılabilir.

.deb paketine bir alternatif: uVersion sunucusu ve onun PostgreSQL veritabanı konteyner olarak çalışır, tek bir docker compose up ile ayağa kaldırılır. Konteynerleştirilmiş bir dağıtımı tercih ediyorsanız veya hızlıca denemek istiyorsanız idealdir.

Önkoşullar: Compose v2 eklentisiyle Docker Engine 20.10+ (docker compose version) ve bir uVersion lisans anahtarı. Sunucu, geçerli ve imzalı bir anahtar olmadan başlamayı reddeder: onu hesabınızdan alın (veya kayıt sayfasından bir tane edinin).

Podman da çalışır Bu sayfadaki tüm komutlarda docker yerine podman koyun: podman compose pull, podman load -i, podman compose up -d. Sağlanan docker-compose.yml, bağlama noktalarını SELinux (Red Hat, Rocky, Alma ve Fedora'da varsayılan olarak etkin erişim denetimi) için zaten :z son ekiyle etiketler. Bu etiket olmadan konteynerin bağlanan dizinlere erişimi reddedilir ve mesaj, bir izin sorunundan çok bozuk bir veritabanı gibi görünür.

Kurulum

1. compose dosyasını ve ortam şablonunu alın

İki dosya, yığının dizini olacak yeni bir klasöre: docker-compose.yml ve .env şablonu.

mkdir uversion && cd uversion
wget -N -O docker-compose.yml https://uversion.io/downloads/server/docker/docker-compose.yml
wget -N -O .env https://uversion.io/downloads/server/docker/env.example

2. İmajı alın

Çevrimiçiyken registry yeterlidir:

docker compose pull

İnternet erişimi olmadan (yalıtılmış ağ), bunun yerine arşivi indirip yükleyin: compose ile aynı imaj adını taşır, bu yüzden başlatma onu hiçbir şey indirmeden bulur.

wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz

3. .env dosyasını doldurun

İki değer zorunludur: UVERSION_LICENCE__KEY (lisans anahtarınız, e-posta ile alınan uzun imzalı dizge) ve POSTGRES_PASSWORD (birlikte gelen veritabanı için güçlü bir parola).

nano .env

Oturumları imzalayan gizli anahtar ilk başlatmada üretilir ve veri dizininde saklanır. Girmeniz gereken bir şey yoktur. Yedeğin bir parçasıdır: kaybolursa herkes bir kez yeniden oturum açar, hiçbir şey kaybolmaz. Kendinizinkini belirlemeyi tercih ederseniz (en az 32 karakter), .env içinde UVERSION_SECURITY__JWT_SECRET alanını doldurun: bu gerçekten konteynere iletilir ve konteyner bir tane üretmek yerine onu kullanır.

Bu parolayı bir kerede seçin POSTGRES_PASSWORD yalnızca veritabanı oluşturulurken, dizini boşken uygulanır. Daha sonra .env içinde değiştirmek PostgreSQL tarafında hiçbir şeyi değiştirmez, o eskisini tutar; bu sırada sunucu yenisini sunar: bağlantı kopar ama mesaj nedenini açıklamaz. Gerçekten değiştirmek için, iki tarafta da değiştirin:
# Changer reellement le mot de passe de la base
docker compose exec db psql -U uversion -c "ALTER USER uversion PASSWORD 'nouveau-mot-de-passe'"

# Puis reporter la MEME valeur dans POSTGRES_PASSWORD (.env) et relancer
docker compose up -d
.env dosyasını verilerinizle birlikte yedekleyin İçinde lisans anahtarı ve veritabanı parolası bulunur; birimlerde değil, docker-compose.yml dosyasının yanında yaşar. Veri disklerini korurken makineyi kaybetmek, kimsenin adresleyemeyeceği bir veritabanı ve yeniden istenmesi gereken bir lisans bırakır: 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 ve burada olan odur. Bu dosyayı bir sır gibi ele alın: chmod 600 ve veritabanı ile chunk'larla (dosya parçaları, yer kaplayan şey) aynı yedekte.

4. Yığını başlatın

docker compose up -d

Sunucuya artık https://YOUR-HOST:8443 üzerinden erişilebilir. Hiçbir alan adı veya Let’s Encrypt sertifikası gerekmez: bununla TOFU modeli ilgilenir, yani ilk temasta güven, tıpkı SSH’nin ilk seferinde bir makinenin parmak izini onaylatması gibi.

5. Sunucu parmak izini okuyun

Her başlatmada günlüklere yeniden yazılır:

# L'empreinte du serveur, reecrite dans les journaux a chaque demarrage
docker compose logs server | grep -i "TLS fingerprint"

Bu, sunucu parmak izidir (sertifikasının SHA-256'sı): sunucu 8443 portunda kendinden imzalı HTTPS sunar ve her istemci ilk bağlantıda onu doğrular. Ekibinizle paylaşın (bkz. TLS parmak izi). Onu, indirilen bir dosyayı doğrulamaya yarayan bir sağlama toplamıyla karıştırmayın: bu, sizin sunucunuzu tanımlar.

6. İlk yönetici parolasını okuyun

Bu parolayla admin olarak oturum açın, sonra onu değiştirin. Değiştirir değiştirmez dosya silinir.

# Le mot de passe admin initial (le fichier disparait des que vous le changez)
docker compose exec server cat /data/initial-admin-password

Başlatmayı canlı izlemek için docker compose logs -f server uygundur, ama onu bir komut dizisinin ortasına koymayın: -f günlükleri süresiz izler ve denetimi asla geri vermez (çıkmak için Ctrl + C).

Veriler ve veritabanı

Sunucunun tüm durumu (chunk deposu, TLS sertifikası ve dolayısıyla parmak izi, sunucu kimliği) bir ana makine dizininde, PostgreSQL veritabanı ise bir başkasında yaşar. İkisi de .env içinde ayarlanır:

# Dans .env : placer les donnees et la base sur un disque large et sauvegarde
UVERSION_DATA_DIR=/srv/uversion/data      # chunks, cert TLS, identite serveur
UVERSION_DB_DIR=/srv/uversion/db          # PostgreSQL fourni

Gerçek bir dağıtım için UVERSION_DATA_DIR'ı geniş ve yedeklenen bir diske yönlendirin: bir Unreal projesinin ikili chunk'ları hacimli olabilir. Konteyner, bağlanan dizinin izinlerini kendisi ayarlar (yalnızca sahipliği düzeltecek kadar root olarak başlar, sonra ayrıcalıksız bir kullanıcıya iner), bu yüzden önceden hiçbir şeyi chown etmeniz gerekmez.

SELinux etkinse ilk başlatma daha uzun O zaman motor, bağlanan dizinleri özyinelemeli olarak, yalnızca bir kez yeniden etiketler. Yeni bir dağıtımda bu anlıktır, ama zaten hacimli bir depoda birkaç dakika bekleyin. Sonraki başlatmalar bu bedeli yeniden ödemez.

Halihazırda var olan harici bir PostgreSQL kullanmak için .env içinde UVERSION_DATABASE__URL alanını doldurun, sonra docker-compose.yml içindeki db hizmetini ve depends_on bloğunu kaldırın.

# Dans .env : brancher un PostgreSQL existant
UVERSION_DATABASE__URL=postgres://user:motdepasse@db.interne:5432/uversion

Verileri ve veritabanını taşıma

En basit durum, iki değişkeni ilk up'tan önce ayarlamaktır: henüz hiçbir şey yoktur, kopyalanacak bir şey yoktur. Yığın zaten çalışıyorsa, onu durdurup dizinleri sahipleri koruyarak elle kopyalamak gerekir.

1. Yığını durdurun

Kopyalama sırasında hiçbir şey yazmamalı:

docker compose down

2. İki dizini kopyalayın

Sahipleri ve izinleri koruyan, -a'dır:

sudo rsync -a ./data/server/ /srv/uversion/data/
sudo rsync -a ./data/db/     /srv/uversion/db/

3. .env'i yeni konuma yönlendirin

# Dans .env, LES DEUX lignes, pas une seule
UVERSION_DATA_DIR=/srv/uversion/data
UVERSION_DB_DIR=/srv/uversion/db

4. Yeniden başlatın

docker compose up -d
İkisini de taşıyın ya da hiçbirini Veritabanı dosyalarınızı içermez: chunk'ları (dosya parçalarını) parmak izleriyle gösteren meta verileri içerir. Verileri veritabanı olmadan taşımak ya da tersi, bulunamayan chunk'lara başvuran bir veritabanı bırakır. Ve boş bir dizini gösteren bir UVERSION_DB_DIR, bomboş bir veritabanı verir: PostgreSQL onu gözünü kırpmadan ilklendirir ve elinizde dolu bir chunk deposuyla eşleşmiş, hiçbir meta verisi olmayan bir veritabanı kalır.

Üç yol tuzağı, hepsi yaşanmış:

  • Göreli bir yol, compose dosyasına göre çözülür, komutu çalıştırdığınız dizine göre değil. ./data/server her zaman docker-compose.yml'nin komşusunu gösterir.
  • Bir ağ paylaşımı (NFS, CIFS, bir Windows paylaşımı) genellikle konteynerin başlatmada yaptığı chown'u reddeder. O zaman konteyner hemen çıkar, ne uVersion'dan ne de depolamadan söz eden bir izin hatasıyla. Yerel bir disk veya bir blok birim kullanın.
  • Sahipleri ve izinleri koruyan rsync -a'dır. Seçeneksiz cp ile ya da bir dosya gezgininden yapılan bir kopya, her şeyi geçerli hesaba sıfırlar ve PostgreSQL o zaman kendi dizini üzerinde başlamayı reddeder.

İşletim

Yedekleme: veritabanı

Meta verileri taşır: dosyalar, sürümler, kullanıcılar, kilitler.

docker compose exec db pg_dump -U uversion uversion > uversion-db.sql

Yedekleme: sunucu verileri

Bu, UVERSION_DATA_DIR'ın gösterdiği ana makine dizinidir. İki yedek de önemlidir: biri olmadan öteki hiçbir şeyi geri getirmez.

# .env n'est pas charge dans votre shell, chargez-le pour reutiliser la variable
set -a; . ./.env; set +a
DATA_DIR="$UVERSION_DATA_DIR"
[ -n "$DATA_DIR" ] || DATA_DIR=./data/server      # valeur par defaut

tar czf uversion-data.tar.gz -C "$DATA_DIR" .

Güncelleme

Veriler ve veritabanı dokunulmadan kalır, geçişler başlatmada uygulanır.

docker compose pull
docker compose up -d   # les migrations s'appliquent au demarrage

Yalıtılmış bir ağda, bunun yerine daha yeni bir arşiv yükleyin:

wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
docker compose up -d

Durdurma

docker compose stop konteynerleri durdurur, docker compose down onları kaldırır. Her iki durumda da verileriniz yerinde kalır.

down -v burada hiçbir şeyi silmez Yayımlanan compose hiçbir adlandırılmış birim kullanmaz: verileriniz ve veritabanınız .env'in gösterdiği iki ana makine dizinindedir. Ne down ne de down -v onlara dokunur. Gerçekten sıfırdan başlamak için bu dizinleri kendiniz silmeniz gerekir. Bunu bilmek önemlidir: bir kimlik doğrulama hatasından sonraki refleks, down -v ve ardından up çalıştırmaktır ve bu, aynı veritabanı ve aynı parolayla tam olarak aynı hataya geri döner.