more docker release updates

This commit is contained in:
Egor 2026-01-17 00:11:01 -08:00
parent 5c837a7103
commit 69c854f401
7 changed files with 118 additions and 71 deletions

View file

@ -1,11 +1,7 @@
# Optional: Protect endpoint registration with an API key (recommended for public deployments)
# Default: unset (no authentication required)
# API_KEY=your-secret-key-here
# Optional: Enable verbose signal-cli logging
# SIGNAL_CLI_VERBOSE=true
# Android release signing (only needed for building production APKs)
# KEYSTORE_FILE=./android/release.keystore
# KEYSTORE_PASSWORD=<generated-password>
# KEY_ALIAS=sup-release
# KEY_PASSWORD=<generated-password>
# Default: false
# VERBOSE=true

View file

@ -49,33 +49,29 @@ After adding yourself to the docker group, **logout and login** for it to take e
**Without ProtonMail** (just UnifiedPush):
```bash
# Clone the repo
git clone https://github.com/lone-cloud/sup.git
cd sup
# Download docker-compose.yml
curl -L -O https://raw.githubusercontent.com/lone-cloud/sup/master/docker-compose.yml
# Create .env file
cat > .env << 'EOF'
# Required: API key for securing your server
# Optional: API key for remote access
# Set this to protect your server when accessing it from outside your home network
# (e.g., registering UnifiedPush apps while away from home)
# Default: unset (no authentication required)
API_KEY=your-random-secret-key-here
# Optional: Enable verbose logging
# Default: false
VERBOSE=false
EOF
# Build and start SUP server only
# Start SUP server
docker compose up -d
# Link your Signal account (one-time setup)
# Visit http://localhost:8080/link and scan QR code with Signal app
```
**With ProtonMail** (UnifiedPush + email notifications):
```bash
# Same setup as above, then start with protonmail profile
docker compose --profile protonmail up -d
```
### ProtonMail Integration (Optional)
To receive ProtonMail notifications via Signal:
@ -91,6 +87,7 @@ To receive ProtonMail notifications via Signal:
- Enter your ProtonMail email
- Enter your ProtonMail password
- Enter your 2FA code
- Wait (potentially a long time) for ProtonMail Bridge to sync emails
3. **Get IMAP credentials**:
- Run: `info`
@ -113,57 +110,21 @@ To receive ProtonMail notifications via Signal:
Your phone will now receive Signal notifications when ProtonMail receives new emails.
### Checking Logs
```bash
# Without ProtonMail
docker compose logs -f
# With ProtonMail
docker compose --profile protonmail logs -f
# View specific service
docker compose logs -f sup-server
docker compose --profile protonmail logs -f email-monitor
docker compose --profile protonmail logs -f protonmail-bridge
```
### Stopping Services
```bash
# Without ProtonMail
docker compose down
# With ProtonMail
docker compose --profile protonmail down
# Stop and remove volumes (warning: deletes Signal/ProtonMail data)
docker compose --profile protonmail down -v
```
### Development
For local development, use the dev compose file to build from source:
```bash
docker compose -f docker-compose.dev.yml up -d
```
Or run services directly with Bun:
```bash
bun install
bun dev
bun --filter sup-server dev
```
Visit `http://localhost:8080/link` to link your Signal account.
## API Endpoints
### UnifiedPush Protocol
- `POST /up/{app_id}` - Register new endpoint
- `DELETE /up/{app_id}` - Unregister endpoint
- `GET /up` - Discovery endpoint
- `POST /_matrix/push/v1/notify/{endpoint_id}` - Push notification
### Management
- `GET /health` - Health check
- `GET /endpoints` - List registered endpoints
## How It Works
1. Android app registers with server via `/up/{app_id}`
@ -180,10 +141,8 @@ Download the latest APK from [GitHub Releases](https://github.com/lone-cloud/sup
**Install via Obtainium:** [obtainium://add/https://github.com/lone-cloud/sup](obtainium://add/https://github.com/lone-cloud/sup)
**Certificate Fingerprint for Obtainium verification:**
**Certificate Fingerprint:**
```text
0D:3C:99:15:0E:12:1A:DE:0D:AE:05:CB:16:46:5E:65:31:56:DC:D6:98:87:59:4E:79:B1:0D:AE:1E:56:F2:E8
```
Verify this fingerprint when installing via Obtainium to ensure authenticity.

40
docker-compose.dev.yml Normal file
View file

@ -0,0 +1,40 @@
services:
sup-server:
build: ./server
ports:
- '8080:8080'
environment:
- PORT=8080
- API_KEY=${API_KEY:-}
- VERBOSE=${VERBOSE:-false}
volumes:
- signal-data:/root/.local/share/signal-cli
restart: unless-stopped
protonmail-bridge:
image: shenxn/protonmail-bridge:build
container_name: protonmail-bridge
profiles: ['protonmail']
volumes:
- proton-bridge-data:/root
- /tmp/bridge-updates:/root/.local/share/protonmail/bridge-v3/updates:ro # Disable auto-updates
restart: unless-stopped
sup-proton-bridge:
build: ./proton-bridge
container_name: sup-proton-bridge
profiles: ['protonmail']
depends_on:
- sup-server
- protonmail-bridge
environment:
- BRIDGE_IMAP_USERNAME=${BRIDGE_IMAP_USERNAME}
- BRIDGE_IMAP_PASSWORD=${BRIDGE_IMAP_PASSWORD}
- SUP_API_KEY=${API_KEY}
- SUP_TOPIC=${SUP_TOPIC:-Proton Mail}
- VERBOSE=${VERBOSE:-false}
restart: unless-stopped
volumes:
signal-data:
proton-bridge-data:

View file

@ -1,6 +1,6 @@
services:
sup-server:
build: ./server
image: ghcr.io/lone-cloud/sup-server:latest
ports:
- '8080:8080'
environment:
@ -21,7 +21,7 @@ services:
restart: unless-stopped
sup-proton-bridge:
build: ./proton-bridge
image: ghcr.io/lone-cloud/sup-proton-bridge:latest
container_name: sup-proton-bridge
profiles: ['protonmail']
depends_on:

View file

@ -23,7 +23,8 @@
"android:build": "bun run scripts/test-android-build.ts",
"android:release": "bun run scripts/release-android.ts",
"android:deps": "bun run scripts/check-android-deps.ts",
"android:lockfile": "bun run scripts/update-android-lockfile.ts"
"android:lockfile": "bun run scripts/update-android-lockfile.ts",
"docker:release": "bun run scripts/release-docker.ts"
},
"devDependencies": {
"@biomejs/biome": "^2.3.11",

51
scripts/release-docker.ts Normal file
View file

@ -0,0 +1,51 @@
import { $ } from 'bun';
const service = process.argv[2];
if (!service || !['server', 'bridge'].includes(service)) {
console.error('Usage: bun run docker:release <service>');
console.error('Example: bun run docker:release server');
console.error(' bun run docker:release bridge');
process.exit(1);
}
const registry = 'ghcr.io/lone-cloud';
const config = service === 'server'
? { name: 'sup-server', path: './server' }
: { name: 'sup-proton-bridge', path: './proton-bridge' };
try {
// Read version from package.json
const packageJson = await Bun.file(`${config.path}/package.json`).json();
const version = `v${packageJson.version}`;
console.log(`🚀 Releasing ${config.name} ${version}...`);
const fullName = `${registry}/${config.name}`;
console.log(`\n📦 Building ${config.name}...`);
await $`docker build -t ${fullName}:${version} -t ${fullName}:latest ${config.path}`;
console.log(`✓ Built ${config.name}`);
console.log(`📤 Pushing ${fullName}:${version}...`);
await $`docker push ${fullName}:${version}`;
console.log(`✓ Pushed ${fullName}:${version}`);
console.log(`📤 Pushing ${fullName}:latest...`);
await $`docker push ${fullName}:latest`;
console.log(`✓ Pushed ${fullName}:latest`);
console.log(`
${config.name} ${version} released successfully!
Images pushed:
- ${fullName}:${version}
- ${fullName}:latest
Users can now pull with:
docker compose pull
`);
} catch (error) {
console.error('❌ Release failed:', error);
process.exit(1);
}

View file

@ -11,7 +11,7 @@ RUN bun build --compile src/server.ts --outfile sup-server
FROM alpine:3.21
RUN apk add --no-cache openjdk25-jre
RUN apk add --no-cache openjdk21-jre
COPY --from=builder /app/sup-server /usr/local/bin/sup-server
COPY --from=builder /app/signal-cli /usr/local/bin/signal-cli