ตั้งค่า Linode Object Storage ทำ Virtualmin Backups

การทำ Backups นับว่าเป็นเรื่องที่สำคัญ เมื่อเกิดเหตุไม่คาดคิดกับเครื่องเซิร์ฟเวอร์หรือระบบของเราก็จะมีไฟล์ Backups นี่แหละที่จะช่วยชีวิตเราไว้ได้ ปัจจุบัน Storage ที่นิยมนำมาทำ Backups Storage ก็คงจะหนีไม่พ้น S3 หรือ Simple Storage Service ซึ่งมีราคาที่ถูกกว่า Storage ประเภทอื่น ๆ เพราะออกแบบมาสำหรับการทำ Backups โดยเฉพาะ ในตลาดเองก็มีหลายเจ้า ไม่ว่าจะเป็น Amazon S3 , Digitalocean Space แต่สำหรับวันนี้ผมจะพามาทำการตั้งค่าการใช้งาน Linode Object Storage ซึ่งก็เป็นอีกเจ้านึงที่ได้รับความนิยมไม่แพ้กัน แถมราคาอาจจะถูกกว่าด้วย

  1. ทำการสร้าง Bucket ขึ้นมาใน Cloud Linode ของเรา ตั้งชื่อแล้วก็เลือกโซนที่ต้องการ
สร้าง Bucket ใน Linode

หลังจากที่เรากด Create Bucket เพื่อสร้าง Object Storage เราจะได้ Access Key และ Secrete มา ให้เก็บสองค่านี้ไว้เพื่อจะได้นำไปใช้ในการตั้งค่าใน Virtualmin ต่อไป

อ้อลืมไปเนื่องจาก Linode Object Storage มัน Compatible กับ Amazon S3 เพราะฉะนั้นตอนที่เราจะตั้งค่าใน Virtualmin จะต้องเอา S3 Compatible server hostname ไปด้วย
URL ที่เราได้ก็จะขึ้นอยู่กับโซนที่เราเลือกด้วยนะ เช่น

us-east-1.linodeobjects.com
ap-south-1.linodeobjects.com
eu-central-1.linodeobjects.com

2. มาที่หลังบ้าน Virtialmin ของเราเพื่อทำการตั้งค่าต่อ โดยไปที่ Cloud Storage Providers (ตามภาพประกอบ)

ตั้งค่า Cloud Storage Provider ใน Virtualmin
  • ทำการเลือกเช็คบอกซ์ที่เป็น Entered Below เพื่อเราจะได้ใส่ URL Linode Object Storage ที่เราสร้างไว้ได้
  • ใส่ Access Key และ Secret key ที่เราได้มาจากตอนแรก
  • ใส่ URL ของ S3 Compatible server hostname
  • Upload chunk size เลือกเป็น Default
  • Location Bucket เลือกเป็น Default
  • กด Save

ตรวจสอบการเชื่อมต่อเบื้องต้น ถ้าไม่มีอะไรผิดพลาด เราก็จะมองเห็นรายชื่อ Bucket ที่เราสร้างเอาไว้ใน Linode มาถึงตรงนี้เราก็ใกล้ที่จะใช้งานได้แล้วหละ ไปทำต่อได้เลย หรือจะลองทำการ Backup ดูเลยไหมหละ

Backing up Nginx webserver configuration ..
.. done
Backing up Nginx webserver log files ..
.. done
.. completed in 1 seconds
Creating final backup archives in directory ..
.. done
Uploading archive to Amazon's S3 service ..
.. upload failed! Failed to upload information file : 
Backup failed! See the progress output above for the reason why.

ติดตั้ง AWSCLI เพิ่มเติม เพื่อให้รัน Backup ได้

ถ้าเป็นเครื่องที่ไม่เคยใช้ Amazon S3 มาก่อน หรือไม่ได้ลง AWSCLI เราก็อาจจะเจอ error แบบตัวอย่างที่ผมเอามาให้ดู เพราะฉะนั้นเราจะต้องทำการลง AWSCLI ก่อนนะ ในที่นี้จะลงด้วย yum , apt ก็แล้วแต่ถนัดโลด ในตัวอย่างผมลงด้วย apt

apt install awscli

หลังจากที่ลงเสร็จแล้วก็จะต้องมีการแก้ไข s3-lib.pl สักหน่อยนะ ให้เราทำการแก้ไขไฟล์

/usr/share/webmin/virtual-server/s3-lib.pl 

โดยทำการค้นหาฟังก์ชันชื่อ sub call_aws_cmd

# call_aws_cmd(akey, params)
# Run the aws command for s3 with some params, and return output
sub call_aws_cmd
{
my ($akey, $params, $endpoint, $endpoint_param) = @_;
$endpoint ||= $config{'s3_endpoint'};
if ($endpoint) {
	$endpoint_param = "--endpoint-url=".quotemeta("https://$endpoint");
	}
if (ref($params)) {
	$params = join(" ", map { quotemeta($_) } @$params);
	}
return &backquote_command(
	"TZ=GMT $config{'aws_cmd'} s3 --profile=".quotemeta($akey)." ".
	$endpoint_param." ".$params." 2>&1");
}

จากนั้นผมก็ลองแทนที่ด้วยโค้ดด้านล่างนี้

# call_aws_cmd(akey, params)
# Run the aws command for s3 with some params, and return output
sub call_aws_cmd
{
  my ($akey, $params) = @_;
  if (ref($params)) {
    $params = join(" ", map { quotemeta($_) } @$params);
  }
  return &backquote_command(
    "TZ=GMT $config{'aws_cmd'} s3 --endpoint-url=https://ap-south-1.linodeobjects.com --profile=".quotemeta($akey).
" ".$params);
}

ผลลัพธ์ที่ได้ใน Linode Object Storage

ตรง URL ของ Linode ต้องดูดี ๆ และใส่ให้ตรงกับโซนที่เราสร้าง Object Storage ไว้นะครับ ไม่งั้นหาไม่เจออย่าว่ากันนะ

หลังจากที่ตั้งค่าทุกอย่างไว้ครบแล้ว ไหนเรามาลองทดสอบกันดูอีกที

Starting backup of 1 domains to backups/%Y-%m-%d in Amazon S3 bucket ln1 ..
Creating backup for virtual server *******.com ..

Backing up Nginx webserver configuration ..
.. done
Backing up Nginx webserver log files ..
.. done
.. completed in 1 seconds
Creating final backup archives in directory ..
.. done
Uploading archive to Amazon's S3 service ..
.. done
1 servers backed up successfully, 0 had errors. 
Backup is complete. Final size was 254.89 KiB.

Deleting backups from backups/%Y-%m-%d in Amazon S3 bucket ln1 older than 30 days ..

.. found 1 backups, but none were old enough

ดูจาก Logs แล้วทุกอย่างก็น่าจะโอเคไม่มีปัญหา ลองไปตรวจสอบใน Bucket อีกทีว่ามีอะไรเข้ามาหรือยัง

Linode Object Storage
ตรวจสอบไฟล์ที่อัพโหลดเข้าไปใน Object Storage ของ Linode

เป็นอันว่าเสร็จเรียบร้อย