Skip to content

GitFlic Backup Procedures


Important Notice

The following utilities are required for backup operations:

Backup Process

  1. Install required utilities:

    sudo apt update && sudo apt install postgresql-common postgresql-client redis-tools rsync s3cmd -yq
    
  2. Stop GitFlic service

  3. Backup PostgreSQL database:

    PGPASSWORD=<DB_Password> pg_dump -h <PostgreSQL_Address> -d <gitflic_DB_Name> -U <gitflic_DB_Role> -b -v -f dump.sql
    
    PGPASSWORD=<DB_Password> pg_dump -h <PostgreSQL_Address> -d <gitflic_DB_Name> -U <gitflic_DB_Role> -F c -b -v -f dump.restore
    
  4. Backup Redis database by copying dump.rdb:

    redis-cli <DB_Connection_Parameters> save
    cp /var/lib/redis/dump.rdb ./dump.rdb
    
  5. Copy GitFlic static data (default directories: img, repo, cicd, releases, registry):

    for d in img repo cicd releases registry; do
        cp -r /var/gitflic/$d ./
    done
    
    for d in img repo cicd releases registry; do
        rsync /var/gitflic/$d -avxH --delete-during <username>@<server_address>:backup/$d
    done
    
    # Requires pre-configured s3cmd for your S3 provider
    s3cmd sync "s3://<bucket_name>/" ./ 
    
  6. Backup certificate files:

    cp -r /opt/gitflic/cert ./
    

Restoration Process

  1. Install required utilities (same as backup)

  2. Stop GitFlic service

  3. Restore PostgreSQL database:

    3.1. Connect to gitflic database:

    ```shell
    PGPASSWORD=<DB_Password> psql -h <PostgreSQL_Address> -d <gitflic_DB_Name> -U <gitflic_DB_Role>
    ```
    

    3.2. Drop existing tables:

    ```sql
    DO $$ 
    DECLARE 
        r RECORD; 
    BEGIN 
        FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP 
            EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE'; 
        END LOOP; 
    END $$; \q
    ```
    

    3.3. Restore from dump:

    ```shell
    PGPASSWORD=<DB_Password> psql -h <PostgreSQL_Address> -d <gitflic_DB_Name> -U <gitflic_DB_Role> < dump.sql
    ```
    
    PGPASSWORD=<DB_Password> pg_restore -h <PostgreSQL_Address> -d <gitflic_DB_Name> -U <gitflic_DB_Role> -c --if-exists dump.restore
    
  4. Restore Redis/KeyDB database:

    1. Stop database service:

      systemctl stop redis-server
      
    2. Copy dump file:

      cp dump.rdb /var/lib/redis/dump.rdb
      
    3. Start database service:

      systemctl start redis-server
      
  5. Restore GitFlic static data:

    for d in img repo cicd releases registry; do
        cp -r $d /var/gitflic/
    done
    
    for d in img repo cicd releases registry; do
        rsync <username>@<server_address>:backup/$d -avxH --delete-during /var/gitflic/$d 
    done
    
    s3cmd sync ./ "s3://<bucket_name>/"
    
  6. Restore certificate files:

    cp -r ./cert /opt/gitflic/cert
    

Best Practices

  • Schedule regular backups during low-usage periods
  • Verify backup integrity periodically
  • Store backups in multiple locations (local + remote)
  • Document your backup/restore procedures