테스트 사이트 - 개발 중인 베타 버전입니다

그누보드 버전 업데이트 관리기능

· 3년 전 · 10715 · 94
1.1 업데이트 설정_1_0.png

2022년 8월 16일 

기능 추가 및 개선사항이 적용된 버전 공유합니다

파일명 : gnuboard5_update_220816.zip

 

1. DB 업데이트 기능 추가

■ 버전 업데이트 진행 시, DB업데이트도 같이 진행할 수 있도록 선택항목이 추가됩니다.

  • 업데이트 버전에 맞는 DB변경사항이 적용됩니다.
  • 다운그레이드 시, 해당 기능을 이용할 수 없으며 DB변경사항이 원복되지 않습니다. (구현은 되어있지만, 데이터 망실의 가능성이 있으므로 주석처리)

3717582117_1660618892.5035.png

 

■ migration Table이 추가됩니다.

  • DB 업데이트 시, 업데이트 이력을 기록할 수 있는 테이블입니다.

CREATE TABLE `g5_migrations` (

  `mi_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

  `mi_version` varchar(30) NOT NULL COMMENT '업데이트 버전',

  `mi_sort` int(11) DEFAULT 0 COMMENT '순번',

  `mi_script` varchar(255) NOT NULL COMMENT 'migration 파일이름',

  `mi_execution_date` datetime DEFAULT NULL COMMENT '실행시각',

  `mi_execution_time` int(11) DEFAULT NULL COMMENT '실행시간',

  `mi_result` varchar(100) DEFAULT NULL COMMENT '성공여부 (success or fail)',

  `mi_reason` varchar(255) DEFAULT NULL COMMENT '실패 메시지',

  PRIMARY KEY (`mi_id`)

) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8;

 

2. 복원(백업)파일

  • 삭제기능이 추가되었습니다.

3. 로그파일 

  • 삭제기능이 추가되었습니다.
  • 버전 변경 내역기록이 추가되었습니다.

4. 코드개선

  • Class 파일이 기능 별로 분리되었습니다.

5. 기타

  • LSB(Late Static Binding) 적용으로 인해, PHP 5.2에서 PHP 5.3 버전부터 지원으로 변경됩니다.
  • FTP/SFTP 계정정보 입력 시, 비밀번호 입력 폼이 적용됩니다.
  • 버전 목록에서 beta버전, 버전 형식에 맞지않은 이전버전으로 업데이트가 불가능합니다.
  • Class 관련 PHP파일의 경로가 Plugin 폴더 하위로 이동했습니다. (/plugin/version_update/..)
  • Github API 요청횟수를 줄이기 위해 version.json 파일이 추가됩니다. (/data/version.json)

===================================================================

 

Github API를 이용한 그누보드 버전 관리 기능입니다.

 

기능

  • 업데이트 : 원하는 버전의 압축파일을 Github API를 이용해 가져온 후 비교&업데이트 해주는 기능입니다.

3717582117_1656479376.1376.png

1번 : 현재 버전 / 최신 버전 / 업데이트 가능 버전을 확인 할 수 있습니다.

2번 : 파일 업로드 정보를 설정하는 곳입니다. (FTP, SFTP)

3번 : 업데이트 버전 선택 시 commit 정보를 확인 할 수 있는 영역입니다.

 

FTP 또는 SFTP 연결에 성공하면 아래 내역을 확인하고 계속 진행 할 수 있습니다.

3717582117_1656480860.8552.png

  • 업데이트 버전
  • 현재 디스크 용량
  • 업데이트를 진행 파일 (임의로 커스텀한 파일이 있다면 빨간글씨로 표시됩니다.)

 

업데이트 진행 결과를 확인할 수 있습니다.

3717582117_1656481406.387.png

 

  • 복원 : 업데이트를 진행할 때 생성되는 원본 압축파일으로 그누보드를 다시 원상복구시키는 기능입니다. 업데이트와 폼이 거의 동일합니다.

3717582117_1656479695.3881.png

1번 : 버전 업데이트시 생성된 복원파일 목록입니다. 

 

3717582117_1656479795.9826.png

복원 일시 및 복원 버전을 확인할 수 있습니다.

 

  • 로그 : 업데이트/복원을 진행한 내역을 확인할 수 있는 기능입니다.

3717582117_1656479850.5445.png

 

적용 방법

  • 압축 해제 이후, 그누보드 경로에 덮어씌우면 됩니다. (기존 그누보드 파일에 영향이 없습니다.)

 

참고사항

  • PHP Version 5.2.17 ~ 8.1.7에서 동작합니다.
  • 리눅스 & 윈도우 환경에서 동작합니다.
  • 그누보드 업데이트 지원 버전은 최신 30개의 버전이 지원됩니다. (https://github.com/gnuboard/gnuboard5/releases 기준)
  • Github API를 이용하기 때문에 PAT(Personal Access Token)을 생성 및 적용을 권장합니다.
  • 지원 프로토콜은 FTP, SFTP를 지원하며 프로토콜의 PHP 모듈을 필요로 합니다.

 

사전준비 

  • PAT(Personal Access Token)

Github API는 시간당 60회의 제한이 있지만, 요청제한을 없애려면 개인 토큰을 생성해서 적용해야합니다. Token을 적용하지 않아도 사용할 수는 있지만, 요청제한 초과 시 정상적으로 업데이트 진행이 되지 않을 수 있으므로 추가하는 것을 권장합니다.

  1. github.com 로그인
  2. 우측상단 Profile 클릭 > Settings
  3. 좌측 Developer settings > Personal access tokens 메뉴에서 토큰 생성 (자세한 내용은 링크 참조) https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
  4. $token 값 추가

/adm/update/update.lib.php

3717582117_1656479203.3184.png

  • SFTP 

SFTP 옵션을 활성화하려면, ssh2 module을 설치해서 ssh관련 함수를 사용할 수 있어야합니다.

 

 

오류발생

1. '정보조회에 실패했습니다. 1시간 후 다시 시도해주세요.' 또는 '비교리스트확인 통신에 실패했습니다.'

=> PAT 값이 유효하지 않아서 생기는 오류입니다. $token 변수를 확인하거나 Token을 재발급받으시길 바랍니다. 

 

2. 디스크 용량이 실제와 다르게 표시되는 문제

=> 웹 호스팅의 경우, 공용으로 사용하기 때문에 큰 용량이 잡힘. 사용가능한 용량이 넘지 않는다면 업데이트 기능에 문제가 없습니다.

 

 

 

테스트를 진행한다고 했는데 부족한 점이 많이 있을 것 같습니다. 좋은 아이디어나 조언이 있다면 겸허히 받아들이고 더 발전시키도록 하겠습니다. 감사합니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 94개

ftp 포트 21 , sftp 포트 22 가 아닌 다른 것으로 사용하도록 설정 된 경우가 있으므로
포트 번호를 input text 로 넣도록 하는것은 어떨까요?
업그레이드 고민 해결, 감사합니다.
1년 전

현재 PHP 버전: 5.6.40 인데

Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM) in C:\xampp\htdocs\plugin\version_update\G5UpdateLog.lib.php on line 22

 

라고 에러가 발생 합니다.

도와주세요~

8개월 전

오늘 사용해보니 disk_free_space('/') 용량 계산시 root(/) 접근이 허용되지 않은 경우 빈값을 리턴합니다. disk_free_space(__DIR__); 로 수정하시면 해결됩니다.