【設定方法】Docker環境で立ち上げたserposcopeのデータをMariaDBへ保存し永続化する

Docker環境で立ち上げたserposcopeのデータをMariaDBへ保存し永続化する手順をメモします。
serposcope(サーポスコープ)
serposcopeとは?
Google上のウェブサイトの検索順位を監視し、定期的に順位計測をができる
オープンソースで利用できるツールです。
serposcopeの公式サイト
serposcopeのメリット
- 完全無料で利用できる
- 設定できるキーワード数とWebサイトの数は無制限
- 自動で計測を行ってくれる
メリットはいろいろありますが一番大きいメリットは完全無料
であると感じています。
同じSEOの計測ができる他のツールとしてGRCやRank Trackerなどがありますがこれらのツールは有料になってしまいます。
環境
- Mac OS Big SUR 11.3.1
- Docker 20.10.5, build 55c4c88
- docker-compose 1.28.5, build c4eb3a1f
ファイル操作で利用するUnixコマンドについて
基本的なディレクトリ作成やファイル操作はUnixコマンドを利用します。
Unixコマンドについて詳しくはこちらの記事を参考にしてください。
docker-composeコマンドについて
docker-composeを操作する際に利用します。
docker-composeコマンドについて詳しくはこちらの記事を参考にしてください。
serposcopeをDocker環境へ立ち上げる
今回は前回serposcope
をインストールしたDocker環境の状態から変更を加えて行きます。
前回の記事については下記になりますので事前にご確認いただければと思います。
serposcopeをDocker環境へ立ち上げる手順
ディレクトリの構成
markdownserposcope
├── docker-compose.yml
└── serposcope
├── Dockerfile
├── README.md
├── entrypoint.sh
└── serposcope
serposcopeのデータの永続化
Dockerで構築したアプリについて
Dockerは手軽に環境を構築できますが揮発性(コンテナ破棄時に変更分が消えてしまう仕様)のため
再起動などを行うとデータがなくなってしまいます。
serposcopeを継続的に利用
serposcopeを継続的に利用ために再起動後に一度作成したユーザーでログインしたり、集計したデータを確認する場合データを永続化する必要があります。
永続化するためのストレージを準備
前回立ち上げたserposcopeのコンテナはコンテナ内にストレージを保持しているため直接変更することができません。
そのため別でストレージを準備してデータの保存先を別で準備したストレージへむけてあげることで永続差することが可能になります。
MariaDBを立ち上げる
serposcope
はjavaで構築されていてJDBCでDBへアクセスしています。
そのためJDBCで利用できるDBであれば利用可能です。
今回はMySQLと互換のある比較的扱いやすいMariaDB
を利用しようと思います。
docker-composeを追記
前回作成したdocker-compose
へMariaDBの設定を追記して行きます。
terminal$ vi docker-compose.yml
下記を追記します。
docker-compose.ymlの内容
docker-compose.ymlserposcope_db:
image: mariadb
container_name: serposcope_db
hostname: serposcope_db
command: mysqld --user=mysql
ports:
- 3306:3306
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_HOST: "serposcope_db"
MYSQL_DATABASE: "serposcope"
MYSQL_USER: "serposcope_user"
MYSQL_PASSWORD: "password"
restart: always
image
mariadb
を指定しています。
environment
DBの設定は環境変数を渡すことで設定できます。
MYSQL_HOST:
任意のデータベースのホスト名を指定します。
MYSQL_DATABASE:
任意のデータベース名を指定します。
MYSQL_USER:
任意のデータベースのユーザー名を指定します。
MYSQL_PASSWORD:
任意のデータベースのパスワードを指定します。
こちらは変更してください。
Volumesのディレクトリの作成
mysql-data
をの作成します。
terminal$ mkdir mysql-data;
ディレクトリ構成
kotlin.
├── docker-compose.yml
├── mysql-data
└── serposcope
├── Dockerfile
├── README.md
├── entrypoint.sh
└── serposcope
serposcopeのデータ保存の向き先の変更
serposcope
がデータを保存するための向き先を先ほど設定を作成したMariaDBへむけます。
terminal$ vi docker-compose.yml
下記を追記します。
docker-compose.ymlの内容
yaml serposcope:
build: serposcope
container_name: serposcope
ports:
- '7134:7134'
environment:
SERPOSCOPE_DB_URL: 'jdbc:mysql://serposcope_db/serposcope?user=serposcope_user\&password=password\&allowMultiQueries=true'
depends_on:
- serposcope_db
restart: always
environment
データ保存先の設定は環境変数を渡すことで設定できます。
SERPOSCOPE_DB_URL:
先ほど設定したMariaDBのDB設定に合わせて記述します。
フォーマット
inijdbc:mysql://{{データベースのホスト名}}/{{データベース名}}?user={{データベースのユーザー名}}\&password={{データベースのパスワード}}\&allowMultiQueries=true
depends_on
起動の順番を指定する項目です。
データベースの後に起動させるために設定します。
Docker-compose 全体
yamlversion: '3'
services:
serposcope_web:
build: serposcope
container_name: serposcope_web
ports:
- '7134:7134'
depends_on:
- serposcope_db
environment:
SERPOSCOPE_DB_URL: 'jdbc:mysql://serposcope_db/serposcope?user=serposcope_user\&password=password\&allowMultiQueries=true'
SERPOSCOPE_DB_DEBUG: "true"
restart: always
serposcope_db:
image: MariaDB
container_name: serposcope_db
hostname: serposcope_db
command: mysqld --user=mysql
ports:
- 3306:3306
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_HOST: "serposcope"
MYSQL_DATABASE: "serposcope_db"
MYSQL_USER: "serposcope_user"
MYSQL_PASSWORD: "password"
restart: always
ディレクトリ構成
kotlin.
├── docker-compose.yml
├── mysql-data
└── serposcope
├── Dockerfile
├── README.md
├── entrypoint.sh
└── serposcope
コンテナを再起動
コンテナを再起動して設定を反映させます。
docker-compose downでコンテナを停止
docker-compose down
コマンドでコンテナを停止します。
terminal$ docker-compose down
docker-compose upでコンテナを起動
docker-compose up
コマンドでコンテナを起動します。
terminal$ docker-compose up
serposcopeへアクセス
起動したアプリケーションへアクセスします。
アクセスするURL
ローカルホストでDockerを起動している場合は
http://localhost::7134
こちらからアクセスできます。
serposcopeログイン画面
ログイン画面が確認できます。
以上でデータの永続化は完了になります。
- article
Windows WSL2 に Docker を最適導入:I/O 最適化・メモリ配分・互換性チェック
- article
Docker vs Podman vs nerdctl 徹底比較:CLI 互換性・rootless・企業導入の勘所
- article
WordPress を Docker で最速構築:開発/本番の環境差分をなくす手順
- article
Docker の全体像を俯瞰:コンテナ時代の開発・配布・運用を一本化する戦略ガイド
- article
Docker Swarm 徹底入門:Kubernetes に移行する前に理解すべきこと
- article
Playwright × Docker:本番環境に近い E2E テストを構築
- article
MySQL Shell(mysqlsh)入門:AdminAPI で InnoDB Cluster を最短構築
- article
MySQL Optimizer Hints 実測比較:INDEX_MERGE/NO_RANGE_OPTIMIZATION ほか
- article
MySQL ロック待ち・タイムアウトの解決:SHOW ENGINE INNODB STATUS の読み解き方
- article
MySQL オプティマイザ概説:実行計画が決まるまでの舞台裏
- article
MySQL 基本操作徹底解説:SELECT/INSERT/UPDATE/DELETE の正しい書き方
- article
MySQL 入門:5 分でわかる RDBMS の基本とインストール完全ガイド
- article
serposcope3.4からserposcope3.5へアップデートしたときのエラーと改善策
- article
【設定方法】Docker環境で立ち上げたserposcopeのデータをMariaDBへ保存し永続化する
- article
Lodash で巨大 JSON を“正規化 → 集計 → 整形”する 7 ステップ実装
- article
Devin と進めるドメイン駆動設計:ユビキタス言語を反映させるプロンプト構成
- article
Convex クエリ/ミューテーション/アクション チートシート【保存版シンタックス】
- article
セキュアに導入する GPT-5-Codex:API キー管理・機密コード対策・監査ログのベストプラクティス
- article
Astro × Starlight カスタマイズ大全:ドキュメントサイトをブランド化する設計術
- article
LangChain ハイブリッド検索設計:BM25 +ベクトル+再ランキングで精度を底上げ
- blog
iPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
- blog
Googleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
- blog
【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
- blog
Googleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
- blog
Pixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
- blog
フロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来