Bitbucket DIY Backup
ãã®èšäºã§ã¯ãBitbucket Server 4.x+ã§äœ¿çšã§ãããBitbucket Server DIY Backup ã¹ã¯ãªããã®äœ¿çšã«ã€ããŠèª¬æããŸãããã®è£œåã®ä»¥åã®ããŒãžã§ã³ (Stash) ãå®è¡ããŠããå ŽåããStash (3.11) DIY Backup ã®äœ¿çšããåç §ããŠãã ããã
Bitbucket Server DIY Backup ã¯ãBitbucket Server Backup Client ã®äœ¿çšã®ä»£æ¿æŠç¥ã§ããããã«ãã以äžãå®çŸã§ããŸãã
- äžè²«æ§ã®ããããã¯ã¢ãããäœæããããã«å¿ èŠãªããŠã³ã¿ã€ã ãå€§å¹ ã«åæžããã
- ãå©çšã®ããã¯ãšã³ãã®ããŒã¿ããŒã¹ã«é©ããããã³ããŒåºæã®ããã¯ã¢ãã ããŒã«ã䜿çšãããäŸ:
pg_dump: ããã¯ãšã³ãã®ããŒã¿ããŒã¹ã PostgreSQL ã®å ŽåããŸãã¯sqlcmd: ãã㯠ãšã³ãã®ããŒã¿ããŒã¹ã MS SQL Server ã®å Žåãå·®åããã¯ã¢ããçšã®é©åãªã³ãã³ããšãšãã«äœ¿çšã
- Bitbucket Server ããŒã ãã£ã¬ã¯ããªã«æé©ãªãã¡ã€ã« ã·ã¹ãã ããã¯ã¢ãã ããŒã«ã䜿çšããŸããäŸ:
- ã䜿ãã® Bitbucket Server ããŒã ãã£ã¬ã¯ããªã LVM ã䜿çšããŠããå Žå㯠LVM ã¹ãããã·ã§ããã®è«çããªã¥ãŒã ã
- Bitbucket Server  ããŒã ãã£ã¬ã¯ããªãã¹ãã¬ãŒãž ãšãªã¢ ãããã¯ãŒã¯ã䜿çšããŠããå Žå㯠SAN ããŒã¹ã®ããã¯ã¢ããã
rsync(å©çšå¯èœã§ããã°)
- ããŒããæåã§åæ¢ãããã« Bitbucket Data Center ããã³ Bitbucket Mesh ã€ã³ã¹ã¿ã³ã¹ã®ããã¯ã¢ãããäœæããã
On this page:
åäœç¢ºèªæžã¿ã®ãµã³ãã« ãªã¯ãšã¹ãã Bitbucket ããããŠã³ããŒãã§ããŸãã
Â
ããŠã³ã¿ã€ã ãåæžããéã«éèŠãªã®ã¯ããã³ããŒåºæã®æé©ãªããŒã¿ããŒã¹ããã³ãã¡ã€ã« ã·ã¹ãã ããã¯ã¢ãã ããŒã«ã䜿çšããããšã§ãããããã®ããŒã«ã§ã¯äžè¬ã«ãBitbucket Server Backup Client ã䜿çšããæ±çšçãªãã³ããŒã«äŸåããªã圢åŒãããçãæéã§ã(å Žåã«ãã£ãŠã¯ãã³ããŒåºæã®åœ¢åŒãéããŠ)ã¹ãããã·ã§ãããäœæã§ããŸããÂ
Bitbucket Server DIY Backup ã§ã¯ãä»»æã®èšèªã§ã³ãŒããèšè¿°ããBitbucket Server 4.0 ã§å©çšå¯èœãª REST API ã䜿çšããŠãå¿ èŠãªããã¯ã¢ããæé ãå®è¡ããå¿ èŠããããŸãã
DIY Backup 㯠Windows ããã³ Linux ãã©ãããã©ãŒã ãããã³ Bitbucket Server ããŒãžã§ã³ 4.0 以éããµããŒãããŠããŸããDIY Backup 㯠Bitbucket Server ãBitbucket Data Centerãããã³ Bitbucket Mesh ã®ã€ã³ã¹ã¿ã³ã¹ãçãããµããŒãããŠãããäžæ¹ã§åäœãã DIY Backup ãœãªã¥ãŒã·ã§ã³ã¯ããäžæ¹ã§ããã®ãŸãŸåäœããŸãã
Bitbucket Server ã®ä»ã®ããã¯ã¢ããæŠç¥ã®è©³çްã«ã€ããŠã¯ããããŒã¿ã®åŸ©å ãšããã¯ã¢ããããåç §ããŠãã ããããŸãããã®ããŒãžã§ã¯ããã£ã¹ã¯äžã® Bitbucket Server ãã¡ã€ã« ã·ã¹ãã ãšãã¢ããªã±ãŒã·ã§ã³ã䜿çšããããŒã¿ããŒã¹ãšã®éã®ç·å¯ãªé£æºã«ã€ããŠã説æããŸãã
ãã®ããŒãžã®äŸã¯ãDIY Backup ãœãªã¥ãŒã·ã§ã³ãéçºããéã®ã¬ã€ãã³ã¹ãšããŠæäŸãããŠããŸãããã®ãããèšèŒãããŠãããµãŒãããŒã㣠ããŒã«ã¯äžäŸã§ããããå©çšã® Bitbucket Server ã€ã³ã¹ããŒã«ã«é©ããããŒã«ãéžæããå¿ èŠããããŸãã
éžæãããµãŒãããŒã㣠ããŒã«ã«ã€ããŠã¯ããã³ããŒã®ããã¥ã¡ã³ããã確èªãã ãããã¢ãã©ã·ã¢ã³ã§ã¯ãã®ãããªããŒã«ã®ãµããŒããæäŸã§ããŸããã
ãã®ããŒãžã§ã¯æ¬¡ã®ãããªå 容ã«ã€ããŠèª¬æããŸãã
bash ã·ã§ã« ã¹ã¯ãªããã䜿çšãããPostgreSQL ããŒã¿ããŒã¹ããã³ããŒã«ã« ãã¡ã€ã«ã·ã¹ãã çšã®å®å šãª DIY Backup ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã- DIY Backup ã§ Bitbucket Server 㮠REST API ãã©ã®ããã«äœ¿çšã§ãããã«ã€ããŠã®èæ¯æ å ±ãæäŸããŸãã
ãå©çšã® Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ã«åããŸãã¯é¡äŒŒããèšå®ãããå Žåã¯ãã®ãœãªã¥ãŒã·ã§ã³ãçŽæ¥äœ¿çšã§ããã»ãããå©çšã®ããŒããŠã§ã¢èšå®ã«åãããç¬èªã® DIY Backup ãœãªã¥ãŒã·ã§ã³ãéçºããããã®åºçºç¹ãšããŠäœ¿çšããããšãã§ããŸããÂ
åäœã®ä»çµã¿
Bitbucket Server Backup Client ã®ä»£ããã« DIY Backup ã䜿çšããå Žåã¯ãããã¯ã¢ããæé ãå®å šã«å¶åŸ¡ããä»»æã®èšèªã§ä»»æã®ã«ã¹ã¿ã ããã»ã¹ãå®è£ ã§ããŸããããšãã°ãDIY Backup ã®äžç°ãšããŠãããŒã¿ããŒã¹ã®ã€ã³ã¯ãªã¡ã³ããŸãã¯ãã¡ã¹ã ã¹ãããã·ã§ãã ããŒã«ããã¡ã€ã« ãµãŒããŒåºæã®ããŒã«ã䜿çšã§ããŸããÂ
DIY Backup 㯠Bitbucket Server Backup Client ãšäŒŒãæ¹æ³ã§æ©èœãã以äžãå®è¡ããŸãã
- Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ã®ããã¯ã¢ãããæºåããŸããããã¯ãBitbucket Server ãããã¯ãããåã«çºçããŸããããšããçºçããããŠã³ã¿ã€ã ãæå°éã«æãããããããã§ã§ããã ãå€ãã®åŠçãå®è¡ããããã«ããŸããããšãã°ãã€ã³ã¯ãªã¡ã³ã¿ã« ããŒã¿ããŒã¹ããã³ãã¡ã€ã«ã·ã¹ãã ãŠãŒãã£ãªãã£ã䜿çšããŠæåã®ã¹ãããã·ã§ãããååŸã§ããŸããBitbucket Server ã¯ãŸã å®è¡äžã§ãããŒã¿ããŒã¹ããã¡ã€ã«ã·ã¹ãã ã倿ŽããŠããããããã㯠100% äžè²«ããŠããå¿
èŠã¯ãããŸããããã®æç¹ã§æåã®ã¹ãããã·ã§ãããååŸããããšã§ãç¹ã«ããã¯ã¢ããéã«å€æŽããããŒã¿ã®éã倧ããå Žåãããšã§ (ã¢ããªã±ãŒã·ã§ã³ãããã¯ãããŠããéã«) å®è¡ãããäœæ¥ã®éãæžããããšãã§ããŸããæé ã«ã¯ä»¥äžãå«ãŸããŸãã
- ããŒã¿ããŒã¹ã®æåã®ããã¯ã¢ãããå®è¡ãã (ããã°ã¬ãã·ã/å·®åããã¯ã¢ããããµããŒãããŠããå Žå)ã
- ããŒã ãã©ã«ãããããã¯ã¢ãã ãã©ã«ããžã®ååã®Â
rsync ãå®è¡ããã
- ããã¯ã¢ãããåæåããŸããããã«ããã以äžãè¡ãããŸãã
- Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ãããã¯ãããã
- ããŒã¿ããŒã¹ããã³ãã¡ã€ã«ã·ã¹ãã ãžã®ã³ãã¯ã·ã§ã³ããã¬ã€ã³ããã³ã©ãããããã
- ãã¬ã€ã³/ã©ããæé ã®å®äºãåŸ æ©ããã
- ã€ã³ã¹ã¿ã³ã¹ã§ããã¯ã¢ããã®æºåãæŽã£ãããå®éã® DIY Backup ãéå§ã§ããŸããããã«ã¯ãæ¬¡ã®æé ãå«ãŸããŸãã
pg_dumpã䜿çšããŠãããŒã¿ããŒã¹ã®å®å šã«äžè²«ããããã¯ã¢ãããäœæãããrsyncã䜿çšããŠããã¡ã€ã«ã·ã¹ãã ã®å®å šã«äžè²«ããããã¯ã¢ãããäœæããããªããžããªã®ä¿åã« Bitbucket Mesh ã䜿çšããŠããå Žåã¯ããã®æ®µéã§åãªããžããªã§ DIY Backup ã¹ã¯ãªãããå®è¡ããå¿ èŠããããŸãã
- ããã¯ã¢ãã ããã»ã¹ãçµäºããŠããã¯ãè§£é€ããæ¬¡ç¬¬ãBitbucket Server ã€ã³ã¹ã¿ã³ã¹ã«éç¥ãéä¿¡ãããŸãã
- ããã¯ã¢ããäžã«äœæãããã¹ãŠã®ãã¡ã€ã«ã 1 ã€ã®å€§ããªã¢ãŒã«ã€ãã«ä¿åããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã¡ã³ããã³ã¹ ã¢ãŒãã«ãªã£ãŠããå ŽåããŠãŒã¶ãŒã Web ã€ã³ã¿ãŒãã§ã€ã¹ãžã®ã¢ã¯ã»ã¹ããã¹ãã£ã³ã° ãµãŒãã¹ã®äœ¿çšã詊ã¿ããšããšã©ãŒ ã¡ãã»ãŒãžã衚瀺ãããŸãã
å©çšãäžå¯èœãªæéãäºæž¬ããããã®åèå€ãšããŠãã¢ãã©ã·ã¢ã³ã®å éšäœ¿çšã§ã¯ãBitbucket Server ã®ããŠã³ã¿ã€ã ã¯Â 7â8 å (Bitbucket Server Backup Client ã䜿çšããªããžããªã®ãµã€ãºãåèš 6 GB ã®å Žå) ã«ãªããŸãããæ¯èŒã®ããã«ãåããªããžããªã§ Bitbucket Server DIY Backup ã䜿çšãããšãäžè¬ã«ããŠã³ã¿ã€ã 㯠1 åæªæºã«ãªããŸããÂ
ããã¯ã¢ãã察象
Bitbucket Server DIY Backup ã¯ãBitbucket Server Backup Client ãšåãããŒã¿ããã¹ãŠããã¯ã¢ããããŸãã
- ã€ã³ã¹ã¿ã³ã¹ãæ¥ç¶ãããŠããããŒã¿ããŒã¹ (å éšãŸãã¯å€éš DB)
- 管çããã Git ãªããžããª
- Bitbucket Server ãã°
- ã€ã³ã¹ããŒã«æžã¿ã®ãã©ã°ã€ã³ãšãããã®ããŒã¿
Bash ã¹ã¯ãªããã䜿çšãã DIY Backup
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã次ã®ããŒã«ã䜿çšãããå®å šãª DIY Backup ãœãªã¥ãŒã·ã§ã³ã玹ä»ããŸãã
bash-ã¹ã¯ãªããçšjq - Bitbucket Server ããã® REST ã¬ã¹ãã³ã¹ãããŒã¹ããããã®ããªãŒãã³ ãœãŒã¹ã®ã³ãã³ã ã©ã€ã³ JSON ããã»ããµãŒpg_dump(ãŸãã¯sqlcmd) - PostgreSQL ããŒã¿ããŒã¹ã®ããã¯ã¢ããçšrsync- ãã¡ã€ã«ã·ã¹ãã ã®ããã¯ã¢ããçštar- ããã¯ã¢ãã ã¢ãŒã«ã€ãã®äœæçš
ãã®ã¢ãããŒãã«å°èŠæš¡ãªå€æŽãå ããããšã§ã以äžã§ DIY Backups ãå®è¡ããããã«äœ¿çšã§ããŸãã
- Linux ãš Unix
- macOS
- cygwin ãæã€ Windows (cygwin Git 㯠Bitbucket Server ã§ã¯ãµããŒããããŸãã)ã
Bash ã¹ã¯ãªãã
Bitbucket ãããµã³ãã« ã¹ã¯ãªãããããŠã³ããŒããããããªããžããªãã¯ããŒã³ã§ããŸãã
Bash ã¹ã¯ãªããã®å®è¡
Bash ã¹ã¯ãªãããããŠã³ããŒããããã1 ã€ã®ãã¡ã€ã«ãäœæããå¿ èŠããããŸãã
bitbucket.diy-backup.vars.sh (Âbitbucket.diy-backup.vars.sh.exampleãã³ããŒããŠéå§ã§ããŸã)
ããšãã°ã次ã®å Žåã®Â bitbucket.diy-backup.vars.sh ã®èšå®æ¹æ³ã玹ä»ããŸãã
- Bitbucket Server ã®ååã
bitbucket.example.com,ã§ãããŒã㯠7990 ã䜿ããããŒã ãã£ã¬ã¯ããªã¯/bitbucket-home /bitbucket-backupã«ããã¯ã¢ãããçæãã.tar.gzããã¯ã¢ããã/bitbucket-backup-archivesã«ä¿åããã- Bitbucket ã«ãŠãŒã¶ãŒå "admin"ããã¹ã¯ãŒã "admin" ã®ã·ã¹ãã 管çè ããããOS ãŠãŒã¶ãŒ "atlbitbucket" ãšã㊠Bitbucket (ããã³ããã¯ã¢ãã ã¹ã¯ãªãã) ãå®è¡ããã
bitbucket.diy-backup.vars.sh
#!/bin/bash
CURL_OPTIONS="-L -s -f"INSTANCE_NAME=bitbucket
BITBUCKET_URL=http://bitbucket.example.com:7990
BITBUCKET_HOME=/bitbucket-home/
BITBUCKET_UID=atlbitbucketBITBUCKET_GID=atlbitbucketBACKUP_HOME_TYPE=rsyncBACKUP_DATABASE_TYPE=postgresqlBACKUP_ARCHIVE_TYPE=tarBITBUCKET_BACKUP_USER=admin
BITBUCKET_BACKUP_PASS=admin
BITBUCKET_BACKUP_EXCLUDE_REPOS=()BITBUCKET_DB=bitbucketPOSTGRES_HOST=localhostPOSTGRES_USERNAME=dbuserexport PGPASSWORD=dbpassPOSTGRES_PORT=5432# Make use of PostgreSQL 9.3+ options if available
psql_version="$(psql --version | awk '{print $3}')"psql_majorminor="$(printf "%d%03d" $(echo "${psql_version}" | tr "." "\n" | head -n 2))"if [[ ${psql_majorminor} -ge 9003 ]]; then PG_PARALLEL="-j 5" PG_SNAPSHOT_OPT="--no-synchronized-snapshots"fiBITBUCKET_BACKUP_ROOT=/bitbucket-backup
BITBUCKET_BACKUP_DB=${BITBUCKET_BACKUP_ROOT}/bitbucket-db/BITBUCKET_BACKUP_HOME=${BITBUCKET_BACKUP_ROOT}/bitbucket-home/BITBUCKET_BACKUP_ARCHIVE_ROOT=/bitbucket-backup-archives
# Used by the scripts for verbose logging. If not true only errors will be shown.
BITBUCKET_VERBOSE_BACKUP=TRUEHIPCHAT_URL=https://api.hipchat.comHIPCHAT_ROOM=HIPCHAT_TOKEN=KEEP_BACKUPS=0
æäŸã®Â bitbucket.diy-backup.vars.sh ã¯ãããã©ã«ãã§ PostgreSQLãrsyncãtar ã䜿çšããããã«æžãããŠããŸããå¥ã®ããŒã«ã䜿çšãããå Žåããã®ãã¡ã€ã«ã®äžéšã®ã»ã¯ã·ã§ã³ãã«ã¹ã¿ãã€ãºããããšãã§ããŸãã
䜿çšäŸ
# Strategy for backing up the Bitbucket home directory:
# - amazon-ebs - Amazon EBS snapshots of the volume containing the home directory
# - rsync - "rsync" of the home directory contents to a temporary location. NOTE: This can NOT be used
# with BACKUP_ZERO_DOWNTIME=true.
BACKUP_HOME_TYPE=rsync
# Strategy for backing up the database:
# - amazon-rds - Amazon RDS snapshots
# - mysql - MySQL using "mysqldump" to backup and "mysql" to restore
# - postgresql - PostgreSQL using "pg_dump" to backup and "pg_restore" to restore
# - postgresql93-fslevel - PostgreSQL 9.3 with data directory located in the file system volume as home directory (so
# that it will be included implicitly in the home volume snapshot)
BACKUP_DATABASE_TYPE=postgresql
# Strategy for backing up Elasticsearch:
# - <leave blank> - No separate snapshot and restore of Elasticsearch state (default).
# - s3 - Amazon S3 bucket - requires the Elasticsearch Cloud plugin to be installed.
# - fs - Shared filesystem - requires all data and master nodes to mount a shared file system to the same mount point.
BACKUP_ELASTICSEARCH_TYPE=
DIY Backup ãæ©èœããã«ã¯ã2 ã€ã®ãã£ã¬ã¯ããªãäœæããå¿ èŠããããŸãã
${BITBUCKET_BACKUP_ROOT}ã¯ãDIY Backup ããã»ã¹äžã« Bitbucket Server ã®ããŒã ãã£ã¬ã¯ããªãšããŒã¿ããŒã¹ ãã³ãã®ã³ããŒãäœæãããäœæ¥ãã£ã¬ã¯ã㪠(ãã®äŸã§ã¯/bitbucket-backup) ã§ããÂ${BITBUCKET_BACKUP_ARCHIVE_ROOT} ã¯ãæçµçãªããã¯ã¢ããã¢ãŒã«ã€ããä¿åããããã£ã¬ã¯ã㪠(ãã®äŸã§ã¯/bitbucket-backup-archives)ã§ããÂ
Bash ã¹ã¯ãªããã以äžã®æ¡ä»¶ãæºãããŠããå Žåããã®ã¹ã¯ãªããããããããã¹ãã§å®è¡ã§ããŸãã
- äžèšã®
${BITBUCKET_BACKUP_ROOT}ããã³${BITBUCKET_BACKUP_ARCHIVE_ROOT}ãã£ã¬ã¯ããªãžã®èªã¿åã/æžã蟌ã¿ã¢ã¯ã»ã¹ã ${BITBUCKET_HOME} ãã£ã¬ã¯ããªãžã®èªã¿åãã¢ã¯ã»ã¹ã- ããŒã¿ããŒã¹ãžã®èªã¿åãã¢ã¯ã»ã¹
- Bitbucket Server ã®ãµãŒããŒã§
curlã³ãã³ããå®è¡ããããã®ãããã¯ãŒã¯ ã¢ã¯ã»ã¹ãÂ
ããã¯ãBitbucket Server ãŸã㯠Bitbucket Data Center ã®ã©ã¡ãã®ã€ã³ã¹ã¿ã³ã¹ã®å ŽåãåœãŠã¯ãŸããŸãããã¡ã€ã«ã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ãçŽæ¥/NFS çµç±ãããããã¯ãããã¯ãŒã¯ ã¢ã¯ã»ã¹ã Bitbucket Server ããŒããŸãã¯ããŒã ãã©ã³ãµ/ãªããŒã¹ ãããã·ã®ã©ã¡ãã«è»¢éããããã¯åããŸãããÂ
bitbucket.diy-backup.vars.sh ãæ£ããèšå®ã§ããããã¿ãŒããã« ãŠã£ã³ããŠã§ããã¯ã¢ãããå®è¡ããŠãã ããã
$ ./bitbucket.diy-backup.sh
ããã¯ã¢ãããåããŠå®è¡ããéã«ã¯ rsync ãã»ãšãã©ã®äœæ¥ãå®è¡ããŸã /bitbucket-backup äœæ¥ãã£ã¬ã¯ããªã¯æåã¯ç©ºã®ãã)ãããã¯éåžžã®æåã§ãããã®ã¹ã¯ãªãã㯠Bitbucket Server ãããã¯ããåã« rsync ã 1 床å®è¡ããBitbucket Server ãããã¯ãããŠããéã« 2 床ç®ã® rsync ãå®è¡ããããšã§ãããŠã³ã¿ã€ã ãæå°éã«æããŸãã
2 åç®ä»¥éã®ããã¯ã¢ããå®è¡æã/bitbucket-backup ã«ã¯ãã§ã«ãã¡ã€ã«ãååšãããããããã¯ã¢ãã ããã»ã¹ã¯ããçæéã§å®äºããŸãã衚瀺ãããåºåã¯æ¬¡ã®ããã«ãªãã¯ãã§ãã
$ ./bitbucket.diy-backup.sh
[http://localhost:7990/bitbucket] INFO: Prepared backup of DB bitbucket in /bitbucket-backup/bitbucket-db/
building file list ... done.
sent 4.17M bytes received 484 bytes 2.78M bytes/sec
total size is 121.12M speedup is 29.06
[http://localhost:7990/bitbucket] INFO: Prepared backup of /bitbucket-home to /bitbucket-backup/bitbucket-home/
[http://localhost:7990/bitbucket] INFO: locked with '7187ae1824ce1ede38a8e7de4bccf58d9a8e1a7a'
[http://localhost:7990/bitbucket] INFO: backup started with '82c73f89e790b27fef3032e81c7071388ae4e371'
[http://localhost:7990/bitbucket] INFO: Waiting for DRAINED state....... done
[http://localhost:7990/bitbucket] INFO: db state 'DRAINED'
[http://localhost:7990/bitbucket] INFO: scm state 'DRAINED'
[http://localhost:7990/bitbucket] INFO: Performed backup of DB bitbucket in /bitbucket-backup/bitbucket-db/
[http://localhost:7990/bitbucket] INFO: Backup progress updated to 50
building file list ... done.
sent 4.87M bytes received 484 bytes 3.25M bytes/sec
total size is 121.82M speedup is 24.99
[http://localhost:7990/bitbucket] INFO: Performed backup of /bitbucket-home to /bitbucket-backup/bitbucket-home/
[http://localhost:7990/bitbucket] INFO: Backup progress updated to 100
[http://localhost:7990/bitbucket] INFO: Bitbucket instance unlocked
[http://localhost:7990/bitbucket] INFO: Archiving /bitbucket-backup into /bitbucket-backup-archives/bitbucket-20150917-082818-498.tar.gz
[http://localhost:7990/bitbucket] INFO: Archived /bitbucket-backup into /bitbucket-backup-archives/bitbucket-20150917-082818-498.tar.gz
DIY Backup ã®åŸ©å
Bitbucket Server ã埩å
ããéã«ã¯ãBitbucket Server ã埩å
ããå¿
èŠããããã·ã³ã§
bitbucket.diy-restore.sh
ã¹ã¯ãªãããå®è¡ããå¿
èŠããããŸãã誀ã£ã埩å
ã§æ¢åã®ããŒã¿ãåé€ãããªããããæ¢åã®ããŒã ãã£ã¬ã¯ããªã«ã¯åŸ©å
ããªãã§ãã ããã
æ°ããããŒã¿ããŒã¹ã¯ããBitbucket ãå€éšããŒã¿ããŒã¹ã«æ¥ç¶ãããããã³ãå©çšã®ããŒã¿ããŒã¹ ã¿ã€ãã«å¯Ÿå¿ãããµãããŒãžã®æç€ºã«ãããã£ãŠæ§æãããŠããå¿ èŠããããŸããÂ
${BITBUCKET_BACKUP_ARCHIVE_ROOT} ãã£ã¬ã¯ããªã«ããå©çšå¯èœãªããã¯ã¢ããã確èªããã«ã¯ã次ã®ããã«å
¥åããŠãã ããã
$ ./bitbucket.diy-restore.sh
次ã®ããã«è¡šç€ºãããã¯ãã§ãã
$ ./bitbucket.diy-restore.sh
Usage: ./bitbucket.diy-restore.sh <backup-file-name>.tar.gz
Available backups:
bitbucket-20150917-082818-498.tar.gz bitbucket-20150918-083745-001.tar.gz
Â
ããã¯ã¢ããã埩å
ããã«ã¯ãbitbucket.diy-restore.sh ãããã¡ã€ã«åãåŒæ°ãšããŠå®è¡ããŠãã ããã
$ ./bitbucket.diy-restore.sh bitbucket-20150917-082818-498
åºåã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
$ ./bitbucket.diy-restore.sh bitbucket-20150917-082818-498.tar.gz
[http://localhost:7990/bitbucket] INFO: Extracted /bitbucket-backup-archives/bitbucket-20150917-082818-498.tar.gz into /tmp/bitbucket.diy-restore.dQsbzU
[http://localhost:7990/bitbucket] INFO: Performed restore of /tmp/bitbucket.diy-restore.dQsbzU/bitbucket-db to DB bitbucket2
[http://localhost:7990/bitbucket] INFO: Performed restore of /tmp/bitbucket.diy-restore.dQsbzU/bitbucket-home to /bitbucket-home2
ããã¯ã¢ããã®ãã£ã³ã»ã«
å¿ èŠã«å¿ããŠãå®è¡äžã®ããã¯ã¢ããæäœããã£ã³ã»ã«ã§ããŸãã
ããã¯ã¢ããã®ãã£ã³ã»ã«æ¹æ³
ã¿ãŒããã« (ãŸã㯠Windows ã®ã³ãã³ã ããã³ãã) ã§è¿ããããã£ã³ã»ã« ããŒã¯ã³ãã³ããŒããŸãããbackup started with
tokenãè¡ãæ¢ããŸãã$ ./bitbucket.diy-backup.sh [http://localhost:7990/bitbucket] INFO: Prepared backup of DB bitbucket in /bitbucket-backup/bitbucket-db/ building file list ... done. sent 4.17M bytes received 484 bytes 2.78M bytes/sec total size is 121.12M speedup is 29.06 [http://localhost:7990/bitbucket] INFO: Prepared backup of /bitbucket-home to /bitbucket-backup/bitbucket-home/ [http://localhost:7990/bitbucket] INFO: locked with '7187ae1824ce1ede38a8e7de4bccf58d9a8e1a7a' [http://localhost:7990/bitbucket] INFO: backup started with '82c73f89e790b27fef3032e81c7071388ae4e371' [http://localhost:7990/bitbucket] INFO: Waiting for DRAINED state....... done [http://localhost:7990/bitbucket] INFO: db state 'DRAINED' [http://localhost:7990/bitbucket] INFO: scm state 'DRAINED'äŸ: "82c73f89e790b27fef3032e81c7071388ae4e371" ã䜿çš
- ãã©ãŠã¶ã§ Bitbucket Server ã€ã³ã¿ãŒãã§ã€ã¹ã«ç§»åããŸããBitbucket ServerÂ ã¯æ¬¡ã®ç»é¢ã衚瀺ããŸãã
- [ããã¯ã¢ãããåæ¶] ãã¯ãªãã¯ãããã£ã³ã»ã« ããŒã¯ã³ãå
¥åããŸãã
- [ããã¯ã¢ãããåæ¶] ãã¯ãªãã¯ããŸãã
Bitbucket Server ã¯åŒãç¶ããã¡ã³ããã³ã¹ ã¢ãŒãã§ããã¯ãããŠããŸãã"locked with" ããŒã¯ã³ (äŸ: "7187ae1824ce1ede38a8e7de4bccf58d9a8e1a7a") ã䜿çšããŠãããã®æé ãç¹°ãè¿ããã¡ã³ããã³ã¹ ã¢ãŒããçµäºããŠãBitbucket Server ã®ããã¯ãè§£é€ããŸãã
詳现 - REST API ã䜿çšããç¬èªã® DIY Backup ãäœæ
ãã®ã»ã¯ã·ã§ã³ã¯ãªãã·ã§ã³ã§ãäžèšã® DIY Backup ã¹ã¯ãªããããåžæã®èšèªã§æžãæããããå€§å¹ ã«ã«ã¹ã¿ãã€ãºãããããå¿ èŠãããå Žåã®ããã«ãBitbucket Server ã® REST API ã®äœ¿ç𿹿³ã®èæ¯æ å ±ãæäŸããŸãã
ããã§ã¯ãBash ã§ã® curl ã³ãã³ãã瀺ããŠããŸãããä»»æã®èšèªã䜿çšã§ããŸãã
æ¬¡ã®æé ãå«ãŸããŸãã
æºå
Bitbucket Server ãããã¯ããåã«ãä»»æã®æºåãå®è¡ããããšãã§ããŸããããšããçºçããããŠã³ã¿ã€ã ãæå°éã«æãããããã¢ããªã±ãŒã·ã§ã³ãããã¯ããåã«ãã§ããã ãå€ãã®åŠçãå®è¡ããããšãããããããŸããããšãã°ãrsync ãå®è¡ã§ããŸãã
rsync -avh --delete --delete-excluded --exclude=/caches/ --exclude=/data/db.* --exclude=/export/ --exclude=/log/ --exclude=/plugins/.*/ --exclude=/tmp --exclude=/.lock ${BITBUCKET_HOME} ${BITBUCKET_BACKUP_HOME}
Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ãããã¯ãã
Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ã®ããã¯ã¢ããäœæã®æ¬¡ã®æé ã¯ãã¡ã³ããã³ã¹çšã«ã€ã³ã¹ã¿ã³ã¹ãããã¯ããããšã§ããããã¯ã/mvc/maintenance/lock REST ãã€ã³ããžã® POST ãªã¯ãšã¹ãã䜿çšããŠå®è¡ã§ããŸã (BITBUCKET_URL 㯠Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ãæããBITBUCKET_BACKUP_USER ã¯ããã¯ã¢ããæš©éãæã€ Bitbucket Server ãŠãŒã¶ãŒãBITBUCKET_BACKUP_PASS ã¯ãã®ãŠãŒã¶ãŒã®ãã¹ã¯ãŒãã§ã)ã
curl -s \
-u ${BITBUCKET_BACKUP_USER}:${BITBUCKET_BACKUP_PASS} \
-X POST \
-H "Content-type: application/json" \
"${BITBUCKET_URL}/mvc/maintenance/lock"
{
"unlockToken":"0476adeb6cde3a41aa0cc19fb394779191f5d306",
"owner": {
"displayName":"admin",
"name":"admin"
}
}
æåãããšãBitbucket Server ã€ã³ã¹ã¿ã³ã¹ã¯ 202 ã§å¿çããäžèšã®ãããªã¬ã¹ãã³ã¹ JSON ãè¿ããŸãããã® unlockToken ã¯ã$BITBUCKET_LOCK_TOKEN ãèŠæ±ããã以éã®ãã¹ãŠã®ãªã¯ãšã¹ãã§äœ¿çšããå¿
èŠããããŸãããã®ããŒã¯ã³ã¯ãã€ã³ã¹ã¿ã³ã¹ã®ããã¯ãæåã§è§£é€ããããã«ã䜿çšã§ããŸãã
ããã¯ã¢ãã ããã»ã¹ã®éå§
次ã«ãããŒã¿ããŒã¹ãšãã¡ã€ã«ã·ã¹ãã ã®äž¡æ¹ãžã®ãã¹ãŠã®ã³ãã¯ã·ã§ã³ãããã¬ã€ã³ããã³ã©ããããå¿ èŠããããŸããã³ãŒãã§ãã¡ã€ã«ã·ã¹ãã ãšããŒã¿ããŒã¹ã®äž¡æ¹ã®ããã¯ã¢ãããåŠçããå¿ èŠããããŸãã
ãã®æç¹ã§ã/mvc/admin/backups ã« POST ãªã¯ãšã¹ããããå¿
èŠããããŸããcurl ã³ãŒã«ã«ã¯ã?external=true ãã©ã¡ãŒã¿ãŒãå«ãŸããç¹ã«æ³šæããŠãã ããã
curl -s \
-u ${BITBUCKET_BACKUP_USER}:${BITBUCKET_BACKUP_PASS} \
-X POST \
-H "X-Atlassian-Maintenance-Token: ${BITBUCKET_LOCK_TOKEN}" \
-H "Accept: application/json" \
-H "Content-type: application/json" \
"${BITBUCKET_URL}/mvc/admin/backups?external=true"
{
"id":"d2e15c3c2da282b0990e8efb30b4bffbcbf09e04",
"progress": {
"message":"Closing connections to the current database",
"percentage":5
},
"state":"RUNNING",
"type":"BACKUP",
"cancelToken":"d2e15c3c2da282b0990e8efb30b4bffbcbf09e04"
}
æåãããšãã€ã³ã¹ã¿ã³ã¹ã¯ 202 ã§å¿çããäžèšã®ãããªã¬ã¹ãã³ã¹ JSON ãè¿æããcancelToken ã¯ãããã¯ã¢ãã ããã»ã¹ãæåã§ãã£ã³ã»ã«ããéã«äœ¿çšã§ããŸãã
ã€ã³ã¹ã¿ã³ã¹ã®æºåãå®äºãããŸã§åŸ
ã¡ãŸãã
ããã¯ã¢ãã ããã»ã¹ã®äžç°ã«ã¯ãããŒã¿ããŒã¹ããã³ãã¡ã€ã«ã·ã¹ãã ãžã®ã³ãã¯ã·ã§ã³ã®ãã¬ã€ã³ããã³ã©ãããå«ãŸããŸããããã¯ã¢ãããç¶è¡ããåã«ããã®æé ãå®äºããããšãã€ã³ã¹ã¿ã³ã¹ãå ±åããã®ãåŸ
æ©ããå¿
èŠããããŸããçŸåšã®ã¹ããŒã¿ã¹ã®è©³çްã確èªãããå Žåã/mvc/maintenance REST ãã€ã³ãã« GET ãªã¯ãšã¹ããè¡ããŸãã
curl -s \
-u ${BITBUCKET_BACKUP_USER}:${BITBUCKET_BACKUP_PASS} \
-X GET \
-H "X-Atlassian-Maintenance-Token: ${BITBUCKET_LOCK_TOKEN}" \
-H "Accept: application/json" \
-H "Content-type: application/json" \
"${BITBUCKET_URL}/mvc/maintenance"Â
 {
"task":{
"id":"0bb6b2ed52a6a12322e515e88c5d515d6b6fa95e",
"progress":{
"message":"Backing up Bitbucket home",
"percentage":10
},
"state":"RUNNING",
"type":"BACKUP"
},
"db-state":"DRAINED",
"scm-state":"DRAINED"
}
ããã«ãããBitbucket Server ã€ã³ã¹ã¿ã³ã¹ã¯çŸåšã®ç¶æ
ãå ±åããŸããããã¯ã¢ãããç¶è¡ããåã«ãdb-state ãš scm-state ã®äž¡æ¹ã®ã¹ããŒã¿ã¹ã DRAINED ã«ãªãã®ãåŸ
æ©ããå¿
èŠããããŸãã
å®éã®ããã¯ã¢ããã®å®è¡
ãã®æç¹ã§ããã¡ã€ã«ã·ã¹ãã ã®å®éã®ããã¯ã¢ãããäœæããæºåãæŽããŸãããããšãã°ãããäžåºŠ rsync ã䜿çšã§ããŸãã
rsync -avh --delete --delete-excluded --exclude=/caches/ --exclude=/data/db.* --exclude=/export/ --exclude=/log/ --exclude=/plugins/.*/ --exclude=/tmp --exclude=/.lock ${BITBUCKET_HOME} ${BITBUCKET_BACKUP_HOME}
ããã«ç€ºã rsync ãªãã·ã§ã³ã¯äŸã«éããŸããããããã¯ã¢ãã ããã»ã¹ã«å¿
èŠãªãã¡ã€ã«ã®ã¿ãå«ãããã以å€ãé€å€ããæ¹æ³ã瀺ããŠããŸãã詳现ãªèª¬æã«ã€ããŠã¯ãrsync ãŸãã¯ã奜ããªããŒã«ã®ããã¥ã¡ã³ããåç
§ããŠãã ãããÂ
ããŒã¿ããŒã¹ ããã¯ã¢ãããäœæããéã«ã¯ããã³ããŒåºæã®ããã¯ã¢ãã ããŒã«ã䜿çšã§ããŸããããšãã°ãPostgreSQL ã䜿çšããŠããå Žåã¯ãpg_dump ã䜿çšã§ããŸãã
pg_dump -Fd ${BITBUCKET_DB} -j 5 --no-synchronized-snapshots -f ${BITBUCKET_BACKUP_DB}
ãããã®æäœãå®è¡ããéã¯ãããã¯ã¢ããã®é²æã§ã€ã³ã¹ã¿ã³ã¹ãæŽæ°ãã鲿ã UI ã§ç¢ºèªã§ããããã«ããããšãããããããŸãããããè¡ãã«ã¯ãããŒã¯ã³ãšå®äºæžã¿ã®ããŒã»ã³ãå€ããã©ã¡ãŒã¿ãŒãšããŠäœ¿çšãã/mvc/admin/backups/progress/client 㫠POST ãªã¯ãšã¹ããçºè¡ããŸãã
curl -s \
-u ${BITBUCKET_BACKUP_USER}:${BITBUCKET_BACKUP_PASS} \
-X POST \
-H "Accept: application/json" \
-H "Content-type: application/json"Â \
"${BITBUCKET_URL}/mvc/admin/backups/progress/client?token=${BITBUCKET_LOCK_TOKEN}&percentage=${BITBUCKET_BACKUP_PERCENTAGE}"
åé¡ãªãå ŽåãBitbucket Server ã¯ãã®ãªã¯ãšã¹ãã«ç©ºã® 202 ã§å¿çããŸããÂ
ãŠãŒã¶ãŒã«é²æã衚瀺ããéãBitbucket Server 㯠100 ããŒã»ã³ãã®é²æã®ãã¡ã90 ããŒã»ã³ãã DIY Backupã10 ããŒã»ã³ããã¢ããªã±ãŒã·ã§ã³ã®æºåã«åå²ããŸããã€ãŸããã¹ã¯ãªããã percentage=0 ãéä¿¡ããå ŽåãBitbucket Server ã¯ããã¯ã¢ããäœæ¥ã®å²ãåœãŠåã«ã€ããŠæå€§ 10 ããŒã»ã³ãã®é²æã衚瀺ããå¯èœæ§ããããŸããÂ
(ãªãã·ã§ã³) ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ãããŠããå Bitbucket Mesh ããŒãã« Backup ã¹ã¯ãªãããå®è¡ãã
Bitbucket Mesh ã䜿çšããŠãªããžããªãä¿åããŠããå Žåã¯ãé©åãªãªãã·ã§ã³ãèšå®ããå Mesh ããŒãã§ åå¥ã« ããã¯ã¢ããã¹ã¯ãªãããå®è¡ããŠãäžèšã®ããã»ã¹ãç¹°ãè¿ãå¿ èŠããããŸãã
ããã¯ã¢ããã®å®äºã Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ã«éç¥
ããã¯ã¢ãã ããã»ã¹ãçµäºãããã鲿ã 100 ããŒã»ã³ãã«å°éããããšã Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ã«å ±åããå¿
èŠããããŸããããã¯ã鲿ãªã¯ãšã¹ãã«äŒŒããªã¯ãšã¹ãã䜿çšããŠå®è¡ãããŸããPOST ãªã¯ãšã¹ãã /mvc/admin/backups/progress/client ã«ããŒã¯ã³ããã³ããŒã»ã³ããŒãžãšããŠ100 ã䌎ã£ãŠçºè¡ããŸãã
curl -s \
-u ${BITBUCKET_BACKUP_USER}:${BITBUCKET_BACKUP_PASS} \
-X POST \
-H "Accept: application/json" \
-H "Content-type: application/json" \
"${BITBUCKET_URL}/mvc/admin/backups/progress/client?token=${BITBUCKET_LOCK_TOKEN}&percentage=100"
åé¡ãªãå ŽåãBitbucket Server ã¯ç©ºã® 202 ã§å¿çããŸããããŒã»ã³ãå€ã 100 ã«ãªããšãããã¯ã¢ãã ããã»ã¹ã¯å®äºæžã¿ãšã¿ãªãããŸããããã«ããããã® Bitbucket Server ã®ã€ã³ã¹ã¿ã³ã¹ã®ããŒã¿ããŒã¹ãšãã¡ã€ã«ã·ã¹ãã ã®ã©ãããè§£é€ãããŸãã Â
Bitbucket Server ã€ã³ã¹ã¿ã³ã¹ã®ããã¯ãè§£é€ããÂ
ããã¯ã¢ãã ããã»ã¹ã§è¡ãå¿
èŠãããæåŸã®æé ã¯ãã€ã³ã¹ã¿ã³ã¹ã®ããã¯ãè§£é€ããããšã§ããããã¯ã/mvc/maintenance/lock REST ãã€ã³ããžã® DELETE ãªã¯ãšã¹ãã§å®æœããŸãã
curl -s \
-u ${BITBUCKET_BACKUP_USER}:${BITBUCKET_BACKUP_PASS} \
-X DELETEÂ \
-H "Accept: application/json" \
-H "Content-type: application/json" \
"${BITBUCKET_URL}/mvc/maintenance/lock?token=${BITBUCKET_LOCK_TOKEN}"
åé¡ãªãå ŽåãBitbucket Server ã€ã³ã¹ã¿ã³ã¹ã¯ãã®ãªã¯ãšã¹ãã«ç©ºã® 202 ã§å¿çããã¢ã¯ã»ã¹ã®ããã¯ãè§£é€ããŸãã
ãã®å 容ã¯ã圹ã«ç«ã¡ãŸããã?
ã¯ã ãã®èšäºã«ã€ããŠã®ãã£ãŒãããã¯ãéä¿¡ãã

