Hello-hao Tbed image hosting deployment and storage options
Hellohao图床 | 图像托管 | 云相册,分享/水印、存储源分发、图像管理、前后端分离。
At a glance
- What is it?
- Tbed is a Java and Spring Boot image-hosting application with separate web and server deployments, user galleries, sharing features, and support for local and object storage backends. It fits personal or shared image collections, but the documented deployment still depends on packaged images and an older application stack.
- Who is it for?
- Tbed suits operators who need multi-user image galleries and a choice of local or object storage, while the documented WeChat mini program remains unavailable in the open-source edition. It is a weaker choice for teams requiring a clearly versioned current container image, a modern Java baseline, or a fully documented source build.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 14 days ago.
- What is it written in?
- Mainly Java, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Tbed's image-hosting scope and intended users
Tbed addresses the operational work around hosting images rather than merely storing files. It combines a Java Spring Boot backend with a separate Vue-based web interface, then adds accounts, albums, bulk sharing, image metadata, direct-link generation, capacity controls, and upload administration. The README identifies personal photo storage, team image sharing, website image hosting, and batch cloud sharing as its main use cases. That makes it relevant to administrators or project owners who need a small image portal rather than only a script that uploads an asset to object storage.
The open-source edition is intended for more than a single anonymous upload endpoint. Its documented controls include guest and user upload management, per-user capacity, an IP blacklist, a configurable site upload API, account image deduplication, and email-assisted registration and password recovery. Administrators can also configure distribution groups and copyable embedded-link formats. These are application-layer features around image delivery, but the README does not describe retention policies, backup procedures, migration between storage providers, or an image-processing pipeline. Its value should therefore be judged as an image management application, not as a general-purpose backup platform.
Spring Boot backend, Vue frontend, and storage-source flow
The repository layout and README identify `src/`, `sql/`, `docker/`, and `pom.xml` as the principal backend areas, while the documented web client is built with Vue, Vuex, axios, and iView. The backend uses Spring Boot, MyBatis, Maven, JWT authentication, and Shiro. This is a separated deployment model: the Compose example exposes ports `10088` and `10089` through different containers or services, assigns `HELLOHAO_SERVER_HOST` to the backend domain, and assigns `HELLOHAO_WEB_HOST` to the frontend domain.
An uploaded image therefore enters an application workflow that manages the account, metadata, sharing state, and selected delivery configuration before it is associated with a storage source. The README does not expose controller names, database schemas, upload transaction boundaries, or deletion rules, so the exact internal sequence cannot be confirmed. It does confirm that users can drag files, paste screenshots with `Ctrl+V`, or supply URL addresses for batch upload. Administrators can set distribution groups, which suggests routing or delivery configuration beyond one fixed public URL, but the documentation does not define whether a group changes the storage backend, the distribution host, or another delivery target.
The open-source storage choices are local storage, Alibaba Cloud OSS, Upyun USS, Qiniu KODO, Tencent COS, NetEase NOS, FTP, and the AWS S3 protocol. This list is broad, but provider credentials, endpoint formats, bucket settings, and transfer behavior are not included in the README. Operators still need the relevant deployment documentation before selecting a backend.
Docker Compose installation and the first account check
The README directs deployment users to the project's compiled integration package and presents Docker Compose as the quick-start path. Its Compose file uses a placeholder Tbed image tag, so the file cannot be deployed unchanged until that value is replaced with a real release. It also creates a MySQL service, exposes `10088` and `10089`, and persists `/HellohaoData/` plus `/HellohaoData/mysql` as host volumes.
The repository supplies the longer Compose definition. The important service section is reproduced below as an excerpt because the README's comments require changing the domains, database password, and image version before use.
services:
tbed-free:
image: hellohao/tbed-free:2023xxxx
ports:
- "10088:10088"
- "10089:10089"
volumes:
- /HellohaoData/:/HellohaoData/
environment:
MYSQL_URL: jdbc:mysql://hellohaodb/tbed?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
MYSQL_USERNAME: root
MYSQL_PASS: tIaNGg@SHa&hIo56The full definition also defines `hellohaodb`, a `hellohao/mysql-free:1.0` image, and the `hellohao_network` network. After replacing the placeholder and the commented settings, the documented startup command is:
docker-compose up -dThe README says to access the configured frontend domain. Put a reverse proxy in front of port `10089` for the web interface and port `10088` for the backend, matching the domain assignments in the Compose file. Then sign in with the documented initial username `admin`, email `admin`, and password `admin`. The first practical verification is an authenticated image upload, followed by opening its image detail page and copying a direct or embedded link. Change the initial credentials as part of deployment planning, although the README does not prescribe a particular password policy.
Sharing, administration, and supported client boundaries
Tbed's application features are concentrated around image discovery and controlled sharing. Albums provide browsing, image cards expose detailed metadata, and gallery sharing can operate in bulk. The README also lists QR-code generation for image direct links and customizable embedded-link formats. Those capabilities are more useful for blogs, small teams, and personal collections than for anonymous bulk upload systems, since accounts, capacity settings, blacklist rules, and upload management are part of the product.
The client story needs careful qualification. The README says Windows and macOS desktop clients are available and can use either the open-source or Core edition. The WeChat mini program has a different boundary: the README explicitly says it applies only to the paid Core edition and cannot be connected from the open-source edition. The README does not provide a package download command or direct installer URL, so those clients must be obtained through the project's website rather than assembled from documented repository commands.
Moderation is described as real-time, multithreaded image identification, and uploaded images can be placed into temporary storage. However, the README does not identify the matching engine, thresholds, appeal process, storage duration, or behavior after an image is rejected. These omissions matter because the feature checklist can sound more complete than the documented operating model.
Legacy runtime constraints and incomplete deployment boundaries
The documented runtime is JDK 1.8, MySQL 5.7 or later, and Redis. These versions place the documented application baseline well behind current Java and database releases, which can complicate integration with newer infrastructure and makes compatibility testing important. The README does not provide a source-build tutorial, Maven wrapper instructions, application configuration reference, Redis connection variables, or a complete list of required JVM flags. It also warns that hosted source may be experimental and recommends the compiled integration package for deployment.
The open-source and Core feature boundary is another constraint. The README lists the open-source storage sources, but it directs users to the Core page for additional functionality. It does not provide a complete feature matrix, so an evaluator cannot use the main README alone to determine whether a required capability belongs to the open-source edition. Paying customers may also receive distribution outside this repository's documentation, which should not be assumed from the open-source files.
For organizations that need declarative infrastructure as code, the Compose file is a starting point rather than a complete production template. It does not document health checks, backup jobs, Redis deployment, TLS at the proxy, log rotation, resource limits, or secret management. Its database port is exposed as `3307:3306`, so network exposure should be decided during deployment rather than copied mechanically into a public environment.
Tbed versus direct S3-compatible object storage
The closest functional alternative described by the README is direct use of an object storage service through the AWS S3 protocol. Direct object storage keeps uploads close to the storage provider, while Tbed adds accounts, metadata, galleries, sharing, capacity administration, image checks, embedded-link formatting, and a multi-provider interface. For a site that only needs to place public images in one bucket and publish their URLs, that extra application layer may be unnecessary.
The trade-off runs in the opposite direction when Tbed's management functions are required. Direct storage would require separate handling for user access, image records, account quotas, blacklist policy, sharing views, and delivery configuration. Tbed presents these as one application, but the README does not document whether storage-provider switching affects existing URLs or whether image copies can be synchronized safely. Migration behavior is therefore a specific item to verify before treating an S3 backend as replaceable storage.
FTP is another supported target, but it serves a different deployment case from an object-storage API. The presence of FTP does not mean the providers have identical semantics, failover behavior, or URL generation. Tbed is more relevant when administrators need one management surface across several listed storage types, not when the sole requirement is a direct bucket endpoint.
AGPL-3.0 obligations and Tbed upgrade decisions
Tbed is licensed under the GNU Affero General Public License v3.0. The README separately states that commercial use or customization should be discussed with the authors. The license file in the repository is therefore an essential adoption artifact, particularly for deployments that modify the application and make it available to users over a network. This article does not interpret the license or provide legal advice, but the license identifier and deployment model must be reviewed before modifying or redistributing Tbed.
The repository is not archived, and its last push was on 2026-10-09. That indicates repository activity, but the listed open-source releases are older: `Tbed开源版 v20240319`, `Tbed开源版 v20240130`, and `Tbed开源版 v20240124` were published in 2024. The README itself also warns that hosted source code may be experimental and may be changed or tested by the author. Upgrade planning should therefore distinguish a current repository push from a documented, pinned open-source release and from an unchanged container image.
Database and volume migrations are not documented in the README. Operators using the default MySQL image and `/HellohaoData` volumes should not treat a newer image as automatically safe. A missing migration guide also applies to changes in storage configuration, user accounts, and retained image records.
Editorial conclusion
Tbed suits operators who need multi-user image galleries and a choice of local or object storage, while the documented WeChat mini program remains unavailable in the open-source edition. It is a weaker choice for teams requiring a clearly versioned current container image, a modern Java baseline, or a fully documented source build. Verify the replacement value for the placeholder Tbed image, persistence paths, reverse-proxy TLS configuration, storage credentials, and AGPL-3.0 obligations before adoption.
Frequently asked questions
How do I install Hello-hao Tbed with Docker Compose?
The README directs users to create `docker-compose.yml` from its full example, replace the placeholder image tag and deployment settings, then run `docker-compose up -d`. The configuration starts the Tbed and MySQL services, publishes ports `10088` and `10089`, and persists data under `/HellohaoData/`.
Which storage sources does the Hello-hao Tbed open-source edition support?
The README lists local storage, Alibaba Cloud OSS, Upyun USS, Qiniu KODO, Tencent COS, NetEase NOS, FTP, and the AWS S3 protocol. Provider-specific configuration fields are not included in the README.
What are the default Hello-hao Tbed login credentials?
The documented initial username is `admin`, the initial email is `admin`, and the initial password is `admin`. After starting the deployment and accessing the configured frontend domain, these credentials provide the first authenticated login check.
Can the Hello-hao Tbed open-source edition connect to a WeChat mini program?
No. The README explicitly states that the WeChat mini program applies only to the paid Core edition and cannot be connected from the open-source edition.
What runtime does Hello-hao Tbed require?
The README lists JDK 1.8, MySQL 5.7 or later, and Redis. The documented Docker setup supplies a MySQL service, but the README does not explain Redis configuration in the Compose example.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/hello-hao-tbed)