User Tools

Site Tools


tech:newsblur_install

This is an old revision of the document!


NewsBlur Installation on Ubuntu Server

This article documents the working NewsBlur installation on the Ubuntu server.

It intentionally describes the final working configuration, rather than every failed command or troubleshooting attempt made during the original installation.

NewsBlur is running as a collection of Docker containers. The NewsBlur application/source files live on the server's internal Linux filesystem, while the large persistent database and search-engine data directories are stored on the external SSD mounted at:

/mnt/media8

Installation Layout

The main NewsBlur working directory is:

/home/mike/docker/newsblur

or, when logged in as mike:

~/docker/newsblur

The NewsBlur Docker configuration bind-mounts this directory into the applicable containers as:

/srv/newsblur

This is important because changes made to files under:

/srv/newsblur

inside the NewsBlur containers are actually changes to:

/home/mike/docker/newsblur

on the host.

For example:

/srv/newsblur/utils/feed_fetcher.py

inside newsblur_web corresponds to:

~/docker/newsblur/utils/feed_fetcher.py

on the Ubuntu host.

This also means local source-code modifications generally survive Docker container recreation.

However, a future Git update to the NewsBlur source can overwrite or conflict with locally modified files.

External SSD Storage

The NewsBlur source code remains under:

~/docker/newsblur

The persistent database/search data is stored on the external SSD mounted at:

/mnt/media8

NewsBlur-specific persistent data is kept under:

/mnt/media8/docker/newsblur/

The major directories are:

/mnt/media8/docker/newsblur/postgres
/mnt/media8/docker/newsblur/redis
/mnt/media8/docker/newsblur/mongo
/mnt/media8/docker/newsblur/elasticsearch

This keeps large and frequently changing application data off the server's main Linux filesystem.

It also means that /mnt/media8 must be mounted before NewsBlur is expected to operate normally.

Important Server-Specific Mount Policy

External/data drives on this server are configured so that a missing or failed external drive does not prevent Ubuntu from booting.

When configuring the mount in /etc/fstab, use the server's normal nofail policy.

The general philosophy is:

* Ubuntu must remain bootable even if an external drive fails. * Docker may subsequently have services that fail because their data is unavailable. * A failed Docker service is preferable to a server that cannot boot.

Do not remove nofail from external-drive mounts without a specific reason.

NewsBlur Data Directory Permissions

During installation, the persistent NewsBlur directories required ownership matching the users used inside the respective containers.

The working ownership configuration used during setup was:

sudo chown -R 999:999 /mnt/media8/docker/newsblur/postgres
sudo chown -R 999:999 /mnt/media8/docker/newsblur/redis
sudo chown -R 999:999 /mnt/media8/docker/newsblur/mongo
sudo chown -R 1000:0 /mnt/media8/docker/newsblur/elasticsearch

The directories were also restricted with:

sudo chmod 750 /mnt/media8/docker/newsblur/postgres
sudo chmod 750 /mnt/media8/docker/newsblur/redis
sudo chmod 750 /mnt/media8/docker/newsblur/mongo
sudo chmod 750 /mnt/media8/docker/newsblur/elasticsearch

These permissions are intentionally different from the normal shared-media configuration used elsewhere on the server.

Do not automatically change these NewsBlur application-data directories to mike:media or 2775 simply because that convention is used for media storage.

The database containers expect their own UID/GID ownership.

Main Docker Services

The NewsBlur Docker Compose installation contains several cooperating services.

Important containers include:

* newsblur_web — main NewsBlur Python/Django application * newsblur_celery — background jobs and scheduled feed fetching * newsblur_node — NewsBlur Node service * newsblur_nginx — internal Nginx frontend * newsblur_db_postgres — PostgreSQL database * newsblur_db_redis — Redis * newsblur_db_mongo — MongoDB * newsblur_db_elasticsearch — Elasticsearch * newsblur_imageproxy — image proxy * newsblur_mcp — NewsBlur MCP service * HAProxy — internal NewsBlur proxy/load-balancing component

Most services use:

restart: unless-stopped

