Categories News

Utilizzo del thread scuro del registro delle immagini del contenitore Gitea

In precedenza ho condiviso una combinazione di utilizzo di MSBuild Target per gestire la compilazione Docker, salvataggio del file immagine come tar, caricamento scp sul lato Linux ed esecuzione di comandi ssh per caricare il file immagine. In questo articolo intendo fare un altro piccolo passo verso CI/CD, utilizzando Container Image Registry per gestire i file di immagine.

Se il progetto è su GitHub, Github ha il proprio servizio di registrazione delle immagini del contenitore: GHCR (GitHub Container Registry). Gli utenti gratuiti possono archiviare 500 MB (volume di trasferimento mensile: 1 GB) e l’abbonamento Pro ha 2 GB (volume di trasferimento mensile: 1 GB). GHCR è altamente integrato con il repository GitHub, le azioni e i sistemi di autorizzazione, rendendolo una buona scelta. Se sei un’organizzazione aziendale, Azure DevOps Server (in precedenza TFS Server) dispone di un set completo di soluzioni CI/CD e può anche ottenere un’integrazione perfetta con AD in tutto il mondo. Inoltre, dispone del supporto dei fornitori per il software commerciale, quindi dovrebbe essere la prima scelta per molte aziende.

Tuttavia, la discussione in questo articolo riguarda il mio Side Project del servizio a domicilio. Esistono numerosi progetti privati ​​che utilizzano server Gitea autoinstallati per il controllo della versione. Vogliono isolare completamente il codice del programma o i file immagine del contenitore sull’Intranet. Non hanno accesso a soluzioni cloud come Github e Docker Hub e il servizio di registrazione delle immagini deve essere configurato da soli.

Ho già configurato Docker Regisry da solo. Dato che il programma Docker accetta per impostazione predefinita solo connessioni sicure HTTPS, ricordo che ci voleva molta fatica per autofirmare il certificato. Ho speso un po’ di soldi per acquistare un nome di dominio DNS qualche tempo fa e l’ho combinato con l’API DNS di Cloudflare per utilizzare DNS-01 per ottenere un certificato TLS con caratteri jolly. Il costo di gestione del certificato è stato immediatamente ridotto a zero, ah! Ma questa volta vuoi continuare a utilizzare il registro Docker ufficiale?

Dopo aver controllato, ho scoperto che Gitea stessa ha un servizio di registrazione dei contenitori integrato (Container Registry), che segue lo standard OCI e supporta anche Docker. Il mio host di controllo della versione utilizza Gitea, quindi utilizzare direttamente il suo servizio di registrazione del contenitore integrato è naturalmente la mia prima scelta.

Per riassumere i passaggi per utilizzare Gitea per gestire le immagini del contenitore:

  1. Crea un token dedicato
    Inserisci il nome del token in Impostazioni utente/Applicazioni/Gestisci token di accesso e abilita solo le autorizzazioni di lettura e scrittura del pacchetto. In questo modo, anche se purtroppo il Token viene trapelato, l’ambito del rischio può essere ridotto al solo Pacchetto (Container Image):

    Dopo aver creato il Token, annota il valore esadecimale del Token per un uso successivo (la freccia rossa verrà visualizzata solo questa volta, quindi copiala attentamente):
  2. utilizzo docker login gitea.domain-name.net -u <username> Accedi, la password è il valore Token che hai appena generato.
  3. Se usi nginx come proxy inverso, ti consigliamo di aggiungerlo al file config client_max_body_size 512M; Aumenta il limite di lunghezza del caricamento per evitare HTTP 413 durante il push
  4. Per prima cosa crea l’immagine Docker su questa macchina e aggiungi un tag all’immagine nel formato di gitea.domain-name.net/<username>/<img-name>:<verion>per facilitarne l’utilizzo successivo, si consiglia di creare contemporaneamente un numero di versione digitale e l’ultimo Tag
  5. Utilizzare le istruzioni docker push gitea.domain-name.net/<username>/<img-name>:<verion> Spingilo su Gitea e il gioco è fatto!

Quindi, entra Nella tua pagina personale, fai clic su Pacchetti per vedere il file immagine del contenitore che hai appena caricato!

Per quanto riguarda Linux, quando ho eseguito il login docker su Debian, ho ricevuto un avviso che la mia password era archiviata in chiaro e non era sicura:

~$docker login gitea.my-domain.net -u jeffrey
Password:

WARNING! Your credentials are stored unencrypted in '/home/jeffrey/.docker/config.json'.
Configure a credential helper to remove this warning. See


Login Succeeded

Francamente, puoi semplicemente dire “Se il codice è chiaro, il codice è chiaro. Gli hacker possono accedere, quindi cos’altro c’è da proteggersi?” e basta chiudere un occhio. Tuttavia, ho colto l’occasione e ho imparato a archiviare le password in modo sicuro in Linux (il che alla fine ha richiesto tre volte il tempo rispetto alla parte Gitea, pfft).

