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à
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
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
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
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.