---
title: "Deploy YaCy"
description: "Search engine that crawls and indexes the sites you choose"
category: "Other"
url: https://railway.com/deploy/yacy
---

# Deploy YaCy

Search engine that crawls and indexes the sites you choose

**[Deploy YaCy on Railway](https://railway.com/template/yacy)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/yacy/manifest.json

- **Creator:** A3A
- **Category:** Other
- **Total deploys:** 1

## Template content

### yacy https://cdn.jsdelivr.net/gh/yacy/yacy_search_server@master/htroot/env/grafics/YaCyLogo2012.svg

- **Source:** https://github.com/gridalpha/yacy-railway
- **Health check:** /healthz
- **Public domain:** Yes

## Documentation

# Deploy and Host YaCy on Railway

Self-host YaCy to run a search engine you own end to end. YaCy is a free, GPL-licensed search engine in Java that does the whole job itself: it crawls the sites you point it at, parses what it finds — HTML, PDF, Office documents, RSS — indexes the text into an embedded Apache Solr, and serves a search interface with ranking, faceting and snippets over it. There is no third-party search API, no key to rotate and no per-query bill.

Deploy YaCy on Railway and this template gives you a single `yacy` service holding the web interface, the crawler and the Solr index, with a persistent volume at `/opt/yacy_search_server/DATA` for the index, crawl queues and configuration. The public domain routes to YaCy's own port, while the health check watches a separate endpoint that queries Solr directly, so a container that runs but cannot answer queries is reported unhealthy.

![The YaCy service and its data volume on Railway](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789646705/yacy-architecture.webp)

## Getting Started with YaCy on Railway

Set `YACY_ADMIN_PASSWORD` when you deploy — at least 8 characters — then open the generated Railway URL. YaCy uses HTTP Digest authentication, so the browser shows a native login dialog: sign in as `admin` with the password you chose; there are no default credentials to change afterwards. The first useful action is a crawl: open **Production → Crawler**, paste a site URL and press **Start New Crawl**. The crawler monitor shows live queue depth, pages per minute, index size and a link-structure graph — the quickest way to confirm the deployment works. Once a few dozen pages are indexed, use the search box, or `/yacysearch.html?query=your+terms`, for ranked results with domain, author, filetype and language facets. **Monitoring → Index Browser** lists which paths were stored.

By default the whole portal, search included, sits behind that admin login. Set `YACY_PUBLIC_SEARCH=true` to publish the search pages to anonymous visitors while the administration pages stay protected.

![YaCy search results with domain, filetype and language facets](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789646708/yacy-search-results.webp)
![YaCy crawler monitor showing a running crawl and index size](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789646710/yacy-crawler-monitor.webp)
![YaCy index browser listing indexed paths of a crawled host](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789646711/yacy-index-browser.webp)

## About Hosting YaCy

Developed since 2003, YaCy is one of the few open-source projects shipping a complete search stack rather than one layer of it. Self-host it when you want search over content you choose, with no query quotas and no data leaving your infrastructure.

Key features:

- A polite crawler with `robots.txt` obedience, per-host delays, depth limits and scheduling
- Parsers for HTML, PDF, Office formats, archives and RSS, so a PDF becomes full text
- An embedded Apache Solr index with faceting, ranking profiles and a JSON/XML search API
- A search portal UI, plus OpenSearch and RSS output
- Blacklists, crawl profiles, an index browser and a re-crawl scheduler
- An optional peer-to-peer mode joining YaCy's public network

This template runs YaCy as a standalone portal: one service, one volume, no peer-to-peer exchange, which keeps the index yours and its size predictable. Jetty, the crawler, the parsers and Solr all live in one container.

## Why Deploy YaCy on Railway

Railway removes the operational work around a Java search server.

- One-click deploy with the volume, ports and health check wired
- Persistent storage for the Solr index
- Automatic HTTPS on a generated domain, or bring your own
- Heap and thread pools sized from the container's limits, not the host's
- Vertical scaling from the dashboard as your index grows
- Logs, metrics and rollbacks without extra tooling

## Common Use Cases

- **Documentation and intranet search** — crawl internal or vendor sites and give staff one search box
- **A searchable PDF archive** — full-text search over reports and papers
- **Niche public search portals** — a curated index of a topic or community
- **Research and monitoring** — scheduled re-crawls of sites you track, with an API for what changed

## Dependencies for YaCy

- `yacy` — the only service. Built from [gridalpha/yacy-railway](https://github.com/gridalpha/yacy-railway), a thin layer over the official [`yacy/yacy_search_server:latest`](https://hub.docker.com/r/yacy/yacy_search_server) image that renders YaCy's configuration at boot, sizes the JVM from the container's limits and adds the health endpoint.
- A persistent volume at `/opt/yacy_search_server/DATA` — index, crawl queues, configuration and HTTP cache. Without it, every redeploy starts empty.

No database, cache or object storage is required: Solr is embedded and stores everything on that volume.

### Environment Variables Reference

| Variable | Default | Purpose |
|---|---|---|
| `YACY_ADMIN_PASSWORD` | — | Required. Administrator password, minimum 8 characters |
| `YACY_ADMIN_USER` | `admin` | Administrator login name |
| `YACY_PUBLIC_SEARCH` | `false` | `true` publishes the search pages to anonymous visitors |
| `YACY_ADMIN_REALM` | `YaCy-AdminUI` | HTTP Digest realm in the login dialog |
| `YACY_HTTP_PORT` | `8090` | Port YaCy serves on; the public domain targets it |
| `YACY_NETWORK_UNIT` | `defaults/yacy.network.webportal.unit` | First boot only. Set `defaults/yacy.network.freeworld.unit` to join YaCy's peer-to-peer network instead |

### Deployment Dependencies

- Source repository: [gridalpha/yacy-railway](https://github.com/gridalpha/yacy-railway)
- Upstream project: [yacy/yacy_search_server](https://github.com/yacy/yacy_search_server)
- Container image: [`yacy/yacy_search_server`](https://hub.docker.com/r/yacy/yacy_search_server)
- Documentation: [yacy.net](https://yacy.net/)
- Runtime: Java 24 (Eclipse Temurin), Jetty 12, Apache Solr

## Hardware Requirements for Self-Hosting YaCy

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2–4 vCPU while crawling |
| RAM | 1 GB | 4 GB or more for indexes past a few hundred thousand documents |
| Storage | 5 GB volume | 20 GB+; ~1 GB per 100k pages, plus the cache |
| Runtime | Java 17+ | Java 24, as shipped in the image |

Crawling is the demanding phase; serving queries is cheap. The heap is derived from the container's memory limit, so raising the service's memory raises the JVM heap on the next deploy.

## Self-Hosting YaCy with Docker

The official image runs YaCy in one command, given a volume so the index survives a restart:

```
docker run -d --name yacy -p 8090:8090 \
  -v yacy_data:/opt/yacy_search_server/DATA \
  yacy/yacy_search_server:latest
```

Then open `http://localhost:8090` and sign in with the image's default credentials, `admin` / `yacy`, which you should change immediately under **Administration → Use Case & Account**. The Railway template removes that step: it computes the credential from `YACY_ADMIN_PASSWORD` before the server starts, so no default password is ever live.

To build from source instead, YaCy uses Apache Ant and a JDK:

```
git clone https://github.com/yacy/yacy_search_server.git
cd yacy_search_server
ant compile
./startYACY.sh -f
```

Configuration lives in `DATA/SETTINGS/yacy.conf`, which the server rewrites while running — edit it with the server stopped, or use the web interface.

## Is YaCy Free?

YaCy is free and open source under the GPL — no paid tier, licence key or hosted plan, and every feature is in the same build. On Railway you pay only for infrastructure: one service plus the volume holding the index. The cost grows with how much you index and how hard you crawl.

## YaCy vs Other Self-Hosted Search

| | YaCy | SearXNG | Elasticsearch / Meilisearch |
|---|---|---|---|
| Builds its own index | Yes, built-in crawler | No, queries other engines | Yes, you supply documents |
| Works if upstream engines block you | Yes | No | Yes |
| Ships a search UI | Yes | Yes | Usually not |
| Needs a crawler of your own | No | N/A | Yes |

SearXNG fits when you want private, aggregated results from existing engines. Pick YaCy when you need an index of your own.

## FAQ

**What is YaCy?**
An open-source search engine combining a web crawler, document parsers, an Apache Solr index and a search interface in one Java application.

**What does this Railway template deploy?**
A single `yacy` service built from the official image, with a persistent volume for the Solr index, a public HTTPS domain, an administrator credential generated from your password, and a health check that queries the index.

**Why does this template need a volume?**
The index, crawl queues and configuration are files on disk, and containers are replaced on every deploy — without a volume each redeploy would start empty.

**How do I make my self-hosted YaCy search page public?**
Set `YACY_PUBLIC_SEARCH=true` and redeploy. Anonymous visitors can then search, while the administration pages stay behind the login.

**Can I join the YaCy peer-to-peer network from this deployment?**
Yes. Set `YACY_NETWORK_UNIT=defaults/yacy.network.freeworld.unit` before the first boot and the peer joins the public network rather than running standalone. It applies on first boot only, and a peer-to-peer index grows on its own, so give it a larger volume.

**How do I query my index from another application?**
`/yacysearch.json?query=terms` returns JSON, `/yacysearch.rss` returns RSS, and `/solr/select` takes standard Solr queries. Requests use the same authentication as the interface, so send the admin credential unless the search pages are published.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/yacy
