Parliamo del progetto
Linux Ubuntu 14.04 LTS Ubuntu 18.04 LTS

Migrazione e aggiornamento di un server GitLab CE

Ogni 5 anni c’è la mêla mia musica. La versione di Debian LTS arriva à scadenza e bisogna mettere à giorno il server. E quindi, ne approfittiamo per prendere una macchina récento per bénéottenere le miglio...

Migrazione e aggiornamento di un server GitLab CE

Ogni 5 anni c’è la mêla mia musica. La versione di Debian LTS arriva à scadenza e bisogna mettere à giorno il server. E quindi, ne approfittiamo per prendere una macchina récento per bénéottenere le migliori prestazioni.
Se abbiamo un disco rigido SATA, è meglio ricominciare con dei nuovi dischi comunque’arriva. I loro duriée de vie élimite tangenteées.

Procederemo quindiéil à una série di backup su l’vecchio server, trasferirli sul nuovo e tutto réinstallatore à l’identico.

Nel nostro caso, noi éazioni su una Debian 8, che supporta GitLab 13.3.9.
Stiamo cambiando macchina per una Debian 10, che supporta GitLab 14.x.x

Installare GitLab-ce è semplice, finché noi non’non abbiamo repository à migrare. Là o çsi complica, c’è che’non bisogna perdere nulla di l’vecchia istanza. Da partITech abbiamo più di 100 repository che riprésentono à poco prèS 20 Vai d’archivi.

Gli archivi non sono compatibili tra le versioni. Quindi se abbiamo un archivio creato con la versione 13.3.9, sarà necessario installare questa même versione e fare l’import. L'ultimaère énastro consisterà à effettuare la migrazione dalla 13.3.9 all'ultimaère versione 14.x
Ma per procéil à questa montagnaée di versione maggiore, ci servirà impéinstallare rapidamente l'ultimaère versione alla data del ramo 13.x sia la versione 13.12.0

Installazione dei pacchetti di base

apt-get install vim curl backup-manager mlocate libcurl4-openssl-dev libexpat1-dev gettext libz-dev libssl-dev libpcre2-dev build-essential git-core graphicsmagick libimage-exiftool-perl htop

Si installa vim e si déattiva il mouse.

vi ~/.vimrc
#on ajoute set mouse-=a

Su dé-commenta gli alias.

vi ~/.bashrc
.   ~/.bashrc

Su l’vecchio server

Si fermano i servizi.

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

Su créè un backup.

sudo gitlab-rake gitlab:backup:create

Su présembra un rérepertorio in cui si mette l’insieme dei nostri file à rimpatriare.

mkdir ~/gitlab-old

Copiamo i nostri file di configurazione dal nostro répertoire. /etc/gitlab (gitlab.rb e gitlab-secrets.json) così come il rérepertorio /etc/gitlab/ssl

sudo cp /etc/gitlab/gitlab.rb ~/gitlab-old
sudo cp /etc/gitlab/gitlab-secrets.json ~/gitlab-old
sudo cp -R /etc/gitlab/ssl ~/gitlab-old
sudo cp /etc/backup-manager.conf ~/gitlab-old/
sudo cp /etc/backup-manager.sh ~/gitlab-old/

Sul nuovo server

Si installa la sorgente apt di GitLab.

curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh |  bash

Si installa la versione di GitLab à l’identico a l’vecchia per non avere problemièmesi d’installazioni. Poi metteremo à giorno con l'ultimaèversione re.

sudo apt-get install gitlab-ce=13.3.9-ce.0

Installiamo i nostri file di configurazione della nostra vecchia istanza.

sudo mv /etc/gitlab/gitlab.rb /etc/gitlab/_gitlab.rb
sudo cp gitlab-old/gitlab* /etc/gitLab

Si copia la rérepertorio SSL della nostra vecchia istanza.

cp -R gitlab-old/ssl /etc/gitlab/

Avviamo la riconfigurazione di GitLab.

sudo gitlab-ctl reconfigure

Acceso étinge i servizi.

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq

Mettiamo il nostro primo backup nel rérepertorio di backup da démanca di GitLab (abbiamo modificatoé nostro rérépertoire par débisogna.

sudo cp gitlab-old/1624870826_2021_06_28_13.3.9_gitlab_backup.tar ~/gitlab-backups

E lo’importo.

sudo gitlab-rake gitlab:backup:restore BACKUP=1624870826_2021_06_28_13.3.9

Si fissano i permessi.

  sudo find /data/gitlab-storage -type f -exec chmod 0644 {} \;
  sudo find /data/gitlab-storage/uploads -type d -not -path /data/gitlab-storage/uploads -exec chmod 0700 {} \;

Convertiamo i nostri repository in hash se necessario.

gitlab-rake gitlab:storage:migrate_to_hashed

Si aprono le porte 80 e 443 nel firewall se necessario.

iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

L’interfaccia dovrebbe rédepone normalmente adesso sul nostro nuovo server.

Aggiornamento delle versioni

Ora dobbiamo mettere à giorno GitLab.
Première étappa, si passa sotto la versione 13.5.0

apt-get install gitlab-ce=13.5.0-ce.0

E ilà su una l’errore seguente: PG::DuplicateTable: ERRORE: relazione « indici_postgres » esiste già

Selection_865

Per far passare lo script, dovremo modificare la procédure d’aggiornamento per aggiungere un drop degli indici nel file : /opt/gitlab/embedded/service/gitlab-rails/db/migrate/20200922093004_add_postgres_index_view.rb

# frozen_string_literal: true

class AddPostgresIndexView < ActiveRecord::Migration[6.0]
  DOWNTIME = false

  def up
    execute(<<~SQL)
       DROP VIEW IF EXISTS postgres_indexes;
        CREATE VIEW postgres_indexes AS
      SELECT
        pg_namespace.nspname || '.' || pg_class.relname as identifier,
        pg_index.indexrelid,
        pg_namespace.nspname as schema,
        pg_class.relname as name,
        pg_index.indisunique as unique,
        pg_index.indisvalid as valid_index,
        pg_class.relispartition as partitioned,
        pg_index.indisexclusion as exclusion,
        pg_indexes.indexdef as definition,
        pg_relation_size(pg_class.oid) as ondisk_size_bytes
      FROM pg_index
      INNER JOIN pg_class ON pg_class.oid = pg_index.indexrelid
      INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid
      INNER JOIN pg_indexes ON pg_class.relname = pg_indexes.indexname
      WHERE pg_namespace.nspname <> 'pg_catalog'
    SQL
  end

  def down
    execute(<<~SQL)
      DROP VIEW postgres_indexes
    SQL
  end
end

Una volta modificato lo script di migrazioneé, si rilancia il riconfigura.

gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
Selection_866

Adesso possiamo passare à l’aggiornamento successivo. Aggiorna à la versione 13.6.0 e incrémentire le installazioni fino’à la versione 13.12.0

apt-get install gitlab-ce=13.6.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
apt-get install gitlab-ce=13.7.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
apt-get install gitlab-ce=13.8.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
apt-get install gitlab-ce=13.9.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
apt-get install gitlab-ce=13.10.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
apt-get install gitlab-ce=13.11.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
apt-get install gitlab-ce=13.12.5-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure

Sulla versione 13.7.0 sarà necessario correggere lo script di migrazione.

/opt/gitlab/embedded/service/gitlab-rails/db/migrate/20201127170848_aggiungi_indice_stima_ingombro_view.rb

# frozen_string_literal: true

class AddIndexBloatEstimateView < ActiveRecord::Migration[6.0]
  DOWNTIME = false

  def up
    execute(<<~SQL)
      DROP VIEW IF EXISTS postgres_index_bloat_estimates;
      CREATE VIEW postgres_index_bloat_estimates AS
      -- Originally from: https://github.com/ioguix/pgsql-bloat-estimation/blob/master/btree/btree_bloat.sql
      -- WARNING: executed with a non-superuser role, the query inspect only index on tables you are granted to read.
      -- WARNING: rows with is_na = 't' are known to have bad statistics ("name" type is not supported).
      -- This query is compatible with PostgreSQL 8.2 and after
      SELECT nspname || '.' || idxname as identifier,
        CASE WHEN relpages > est_pages_ff
          THEN bs*(relpages-est_pages_ff)
          ELSE 0
        END::bigint AS bloat_size_bytes
      FROM (
        SELECT
            coalesce(1 +
              ceil(reltuples/floor((bs-pageopqdata-pagehdr)*fillfactor/(100*(4+nulldatahdrwidth)::float))), 0
            ) AS est_pages_ff,
            bs, nspname, tblname, idxname, relpages, is_na
        FROM (
            SELECT maxalign, bs, nspname, tblname, idxname, reltuples, relpages, idxoid, fillfactor,
                  ( index_tuple_hdr_bm +
                      maxalign - CASE -- Add padding to the index tuple header to align on MAXALIGN
                        WHEN index_tuple_hdr_bm%maxalign = 0 THEN maxalign
                        ELSE index_tuple_hdr_bm%maxalign
                      END
                    + nulldatawidth + maxalign - CASE -- Add padding to the data to align on MAXALIGN
                        WHEN nulldatawidth = 0 THEN 0
                        WHEN nulldatawidth::integer%maxalign = 0 THEN maxalign
                        ELSE nulldatawidth::integer%maxalign
                      END
                  )::numeric AS nulldatahdrwidth, pagehdr, pageopqdata, is_na
            FROM (
       

Adesso installiamo la versione 14.0.0.

apt-get install gitlab-ce=13.12.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure

Dalla versione 14, è necessario impéutilizzare praticamente il sistema di file per hash. L’l'installazione visualizzerà un avviso e fermerà il processo.

root@git-partitech-sd-47766:/opt/gitlab# apt-get install gitlab-ce=14.0.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  gitlab-ce
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/923 MB of archives.
After this operation, 14.5 MB of additional disk space will be used.
Reading changelogs... Done
(Reading database ... 119998 files and directories currently installed.)
Preparing to unpack .../gitlab-ce_14.0.0-ce.0_amd64.deb ...
gitlab preinstall: Checking for unmigrated data on legacy storage
gitlab preinstall: 
gitlab preinstall: Legacy storage is no longer supported. Please migrate your data to hashed storage.
gitlab preinstall: Check https://docs.gitlab.com/ee/administration/raketasks/storage.html#migrate-to-hashed-storage for details.
gitlab preinstall: 
gitlab preinstall: If you want to skip this check, run the following command and try again:
gitlab preinstall: 
gitlab preinstall:  sudo touch /etc/gitlab/skip-unmigrated-data-check
gitlab preinstall: 
dpkg: error processing archive /var/cache/apt/archives/gitlab-ce_14.0.0-ce.0_amd64.deb (--unpack):
 new gitlab-ce package pre-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 /var/cache/apt/archives/gitlab-ce_14.0.0-ce.0_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Sarà quindi necessario convertire i vostri repository se non’non è déjà fatto.

gitlab-rake gitlab:storage:migrate_to_hashed

E poi lanciare l’installa in spécifiant di non più visualizzare l’allerta.

sudo touch /etc/gitlab/skip-unmigrated-data-check
apt-get install gitlab-ce=14.0.0-ce.0 && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq && gitlab-ctl reconfigure
Selection_871

L’éil nastro più critico è passatoée. Si può mettere à giorno sull'ultimoère versione. Da parte nostraé c’è la versione 14.0.1

apt-get upgrade

Ultimoère operativoération. Sì, se come noi utilizzate le notifiche Slack, sarà necessario migrare la configurazione. I servizi template sono rimossiés dalla versione 14.x.x

Potete réintégestire le notifiche progetto per progetto, o fare come noi, metterle a livello globale.
Per questo, dovrete andare nell'Area Admin >> Hook di sistema

Selection_874

Pianificare un aggiornamento della versione attuale di GitLab

La procedura storica rimane un ritorno d’esperienza, ma un aggiornamento di GitLab deve seguire il percorso specifico delle versioni di partenza e di arrivo. Rilevate la versione esatta, eseguite il backup dell’istanza e consultate le note di ciascuna fase obbligatoria.

  • Installa l'ultima correzione disponibile di ogni versione intermedia richiesta.
  • Attendete la fine delle migrazioni in background prima del passo successivo.
  • Testate il ripristino e il rollback prima dell'intervento in produzione.

Riferimento : strumento e percorsi ufficiali di aggiornamento di GitLab.

Condividi questo articolo