1. 이미지를 업로드시, s3에 저장

- 아래 코드를 /var/www/html/wp-content/themes/sample/functions.php 에 추가

// After media uploaded
add_filter( 'wp_handle_upload', function( $upload, $context ){
    require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';

	define( 'S3_KEY', 'S3_KEY');
	define( 'S3_SECRET', 'S3_SECRET');
	define( 'S3_BUCKET', 'S3_BUCKET');
	define( 'S3_REGION', 'ap-northeast-2');

    $s3 = new Aws\S3\S3Client([
        'version' => 'latest',
        'region' => S3_REGION,
        'credentials' => [
            'key' => S3_KEY,
            'secret' => S3_SECRET,
        ]
    ]);

    $file_data = file_get_contents( $upload['file'] );
	$file_url = explode('/wp-content/',$upload['url']);
    $s3_key = $file_url[1];

    $result = $s3->putObject([
        'Bucket' => S3_BUCKET,
        'Key' => $s3_key,
        'Body' => $file_data,
        'ACL' => 'public-read'
    ]);


    return $upload;
}, 10, 2);

 

※ 위 코드는 s3에도 저장만 하는 방법입니다.

아직 작업중이니, 추후에 업데이트 하도록 하겠습니다.

워드프레스는 기본적으로 모든 이미지가 'wp-content/uploads' 경로로 저장이 됩니다.

그래서 ELB로 여러대의 서버를 분산시키거나, 서버 교체시 이미지가 404나는 경우가 발생하곤 합니다.

이런 상황을 방지하고자 워드프레스와 AWS S3와 연동하는 법을 찾아보겠습니다.

※ 사전에 꼭 필요한 것들

- composer

https://aljshal.tistory.com/54

 

- php-xml

$ sudo yum install -y php-xml

 

- S3 Key

https://aljshal.tistory.com/55

 

1. AWS SDK for PHP 설치

- 아래 코드 실행 후, /var/www/html 위치에 vendor 폴더 및 관련 파일이 설치되었는지 확인

$ cd /var/www/html
$ composer require aws/aws-sdk-php

 

2. 샘플 코드 테스트

- 아래 코드를 test.php 로 저장하여 웹에서 실행

- s3 버킷에 이미지가 저장되고, 그 주소가 출력되면 성공

<?php

ini_set( 'display_errors', 1 );

require_once 'vendor/autoload.php';


use Aws\S3\Exception\S3Exception;
use Aws\S3\S3Client;

echo '<pre>';

define( 'S3_KEY', 'S3_KEY');
define( 'S3_SECRET', 'S3_SECRET');
define( 'S3_BUCKET', 'S3_BUCKET');
define( 'S3_REGION', 'ap-northeast-2');

$s3 = new S3Client([
    'version' => 'latest',
    'region' => S3_REGION,
    'credentials' => [
        'key' => S3_KEY,
        'secret' => S3_SECRET,
    ]
]);

$file_url = 'https://www.example.com/sample-logo.jpg';
$s3_path = 'uploads/sample-logo.jpg';
$file_data = file_get_contents( $file_url );

try{
    $result = $s3->putObject([
        'Bucket' => S3_BUCKET,
        'Key' => $s3_path,
        'Body' => $file_data,
        'ACL' => 'public-read'
    ]);
    echo $result['ObjectURL']. PHP_EOL;
} catch ( S3Exception $e ) {
    echo $e->getMessage();
}

1. AWS IAM에 접속

2. AmazonS3FullAccess 정책 연결

3. 사용자 생성 후, 나오는 키 저장

$ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin/
$ sudo ln -s /usr/local/bin/composer.phar /usr/local/bin/composer

 

- composer 버전 확인

$ composer --version

'Server > Linux' 카테고리의 다른 글

Linux PHP, Apache, MySQL 버전 확인  (0) 2018.07.17
Linux 서비스 상태 확인, 시작, 중지, 재시작  (0) 2018.07.17
$ cd /
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=512 
$ sudo chown root:root /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -a
$ sudo vi /etc/fstab # 가장 아래줄에 내용추가
   
/swapfile   swap   swap   defaults  0  0
   
$ sudo swapon -s
$ free -m

+ Recent posts