Nieoficjalne
Na tej stronie
  1. 01Zanim zaczniesz
  2. 02Utwórz projekt
  3. 03Podpisz każdą zbudowaną wersję
  4. 04Każde wypchnięcie publikuje
  5. 05Dodaj repozytorium na pozostałych jednostkach NAS
  6. 06Przez internet dzięki Cloudflare Tunnel
  7. 07Do czego sięga internet

Własne App Center: wysyłaj pakiety QPKG z Gita na każde NAS

Bucket & Code Server IDE prowadzi na NAS-ie repozytorium App Center. Projekt QPKG utworzony przyciskiem Nowy projekt buduje się przy każdym wypchnięciu do Gita i publikuje podpisany pakiet w tym repozytorium. Pozostałe jednostki NAS dodają adres repozytorium w App Center raz, a potem instalują i aktualizują pakiety jak każdą inną aplikację. Cloudflare Tunnel udostępnia repozytorium, a jeśli chcesz, także Git, w internecie bez otwierania portu w routerze.

  1. Przygotowaniemoduły, QDK, certyfikat
  2. ProjektNowy projekt, pakiet QPKG
  3. Podpisaniedwa sekrety w Forgejo
  4. Repozytoriumjego adres w App Center
  5. Internetnazwa hosta pakietów

Zrzuty ekranu pochodzą z panelu. Pola wypełniono tak, jak opisuje poradnik. Widoczne adresy należą do NAS-a 192.168.1.20, a opublikowane nazwy to przykłady w domenie example.com.

01Zanim zaczniesz

  • Git, CI i Edytor muszą być włączone. Administrator włącza każdy z nich przyciskiem na stronie Przegląd (Włącz Git, Włącz Git i CI, Włącz Edytor). Kreator nowego projektu wymaga Gita i Edytora, a CI uruchamia workflow projektu przy każdym wypchnięciu zmian (git push).
  • Potrzebny jest QDK: na stronie Toolchainy, na karcie QNAP, zainstaluj QNAP QDK 2.5.0.
  • Potrzebny jest certyfikat do podpisywania kodu, wydany Ci przez QNAP, w postaci plików: certificate, private_key i, dla łańcucha, ca_certs. App Center sprawdza podpis pakietu przy instalacji, a repozytorium na stronie Pakiety przyjmuje tylko podpisane pakiety. Certyfikat na tokenie sprzętowym nie jest obsługiwany.
Karta Podpisywanie kodu na stronie Pakiety: 1, certyfikat jako pliki, obsługiwany; 2, certyfikat na tokenie sprzętowym, nieobsługiwany; 3, brak certyfikatu, pakiet bez podpisu

02Utwórz projekt

Kreator Nowy projekt otworzysz ze strony Git albo z palety poleceń (potrzebna rola developer).

  1. Szablon. W sekcji Pakiety dla QTS wybierz Pakiet QPKG i naciśnij Dalej. Pakiety dla QTS: wybrany Pakiet QPKG, obok aplikacji App Builder
  2. Nazwa i widoczność. Ta nazwa będzie nazwą repozytorium, folderu i pakietu: od 1 do 20 liter, cyfr, myślników lub podkreśleń. Właścicielem jest Twoje konto albo organizacja. Projekt zostaw jako Prywatne. Nazwa nas-notes, właściciel ola, widoczność Prywatny
  3. Usługa. Wybierz, jak pakiet się uruchamia i zatrzymuje: Narzędzie wiersza poleceń dowiązuje program do /usr/bin, Usługa w tle uruchamia go na osobnym koncie, Aplikacja WWW dodaje też przycisk Otwórz w App Center, a Pusty ma tylko puste polecenia skryptu usługi (takie jak start i stop). Te bloki możesz później zmienić w widoku projektu. Start od: wybrane Narzędzie wiersza poleceń; Usługa w tle, Aplikacja webowa i Pusta
  4. Budowanie. Wybierz środowisko, w którym projekt się buduje, i zostaw włączone Zbuduj zaraz po utworzeniu. Środowisko budowania: ubuntu2404-builder, ubuntu-24.04-x86_64, glibc 2.39 i uwaga, że budowanie odbywa się w tym środowisku przez bvs-chroot Zbuduj zaraz po utworzeniu, włączone
  5. Publikowanie. Włącz Opublikuj w repozytorium App Center tego NAS-a. Ten sam przełącznik zostaje potem w ustawieniach projektu i pozwala CI publikować przy każdym przebiegu. Publikowanie: Test wdrożenia na tym NAS-ie wyłączony, tylko podpisane pakiety; Publikuj w repozytorium App Center tego NAS-a włączone; Publikuj na moim serwerze WWW wyłączone
  6. Podsumowanie. Sprawdź kroki, które się uruchomią, i naciśnij Utwórz projekt. Co się uruchomi: repozytorium Forgejo i pierwszy commit, Pierwsze budowanie, Publikacja do repozytorium App Center; Test wdrożenia i Publikacja na moim serwerze WWW nie zaznaczone; przycisk Utwórz projekt