This allows the NewsBlur stack to return automatically after a normal server or Docker restart.

Important Bind Mounts

The main NewsBlur source tree is mounted into several containers.

For example:

/home/mike/docker/newsblur -> /srv/newsblur

This is used by at least the web application and the Celery/background-worker infrastructure.

Consequently, when modifying NewsBlur Python code, restarting only newsblur_web may not be sufficient.

If the changed code is also used for background jobs or feed fetching, restart Celery as well:

docker restart newsblur_web
docker restart newsblur_celery

Local Service Ports

Several NewsBlur services publish ports only to 127.0.0.1.

Examples from the working configuration include:

newsblur_web       127.0.0.1:8000
newsblur_nginx     127.0.0.1:8181
newsblur_node      127.0.0.1:8008
imageproxy         127.0.0.1:8088

PostgreSQL         127.0.0.1:5434
Redis              127.0.0.1:6579
MongoDB            127.0.0.1:29019
Elasticsearch      127.0.0.1:9200 / 9300 

HAProxy exposes the NewsBlur HTTP/HTTPS frontend using the ports configured in the Compose stack.

Binding most internal services to 127.0.0.1 prevents the database and internal application services from being directly exposed to the LAN or Internet.

Starting NewsBlur

Go to the NewsBlur directory:

cd ~/docker/newsblur

Start or update the existing containers with:

docker compose up -d

Check their status with:

docker compose ps

Restarting NewsBlur

A single service can be restarted without bringing down the entire installation.

For example:

docker restart newsblur_web

For changes affecting background feed processing:

docker restart newsblur_celery

To restart both:

docker restart newsblur_web newsblur_celery

Viewing Logs

Standard Docker logs can be viewed with:

docker logs newsblur_web

or:

docker logs newsblur_celery

Follow a log live with:

docker logs -f newsblur_web

NewsBlur also maintains its own application log within the bind-mounted source tree:

~/docker/newsblur/logs/newsblur.log

This can be useful for diagnosing individual feed failures.

For example:

grep -i "failed" ~/docker/newsblur/logs/newsblur.log

Inspecting the Actual Docker Configuration

Because NewsBlur has many services and mounts, docker compose config is useful for seeing the final configuration after Compose processing.

From:

cd ~/docker/newsblur

run:

docker compose config

To inspect the mounts of an individual container:

docker inspect newsblur_web --format '{{range .Mounts}}{{println .Type "|" .Source "|" .Destination}}{{end}}'

For this installation, this confirms:

bind | /home/mike/docker/newsblur | /srv/newsblur

Updating NewsBlur

Because this installation uses the NewsBlur source repository directly, remember that local source modifications can appear in Git.

Before updating, it is useful to check:

cd ~/docker/newsblur
git status
git diff

A git pull may refuse to proceed or create a conflict if upstream NewsBlur modifies a file that has also been modified locally.

Do not blindly discard local changes before determining what they are.

After updating source/images as appropriate, the normal Docker maintenance process may include:

docker compose pull
docker compose up -d

Only prune unused Docker images when desired:

docker image prune

Backup Considerations

The NewsBlur installation is split between two important locations.

Application/configuration/source:

/home/mike/docker/newsblur

Persistent database/search data:

/mnt/media8/docker/newsblur

A complete NewsBlur backup strategy therefore needs to account for both locations.

Backing up only ~/docker/newsblur does not back up the PostgreSQL, Redis, MongoDB, or Elasticsearch data stored on the external SSD.

Likewise, backing up only /mnt/media8/docker/newsblur does not preserve the Compose configuration and locally modified NewsBlur source tree.

Known Local Modification

As of September 2026, this NewsBlur installation contains a small local modification that allows official YouTube RSS feeds to bypass NewsBlur's YouTube Data API fetcher.

This was necessary because valid YouTube RSS feeds were returning:

YouTube fetch failed (404)

inside NewsBlur even though the same RSS URLs worked normally in a browser.

See:

NewsBlur YouTube RSS Fix

tech/newsblur_install.1789135531.txt.gz · Last modified: by katsimbris