Compare commits
29 Commits
cb220cc5f0
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 8cd2d62e22 | |||
| 8e44de6bb5 | |||
| ee433157f4 | |||
| 159d2be52d | |||
| 2ca35620d9 | |||
| 4f954d9b15 | |||
| 4c5db557b2 | |||
| 75e4675110 | |||
| c9a54191f3 | |||
| f9f0d10042 | |||
| 9f29f94ae4 | |||
| 43bcaa88a6 | |||
| 48bfa048a0 | |||
| e0ca158bbb | |||
| 4ca8547a3f | |||
| 42df9a3c04 | |||
| c377cb7833 | |||
| 6d06f7621c | |||
| 12a8faea53 | |||
| c7b66ce7ab | |||
| aa720323b5 | |||
| a846370325 | |||
| b7679eb65c | |||
| 7f31e49e56 | |||
| 9b782c357d | |||
| b22e3f9f7e | |||
| 427f229d69 | |||
| 1392bc9f12 | |||
| d87af1383d |
12
.dockerignore
Normal file
@@ -0,0 +1,12 @@
|
||||
node_modules
|
||||
npm-debug.log
|
||||
.git
|
||||
.gitignore
|
||||
*.md
|
||||
.DS_Store
|
||||
audio_library
|
||||
artwork
|
||||
*.db
|
||||
.env
|
||||
config.json
|
||||
data
|
||||
1
.gitignore
vendored
@@ -4,3 +4,4 @@ node_modules/
|
||||
audio_library/
|
||||
uploads/
|
||||
.DS_Store
|
||||
config.json
|
||||
|
||||
30
Dockerfile
Normal file
@@ -0,0 +1,30 @@
|
||||
# Use Node.js LTS
|
||||
FROM node:20-alpine
|
||||
|
||||
# Install dependencies for native modules
|
||||
RUN apk add --no-cache python3 make g++
|
||||
|
||||
# Create app directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy package files
|
||||
COPY package*.json ./
|
||||
|
||||
# Install dependencies
|
||||
RUN npm ci --only=production
|
||||
|
||||
# Copy application code
|
||||
COPY . .
|
||||
|
||||
# Create directories for data
|
||||
RUN mkdir -p /data/artwork /data/music
|
||||
|
||||
# Expose port
|
||||
EXPOSE 4000
|
||||
|
||||
# Health check
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:4000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
||||
|
||||
# Start the server
|
||||
CMD ["npm", "start"]
|
||||
158
README.Docker.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# Docker Deployment Guide
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Build the Docker image
|
||||
|
||||
```bash
|
||||
docker build -t carplay-audio-server .
|
||||
```
|
||||
|
||||
### 2. Run with Docker Compose (Recommended)
|
||||
|
||||
Edit `docker-compose.yml` and update the music library path:
|
||||
|
||||
```yaml
|
||||
volumes:
|
||||
- /path/to/your/music:/data/music:ro # Change this!
|
||||
```
|
||||
|
||||
Then start:
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 3. Run with Docker directly
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name carplay-audio \
|
||||
-p 4000:4000 \
|
||||
-v /path/to/your/music:/data/music:ro \
|
||||
-v $(pwd)/data/artwork:/app/artwork \
|
||||
-v $(pwd)/data/database:/app \
|
||||
carplay-audio-server
|
||||
```
|
||||
|
||||
## Initial Setup
|
||||
|
||||
### Scan your library
|
||||
|
||||
```bash
|
||||
# Using docker-compose
|
||||
docker-compose exec carplay-audio npm run scan
|
||||
|
||||
# Using docker
|
||||
docker exec carplay-audio npm run scan
|
||||
```
|
||||
|
||||
### Access the admin panel
|
||||
|
||||
Open your browser to: `http://localhost:4000`
|
||||
|
||||
### Configure Amperfy
|
||||
|
||||
- **Server URL**: `http://YOUR-SERVER-IP:4000`
|
||||
- **Username**: `admin`
|
||||
- **Password**: `admin`
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
- `PORT` - Server port (default: 4000)
|
||||
- `NODE_ENV` - Environment (production/development)
|
||||
- `SCAN_ON_START` - Set to "true" to scan library on container start
|
||||
|
||||
### Volumes
|
||||
|
||||
- `/data/music` - Your music library (read-only)
|
||||
- `/app/artwork` - Extracted album artwork
|
||||
- `/app/audio_server.db` - SQLite database
|
||||
- `/app/config.json` - Server configuration
|
||||
|
||||
## Management
|
||||
|
||||
### View logs
|
||||
|
||||
```bash
|
||||
docker-compose logs -f carplay-audio
|
||||
```
|
||||
|
||||
### Restart server
|
||||
|
||||
```bash
|
||||
docker-compose restart carplay-audio
|
||||
```
|
||||
|
||||
### Stop server
|
||||
|
||||
```bash
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### Update and rebuild
|
||||
|
||||
```bash
|
||||
git pull
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Behind Reverse Proxy
|
||||
|
||||
If using nginx or Cloudflare Tunnel, configure it to proxy to `http://localhost:4000`.
|
||||
|
||||
Example nginx config:
|
||||
|
||||
```nginx
|
||||
location / {
|
||||
proxy_pass http://localhost:4000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Container won't start
|
||||
|
||||
Check logs:
|
||||
```bash
|
||||
docker-compose logs carplay-audio
|
||||
```
|
||||
|
||||
### Music not showing
|
||||
|
||||
Rescan the library:
|
||||
```bash
|
||||
docker-compose exec carplay-audio npm run scan
|
||||
```
|
||||
|
||||
### Permission issues
|
||||
|
||||
Ensure the music directory is readable:
|
||||
```bash
|
||||
chmod -R 755 /path/to/your/music
|
||||
```
|
||||
|
||||
## Production Deployment
|
||||
|
||||
1. **Change default credentials** in `src/routes/subsonic.js`
|
||||
2. **Use HTTPS** via reverse proxy
|
||||
3. **Set up automatic backups** of the database
|
||||
4. **Monitor logs** for errors
|
||||
5. **Set resource limits** in docker-compose.yml:
|
||||
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '2'
|
||||
memory: 1G
|
||||
```
|
||||
BIN
artwork/0027ae221222a1cb01004e25d4188149.jpeg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
artwork/00c3400abcccc65ce39175be83de7300.jpeg
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
artwork/01a6ef52507e59760cf1f0b315119aa6.jpeg
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
artwork/02b4e3082cb4514f9f0e3456cb56b935.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/044138807af2e5d186cf1319d78384ff.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/057e3f0f19486e4852c6aa11b726ffee.jpeg
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
artwork/06720d17f85f4dad401c3b52f1c721ad.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/06fb9c2bd953abdbf10b539603a1e9c7.jpeg
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
artwork/0a86267ab17709ee6a142981edd94c65.jpeg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
artwork/0a9266edac00d40fcfaa4d1cb31de624.jpeg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
artwork/0a96013f8c00697977c38f2eb51691c8.jpeg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
artwork/0f7c0f5afef45f60a531decc3c3ba773.jpeg
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
artwork/10583aec0cecac5739d8f637bebf4149.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/1085ee66cbfcbe56244939991353dac1.jpeg
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
artwork/12e7ab6ef124fc426381e8f913a1d50a.jpeg
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
artwork/141a2985381b6541052d4c020370ad8a.jpeg
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
artwork/14c4a3fcd7b989f98d0f53bac5337fe8.jpeg
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
artwork/1683e91c9589286f1e06ae4ef45d8e05.jpeg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
artwork/178bfa3d49af6e1aa32ce5c0e84cf7e3.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/182585840f7a70795a7502a3eb27ad90.jpeg
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
artwork/184d72b19671299e7f9a1dff88249e7a.jpeg
Normal file
|
After Width: | Height: | Size: 137 KiB |
BIN
artwork/19a3ebb51b33a12b6bd544cbfe8a0fc9.jpeg
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
artwork/1a5c53648ab7344f2b1d6325967388f8.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/1a64d6bd2f1e5fc7382b7c9e7ee6db44.jpeg
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
artwork/1cb6e07b6fa4c1660adf14c73ef4180f.jpeg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
artwork/1cdc1edbb0c3e3f59a5915242e6b0ca5.jpeg
Normal file
|
After Width: | Height: | Size: 151 KiB |
BIN
artwork/1d33258b478e43efee98528d20b2e7dc.jpeg
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
artwork/1dd60f6ed4eee0019905307a7d21d36b.jpeg
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
artwork/1e603e9e76d0ad2a4893a5037b3d7a61.jpeg
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
artwork/25caca248d8cf39e2e3dc28ad2c38204.jpeg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
artwork/2601187e9bbf4ec1c0cfd2667cfe2315.jpeg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
artwork/27f8c67907bf2957e3f3deaf3ce10e27.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/2e56e6536a45607e272a4763937a680b.jpeg
Normal file
|
After Width: | Height: | Size: 137 KiB |
BIN
artwork/2e577283188fcebe71a31853ab7aa332.jpeg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
artwork/2e84496167e0fdae1c6b773105dab360.jpeg
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
artwork/30c9ffe0f45ac4338d8d91650576d710.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/32d1198f34c5bdb86f0c09ff8655013c.jpeg
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
artwork/34a483ad3cb22e2803ef533d5ef205d5.jpeg
Normal file
|
After Width: | Height: | Size: 270 KiB |
BIN
artwork/352752671c51a229a5bfcb194d84e6cd.jpeg
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
artwork/35a0a4abb2bb4ff56329af882bbcad17.jpeg
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
artwork/35df21e7c3e045fdd5f6dbb3c288bb09.jpeg
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
artwork/3969febcd8c629d3b4b65d5c56a567f5.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/397332669744b1b28a75a5aa9e14b577.jpeg
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
artwork/3aee1ed1074a55b2b1ce8cb189e6d82a.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/3e8c804e64af3aadad3126357e0b8920.jpeg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
artwork/3ec6e8d030ce08cf3832e0fa66656761.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/3f43bf01b13d72a7c1f318393fbdec1d.jpeg
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
artwork/409879cf6620b7ff8ce868daf1dbd908.jpeg
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
artwork/433e71c33bf9a255a2e3b9eb13f9a8d7.jpeg
Normal file
|
After Width: | Height: | Size: 113 KiB |
BIN
artwork/43b930f36615e89db88c7fd2273569b2.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/46367696f5e2bde5649266ea995196e2.jpeg
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
artwork/479d3bd5655997d059c529738e0f4f95.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/485a802e751825cad64a0073d5ab89fa.jpeg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
artwork/48b6cdc6362d55a281a259bd1e60bfe5.jpeg
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
artwork/48c5724a040e8674d3d0aa097d63b5fe.jpeg
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
artwork/4920af018ec1da792a384c54709a3755.jpeg
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
artwork/4a939b87658b5d9076ef61346f9b3092.jpeg
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
artwork/4bc08e68fd65aa694693395021bd0eb9.jpeg
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
artwork/51ba5cea2e3b897da7496c6431f99b21.jpeg
Normal file
|
After Width: | Height: | Size: 152 KiB |
BIN
artwork/5817efb88c6c5510e8703fccf407a4e7.jpeg
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
artwork/58c5d942963417aa6f7029bf38596d5f.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/58dddbcc3ae53812e13ce249837e8ba4.jpeg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
artwork/5ca9548fee9ebe13afd476760423dae7.jpeg
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
artwork/5d78d87d3bd2e481af630c2ec29d7ec3.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/6062a781e0393d8f299a32cee8f85cfe.jpeg
Normal file
|
After Width: | Height: | Size: 215 KiB |
BIN
artwork/61a16f6a4ee9ecfc29fe41152dc967fb.jpeg
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
artwork/61e1071499145f69e2ab7f616cbd895a.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/62067c755fe13cd554104a05a2bbf4ed.jpeg
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
artwork/638f60745de79d0dd192d15c0504b252.jpeg
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
artwork/642b70297123e3d131bf8b4cc1235b43.jpeg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
artwork/651444b3f4c4ed1604e8097493432261.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/67c0fa9fc398ccf0c590e6634aa31bac.jpeg
Normal file
|
After Width: | Height: | Size: 137 KiB |
BIN
artwork/69a0c668a777fbac95c749e635408718.jpeg
Normal file
|
After Width: | Height: | Size: 147 KiB |
BIN
artwork/69d635d47ee2684b58a8364826ffce25.jpeg
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
artwork/6aec42684d724bfeea33940d910534f9.jpeg
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
artwork/6c1b8d1133b9c4ea23745cba898c05a6.jpeg
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
artwork/6d07dd762a24571eda1cb558cbae66d0.jpeg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
artwork/74f00819512e21f8a40f78b76d4c497b.jpeg
Normal file
|
After Width: | Height: | Size: 194 KiB |
BIN
artwork/75668f6ca8f44f2cb111548ab27c95f2.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/793d013bd59756deaa9da7406c9871ab.jpeg
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
artwork/7e1f92b9417259d7807ede1631047b99.jpeg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
artwork/7f0c3fd5133cc20f0b0ad1ae3458fab2.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/7f6c41166a414e1f05962d61fd89fab1.jpeg
Normal file
|
After Width: | Height: | Size: 270 KiB |
BIN
artwork/813c943b7ecfd0b6960b1657be6ace4e.jpeg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
artwork/814e7d06daebb61235fc105fc835915c.jpeg
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
artwork/8741a730e8778127173f3b3e4de81971.jpeg
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
artwork/883b488f3961711cebbfddbdae82d306.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/895599e5f03c5daae65ee7dc01ca902c.jpeg
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
artwork/899b57728ba85bd1ba5ac3c5b8935c87.jpeg
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
artwork/8b60b0086919c951156d3ece3ee2e5af.jpeg
Normal file
|
After Width: | Height: | Size: 216 KiB |
BIN
artwork/8b75cbc7d6b1524c24af0a6066d6be6b.jpeg
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
artwork/8dc4c3acd1e51d40837c6bb33c81fecf.jpeg
Normal file
|
After Width: | Height: | Size: 135 KiB |
BIN
artwork/8eedea07e0890693afd9c0cd5125b163.jpeg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
artwork/8fe6d2da53d86b2925faa5aadb1022a7.jpeg
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
artwork/9341595a16ecba6c9201bea7ba28fc0d.jpeg
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
artwork/94117b832d61647dcf72250ea566e0f5.jpeg
Normal file
|
After Width: | Height: | Size: 217 KiB |