Esistono molte opzioni per salvare le password in Linux, ma molte di esse richiedono la cooperazione con ambienti desktop come GNOME. I miei scenari applicativi riguardano principalmente operazioni ssh e distribuzione automatica, quindi ho scelto una soluzione CLI. Ecco cosa ho testato con successo:

sudo apt update
sudo apt install -y pass gnupg2 golang-docker-credential-helpers
which docker-credential-pass # 顯示 /usr/bin/docker-credential-pass
# 建立 GPG key
gpg --full-generate-key
# 列出 Key
gpg --list-secret-keys --keyid-format LONG

L’intelligenza artificiale e alcuni insegnamenti consigliano di utilizzare RSA, ma sulla base della precedente esperienza di ricerca (note GPG – generazione di chiavi ECC e crittografia e decrittografia di file), ho scelto di utilizzare l’opzione predefinita ECC. –list-secret-keys I risultati elencati di seguito sono esempi. Scoprire sec ed25519/0123456789ABCDEF Parte di 0123456789ABCDEF:

gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/jeffrey/.gnupg/pubring.kbx
--------------------------------
sec   ed25519/0123456789ABCDEF 2026-05-19 [SC]
      E33AB706BB79C199ED30775ABA445A7B6F36192F
uid                 [ultimate] jeffrey <[email protected]>
ssb   cv25519/FEDCBA987654321 2026-05-19 [E]

attrezzo pass init 0123456789ABCDEF Crea archivio password:

Rivedere ~/.docker/config.json Sostituisci il contenuto con "credsStore": "pass" Successivamente, esegui nuovamente docker login gitea.my-domain.net -u jeffrey Accedi con pass ls Puoi vedere le informazioni salvate interrogando:

prova dopo docker pull gitea.domain-name.net/<username>/<img-name>:<verion> Se il download ha esito positivo~

C’è un piccolo problema qui che potrebbero verificarsi i seguenti errori quando git pull / push error getting credentials - err: exit status 1, out: exit status 2: gpg: public key decryption failed: No such file or directory gpg: decryption failed: No such file or directorydopo che Docker utilizza pass (il gestore delle password di GPG), questo tipo di errore si verificherà quando il portachiavi dell’agente GPG scade o è bloccato.

Soluzione 1 Immettere la password manualmente

Firma casualmente un pezzo di testo per attivare l’immissione della password. La password verrà memorizzata nella cache per un po’ prima dell’esecuzione. git pull ci riuscirà.

export GPG_TTY=$(tty) # 指定由 TTY 輸入密碼,可設在 ~/.bashrc
echo "plain" | gpg --clearsign > /dev/null

Soluzione 2: modificare l’input del codice semplice durante l’automazione dello script

L’immissione della password di GPG è intenzionalmente isolata in un pinentry di programma autonomo (pinentry-gnome, pinentry-curses, pinetry-tty) per impedire al programma principale di toccare direttamente la password per migliorare la sicurezza, ma non è adatto per scenari di scripting automatizzati in cui non è coinvolto nessuno.

La procedura per sbloccare il token di decrittazione GPG con una password chiara è piuttosto complicata. È necessario effettuare prima la configurazione ~/.gnupg/gpg-agent.confpartecipa allow-loopback-pinentry;Imposta ‘~/.gnupg/gpg.conf’ da aggiungere pinentry-mode loopbackdopo la modifica gpgconf --kill gpg-agent Riavvia l’agente gpg.

Utilizza il seguente programma per sbloccare la cache della sottochiave crittografata di gpg-agent prima del pull/push del docker, quindi utilizza la password memorizzata per completare l’accesso a Gitea, uff~

echo "<gpg-password>" | gpg \
  --batch \
  --passphrase-fd 0 \        # 從 fd 0(stdin)讀取密碼
  --pinentry-mode loopback \ # 使用 loopback(不叫 pinentry)
  -d ~/.password-store/docker-credential-helpers/Z2...lu/jeffrey.gpg 2>&1 /dev/null
# gpg-agent 有解密金鑰 Cache,可取出 Gitea 密碼完成登入
docker compose pull

In breve, dopo aver utilizzato le competenze del contenitore Push and Pull di Gitea, il passo successivo può essere quello di studiare il processo automatizzato di modifica automatica della versione del contenitore dopo git push~

Descrive come utilizzare il registro dei contenitori integrato di Gitea per la gestione delle immagini Docker private, inclusa la configurazione dei token, i flussi di lavoro push/pull, le restrizioni nginx, l’archiviazione sicura delle credenziali Docker utilizzando pass e GPG e la gestione dei problemi del proxy GPG per le distribuzioni automatizzate.


PakarPBN

A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.

In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.

The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.

Jasa Backlink

Download Anime Batch

More From Author