C O D I N G

Gitea - Postgresql 업그레이드 (마이그레이션) 본문

Synology/Gitea

Gitea - Postgresql 업그레이드 (마이그레이션)

SherryBirkin 2026. 7. 18. 15:05
  • Gitea를 프로젝트로 생성해서 빌드 했을 경우에 한 함.

기본 구성 (Yaml)

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - /volume1/docker/gitea:/data
    ports:
     - "3000:3000"
     - "22:22"
    depends_on:
      db:
        condition: service_healthy

  db:
    image: docker.io/library/postgres:17
    container_name: gitea-db
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - /volume1/docker/gitea/postgres/data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U gitea -d gitea"]
      interval: 5s
      timeout: 5s
      retries: 20

 

이런 형태로 구성되어 있을 가능성이 크고 Volume 경로는, 설정에 따라 다를 수 있음

지금 postgresql 버전이 17이고 이거를 특정버전으로(여기에서는 18.4) 올릴 예정

다이렉트로 현재 구성되어 있는 yaml을 수정하여 빌드 하는 경우,

17 -> 18.4로 db가 덮어씌워져 버리기때문에 db의 테이블이 날아가 버린다.

 

  • 진행순서
    1. gitea 컨테이너 중지
    2. ssh 접속 → postgresql 17버전 backup sql 생성
    3. postgresql 18.4 컨테이너 다운로드 및 단독 실행
    4. ssh → 백업된 sql을 18.4에서 실행
    5. postgresql 17버전 서비스 중지
    6. gitea yaml 파일 수정 및 재빌드

 

  • gitea 컨테이너 중지
    • Data 추가/수정되지 않도록 gitea 서비스를 종료 한다.
  • ssh 접속 → postgresql 17버전 backup sql 생성
    • 관리자 계정으로 ssh 접근
    • sql을 백업하고자 하는 경로까지 접근 하여 아래 코드 입력
    •   

    • docker exec gitea-db pg_dump -U gitea gitea > gitea_backup.sql
    • gitea-db는 본인이 지정한 container_name을 입력하면 된다.
    • 그럼 본인이 최종 접근했던 경로에 gitea_backup.sql 파일이 생성된것을 알 수 있다. 해당데이터는 17버전에서 구성된 테이블 및 데이터들을 복원 할 수 있는 쿼리가 저장되어 있고 그냥 파일을 오픈해서도 확인 할 수 있다.
  • postgresql 18.4 컨테이너 다운로드 및 단독 실행
    • gitea 프로젝트에서 gitea-db컨테이너를 중지
    • 18.4를 생성하기 위한 프로젝트 yaml을 작성한다.

    • services
      :
        db:
          image: docker.io/library/postgres:18.4
          container_name: gitea-db-v18
          restart: always
          environment:
            - POSTGRES_USER=gitea
            - POSTGRES_PASSWORD=gitea
            - POSTGRES_DB=gitea
          volumes:
            - /volume1/docker/gitea/postgres:/var/lib/postgresql
    • 위와 같이 구성한다. container_name은 17버전에서 사용한 이름과 다르게 지정되어야 한다.
    • environment값 역시 17버전과 동일하게 설정해야, 마이그레이션 이후에 정상동작한다.
    • volumes의 경우 postgresql/data에서 /data를 제거 해주어야 한다. (실경로가 postgres로 이전버전과 똑같으나. 18버전부터 해당폴더내에 하위폴더 추가되니 위와같이 설정하면 된다.
    • 저장 후 빌드
  • ssh → 백업된 sql을 18.4에서 실행
    • 18.4에서 생성한 테이블이 정상인지 확인한다.
    • 실행
      docker exec -it gitea-db-v18 psql -U gitea -d gitea
      결과
      psql (18.4 (Debian 18.4-1.pgdg13+1)) Type "help" for help.
      
      실행
      gitea=# \dt
      결과
      Did not find any tables.
    • 위와 같은 결과가 나오면 정상이다. db는 18.4 버전이고. 테이블을 조회했을때 아무것도 없다. (db를 방금생성) 
    • 위에서 백업해둔 sql파일을 18.4버전의 db에 restore한다.
    • cat /volume1/docker/gitea/gitea_backup.sql | docker exec -i gitea-db-v18 psql -U gitea -d gitea


    • cat이후의 경로는 본인이 저장한 sql 파일의 경로를 지정하면 된다.
    • 마이그레이션이 완료되었다면, 다시 \dt 를 이용하여 테이블을 조회하면 정상적으로 조회됨을 알 수 있다.
  • postgresql 17버전 서비스 중지 (이제 삭제해도 무방하나 최종 확인 후 삭제하는게 좋음)
  • gitea yaml 파일 수정 및 재빌드
networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:latest
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=postgres
      - GITEA__database__HOST=db:5432
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - /volume1/docker/gitea:/data
    ports:
     - "3000:3000"
     - "22:22"
    depends_on:
      db:
        condition: service_healthy

  db:
    image: docker.io/library/postgres:18.4
    container_name: gitea-db-v18
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - /volume1/docker/gitea/postgres:/var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U gitea -d gitea"]
      interval: 5s
      timeout: 5s
      retries: 20
  • 저장 및 재빌드

마이너 버전을 자동업그레이드를 허용한다고하면 

    image: docker.io/library/postgres:18.4     image: docker.io/library/postgres:18 로 바꾸면 된다.

 

 

  • 요약
    • 사용하던 DB sql 파일로 백업 (테이블 및 데이터)
    • 신규 DB 생성
    • 신규 DB에 백업된 데이터로 복원
    • Gitea서비스에서 신규 DB로 연결
    • 사용하던 DB서비스 제거

'Synology > Gitea' 카테고리의 다른 글

Gitea - GPG  (0) 2025.12.10
Gitea 설치 - 2  (0) 2025.12.10
Gitea - SSH 설정  (0) 2025.12.10
Gitea 설치 - 1  (0) 2025.12.10