---
title: "Deploy Pingvin Share X | (Just Updated) WeTransfer Alternative, Not Claimable"
category: "Storage"
url: https://railway.com/deploy/pingvin-share-x-v122-or-wetransfer-alter
---

# Deploy Pingvin Share X | (Just Updated) WeTransfer Alternative, Not Claimable

**[Deploy Pingvin Share X | (Just Updated) WeTransfer Alternative, Not Claimable on Railway](https://railway.com/template/pingvin-share-x-v122-or-wetransfer-alter)**

- **Creator:** SuperSlowSloth
- **Category:** Storage

## Template content

### pingvin-share

- **Image:** ghcr.io/bon5co/pingvin-share-railway:latest
- **Health check:** /api/health
- **Public domain:** Yes

## Documentation

# Deploy and Host Pingvin Share X on Railway

Pingvin Share X is a self-hosted file-sharing service — a WeTransfer alternative you own. Upload
files, hand out a link, and set how long it lives: expiry date, download limit, visitor limit, a
password, or an email recipient. Reverse shares let someone upload *to* you without an account,
and OIDC, OAuth and LDAP logins are built in.

This template deploys the **maintained fork**, `smp46/pingvin-share-x` v1.22.0. The original
project was archived on 2025-06-29 and its own README points here; the archived image's `latest`
tag has not moved since May 2025.

## About Hosting Pingvin Share X

One service, one volume, no database or cache to run alongside it: the SQLite database, the
uploaded files and the branding assets all live on a single disk, and first boot takes seconds
because migrations are the only startup work.

Three things about this app need handling before it works on Railway, and this template does all
three inside the image rather than asking you to configure them:

- **The listener.** The bundled Caddy is hardcoded to port 3000 and the frontend to 3333, and
  `$PORT` is not a listen port anywhere in the app — it selects the *upstream* Caddy proxies pages
  to. Because Railway injects `PORT` into every service, an untuned deploy serves
  `{"message":"Cannot GET /","statusCode":404}` for every page while its health check stays green.
  Here the injected port is captured and the proxy is generated around it.
- **The administrator.** Pingvin gives administrator rights to whoever signs up first, and open
  registration is the default, so an untuned deploy belongs to the first stranger who opens the
  URL. This template generates the admin password per deploy and seeds the account before the
  public port is ever bound, then closes registration.
- **Persistence that includes your branding.** Logos, favicon and PWA icons are written outside
  the data directory, so with one volume a custom logo silently reverts on every redeploy. That
  path is relocated onto the volume.

Emailed share links, password-reset links and OAuth redirects are built from the deployment's own
Railway domain, and the login throttle is keyed on the real client address rather than on
Railway's edge — without that, twenty wrong passwords lock every user out of the instance.

## Common Use Cases

- Sending large files to clients with an expiring, password-protected link instead of an email
  attachment or a consumer file-sharing account.
- A small team's private WeTransfer replacement, where the files stay on infrastructure the team
  controls and shares expire on a schedule.
- Collecting files *from* other people with a reverse share — a single upload link the recipient
  needs no account to use.

## Dependencies for Pingvin Share X Hosting

- One container and one persistent volume. No external database, cache, queue or object store.
- Optional: an SMTP server for share-by-email and password resets, and an OIDC/OAuth or LDAP
  provider if you want single sign-on. Both are configured in the admin UI after deploy.

### Deployment Dependencies

- Maintained fork: https://github.com/smp46/pingvin-share-x
- Original project (archived 2025-06-29): https://github.com/stonith404/pingvin-share
- Template image: `ghcr.io/bon5co/pingvin-share-railway`
- Image source: https://github.com/bon5co/pingvin-share-railway

### Implementation Details

- Volume mounted at `/opt/app/backend/data`, holding the SQLite database, the uploads and the
  relocated `img` directory.
- Health check on `/api/health`.
- One template variable, `PINGVIN_ADMIN_PASSWORD`, generated per deploy. Everything else is baked
  into the image, so the deploy form asks you for nothing.

## Why Deploy Pingvin Share X on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your
infrastructure so you don't have to deal with configuration, while allowing you to vertically and
horizontally scale it.

By deploying Pingvin Share X on Railway, you are one step closer to supporting a complete
full-stack application with minimal burden. Host your servers, databases, AI agents, and more on
Railway.

## After Deploying

1. Open the service's **Variables** tab and copy `PINGVIN_ADMIN_PASSWORD`.
2. Sign in at the public URL as `admin@pingvin.local` with that password.
3. Change the password and email from the account settings page.

Registration stays closed unless you open it in **Admin → Configuration → Share**; unauthenticated
uploads are a separate setting and are off by default.


## Similar templates

- [Garage S3 Storage](https://railway.com/deploy/garage-s3-storage) — Ultra-light S3 server: fast, open-source, plug-and-play.
- [Redis](https://railway.com/deploy/redis-1) — Self Host Latest Redis with Railway
- [Postgres Backup to Cloudflare R2 (S3-Compatible)](https://railway.com/deploy/postgres-to-r2-backup) — Automated PostgreSQL backups to S3-compatible storage with encryption

Open this page in a browser: https://railway.com/deploy/pingvin-share-x-v122-or-wetransfer-alter
