[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74633":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":13,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},74633,"once","basecamp\u002Fonce","basecamp","Easy self-hosting for Docker-based web apps",null,"Go",1820,87,10,6,0,3,43,9,69.13,"MIT License",false,"main",true,[],"2026-06-12 04:01:15","# ONCE\n\nONCE is a platform for installing and managing Docker-based web applications.\nIts goal is to make self-hosting applications as simple as possible.\n\nAs well as simplifying the initial setup, ONCE also provides automatic updates, backups, and system information.\nIt has a TUI interface with a dashboard for monitoring and operating your applications, as well as CLI commands for common operations should you (or your AI agent) prefer that.\n\nONCE runs on Linux and macOS, and can be used to run applications on a variety of hardware: a physical server, a cloud VPS, a Raspberry Pi, or your laptop, are all suitable.\n\nONCE comes with a set of 37signals apps built-in, but you can use it to install any compatible Docker image as well.\n\n![Demo](.github\u002Fmedia\u002Finstall.gif)\n\n## Installing\n\nThe simplest way to get started with ONCE is to use the install snippet to bootstrap the tool and choose an app to install:\n\n```sh\ncurl https:\u002F\u002Fget.once.com | sh\n```\n\nThis will download the appropriate binary for your platform, install it and its corresponding background service, and then launch it so you can do your first application install.\nIf the machine you're running this from doesn't already have Docker, it will install that too (on supported platforms).\n\n### Customizing the installer behaviour\n\nIf you want to install `once` without launching it (for example, for a scripted install), you can use `ONCE_INTERACTIVE=false`:\n\n```sh\ncurl https:\u002F\u002Fget.once.com | ONCE_INTERACTIVE=false sh\n```\n\n### Installing manually\n\nIf you prefer to set ONCE up yourself, you can download the appropriate binary from the GitHub Releases page.\nThen follow these steps to get it installed:\n\n- Install Docker (if it's not already installed) using your preferred package manager\n- Copy the `once` binary to wherever you'd like to run it from\n- Register the background service by running `sudo once background install`\n\nThen run `once` to install an app, or `once --help` to see what commands are available.\n\nNote that if you need to use `sudo` when running Docker commands (for example, if your user is not in the `docker` group) then you'll also need to use `sudo` whenever you run `once`.\n\n## Using ONCE to install and configure applications\n\nOn first run, ONCE will prompt you to choose an application to install.\nYou can pick from the built-in applications, or enter the path to a Docker image.\n\nWhen entering an image path you can pick any application that works with ONCE (more on this below), so you can run additional applications or even your own custom forks of the built-in ones.\n\nYou'll need to enter a hostname for the application.\nIf you're installing onto a machine on the public Internet (like a cloud VPS), and you have a domain name, then you can use that.\nIt's a good idea to use a subdomain so that you can run multiple applications on the same domain.\n\nFor example, if you own `example.com` you might install Writebook to `books.example.com`.\n\nWhatever hostname you choose, make sure you have a DNS entry for it which points to the machine you're installing to.\nThe details of how to do this will vary depending on which provider you use for your DNS, but generally you should have access to an admin interface where you can set up an `A` record with the hostname you've chosen, pointed to the IP address of your machine.\nIf you plan to install many applications on the same machine you could use a wildcard DNS entry for this.\n\n> [!TIP]\n> One tip if you're using Cloudflare: by default, DNS entries on Cloudflare will have the \"proxy\" option enabled, which means that traffic will pass through Cloudflare before reaching your server.\n> ONCE works well in this setup provided you have SSL enabled end-to-end.\n> So just be sure your Cloudflare SSL mode is set to \"Strict (full)\" if you're using its proxy option.\n\nOnce you've picked your application and entered the hostname, the rest is automatic.\nONCE will fetch, install, and boot the application, and then take you to the dashboard screen where you can monitor it.\n\n### Changing application settings\n\nThere are various extra settings you can change on your applications.\nWhen you have an application selected on the dashboard, press `s` to view the settings menu, and choose an item from the menu to open that screen.\nFrom there you can set up a location for automatic backups, update your hostname, switch to using your own fork's image, set up an email provider and more.\n\nYou can also use the action menu, `a` to start and stop applications, or remove them completely.\n\n### Customizing the `once` appearance\n\nOn first run, `once` shows an animated logo and background.\nIf you find this distracting, or it causes problems in your environment, you can suppress it with `ONCE_REDUCED_MOTION=true`:\n\n```sh\nONCE_REDUCED_MOTION=true once\n```\n\n## Making a ONCE-compatible application\n\nFundamentally, ONCE works with any web application that:\n\n- Is packaged as a Docker container\n- Serves HTTP on port 80\n- Has a healthcheck endpoint at `\u002Fup` that returns success\n- Keeps its persistent data in `\u002Fstorage`\n\nAny application that does these things should work with ONCE.\n\nHowever, beyond this bare minimum, there are some additional scripts and environment variables that allow for better integration with the platform:\n\n### Storage paths\n\nONCE will mount a persistent volume into `\u002Fstorage`.\n\nFor compatibility with standard Rails applications, it also mounts the same volume into `\u002Frails\u002Fstorage`.\nThat means Rails applications built with the default Dockerfile should work just fine.\n\nData in this volume persists across restarts, and is also the data that will be included in backups.\n\n### Hook scripts\n\nONCE uses a few optional hook scripts as integration points.\nCurrently supported hooks are:\n\n- `\u002Fhooks\u002Fpre-backup` -- Because ONCE can't assume that it's safe to backup the files of an application while they are in use, it will try to call this hook before starting a backup so the application can do anything it needs to generate a \"safe\" copy of the data.\nIf this script exists, and return success, ONCE assumes it's now safe to copy the files into the backup.\nIf it doesn't exist, or returns an error, ONCE will pause the application's container while it copies the file.\nThis means backups are always consistent in either case, but the hook gives the app a way to avoid the paused container introducing latency to in-flight requests while the backup runs.\nAn example of using `pre-backup` on a SQLite-based application would be to use SQLite's online backup feature to take a safe consistent copy of the database.\n\n- `\u002Fhooks\u002Fpost-restore` -- The inverse of `pre-backup`, `post-restore` will be called after restoring the data from a backup, but before booting the application.\nIf an application needs to do any cleanup, such as move or rename files generated during `pre-backup`, it can do it in this hook.\n\n### Environment variables\n\nMany of the configuration settings that you can do in the ONCE UI make their way into the application in the form of environment variables.\nThese include:\n\n- `SECRET_KEY_BASE` -- A unique identifier, generated at installation time, and kept for the life of the applications.\nBy convention, Rails applications use this as the base for cryptographic signing.\n- `DISABLE_SSL` -- This will be set to `true` if the app is running without SSL.\nThis can be useful for applications that generate redirects or URLs that would otherwise assume SSL is being used.\n- `VAPID_PUBLIC_KEY`\u002F`VAPID_PRIVATE_KEY` -- For applications the use WebPush, unique VAPID credentials are automatically generated and passed in these variables.\n- `SMTP_ADDRESS`\u002F`SMTP_PORT`\u002F`SMTP_USERNAME`\u002F`SMTP_PASSWORD`\u002F`MAILER_FROM_ADDRESS` -- The values from the Email Settings screen are passed in these.\n- `NUM_CPUS` -- If an application is restricted with a CPU quota, this variable will contain the number of CPUs it has been allowed to use.\nAn application can use this to vary the number of worker processes it spawns to an appropriate number for that quota.\n","ONCE 是一个用于安装和管理基于Docker的Web应用程序的平台，旨在简化自托管应用的过程。它支持自动更新、备份以及系统信息展示，并提供了一个TUI界面供用户监控和操作其应用程序，同时也支持CLI命令以满足不同用户的偏好。该平台采用Go语言开发，运行于Linux和macOS上，适用于多种硬件环境，如物理服务器、云VPS、Raspberry Pi或个人笔记本电脑等。内置了37signals系列应用，同时允许用户安装任何兼容的Docker镜像。ONCE非常适合需要简易部署与管理Docker应用的小团队和个人开发者使用。",2,"2026-06-11 03:50:12","high_star"]