この記事は、ConoHa Advent Calendar 2020 15日目の記事です。
今回は清楚かわいい ConoHa ちゃんをボクだけのPhotonサーバにしていきます。
Photonって何ぞ??
WordPress公式が提供する画像変換サービスのことです。(ん?)
何ができるかというと
こんな感じの画像を
https://conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg
こう書き換えると
https://i0.wp.com/conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg?&w=500
切り抜いたり
https://i0.wp.com/conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg?&crop=30,10,40,60
してくれます。
APIも提供されているので、色々なことに使えてしかも無料という太っ腹サービスですが、一点制約があり
Photon is only allowed to be used by sites hosted on WordPress.com, or on Jetpack-connected WordPress sites
WordPress.comのクラウドサービスか、WordPressでかつ「Jetpack」というプラグインをインストールしたサイトしか使えません。
(URL書換で動くので無断で使えますが、突然エラーになったりするのでやめましょう)
そのため、レンタルサーバーでホームページを運営している方や、ブログサービスやnoteだったりを使っている方は使用できません。画像変換サービスとしては(!)
そう!実はこの Photon はソースコードが公開されているのでサーバを用意してセットアップすれば自由に使えます。
ただしソースコードが公開されているだけで依存関係だったり、導入手順だったりは一切公開されていないので、
自分で必要なものを確認して、自分で考えてセットアップが必要です。
今回はこのOSS版?Photonのセットアップに成功したので、ConoHaを使って画像変換サーバを作ろう!!というお話です。
サーバをつくる
早速 ConoHa ダッシュボードにログインしてサクッとサーバー立てます。
OSも特に要件がない(多分)ので、定番の1GBプランでCentOS8.2をチョイス
(去年は50GBだったのに、今年は100GBに増えてる!!)
ログインしてセットアップ
SVNで公開されているソースコードを見ながら必要そうなものを追加していきます。
の前にお約束
dnf -y update
あとファイヤーウォールも止めます
きちんと使用する場合は特定ポートだけ解放するか、ConoHa側のFWを設定してください!
systemctl stop firewalld
ミドルウェアのセットアップ
Photonが稼働するミドルウェアを導入。今回は Nginx と PHP をインストールします。
たぶん Apache でも動きます。
Nginx
HTTPSに対応させたいので一旦最低限の設定ファイルを配置して、Let's Encryptで証明書発行後に置き換えます。
dnf install -y nginx
mkdir -p /var/www
mkdir -p /var/lib/nginx/fastcgi
cd /etc/nginx/
mv nginx.conf nginx.conf.backup
vi nginx.conf
Configはこちらを丸っとコピペ
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
keepalive_timeout 5;
client_max_body_size 10m;
server_tokens off;
server_name_in_redirect off;
index index.html index.php;
server {
listen 80 default_server;
server_name _;
root /var/www/;
}
}
PHP
バージョンは推測できなかったので、とりあえず最新版をインストール
dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module install -y php:remi-7.4
sed -i 's/apache/nginx/g' /etc/php-fpm.d/www.conf
sed -i 's/listen = \/run\/php-fpm\/www.sock/listen = \/var\/run\/php-fpm\/php-fpm.sock/g' /etc/php-fpm.d/www.conf
sed -i 's/listen.mode = 0660/listen.mode = 0660\nlisten.owner = nginx\nlisten.group = nginx/g' /etc/php-fpm.d/www.conf
sed -i 's/listen.acl_users/;listen.acl_users/g' /etc/php-fpm.d/www.conf
sed -i 's/;clear_env = no/clear_env = no/g' /etc/php-fpm.d/www.conf
chown -R nginx:nginx /var/lib/php/
chown -R nginx:nginx /var/www
画像変換に使うライブラリだったりをインストール
dnf install -y make php-devel php-pear GraphicsMagick-devel
pecl install gmagick-2.0.5RC1
echo "extension=gmagick.so" > /etc/php.d/20-gmagick.ini
開始と自動起動
systemctl start php-fpm.service
systemctl start nginx.service
systemctl enable php-fpm.service
systemctl enable nginx.service
Let's Encrypt
certbotがなぜがエラーになるので git からクローンしてセットアップ
dnf install -y git
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
# photon.cloudremix.net はお使いのドメインで
./letsencrypt-auto certonly --webroot -w /var/www -d photon.cloudremix.net
openssl dhparam -out /etc/nginx/dhparam.pem 2048
正常に証明書の発行が終わったら Nginx の設定を本来のものに
vi /etc/nginx/nginx.conf
**こちらを丸っとコピペ(クリックで表示)**
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
keepalive_timeout 5;
client_max_body_size 7m;
server_tokens off;
server_name_in_redirect off;
index index.html index.php;
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/photon.cloudremix.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/photon.cloudremix.net/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# modern configuration. tweak to your needs.
ssl_protocols TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;
ssl_dhparam /etc/nginx/dhparam.pem;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
server_name photon.cloudremix.net;
root /var/www/photon.cloudremix.net/photon;
charset utf-8;
access_log /var/log/nginx/photon.cloudremix.net.log;
location / {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param PHP_VALUE "open_basedir=/var/www/photon.cloudremix.net/photon/:/tmp/:/dev/shm/:/usr/local/bin/jpegoptim:/usr/local/bin/optipng:/usr/local/bin/pngcrush:/usr/local/bin/pngquant:/usr/local/bin/cwebp";
include fastcgi_params;
}
}
}
修正が終わったら再起動
systemctl restart nginx.service
アプリケーションのセットアップ
いよいよPhotonをインストールします。
画像変換用ツールをインストールしますが、cwebp
だけは リポジトリにないので、ソースからインストールします。
dnf install -y jpegoptim optipng pngquant pngcrush
cd /usr/local/shar
wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.1.0-linux-x86-64.tar.gz
tar -xvf libwebp-1.1.0-linux-x86-64.tar.gz
先人の知恵によると/usr/local/bin
にシンボリックリンクがないと認識しないらしいので、リンクを作ってあげます。
ln -s /usr/local/share/libwebp-1.1.0-linux-x86-64/bin/cwebp cwebp
ln -s /usr/bin/jpegoptim jpegoptim
ln -s /usr/bin/optipng optipng
ln -s /usr/bin/pngquant pngquant
Photonのソースコードをチェックアウトします。
dnf install -y subversion
mkdir -p /var/www/photon.cloudremix.net
cd /var/www/photon.cloudremix.net
svn co http://code.svn.wordpress.org/photon/
chown -R nginx:nginx /var/www;
#以上!
使ってみる!
Photonに管理画面だったり操作ツールだったりはないので、URLで操作します。
https://【用意したドメイン】/【画像のURL】?【セットするフィルタ】
動作例
元URLhttps://conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg
そのまま(実際はwebp
最適化)
https://photon.cloudremix.net/conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg
横幅を500pxに
https://photon.cloudremix.net/conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg?ssl=1&w=500
ConoHaちゃんアップ(切り出し)
https://photon.cloudremix.net/conoha.mikumo.com/wp-content/uploads/2020/11/1280x800-1.jpg?ssl=1&crop=30,10,40,60
あとがき
結構さらっと書いてますがむちゃくちゃトライアンドエラーでした。
config.php
を作成すれば色々と設定ができるので、気になったかたはお試しあれ。
あと本格的に使う場合は、ドメイン制限をしないと本家のように誰でも使える状態なるので必ず使うドメインだけに絞りましょう。