Pierwsze zadanie tworzy w Forgejo repozytorium i folder projects/<name> z pierwszym commitem: pliki szablonu oraz workflow .forgejo/workflows/build.yml. Przy pierwszym budowaniu nie ma jeszcze certyfikatu, więc krok publikacji się zatrzymuje i podaje, że pakiet nie ma podpisu kodu. Przełącznik zostaje włączony, a po kroku 03 każde wypchnięcie zmian publikuje nową wersję.

03Podpisz każdą zbudowaną wersję

Na NAS-ie skopiuj pliki certyfikatu do folderu projects/<name>, obok qpkg.cfg. Plik .gitignore z szablonu nie pozwala dodać ich do gita. Budowanie w tym folderze podpisuje wtedy pakiet, a pierwszy wiersz wyniku bvs qbuild to case 1. Gdy w środowisku brakuje openssl lub bsdextrautils, budowanie się zatrzymuje i podaje polecenie, które je doda.

CI pobiera repozytorium bez tych plików, więc bierze je z dwóch sekretów. W Forgejo otwórz Ustawienia → Działania → Sekrety repozytorium i dwa razy naciśnij Dodaj sekret: QPKG_CERTIFICATE z wynikiem polecenia base64 -w0 certificate i QPKG_PRIVATE_KEY z wynikiem base64 -w0 private_key. Forgejo sam zaleca Base64 dla wartości, w których trzeba zachować podziały wierszy. Certyfikat z łańcuchem wymaga trzeciego sekretu, QPKG_CA_CERTS, oraz trzeciego wiersza w pierwszym kroku, który zapisze go do ca_certs.

Okno Dodaj sekret w Forgejo: Nazwa QPKG_CERTIFICATE, Wartość to linia Base64, przyciski Anuluj i Potwierdź

Następnie dodaj do .forgejo/workflows/build.yml dwa kroki. Pierwszy, zaraz po checkout, zapisuje pliki przed budowaniem. Drugi, na końcu listy, usuwa je bez względu na wynik. Kroków szablonu nie zmieniasz.

# .forgejo/workflows/build.yml: the two new steps, in the template's steps list
    steps:
      - uses: actions/checkout@v4
      - name: certificate from the secrets
        run: |
          printf '%s' "$CERT" | base64 -d > certificate
          printf '%s' "$KEY" | base64 -d > private_key
          chmod 600 private_key
        env:
          CERT: ${{ secrets.QPKG_CERTIFICATE }}
          KEY: ${{ secrets.QPKG_PRIVATE_KEY }}
      # the template's build and publish step follows here, unchanged
      - name: remove the certificate
        if: always()
        run: rm -f certificate private_key ca_certs

04Każde wypchnięcie publikuje

