안녕하세요.
오늘은 Wordpress에서 파일업로드 공간을 MiniO로 설정하는 방법에 대해 알아보도록 하겠습니다.
들어가며
저는 Docker에서 이전에 작성했던 MiniO를 구축하여 사용 중입니다. MiniO를 활용할 수 있는 방법을 생각하던 중, 구축했던 WordPress에 연동하여 사용하면 좋을 것 같아 진행해 보았지만 쉬운 여정이라 생각했지만 생각보다 험난하게 성공했던 여정을 공유하면 좋을 것 같아 이 글을 작성하게 되었습니다. 저의 현재 WordPress 버전은 6.5.2입니다.
결과적으로 성공한 플러그인은 "Media Cloud"입니다. 해당 글은 "WP Offload Media Lite" 플러그인 설치를 시작으로 "Media Cloud" 플러그인 설치 과정으로 내용이 진행됩니다. 급하시거나 성공기만 보고 싶은 분들께선 "Media Cloud" 챕터로 이동하여 읽어주시면 됩니다.
지원 유무 확인 - 웹 서칭
먼저, 웹 서칭을 통해 MiniO를 활용하는 글이 있는지 확인해 보았습니다. 검색결과로 여러 가지 후기들과 사용방법들이 있었고 진행을 해보았습니다. S3와 완벽한 API 호환을 자랑하는 MiniO이기도 했고 S3는 많은 사람들이 사용 중이기 때문에 플러그인이 잘 되어있을 것이라 기대했지만 제가 사용하려는 방식이 잘못되었는지 생각보다 많지 않아서 고민을 조금 했었지만 지원하는 플러그인이 존재했기에 진행을 해보기로 결정했습니다.
지원되는 플러그인
Wordpress 플러그인들 중 지원하는지 먼저 검색을 해보았습니다.
S3로 검색했을 때는 여러 가지의 플러그인이 나왔고 minio로 검색했을 때는 3개의 플러그인이 나왔습니다. 누군가는 사용해 보려는 시도를 했었다는 의미로 보여서 좀 더 희망을 가지게 되었습니다.
플러그인 설치 - WP Offload Media Lite (실패)
이 플러그인은 S3를 지원하는 플러그인으로 검색결과에서도 많은 분들께서 사용했던 플러그인으로 제일 먼저 시도했던 플러그인입니다. 별점 후기에는 안된다는 말도 많았지만, 잘 사용 중이라는 후기도 있었기 때문에 시도해 보았습니다.
설정 과정 - Storage Provider
우리가 하려는 MiniO는 없지만 S3와 완벽하게 호환되는 MiniO이기 때문에 Amazon S3를 선택했습니다. 2번의 Connection Method는 wp-config.php 파일에 액세스 키를 넣어 연결 방법을 선택하는 방법을 선택했습니다.
define( 'AS3CF_SETTINGS', serialize( array(
'provider' => 'aws',
'access-key-id' => '<access-key-id>',
'secret-access-key' => '<secret-access-key>',
) ) );
위와 같이 내용을 작성하고 Select Provider 화면에 다시 접속하니 확인이 완료되어 다음 단계로 진행할 수 있었습니다.
설치 과정 - Bucket
Bucket을 지정해 주는 화면으로 이동되었습니다. 이곳에서 Wordpress 업로드용으로 만든 Bucket을 지정해 주면 됩니다. Browse existing buckets은 Amazon S3용이므로 Enter bucket name을 선택하고 직접 이름을 지정해주셔야 합니다. Save Bucket Settings를 선택하시면 완료가 됩니다. 하지만 실패합니다.
추가 설치 과정 - php 파일 추가
https://github.com/deliciousbrains/wp-amazon-s3-and-cloudfront-tweaks 으로 이동하여 amazon-s3-and-cloudfront-tweaks.php을 내려받습니다. 해당 파일을 아래의 경로에 폴더를 생성하고 추가해주셔야 합니다.
/wp-content/plugins/amazon-s3-and-cloudfront-tweaks
추가 설치 과정 - php 파일 수정
77번, 78번 줄의 아래의 코드의 주석을 해제하여 주세요.
add_filter( 'as3cf_aws_s3_client_args', array( $this, 'minio_s3_client_args' ) );
add_filter( 'as3cf_aws_get_regions', array( $this, 'minio_get_regions' ) );
314번 줄부터 시작되는 코드를 알맞게 수정해 주세요.
public function minio_s3_client_args( $args ) {
// Example changes endpoint to connect to a local MinIO server configured to use port 54321 (the default MinIO port is 9000).
$args['endpoint'] = 'http://localhost:54321/';
// Example forces SDK to use endpoint URLs with bucket name in path rather than domain name as required by MinIO.
$args['use_path_style_endpoint'] = true;
return $args;
}
335번 줄부터 시작되는 코드를 확인해 주세요. (수정할 필요 없습니다)
public function minio_get_regions( $regions ) {
$regions = array(
'us-east-1' => 'Default',
);
return $regions;
}
설치 과정 - Bucket 다시 설정
설치페이지의 Bucket 단계로 이동해 다시 Save Bucket Settings를 선택하게 되면 이번에는 정상적으로 다음단계로 이동될 것입니다.
설치 과정 - Security 설정
해당 단계에서는 필요하시면 활성화시켜 주시고 저는 활성화하지 않고 Keep Bucket Security As Is를 선택해 다음 단계로 이동하였습니다.
Storage Settings 화면에서는 정상적으로 잘 연결되었다고 확인이 됩니다. 여기서 "끝났다!"라고 생각했습니다. 다음 탭 메뉴인 Delivery Settings 옆에 느낌표 표시가 되어있습니다. 뭔가 잘못되었다는 뜻이겠죠. 확인해 보겠습니다.
결과적으로 저는 이곳에서 문제해결 방법을 더 이상 찾지 못했습니다. 앞서 수정한 Tweaks.php 파일을 이리저리 수정하고 해 봤지만 저 문제가 수정되지 않았습니다. 분명 해결할 수 있을 것 같아 시간을 들여 방법을 찾아보고 설정을 바꿔보았지만 실패하였습니다. 혹시 방법을 알고 계시다면 댓글을 통해 공유 부탁드립니다.
플러그인 설치 - Media Cloud (성공)
다음 시도해 볼 플러그인은 Media Cloud입니다. MiniO 검색어로 검색했을 때 가장 많은 별점을 가졌던 플러그인입니다. 설치과정을 함께 보여드리면서 진행해 보겠습니다.
설치 과정
특별하게 할 것이 없습니다. Next 버튼을 선택해 주세요.
Storage Provider 설정하는 화면입니다. 저희는 MiniO를 사용할 것이기 때문에 MiniO를 선택하겠습니다.
Next버튼을 선택해 주세요.
아래의 설명을 읽어보시고 MiniO 설정을 해주시면 됩니다.
Access Key, Secret Key
MiniO에서 생성한 Access Key와 Secret Key를 입력합니다.
Bucket
MiniO에서 생성한 Bucket의 이름입니다. 이 Bucket에 Wordpress 관련 파일들이 업로드되는 곳입니다.
Region
따로 설정하지 마시고 Automatic을 선택하시면 됩니다.
Custom EndPoint
MiniO의 Console의 주소를 입력해 주시면 됩니다. (MiniO 웹페이지 접근 페이지 X)
안내에 맞게 잘 입력하시고 Next 버튼을 선택해 다음 단계로 이동합니다. 해당 페이지에서는 연결이 정상적인이 확인하는 단계입니다. Start Tests 버튼을 선택해 연결을 확인합니다.
정상적으로 연결이 완료되었다면 아래와 같이 화면이 표시될 것입니다.
Next버튼을 선택해 다음 단계로 이동하면 연결이 완료됩니다.
실패한 경우 - MiniO Bucket의 설정 확인
저도 연결을 시도하면서 무심하게 넘어갔던 부분 때문에 오랜 시간 연결에 실패를 경험했습니다. 연결의 문제가 해결된 후의 발생한 문제의 원인은 Bucket의 Access Policy였습니다.
위의 사진을 기준으로 화면 중앙 부분에 Access Policy 옆에 수정버튼을 선택하세요.
위의 사진에서 Custom을 선택하여 줍니다.
위의 화면에서 내용을 아래와 같이 수정합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Action": [
"s3:GetObjectAcl",
"s3:ListBucketMultipartUploads",
"s3:PutObject",
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersionTagging",
"s3:GetObject",
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersion",
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListMultipartUploadParts",
"s3:PutObjectAcl",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws:s3:::<bucket-name>",
"arn:aws:s3:::<bucket-name>/*"
]
}
]
}
하단 쪽에 있는 <bucket-name>을 각자의 Bucket name으로 변경하시고 Set 버튼을 선택해 완료합니다.
축하드립니다. MiniO 연결에 성공하셨습니다.
MiniO 연결 확인
이제 잘 작동하는지 확인을 해야 합니다. 미디어 탭으로 이동합니다.
각각 사진의 우측 하단을 보시면 구름모양의 아이콘이 표시되어 있습니다. 이 표시는 MiniO에 정상적으로 업로드가 되었다는 표시입니다.
마치며
성공하셨나요? 잘 따라오셨으면 성공하셨을 거라 생각합니다. 여러 가지 웹 서칭을 통해 설명이 있었지만 최근 업데이트된 글이 별로 없어서 트러블슈팅 과정을 공유해 보았습니다. 이 글을 보고 해보려고 하시는 분, 하려다 포기하셨던 분들께 도움이 되었으면 좋겠습니다.
과정에서 어려움이 있거나 잘못된 내용, 추가하였으면 하는 내용 등 의견이 있으시면
언제든지 댓글로 알려주세요.
긴 글 읽어주셔서 감사합니다.
레퍼런스
'Web > 지식창고' 카테고리의 다른 글
[Docker/arm64] Wordpress 알아보기 1편 - Memcached 적용방법 (1) | 2024.06.17 |
---|---|
[Web] 브라우저 렌더링 과정 (0) | 2024.06.17 |
[Web/Javascript] 화살표 함수 vs 일반 함수 (0) | 2024.06.17 |
[Web/Javascript] 프로토타입 (Prototype)에 대해서 (0) | 2024.06.17 |
[Web/Javascript] this와 call(), apply(), bind() 이해하기 (0) | 2024.06.17 |