ブロガーさんが気になるのは、日々のキーワードランキングではないでしょうか?
キーワード検出ツールはいろいろありますが、まともな機能の有料ソフトだと月数千円ぐらいして高いんですよね。
アフィリエイトで月100万ぐらい稼いでいる方なら、大した出費だとは思わないかもしれませんが、初心者さんにはきついかも・・・
でもDockerが使えれば、そんな悩みもなくなります。
DockerでSerposcopeをたくさん稼働させれば、画像チェックにも引っかからず余裕で数百サイトの順位検索が可能です。
そんなDocker+Serposcopeの導入方法をご紹介!
SerposcopeをDockerで実践
一番簡単な方法は、Docker Hubからのインストールです。
まずは、DockerHubのサイトにアクセスしましょう。
画僧のようにSerposcopeで検索すると、多くのdocker imageを入手する事ができます。
導入実績が多いimageならどれでも大丈夫ですが、迷ったら検索時で最も更新日が新しいのが良いでしょう。
今回は「martinbouillaud/serposcope」で実践です。
# docker pull martinbouillaud/serposcope
# docker run <serposcopeのイメージID> -p 7134:7134 -d
即効で動かしたいなら、もうこれだけでOKです。
ウェブブラウザを開いて、レンタルVPSサーバーのグローバルIPアドレスとポート番号を入力するだけでインストール完了です。
EmailとPasswordを入力すれば、すぐに使い始める事が可能です。
でも、使ってみればわかりますが、短い間に何度もキーワード検索をおこなうと、画像キャプチャーが表示されて、全然使い物にならないんです。
また、折角入手したキーワードのデーターベースも永久的に利用したいですよね。
そんな時は、docker-composeの出番です。
DockerでSerposcopeを複数同時に立ち上げる方法
2つのコンテナ実装で、1つのグローバルIPアドレスで複数稼働も簡単です。
DB(データベース)を別のコンテナとして稼働させて連携、また設定ファイルはホストOSからもアクセスできるようにマウントしましょう。
docker-compose.ymlに記述すれば、serposcopeとDB連携の設定が簡単に出来ます。
Dockerでhttps-potalを使う
- アプリケーションサーバー(app)コンテナ
- データベースサーバー(db)コンテナ
ディレクトリ構成は次のようになります。
serposcope
├── docker-compose.yml
└── db
コンソール画面でdocker-compose.ymlを立ち上げて、次のように記述してください。
version: "3.5"
services:
ser_web_http:
restart: always
container_name: ser_web_http
image: martinbouillaud/serposcope:latest
ports:
- '7135:7134'
depends_on:
- ser_db_http
environment:
SERPOSCOPE_DB_URL: 'jdbc:mysql://ser_db/serposcope_db?user=serposcope_user\&password=password\&allowMultiQueries=true'
SERPOSCOPE_DB_DEBUG: "true"
TZ: Asia/Tokyo
networks:
- serpos_net_http
ser_db_http:
image: mariadb:latest
container_name: ser_db_http
hostname: ser_db
#command: mysqld --user=mysql
networks:
- serpos_net_http
#ports:
# - '3306:3306'
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: serposcope_db
MYSQL_USER: serposcope_user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
restart: always
networks:
serpos_net_http:
driver: bridge
Dockerにした場合、2つのコンテナをnetworksで繋げているので、portの設定をしなくてもDBは繋がります。
ポイントは次の3つです。
①serposcopeで使用するDB(データベース)を内部から、外部のmariaDBに変更
depends_on:
- ser_db_http
environment:
SERPOSCOPE_DB_URL: 'jdbc:mysql://ser_db/serposcope_db?user=serposcope_user\&password=password\&allowMultiQueries=true'
SERPOSCOPE_DB_DEBUG: "true"
TZ: Asia/Tokyo
先にDBが読み込まれてから、実行するようにdepends_onで設定し、データベースを外部出力するパスに変更します。
大事なのは、TZ: Asia/Tokyo、日本時刻のログになります。
②タイムゾーンを日本時刻に設定
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: serposcope_db
MYSQL_USER: serposcope_user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
serposcopeのデータベースに接続するパスワードを用意します。
TZ: Asia/Tokyoの設定はコンテナ毎に必要です。
③ホストOS側に作成したデータベースをマウント
volumes: - ./db:/var/lib/mysql
本来なら、dockerコンテナが稼働していないと、データベースにはアクセスできません。
volumesにパスの記述をするだけで、docker-compose downでコンテナを削除しても、キーワードデータは残っています。
再接続はdocker-compose up です。
Serposcopeをhttps対応にする方法
Serposcopeのセキュリティを強化するためのhttps導入もドメインを指定すれば簡単です。
でも、その為にわざわざ、ドメインを購入する手間暇が嫌という方は、そのままIPアドレスのまま使ってしまいましょう。
Dockerを利用すれば、そんな事もちょちょいのちょいです。
Serposcopeとhttps-potal2つのコンテナ
- アプリケーションサーバー(app)コンテナ
- リバースプロキシ―(https)コンテナ
ディレクトリ構成は次のようになります。
serposcope
├── docker-compose.yml
├── nginx
└── src
nginxとsrcのディレクトリは、docker-compose.ymlを実行すれば、自動で作成されるので、事前に作る必要はありません。
尚、外部DBを利用するなら、コンテナは3つ必要になりますが、説明を簡単にするため2つにしています。
version: "3.5"
services:
serposcope_web:
restart: always
container_name: serposcope_web
image: martinbouillaud/serposcope:latest
expose:
- '7134'
environment:
TZ: Asia/Tokyo
serposcope_https:
image: steveltn/https-portal:1
container_name: serposcope_https
ports:
- '80:80'
- '443:443'
restart: always
volumes:
- ./nginx/ssl_certs:/var/lib/https-portal
- ./nginx/conf/mysite_nginx.conf:/etc/nginx/conf.d/mysite_nginx.conf
- ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
- ./src/static:/static
environment:
DOMAINS: 'serposcope.119.271.0.155.nip.io -> http://serposcope_web:7134'
STAGE: local #staging
# FORCE_RENEW: 'true'
depends_on:
- serposcope_web
ポイントは2つ、WEBサーバー側で7134ポートを吐き出している点と、ワイルドカードDNSを使っている点です。
ワイルドカードDNSに関しては、IPアドレスのままhttpsにする方法でご紹介しています。
https://crypto-nft-fire.com/docker-ip-https/
もちろん、○○.comといった正規ドメインを取得して利用する事も可能です。
ウェブブラウザにhttps://serposcope.119.271.0.155.nip.io/と入力すれば、https通信が可能になります。
尚、オレオレ証明書をlocalにて発行しているので、証明書をブラウザ側で認証させない限り、保護されていない通信と警告がでます。
SerposcopeのDBをいつでもphpmyadminで確認する方法
最後にhttpsで稼働するSerposcopeのDB連携です。
- アプリケーションサーバー(app)コンテナ
- データベースサーバー(db)コンテナ
- リバースプロキシ―(https)コンテナ
- データベースチェック(phpmyadmin)コンテナ
version: "3.5"
services:
ser_web:
restart: always
container_name: ser_web
image: martinbouillaud/serposcope:latest
expose:
- '7134'
depends_on:
- ser_db
environment:
SERPOSCOPE_DB_URL: 'jdbc:mysql://ser_db/serposcope_db?user=serposcope_user\&password=password\&allowMultiQueries=true'
SERPOSCOPE_DB_DEBUG: "true"
TZ: Asia/Tokyo
networks:
- serpos_net
ser_db:
image: mariadb:latest
container_name: ser_db
hostname: ser_db
#command: mysqld --user=mysql
networks:
- serpos_net
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: serposcope_db
MYSQL_USER: serposcope_user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
restart: always
ser_phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: ser_phpmyadmin
expose:
- '80'
environment:
- PMA_HOST=ser_db
#- PMA_USER=serposcope_user
#- PMA_PASSWORD=password
depends_on:
- ser_db
networks:
- serpos_net
ser_https:
image: steveltn/https-portal:1
container_name: ser_https
ports:
- '80:80'
- '443:443'
restart: always
volumes:
- ./nginx/ssl_certs:/var/lib/https-portal
- ./nginx/conf/mysite_nginx.conf:/etc/nginx/conf.d/mysite_nginx.conf
- ./src/static:/static
environment:
DOMAINS: 'serposcope_web.119.271.0.155.nip.io -> http://ser_web:7134,serposcope_db_admin.119.271.0.155.nip.io -> http://ser_phpmyadmin:80'
STAGE: local #staging
# FORCE_RENEW: 'true'
depends_on:
- ser_web
networks:
- serpos_net
networks:
serpos_net:
driver: bridge
environmentのDMAINSに注目です。
serposcopeのWEBには、https://serposcope_web.119.271.0.155.nip.io
phpmyadminには、https://serposcope_db_admin.119.271.0.155.nip.io
これだけで、アクセスできるようにしています。
つまり、サブドメイン形式にすることで、同じグローバルIPアドレスを使いまわすことが可能なのです。
この方法なら、serposcope1、serposcope2、serposcope3といった感じでwebサービスを増やすことが出来ます。
尚、複数のserposcopeサービスを同時に起動する場合は、正規ドメインでの運用がいいでしょう。
httpsにしなくて良いなら、3つのコンテナでも大丈夫です。
- アプリケーションサーバー(app)コンテナ
- データベースサーバー(db)コンテナ
- データベースチェック(phpmyadmin)コンテナ
こちらが最もシンプルかも知れませんね。
version: "3.5"
services:
ser_web_http:
restart: always
container_name: ser_web_http
image: martinbouillaud/serposcope:latest
ports:
- '7134:7134'
depends_on:
- ser_db_http
environment:
SERPOSCOPE_DB_URL: 'jdbc:mysql://ser_db/serposcope_db?user=serposcope_user\&password=password\&allowMultiQueries=true'
SERPOSCOPE_DB_DEBUG: "true"
TZ: Asia/Tokyo
networks:
- serpos_net_http
ser_db_http:
image: mariadb:latest
container_name: ser_db_http
hostname: ser_db
networks:
- serpos_net_http
#ports:
# - '3306:3306'
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: serposcope_db
MYSQL_USER: serposcope_user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
restart: always
ser_phpmyadmin_http:
image: phpmyadmin/phpmyadmin:latest
container_name: ser_phpmyadmin_http
ports:
- '1080:80'
environment:
- PMA_HOST=ser_db
#- PMA_USER=serposcope_user
#- PMA_PASSWORD=password
depends_on:
- ser_db_http
networks:
- serpos_net_http
networks:
serpos_net_http:
driver: bridge
serposcopを常に最新バージョンにする方法
serposcopeのバージョンも常に最新にしておくと安心です。
windowsOSにインストールしているなら、ダウンロードすれば、自動で更新も簡単にできますが、レンタルVPSで運用している場合は、ちょっとめんどくさいです。
そこで、Dockerfileを用意して、docker-compose build、docker-compose upのサイクル運用の方法をご紹介です。(ubuntuの場合)
serposcope
├── docker-compose.yml
├── web
└── Dockerfile
serposcopeの最新バージョンimageファイルを作る
Dockerfileの中身を次のように記載します。
FROM martinbouillaud/serposcope
USER root
# 必要なパッケージを記載
RUN apt-get update && apt-get install --no-install-recommends -y \
curl && \
apt install sudo && \
apt-get clean
ENV SERPOSCOPE_VERSION 2.15.0
RUN curl -L https://serposcope.serphacker.com/download/${SERPOSCOPE_VERSION}/serposcope-${SERPOSCOPE_VERSION}.jar > /opt/serposcope.jar -k
ENVの環境変数でバージョン管理です。最新のバージョンにするだけで、毎回の変更が簡単です。
Dockerfileでserposcopの新しいimageを作成します。
単独なら”docker image build ./ -t serposcope_new”と入力すれば、serposcope_newの新しいimageが作成されます。
自動化するなら、docker-compose.ymlの中身を変更しましょう。
docker-compose.ymlの中身を変更してserposcopを最新バージョンにする
docker hubからpullしてきた”martinbouillaud/serposcope”のimageを削除して、新規image名を記入します。
例えば、serposcope_newです。このimageはまだ存在していなくても大丈夫です。
ser_web:
build:
context: ./web
dockerfile: "Dockerfile"
image: serposcope_new
#image: martinbouillaud/serposcope
・
・
docker-compose.ymlファイルを修正したら、コマンドを入力して終了です。
docker-compose build
docker-compose up
buildコマンドで、serposcope_newが作られて、upコマンドでコンテナ作成されます。