Każde wypchnięcie zmian do repozytorium uruchamia workflow na runnerze, który działa na samym NAS-ie. Workflow buduje pakiet i publikuje go z opcją --latest, więc repo.xml od razu podaje nową wersję, a App Center zaproponuje ją przy najbliższym sprawdzeniu. Wersja bez podpisu nie zostanie opublikowana: przebieg kończy się ostrzeżeniem z przyczyną.

Te same kroki uruchomisz ręcznie na stronie projektu (Projekty albo pasek boczny Edytora): Zbuduj, Zbuduj ponownie, Wdrożenie testowe (tylko administrator, tylko pakiety podpisane) i Opublikuj.

Potok projektu QPKG: Budowanie w ubuntu2404-builder, z przyciskami Zbuduj i Zbuduj ponownie; Wdrożenie testowe wymaga pakietu podpisanego kodem; Publikowanie informuje, że zbudowana wersja nie ma podpisu, a repozytorium przyjmuje tylko pakiety podpisane, oraz że CI publikuje także do repozytorium App Center; Publikacja w sieci nie może tu działać

Na jej karcie Ustawienia jest przełącznik Opublikuj w repozytorium App Center. Gdy jest wyłączony, przebieg CI pomija publikację i wyświetla komunikat.

Publikuj do repozytorium App Center, włączone: CI projektu dodaje jego pakiety do repozytorium App Center tego NAS-a

Strona Pakiety wymienia każdy pakiet z najnowszą wersją i podpisem. Wersja, którą developer wyśle tam ręcznie, czeka, aż administrator oznaczy ją jako najnowszą.

Opublikowane pakiety: nazwa, najnowsza wersja, architektury, podpisany, wersje i data publikacji każdej z nich

05Dodaj repozytorium na pozostałych NAS-ach

  1. Skopiuj adres z karty Adres dla App Center na stronie Pakiety. Adres App Center: http://192.168.1.20:9950/repo/repo.xml
  2. Na drugim NAS-ie: App Center → ⚙ Ustawienia → Repozytorium aplikacji → Dodaj. Podaj nazwę, wklej adres i naciśnij Dodaj.
  3. Twoje pakiety znajdziesz pod tą nazwą w lewym panelu App Center. Instaluj je tam. Gdy repozytorium wymieni nowszą wersję, App Center zaoferuje ją jako aktualizację.

Ten adres działa tylko dla NAS-ów w Twojej sieci lokalnej. Dla NAS-a spoza niej opublikuj repozytorium w internecie.

06Przez internet z Cloudflare Tunnel

Pakiet zawiera program cloudflared, który sam łączy się z NAS-a do Cloudflare. Nie trzeba więc otwierać żadnego portu na routerze, a certyfikaty dla nazw ma Cloudflare. Potrzebujesz domeny, której DNS jest w Cloudflare, oraz tokenu API dla tej strefy (dash.cloudflare.com, My Profile → API Tokens) z czterema uprawnieniami: Account, Cloudflare Tunnel, Edit; Zone, DNS, Edit; Zone, Cache Rules, Edit; Zone, Cache Purge, Purge. Jeśli token ma włączone Client IP Address Filtering, dodaj w nim oba publiczne adresy NAS-a, IPv4 i IPv6.

