docs: add local deployment and upgrade guides
This commit is contained in:
parent
f610ca1e06
commit
f5348133cd
5 changed files with 186 additions and 2 deletions
11
.env.local.example
Normal file
11
.env.local.example
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
CONVERTX_CONTAINER_NAME=convertx
|
||||||
|
CONVERTX_PORT=3000
|
||||||
|
CONVERTX_DATA_DIR=./data
|
||||||
|
CONVERTX_IMAGE_REF=ghcr.io/c4illin/convertx@sha256:e1f85be04bbaf8a55ead9261194c3ae0fa0957d303ea537127154860b2552afd
|
||||||
|
JWT_SECRET=change-this-to-a-long-random-string
|
||||||
|
HTTP_ALLOWED=true
|
||||||
|
AUTO_DELETE_EVERY_N_HOURS=24
|
||||||
|
TZ=Asia/Shanghai
|
||||||
|
ACCOUNT_REGISTRATION=false
|
||||||
|
ALLOW_UNAUTHENTICATED=false
|
||||||
|
MAX_CONVERT_PROCESS=0
|
||||||
|
|
@ -57,6 +57,11 @@ Any missing converter? Open an issue or pull request!
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> If you can't login, make sure you are accessing the service over localhost or https otherwise set HTTP_ALLOWED=true
|
> If you can't login, make sure you are accessing the service over localhost or https otherwise set HTTP_ALLOWED=true
|
||||||
|
|
||||||
|
For repository-specific local usage and upgrade workflow, see:
|
||||||
|
|
||||||
|
- [`docs/local-deploy.md`](docs/local-deploy.md)
|
||||||
|
- [`UPGRADE.md`](UPGRADE.md)
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
# docker-compose.yml
|
# docker-compose.yml
|
||||||
services:
|
services:
|
||||||
|
|
@ -79,8 +84,6 @@ or
|
||||||
docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx
|
docker run -p 3000:3000 -v ./data:/app/data ghcr.io/c4illin/convertx
|
||||||
```
|
```
|
||||||
|
|
||||||
Then visit `http://localhost:3000` in your browser and create your account. Don't leave it unconfigured and open, as anyone can register the first account.
|
|
||||||
|
|
||||||
If you get unable to open database file run `chown -R $USER:$USER path` on the path you choose.
|
If you get unable to open database file run `chown -R $USER:$USER path` on the path you choose.
|
||||||
|
|
||||||
### Environment variables
|
### Environment variables
|
||||||
|
|
|
||||||
78
UPGRADE.md
Normal file
78
UPGRADE.md
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
# Upgrading From Upstream
|
||||||
|
|
||||||
|
This repository is easiest to maintain long-term if you treat upstream and local customizations separately.
|
||||||
|
|
||||||
|
## Recommended remote layout
|
||||||
|
|
||||||
|
Use a fork and keep the original project as `upstream`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git remote rename origin upstream
|
||||||
|
git remote add origin <your-fork-url>
|
||||||
|
git fetch --all --tags
|
||||||
|
```
|
||||||
|
|
||||||
|
Expected result:
|
||||||
|
|
||||||
|
- `origin`: your fork
|
||||||
|
- `upstream`: `https://github.com/C4illin/ConvertX.git`
|
||||||
|
|
||||||
|
## Keep local changes low-conflict
|
||||||
|
|
||||||
|
Prefer keeping local operational changes in additive files instead of editing upstream-heavy files:
|
||||||
|
|
||||||
|
- `compose.local.yaml`
|
||||||
|
- `.env.local.example`
|
||||||
|
- `docs/local-deploy.md`
|
||||||
|
- `UPGRADE.md`
|
||||||
|
|
||||||
|
That keeps future merges simpler than carrying large changes in `README.md`, `Dockerfile`, or runtime code.
|
||||||
|
|
||||||
|
## Upgrade workflow
|
||||||
|
|
||||||
|
1. Fetch upstream changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git fetch upstream --tags
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a dedicated upgrade branch from your mainline:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git switch main
|
||||||
|
git pull --ff-only origin main
|
||||||
|
git switch -c codex/upgrade-convertx-<target-version>
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Merge the upstream release you want to adopt:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git merge upstream/main
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are tracking a specific release tag, merge or inspect that tag explicitly before continuing.
|
||||||
|
|
||||||
|
4. Resolve conflicts, keeping local deployment files unless upstream introduces a better replacement
|
||||||
|
5. Decide whether to bump `CONVERTX_IMAGE_REF` in `.env.local.example`
|
||||||
|
6. Re-run verification:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bun run build
|
||||||
|
bun test
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml config
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml up -d
|
||||||
|
curl -fsS http://127.0.0.1:3000/healthcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Smoke-test the UI in a browser and verify at least one conversion path you rely on
|
||||||
|
8. Commit the upgrade and open a PR
|
||||||
|
|
||||||
|
## When to bump the pinned image reference
|
||||||
|
|
||||||
|
Upstream currently documents floating image tags such as `latest` and `main`. For local stability, pin the deployed image by digest and update `CONVERTX_IMAGE_REF` only after:
|
||||||
|
|
||||||
|
- you have reviewed upstream release notes
|
||||||
|
- the new image starts cleanly
|
||||||
|
- your required conversions still work
|
||||||
|
|
||||||
|
This keeps rollback simple and makes production state inspectable from the env file.
|
||||||
23
compose.local.yaml
Normal file
23
compose.local.yaml
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
services:
|
||||||
|
convertx:
|
||||||
|
image: ${CONVERTX_IMAGE_REF:-ghcr.io/c4illin/convertx@sha256:e1f85be04bbaf8a55ead9261194c3ae0fa0957d303ea537127154860b2552afd}
|
||||||
|
container_name: ${CONVERTX_CONTAINER_NAME:-convertx}
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "${CONVERTX_PORT:-3000}:3000"
|
||||||
|
environment:
|
||||||
|
JWT_SECRET: ${JWT_SECRET:?set JWT_SECRET in .env.local}
|
||||||
|
HTTP_ALLOWED: ${HTTP_ALLOWED:-true}
|
||||||
|
AUTO_DELETE_EVERY_N_HOURS: ${AUTO_DELETE_EVERY_N_HOURS:-24}
|
||||||
|
TZ: ${TZ:-UTC}
|
||||||
|
ACCOUNT_REGISTRATION: ${ACCOUNT_REGISTRATION:-false}
|
||||||
|
ALLOW_UNAUTHENTICATED: ${ALLOW_UNAUTHENTICATED:-false}
|
||||||
|
MAX_CONVERT_PROCESS: ${MAX_CONVERT_PROCESS:-0}
|
||||||
|
volumes:
|
||||||
|
- ${CONVERTX_DATA_DIR:-./data}:/app/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:3000/healthcheck"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
start_period: 20s
|
||||||
69
docs/local-deploy.md
Normal file
69
docs/local-deploy.md
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
# Local Docker Deployment
|
||||||
|
|
||||||
|
This repository includes a dedicated Compose file for normal local usage without rebuilding the image from source.
|
||||||
|
|
||||||
|
## Why use this instead of `compose.yaml`
|
||||||
|
|
||||||
|
- `compose.local.yaml` pulls the published ConvertX image
|
||||||
|
- `compose.yaml` builds from the local checkout and is intended for development and testing
|
||||||
|
- Keeping them separate makes upgrades easier and avoids accidentally coupling local usage to repository state
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Docker Desktop or a compatible Docker Engine
|
||||||
|
|
||||||
|
## First-time setup
|
||||||
|
|
||||||
|
1. Copy the example environment file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.local.example .env.local
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Set a long random `JWT_SECRET` in `.env.local`
|
||||||
|
3. Start the service:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Verify the service is healthy:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml ps
|
||||||
|
curl -fsS http://127.0.0.1:3000/healthcheck
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Open `http://localhost:3000`
|
||||||
|
|
||||||
|
## Useful operations
|
||||||
|
|
||||||
|
Start or update the container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Stop the container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml down
|
||||||
|
```
|
||||||
|
|
||||||
|
View logs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml logs -f
|
||||||
|
```
|
||||||
|
|
||||||
|
Restart after changing configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose --env-file .env.local -f compose.local.yaml restart
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- The persistent database and job files are stored in `./data`
|
||||||
|
- `HTTP_ALLOWED=true` is appropriate for localhost usage
|
||||||
|
- The image reference is pinned through `CONVERTX_IMAGE_REF`, using an immutable digest instead of the floating `latest` tag
|
||||||
Loading…
Add table
Add a link
Reference in a new issue