前回のエントリで説明したとおり、静的コンテンツをNetlifyで配信するのがオシャレ。
WP2Staticの設定がうまくいっていないので、とりあえずwgetで再帰的に吸い取ることにしました。
1. Docker ComposeでWordPressをローカルに起動
以下のようなdocker-compose.ymlでWordPressを起動します。
参考:Docker入門(第六回)〜Docker Compose〜 | さくらのナレッジ
version: '3.3' services: wordpress: image: wordpress:latest depends_on: - db ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wordpress:/var/www/html db: image: mysql:5.7.27 ports: - "4306:3306" volumes: - ./db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress
このdocker-compose.ymlの設定だとWordpressディレクトリにWordPress本体のファイルが、db_dataディレクトリにMySQLのデータが格納されます。
Dockerでファイルシェアリングの設定をしておくのをお忘れなく:
docker-compose.ymlはIntelliJ IDEAなどのJetBrains IDEで読み込むとマウスクリックでdocker-compose upしたり、コンテナを落としたりイメージの削除をしたりコンテナ内のファイルシステムを見られたりデータベースに接続できたりと便利です。日本総代理店のサムライズムから買うと安かったり日本語テクニカルサポートが付いてきたりするのでお得です(宣伝)。
マウスクリックでdocker-compose up
コンテナの確認も楽々
データベースのメンテナンスも楽々
2. htmlから不要な要素を削除
静的コンテンツにするのでコメントはいりません。また、<link rel=‘shortlink’ href=‘http://xxxx/?p=1’ />みたいな投稿IDを持ったURLもいりません。
こういったメタデータをhtmlから削除するため、functions.phpに以下を追記しました。
参考: WordPressの高速化とセキュリティ向上を両立させる施策まとめ | アルコブログ
3. GitHubにリポジトリを用意
プライベートでもパブリックでも構いません。
4. wgetでサイトをスクレイプ
以下のコマンドで、サイトを吸い取りました。
#パスを相対表記の修正して、ホスト名をディレクトリ名として格納することなくカレントディレクトリに書き出す $ wget --mirror --no-parent --page-requisites --convert-links --adjust-extension --html-extension --restrict-file-names=windows --no-host-directories --no-verbose http://localhost:8000 # http://localhost:8000/magictraysns/embed といった oEmbed のページをクロール # http://debug.iframely.com/ でデバッグできる # http://debug.iframely.com/?uri=https%3A%2F%2Fmagictray.samuraism.com%2Fabout%2Findex.html $ wget --mirror --no-parent --page-requisites --convert-links --adjust-extension --html-extension --restrict-file-names=windows --no-host-directories --no-verbose\ $(find . -name index.html| awk '{ sub("./", "http://localhost:8000/"); print }' | awk '{ sub("index\.html", "embed"); print }'); # wp-admin/imaged をコピー $ mkdir -p wp-admin/images $ cp /Users/yusuke/Library/Mobile\ Documents/com~apple~CloudDocs/samuraism/magicTraySite/wordpress/wp-admin/images/* ./wp-admin/images/ # wp-admin/uploads をコピー $ mkdir -p wp-content/uploads $ cp -R /Users/yusuke/Library/Mobile\ Documents/com~apple~CloudDocs/samuraism/magicTraySite/wordpress/wp-content/uploads/* ./wp-content/uploads/ # URLを http://localhost:8000 から https://magictray.samuraism.com へ書き換え $ sed -i '' -e 's/http:\/\/localhost:8000/https:\/\/magictray.samuraism.com/g' $(find -E . -type f -iregex ".*(html|=xml|%2F)" ); $ sed -i '' -e 's/http:\\\/\\\/localhost:8000/https:\\\/\\\/magictray.samuraism.com/g' $(find -E . -type f -iregex ".*(html|=xml|%2F)" ); # oembedのファイル内で & が & となっているとリンクが切れてしまうので修正 $ sed -i '' -e 's/\&format=xml/\&format=xml/g' $(find -E . -type f -iregex ".*(html|=xml|%2F)" );
5. GitHubにプッシュ
$ git remote add origin https://github.com/yusuke/my-netlify-site.git
$ git add .
$ git commit -m "initial commit"
$ git push
6. Netlifyの設定
Netlifyでアカウントを作ったらウィザードに従って、New site from Git→Gitub→リポジトリを選択→Deploy Site(オプションはデフォルトのまま)でサイトのパブリッシュが完了します。
7. サイトの確認
しばらくまって”Your site is deployed”と出たら上に表示されている https://ランダムな単語-ランダムな単語-16進数/ のURLでサイトにアクセスできます。
デプロイ中
デプロイ完了
サイトにアクセス。Let’s Encryptで最初からhttps化されてる!
8. カスタムドメインの設定
Settings→Domain management→Add custom domainより任意の(もちろん取得済みの)ドメインを追加します。
追加したら、お手持ちのネームサーバで
cname magictray pedantic-neumann-ff2cb0.netlify.com.
などと設定するとカスタムドメインでアクセスできるようになります。
出来たサイトがこちら↓
oEmbedも効いています!
以上が駆け足で説明したWordPressサイトを静的にNetlifyで配信する方法でした。