NazwaCo obsługuje
Nazwa hosta pakietów
qpkg.example.com
tylko GET i HEAD do /repo/: tyle potrzebuje App Center na pozostałych NAS-ach
Główna nazwa hosta
code.example.com
panel, Forgejo pod /git/ do klonowania i wypychania przez HTTPS, repozytorium tylko do odczytu, widok w przeglądarce publicznych repozytoriów oraz przewodnik
  1. Dla głównej nazwy hosta najpierw włącz Publiczne przeglądanie na stronie Git i naciśnij Zapisz i zrestartuj Forgejo: strona Publikowanie odrzuca główną nazwę hosta, gdy opcja jest wyłączona. Repozytoria oznaczone jako prywatne pozostają ukryte. Przełącznik Publiczne przeglądanie na stronie Git, włączony
  2. Otwórz Publikowanie w sekcji Administracja (tylko administratorzy). Wpisz nazwy i token, zostaw włączone Gotowe reguły pamięci podręcznej i naciśnij Opublikuj. Pakiet najpierw wszystko sprawdza w Cloudflare. Jeśli coś się nie zgadza, niczego tam nie zmienia i pokazuje, co poprawić. Nazwy hostów i token: główna nazwa hosta code.example.com, nazwa hosta pakietów qpkg.example.com, token jako kropki, nazwa tunelu pusta, presety pamięci podręcznej włączone, cztery uprawnienia potrzebne tokenowi oraz przycisk Opublikuj
  3. Następnie tworzy tunel, kieruje na niego każdą nazwę i uruchamia cloudflared. Karta Tunel pokazuje połączenia. Karta Tunel: 4 połączenia z Cloudflare, cloudflared uruchomiony, tunel bucketvs-nas-lab oraz opublikowane nazwy code.example.com i qpkg.example.com
  4. Adres App Center na stronie Pakiety wskazuje teraz nazwę hosta pakietów. Dodaj ten adres na NAS-ach poza Twoją siecią. Adres App Center: https://qpkg.example.com/repo/repo.xml
  5. Jeśli publikujesz główną nazwę hosta, na stronie Sieć wpisz jej adres w polu Publiczny URL. Wtedy linki Forgejo i adresy klonowania HTTPS będą prowadzić pod tę nazwę. Publiczny URL ustawiony na https://code.example.com na stronie Sieć
  • Git przez SSH nie przechodzi przez tunel. Z zewnątrz klonuj i wypychaj przez HTTPS, albo przekieruj port routera na port Git przez SSH (9952) i ustaw Host SSH w adresach klonowania na stronie Sieć.
  • Cloudflare przyjmuje żądania do 100 MB. Większe pliki wypychaj albo wysyłaj przez adres w sieci lokalnej.
  • Publikacja do repozytorium natychmiast usuwa repo.xml z pamięci podręcznej Cloudflare, więc App Center widzi nową wersję przy najbliższym sprawdzeniu.

07Co widzi internet

Strona Publikowanie pokazuje, co obsługuje każda nazwa, a obok reguły pamięci podręcznej.

Co widzi internet: główna nazwa hosta obsługuje panel, Forgejo, widok w przeglądarce i repozytorium pakietów, edytor tylko przy włączonym przełączniku, nigdy WebDAV; nazwa hosta pakietów obsługuje wyłącznie GET i HEAD dla /repo/. Presety pamięci podręcznej: pakiety na rok, ikony na dzień, repo.xml na 5 minut i czyszczone przy każdej publikacji; API, Forgejo i logowanie nigdy nie są buforowane
  • Pod główną nazwą hosta /ide/ odpowiada 404, dopóki administrator nie włączy Opublikuj edytor. Terminal edytora to powłoka root na NAS-ie, więc najpierw włącz uwierzytelnianie dwuskładnikowe dla kont deweloperów i administratorów. Edytor w internecie: przełącznik Opublikuj edytor wyłączony, z ostrzeżeniem o powłoce root i uwierzytelnianiu dwuskładnikowym
  • Gdy CI jest włączone, workflow wypchnięty do dowolnego repozytorium działa na NAS-ie jako root, bez względu na to, czy wypchnięto go z internetu, czy z sieci lokalnej. Prawo zapisu dawaj tylko osobom, którym możesz powierzyć hasło administratora NAS-a.
  • Hasła pierwszego administratora nie da się ustawić przez opublikowaną nazwę: ekran pierwszego uruchomienia przyjmuje tylko połączenia z sieci lokalnej.
  • Zatrzymaj kończy cloudflared i nic nie zmienia w Cloudflare. Usuń z Cloudflare kasuje rekordy DNS, reguły pamięci podręcznej i tunel utworzone przez pakiet i usuwa zapisany token.