「後で読む」サービスとしてPocketを愛用したけど、オープンソースかつセルフホスト可能な代替として wallabag の存在を知り、早速自宅のUbuntu Serverに構築してみることにした。とはいえ、わざわざ自分で建てなくても一年で11ユーロで利用できるので、面倒なかたは wallabag.itを使うのもありかたと思う。
既に構築記事はいっぱいあるし、正直、2025-07-11に構築してから、時間が経ってしまって詳細を忘れてしまって記憶が怪しいが、一応記録しておく。

インストール環境
- OS: Ubuntu Server 22.04.5 LTS
- Docker: Docker Compose
- データベース: PostgreSQL
基本的には公式のDockerイメージを利用して構築を進めた。意外と、すんなりとはいかなかった。参考としたのは wallabag/docker: Official docker-composer for wallabag.など。
データベースはdocker。joplin、minifluxと共用している。
設定ファイル
docker-compose.yaml
wallabag:
image: wallabag/wallabag
container_name: wallabag
restart: unless-stopped
environment:
- POPULATE_DATABASE=false
- POSTGRES_USER=postgresのsuperuser(root)名
- POSTGRES_PASSWORD=postgresのsuperuser(root)のパスワード
- SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
- SYMFONY__ENV__DATABASE_HOST=postgresql-server
- SYMFONY__ENV__DATABASE_PORT=5432
- SYMFONY__ENV__DATABASE_NAME=wallabag
- SYMFONY__ENV__DATABASE_USER=wallabag
- SYMFONY__ENV__DATABASE_NAME=wallabag
- SYMFONY__ENV__DATABASE_PASSWORD=wallabagのユーザのパスワード
- SYMFONY__ENV__DOMAIN_NAME=https://wallabag.自ドメイン
- SYMFONY__ENV__SERVER_NAME="Your wallabag instance"
- SYMFONY__ENV__REDIS_HOST=redis
- SYMFONY__ENV__FOSUSER_REGISTRATION=false ## ユーザ作成前はtrue
- SYMFONY__ENV__FOSUSER_CONFIRMATION=false
- PHP_MEMORY_LIMIT=512M
ports:
- "127.0.0.1:8180:80"
networks:
- app-net
volumes:
- ./wallabag/images:/var/www/wallabag/web/assets/images
- ./wallabag/data:/var/www/wallabag/data
healthcheck:
test: ["CMD", "wget" ,"--no-verbose", "--tries=1", "--spider", "http://localhost/api/info"]
interval: 1m
timeout: 3s
depends_on:
- db
- redis
redis:
image: redis:alpine
container_name: redis
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 3s
networks:
- app-net
networks:
app-net:
driver: bridge
nginx.conf
server {
listen 80;
listen [::]:80;
root /var/www;
server_name wallabag.自ドメイン;
include /etc/nginx/conf.d/mime.types;
###
# wallabag
###
#
location / {
proxy_pass http://127.0.0.1:8180;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
画面キャプチャー
勿論、拡張機能もある。 wallabagger | Chrome-like / Firefox plugin for wallabag v2.、Firefox、Chrome両方に対応。
個人的にはpocketより使い易い。タグ付けのルールをdomainName matches "ubuntuhandbook.org"
として作成すると、ドメインに合わせてタグを自動で付けてくれる。こういうのは便利だな、と。
以下、動かなかった時のまとめなので、読まなくて良し。
データベース接続エラー
docker compose up
で起動したものの、wallabagコンテナがデータベースに接続できずに再起動を繰り返す問題が発生した。
Starting wallabag ...
Waiting for database ...
Waiting for database ...
Waiting for database
ログを確認すると、DB接続でエラー。
Can't connect to the database: An exception occurred in the driver: SQLSTATE[08006] [7] could not translate host name "db" to address: Name does not resolve
docker-compose.yml
でネットワークの設定漏れ。
networks:
- app-net
Run wallabagの読み解き
最初、問題なく起動できていたのだが、サブディレクトリ構成で動かそうとして、何度も起動を繰り返したからだろうか…起動しなくなった。最終的に起動はできるようなったのだが、サブディレクトリ構成は諦めた。
エラー解決として、Dockerの設定のドキュメントは、 Docker – wallabag documentationを見るのだけど、意味不明。
- Fork and clone the project
- Edit
app/config/parameters.yml
to replacedatabase_*
properties with commented ones (with values prefixed byenv.
)composer install
the project dependenciesphp bin/console wallabag:install
to create the schemadocker compose up
to run the containers (ordocker-compose up
for wallabag < 2.7)- Finally, browse to http://localhost:8080/ to find your freshly installed wallabag.
多分、ドキュメントが古い気がする。
当初は wallabag/docker: Official docker-composer for wallabag.あたりをフォークして作っていたのだろうか?
docker/root/etc/wallabag/parameters.template.yml at master · wallabag/docker見ると
database_driver: ${SYMFONY__ENV__DATABASE_DRIVER:-pdo_sqlite}
database_host: ${SYMFONY__ENV__DATABASE_HOST:-127.0.0.1}
database_port: ${SYMFONY__ENV__DATABASE_PORT:-~}
database_name: ${SYMFONY__ENV__DATABASE_NAME:-symfony}
database_user: ${SYMFONY__ENV__DATABASE_USER:-root}
database_password: ${SYMFONY__ENV__DATABASE_PASSWORD:-~}
database_path: "%kernel.project_dir%/data/db/wallabag.sqlite"
database_table_prefix: ${SYMFONY__ENV__DATABASE_TABLE_PREFIX:-wallabag_}
database_socket: null
database_charset: ${SYMFONY__ENV__DATABASE_CHARSET:-utf8}
今は、コンテナ内に入ると、docker-compose.ymlに沿って /var/www/wallabag/app/config/parameters.yml が作成されている。
docker compose exec wallabag sh
で中に入ると、以下のように確認できる。
/var/www/wallabag # cat app/config/parameters.yml
# This file is auto-generated during the composer install
parameters:
database_driver: pdo_pgsql
database_host: postgresql-server
database_port: 5432
database_name: wallabag
database_user: wallabag
database_password: パスワード
database_path: '%kernel.project_dir%/data/db/wallabag.sqlite'
database_table_prefix: wallabag_
database_socket: null
database_charset: utf8
domain_name: 'https://wallabag.自ドメイン'
server_name: 'Your wallabag instance'
mailer_dsn: 'smtp://127.0.0.1'
locale: en
secret: シークレット
twofactor_sender: no-reply@wallabag.org
fosuser_registration: false
fosuser_confirmation: false
fos_oauth_server_access_token_lifetime: 3600
fos_oauth_server_refresh_token_lifetime: 1209600
from_email: no-reply@wallabag.org
rss_limit: 50
rabbitmq_host: localhost
rabbitmq_port: 5672
rabbitmq_user: guest
rabbitmq_password: guest
rabbitmq_prefetch_count: 10
redis_scheme: tcp
redis_host: redis
redis_port: 6379
redis_path: null
redis_password: null
sentry_dsn: null
ClassNotFoundErrorなエラー
そのままコンテナ内で、php bin/console wallabag:install
を実行すると
Symfony\Component\ErrorHandler\Error\ClassNotFoundError^ {#49
・・・中略・・・
2025-07-11T02:27:42+00:00 [critical] Uncaught Error: Class "Symfony\Bundle\DebugBundle\DebugBundle" not found
みたいなエラー。
なので、composer install
を実行すると必要なパッケージがダウンロード、インストールされる。
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 34 installs, 0 updates, 0 removals
- Downloading localheinz/diff (1.2.0)
・・・中略・・・
- Installing localheinz/diff (1.2.0): Extracting archive
・・・中略・・・
Generating autoload files
115 packages you are using are looking for funding.
・・・中略・・・
Trying to install assets as relative symbolic links.
--- ------------------------ ------------------
Bundle Method / Error
--- ------------------------ ------------------
✔ NelmioApiDocBundle relative symlink
✔ CraueConfigBundle relative symlink
✔ BabDevPagerfantaBundle relative symlink
✔ FOSJsRoutingBundle relative symlink
--- ------------------------ ------------------
[OK] All assets were successfully installed.
よし、これでphp bin/console wallabag:install
できるようになった。
データベースリセットで失敗。
データベースの初期設定しなおそうと、設問、DBをリセットするで、はい、と答えると失敗。
Step 2 of 4: Setting up database.
---------------------------------
It appears that your database already exists. Would you like to reset it? (yes/no) [no]:
> yes
Dropping database, creating database and schema...
In InstallCommand.php line 364:
The command "doctrine:database:drop" generates some errors:
Could not drop database /var/www/wallabag/data/db/wallabag.sqlite for connection named default
An exception occurred while executing a query: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "/"
LINE 1: DROP DATABASE /var/www/wallabag/data/db/wallabag.sqlite
sqlite
?PostgreSQL指定してるのになんで?と思ったが、docker-compose.ymlでPOPULATE_DATABASE=false
がないと駄目だった。
データベースマイグレーションエラー
以下のように、手動でデータベースを作成すると、インストールコマンドを実行すると、マイグレーションで権限エラーが発生した。
docker compose exec db /bin/bash
でPostgreSQLコンテナに入る。
コンテナ内でpsql
を起動し、wallabag用のユーザーとデータベースを作成。
su postgres -c psql
-- psql内での操作
CREATE USER wallabag CREATEDB;
CREATE DATABASE wallabag OWNER wallabag TEMPLATE template0 ENCODING 'UTF8';
GRANT CREATE ON SCHEMA public TO wallabag;
ALTER USER wallabag WITH PASSWORD 'パスワード';
パスワード
の部分は、docker-compose.yml
のSYMFONY__ENV__DATABASE_PASSWORD
と一致させる必要がある。そうしないと、Database connection ERROR! Can't connect to the database: An exception occurred in the driver: SQLSTATE[08006] [7] connection to server at "postgresql-server" (172.18.0.2), port 5432 failed: FATAL: password authentication failed for user "wallabag"
といったエラーが吐かれる。
そして、php bin/console wallabag:install
を実行すると…(リセットはしないで進行)
The command "doctrine:migrations:migrate" generates some errors:
An exception occurred while executing a query: SQLSTATE[42501]: Insufficient privilege: 7 ERROR: permission denied for schema public
LINE 1: CREATE TABLE migration_versions (version VARCHAR(192) NOT NU...
再度PostgreSQLに接続し、ALTER DATABASE wallabag OWNER TO wallabag;
とwallabag
データベースの所有者をwallabag
ユーザーに変更することで解決した。
メモリ不足エラー
インストールコマンドで、PHPのメモリ不足エラーが発生。
Creating schema...
Clearing the cache...
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in /var/www/wallabag/var/cache/de_/twig/ba/ba6f76f391a6836079dd32ff8bf4ac0c.php on line 832
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in Unknown on line 0
docker-compose.yml
で、wallabagコンテナのPHPメモリ上限を上げる環境変数を追加した。
services:
wallabag:
image: wallabag/wallabag
environment:
# ... 他の設定 ...
- PHP_MEMORY_LIMIT=512M # メモリ上限を512MBに増やす
# ...
ファイルパーミッションの問題
インストールコマンドが成功して、以下のメッセージが表示されたが、
[OK] wallabag has been successfully installed.
[OK] You can now configure your web server, see https://doc.wallabag.org
しかし、ブラウザでアクセスすると「500 Internal Server Error」が表示されてしまう。

コンテナ内のファイルの権限を確認したところ、/var/www/wallabag/data
ディレクトリの所有者がroot
になってしまっていた。
/var/www/wallabag # ls -l /var/www/wallabag/
total 1168
-rw-r--r-- 1 nobody nobody 98672 Jun 4 15:32 CHANGELOG.md
-rw-r--r-- 1 nobody nobody 3350 Jun 4 15:32 CODE_OF_CONDUCT.md
-rw-r--r-- 1 nobody nobody 1069 Jun 4 15:32 COPYING.md
-rw-r--r-- 1 nobody nobody 324 Jun 4 15:32 CREDITS.md
-rwxr-xr-x 1 nobody nobody 1823 Jun 4 15:32 GNUmakefile
-rw-r--r-- 1 nobody nobody 20 Jun 4 15:32 Makefile
-rw-r--r-- 1 nobody nobody 2898 Jun 4 15:32 README.md
-rw-r--r-- 1 nobody nobody 1475 Jun 4 15:32 RELEASE_PROCESS.md
-rw-r--r-- 1 nobody nobody 103 Jun 4 15:32 SECURITY.md
drwxr-xr-x 1 nobody nobody 4096 Jun 4 15:32 app
drwxr-xr-x 2 nobody nobody 4096 Jun 4 15:32 bin
-rw-r--r-- 1 nobody nobody 8017 Jun 4 15:32 composer.json
-rw-r--r-- 1 nobody nobody 670445 Jun 4 15:32 composer.lock
drwxrwxr-x 2 root root 4096 Jul 10 10:27 data
chown -R nobody:nobody /var/www/wallabag
コマンドで、wallabagディレクトリ全体の所有者をnobody:nobody
(wallabagコンテナの実行ユーザー)に変更した。
Pocketインポート
失敗しておいて、書き留めるのもあれだが、pocketからのエスクポートをまとめておく。
-
Pocketログイン、CSVファイルをエスクポート
-
エスクポート完了メールが届いたら、リンクに飛んでダウンロード
-
ダウンロードしたZipファイルを解凍して、wallabagでpocket CSVでインポート
で上手くいくはずが、Unrecognized boolean literal `archive`
となって駄目。CSVファイルで最後の列でunread
でなくarchive
となっている箇所をunread
としても同じエラーが出るのでインポートは諦めた。

最後に
最初はなんで他のサイトではサクっと構築できてるのに失敗するんじゃぁ、と思った。大人しく金払ってセルフホスト止めようとか思ったけど、そんなにヘヴィーpocketユーザでもなかったので、頑張った。今思うとコンテナ削除して作りなおせば、もっと早かったんではないかな…まあいいや、dockerじゃなくて直でインストールする可能性もあるし。
これからwallabagを使って、快適な「後で読む」環境を構築していこうと思う。