アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


プロダクションのWordPressをローカルにDockerで再現する[調査中メモ]

WordPressって別に詳しくないしあまり好きではない。
できるだけ触りたくないんだけど、男には長い人生においてWordPressを触らないといけない事象がしばし発生する。

今まさにやってて、うまくいかなかったんだけど、とりあえずメモを残しておく。
いいやり方ご存知の方いらっしゃったら教えていただけますと助かります。

docker-composeの設定

まずはプロダクション環境をローカルで再現する所から始める。
docker-composeを使う。

のだけど、プロダクションのDBダンプファイルをそのまま dbのvolumeに

./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql

とかって設定してdocker内wordpressの初期データとして入れようとしても、ちゃんと動いてくれない。
多分httpアクセスあったらhttpsで自動リダイレクトする設定が効いてるような気がしてて、
DBのそこの部分を書き換えられればちゃんと動くような気がしてるけど未調査。

docker-compose.yml

version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
      - "./.data/db:/var/lib/mysql"
      # 下記はちゃんと動かなかった
      # - ./.db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
    restart: always
    environment:
      MYSQL_ROOT_USER: root
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    links:
      - db
    ports:
      - "8000:80"
    restart: always
    volumes:
        # テーマファイルをプロダクションからDLして./themes/my_themeに置いておく
        - ./themes/my_theme:/var/www/html/wp-content/themes/my_theme
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DEBUG: 1

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
      - PMA_USER=root
      - PMA_PASSWORD=wordpress
    links:
      - db
    ports:
       - 8080:80
    volumes:
       - /sessions
$ docker-compose up

phpmyadminも入れてみて、ここからプロダクションのDBダンプをインポートしてみたけど、それもうまくいかなかった。

themeファイル以外をdockerコンテナ内にぶちこむ

プロダクションから以下をDLしてきて、volumeなりを使って同じ場所に入れておく - wp-content/uploads/ - wp-content/plugins/

DBをエクスポート => dockerコンテナでインポート

管理画面でDBのエクスポート、インポートができる。
ほんとはdocker-compose.ymlでスマートにやりたいけど、一旦場当たり的に。
f:id:device_me:20181024093826p:plain

パーマリンク設定の反映

管理画面の設定 > パーマリング設定 より。
なぜかこれはDBインポートしても反映されてなかったので、手動で設定。

これで一旦プロダクションの状態を再現できた。

結論

WordPress触りたくない

ubuntuの勉強メモ

$ #ユーザーを作成
$ adduser <ユーザー名>

$ # sudo グループに追加
$ gpasswd -a <ユーザー名> sudo

$ ユーザー切り替え
$ su - <ユーザー名>

$ ユーザー切り替え (PATHなどの環境変数を引き継がない)
$ su <ユーザー名>

Kindleでamazon.com (co.jpではなく) に接続される時の対処法

Kindle for Macを利用してKindle本を読もうとしたら、
購入した本がKindleサーバーから同期されず、全然ダウンロードされません。
何でやろ、と思ったら、どうやら日本のAmazon (amazon.co.jp) サーバーではなく、USのamazon.com サーバーにつなぎに行ってるみたいでした。

理由は全くわかりません。
が、対処法は分かりました。

amazon.comに接続される場合は、amazon.co.jpでパスワードを変更せよ

amazonのカスタマーサポートに問い合わせた所、
「原因はわかりませんが、とにかくamazon.co.jpでパスワードを変えてみてください」と言われました。
言う通りに変更してみると、kindleも即座にco.jpにつなぎに行くようになり問題解決!
技術書などはiPhonekindleでなく、Mackindleの方が読みやすいのでありがたい。
またkindleロックインが進みました。

AWS EC2 + ubuntu + nginx でサーバー立ち上げてみる

サーバーの種別を整理

Webサーバー

静的コンテンツを返すサーバー。

nginxはいろんなクライアントにつながっている状態をさばくのが得意。
今回はnginxを使用する。

アプリケーションサーバ

動的コンテンツを返すサーバー。

Railsは5からpuma推奨になった。(おそらくActionCableが入ったため)
herokuが推奨するのも以前からpuma。

AWSにログイン

AWS Console ヘッダーメニューの「サービス」からEC2にジャンプします。

f:id:device_me:20180923140126p:plain

キーペアを取得

左メニューの「キーペア」 => 「キーペアの作成」をクリック。 f:id:device_me:20180923140512p:plain

自分に分かりやすい名前をつけておきましょう。
f:id:device_me:20180923140638p:plain

EC2でサーバーを立ち上げる

f:id:device_me:20180923141920p:plain

1. ubuntu を検索して選択

f:id:device_me:20180923155342p:plain

2. インスタンスタイプを選択

今回はt2.micro f:id:device_me:20180923155452p:plain

「確認と作成」でデフォルト設定で立ち上がります。

ssh接続

$ ssh -i ~/.ssh/YOUR_PEM_FILE_NAME.pem ubuntu@YOUR_PUBLIC_DNS

sshで接続できない場合はこちら。
otiai10.hatenablog.com

nginxをインストール

ppaで最新版を入れます。
参考)
Ubuntuに最新のnginxをインストールする

$ # root権限で対話shell起動。しかし以降のコマンドがログに残らないので注意が必要
$ sudo -s
$ nginx=stable # 安定版を指定
$ add-apt-repository ppa:nginx/$nginx
$ apt-get update
$ apt-get install nginx
systemctl で設定と起動

参考)
systemctl コマンド

$ sudo systemctl enable nginx # サービス自動起動を有効に
$ sudo systemctl start nginx # nginx起動

<< 編集中 >>

AndroidのcompileSdkVersion, targetSdkVersion, minSdkVersion とは何かをざっくり

こちらのブログに分かりやすい説明があったのでメモ。

backport.net

compileSdkVersion

  • コンパイル時に使うAndroid SDKのバージョン
  • 変更してもアプリの動作は変化しない
  • SDK ManagerでそのバージョンのSDK Platformがインストールされている必要あり

targetSdkVersion

  • メインターゲットになるOSのバージョン
  • 変更するとアプリの動作が変わる『可能性』がある

minSdkVersion

  • アプリをインストールできる最低のAPIレベル

maxSdkVersion

  • アプリをインストールできる最大のAPIレベル

qiita.com