feat: add Docker support with environment configuration and health checks
This commit is contained in:
25
.dockerignore
Normal file
25
.dockerignore
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
node_modules
|
||||||
|
.next
|
||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
README.md
|
||||||
|
.env.local
|
||||||
|
.env.example
|
||||||
|
*.log
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
coverage
|
||||||
|
.nyc_output
|
||||||
|
*.tgz
|
||||||
|
*.tar.gz
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
dist
|
||||||
|
build
|
||||||
|
.vercel
|
||||||
|
.netlify
|
||||||
|
.turbo
|
||||||
|
.github
|
||||||
|
4xnored.png
|
||||||
21
.env.docker
Normal file
21
.env.docker
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Docker Environment Configuration
|
||||||
|
# Copy this file to .env and modify the values as needed
|
||||||
|
|
||||||
|
# Host configuration
|
||||||
|
HOST_PORT=3000
|
||||||
|
PORT=3000
|
||||||
|
|
||||||
|
# Navidrome Server Configuration (OPTIONAL)
|
||||||
|
# If not provided, the app will prompt you to configure these settings
|
||||||
|
# NAVIDROME_URL=http://localhost:4533
|
||||||
|
# NAVIDROME_USERNAME=your_username
|
||||||
|
# NAVIDROME_PASSWORD=your_password
|
||||||
|
|
||||||
|
# PostHog Analytics (optional)
|
||||||
|
POSTHOG_KEY=
|
||||||
|
POSTHOG_HOST=
|
||||||
|
|
||||||
|
# Example for external Navidrome server:
|
||||||
|
# NAVIDROME_URL=https://your-navidrome-server.com
|
||||||
|
# NAVIDROME_USERNAME=your_username
|
||||||
|
# NAVIDROME_PASSWORD=your_password
|
||||||
171
DOCKER.md
Normal file
171
DOCKER.md
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
# Docker Deployment
|
||||||
|
|
||||||
|
This application can be easily deployed using Docker with configurable environment variables.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
### Using Docker Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run using pre-built image (app will prompt for Navidrome config)
|
||||||
|
docker run -p 3000:3000 ghcr.io/sillyangel/mice:latest
|
||||||
|
|
||||||
|
# Or build locally
|
||||||
|
docker build -t mice .
|
||||||
|
docker run -p 3000:3000 mice
|
||||||
|
|
||||||
|
# Run with pre-configured Navidrome settings
|
||||||
|
docker run -p 3000:3000 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_URL=http://your-navidrome-server:4533 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_USERNAME=your_username \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_PASSWORD=your_password \
|
||||||
|
-e PORT=3000 \
|
||||||
|
ghcr.io/sillyangel/mice:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Docker Compose
|
||||||
|
|
||||||
|
1. Copy the environment template:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.docker .env
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Edit `.env` with your configuration:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start the application:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: The default docker-compose.yml uses the pre-built image `ghcr.io/sillyangel/mice:latest`.
|
||||||
|
|
||||||
|
For local development, you can use the override example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp docker-compose.override.yml.example docker-compose.override.yml
|
||||||
|
# This will build locally instead of using the pre-built image
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Options
|
||||||
|
|
||||||
|
All configuration is done through environment variables. If Navidrome server configuration is not provided via environment variables, the application will automatically prompt you to configure it within the client interface.
|
||||||
|
|
||||||
|
### Optional Variables
|
||||||
|
|
||||||
|
- `NEXT_PUBLIC_NAVIDROME_URL`: URL of your Navidrome server (optional - app will prompt if not set)
|
||||||
|
- `NEXT_PUBLIC_NAVIDROME_USERNAME`: Navidrome username (optional - app will prompt if not set)
|
||||||
|
- `NEXT_PUBLIC_NAVIDROME_PASSWORD`: Navidrome password (optional - app will prompt if not set)
|
||||||
|
- `PORT`: Port for the application to listen on (default: `3000`)
|
||||||
|
- `HOST_PORT`: Host port to map to container port (docker-compose only, default: `3000`)
|
||||||
|
- `NEXT_PUBLIC_POSTHOG_KEY`: PostHog analytics key (optional)
|
||||||
|
- `NEXT_PUBLIC_POSTHOG_HOST`: PostHog analytics host (optional)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Basic Setup (App will prompt for configuration)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using pre-built image - app will ask for Navidrome server details on first launch
|
||||||
|
docker run -p 3000:3000 ghcr.io/sillyangel/mice:latest
|
||||||
|
|
||||||
|
# Or build locally
|
||||||
|
docker build -t mice .
|
||||||
|
docker run -p 3000:3000 mice
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pre-configured Development Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -p 3000:3000 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_URL=http://localhost:4533 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_USERNAME=admin \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_PASSWORD=admin \
|
||||||
|
ghcr.io/sillyangel/mice:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pre-configured Production Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -p 80:3000 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_URL=https://music.yourdomain.com \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_USERNAME=your_user \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_PASSWORD=your_secure_password \
|
||||||
|
-e PORT=3000 \
|
||||||
|
--restart unless-stopped \
|
||||||
|
ghcr.io/sillyangel/mice:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Environment File
|
||||||
|
|
||||||
|
#### Option 1: Let the app prompt for configuration
|
||||||
|
|
||||||
|
Create a minimal `.env` file:
|
||||||
|
|
||||||
|
```env
|
||||||
|
PORT=3000
|
||||||
|
HOST_PORT=80
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option 2: Pre-configure Navidrome settings
|
||||||
|
|
||||||
|
Create a `.env` file with Navidrome configuration:
|
||||||
|
|
||||||
|
```env
|
||||||
|
NAVIDROME_URL=https://music.yourdomain.com
|
||||||
|
NAVIDROME_USERNAME=your_user
|
||||||
|
NAVIDROME_PASSWORD=your_secure_password
|
||||||
|
PORT=3000
|
||||||
|
HOST_PORT=80
|
||||||
|
```
|
||||||
|
|
||||||
|
Then run either way:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## Health Check
|
||||||
|
|
||||||
|
The Docker Compose setup includes a health check that verifies the application is responding correctly. You can check the health status with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose ps
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
1. **Connection refused**: Ensure your Navidrome server is accessible from the Docker container
|
||||||
|
2. **Authentication failed**: Verify your username and password are correct
|
||||||
|
3. **Port conflicts**: Change the `HOST_PORT` if port 3000 is already in use
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
View application logs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Docker run
|
||||||
|
docker logs <container_name>
|
||||||
|
|
||||||
|
# Docker compose
|
||||||
|
docker-compose logs -f mice
|
||||||
|
```
|
||||||
|
|
||||||
|
### Container Shell Access
|
||||||
|
|
||||||
|
Access the container for debugging:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Docker run
|
||||||
|
docker exec -it <container_name> sh
|
||||||
|
|
||||||
|
# Docker compose
|
||||||
|
docker-compose exec mice sh
|
||||||
|
```
|
||||||
38
Dockerfile
Normal file
38
Dockerfile
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Use Node.js 22 Alpine for smaller image size
|
||||||
|
FROM node:22-alpine
|
||||||
|
|
||||||
|
# Install pnpm globally
|
||||||
|
RUN npm install -g pnpm@9.15.3
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy package files
|
||||||
|
COPY package.json pnpm-lock.yaml ./
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
# Copy source code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Set default environment variables (can be overridden at runtime)
|
||||||
|
# Navidrome configuration is optional - app will prompt if not provided
|
||||||
|
ENV NEXT_PUBLIC_NAVIDROME_URL=""
|
||||||
|
ENV NEXT_PUBLIC_NAVIDROME_USERNAME=""
|
||||||
|
ENV NEXT_PUBLIC_NAVIDROME_PASSWORD=""
|
||||||
|
ENV NEXT_PUBLIC_POSTHOG_KEY=""
|
||||||
|
ENV NEXT_PUBLIC_POSTHOG_HOST=""
|
||||||
|
ENV PORT=3000
|
||||||
|
|
||||||
|
# Generate git commit hash for build info (fallback if not available)
|
||||||
|
RUN echo "NEXT_PUBLIC_COMMIT_SHA=docker-build" > .env.local
|
||||||
|
|
||||||
|
# Build the application
|
||||||
|
RUN pnpm build
|
||||||
|
|
||||||
|
# Expose the port
|
||||||
|
EXPOSE $PORT
|
||||||
|
|
||||||
|
# Start the application
|
||||||
|
CMD ["sh", "-c", "pnpm start -p $PORT"]
|
||||||
40
README.md
40
README.md
@@ -44,12 +44,14 @@ pnpm install
|
|||||||
cp .env.example .env
|
cp .env.example .env
|
||||||
```
|
```
|
||||||
|
|
||||||
Edit `.env.local` with your Navidrome server details:
|
Edit `.env` with your Navidrome server details:
|
||||||
|
|
||||||
```env
|
```env
|
||||||
NEXT_PUBLIC_NAVIDROME_URL=http://localhost:4533
|
NEXT_PUBLIC_NAVIDROME_URL=http://localhost:4533
|
||||||
NEXT_PUBLIC_NAVIDROME_USERNAME=your_username
|
NEXT_PUBLIC_NAVIDROME_USERNAME=your_username
|
||||||
NEXT_PUBLIC_NAVIDROME_PASSWORD=your_password
|
NEXT_PUBLIC_NAVIDROME_PASSWORD=your_password
|
||||||
|
NEXT_PUBLIC_POSTHOG_KEY=phc_XXXXXXXXXXXXXXXXXX
|
||||||
|
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Run the development server**
|
3. **Run the development server**
|
||||||
@@ -60,6 +62,42 @@ pnpm dev
|
|||||||
|
|
||||||
Open [http://localhost:40625](http://localhost:40625) in your browser.
|
Open [http://localhost:40625](http://localhost:40625) in your browser.
|
||||||
|
|
||||||
|
## Docker Deployment
|
||||||
|
|
||||||
|
For easy deployment using Docker:
|
||||||
|
|
||||||
|
### Quick Docker Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run using pre-built image (app will prompt for Navidrome configuration)
|
||||||
|
docker run -p 3000:3000 ghcr.io/sillyangel/mice:latest
|
||||||
|
|
||||||
|
# Or build locally
|
||||||
|
docker build -t mice .
|
||||||
|
docker run -p 3000:3000 mice
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker Compose (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Copy environment template and configure
|
||||||
|
cp .env.docker .env
|
||||||
|
# Edit .env with your settings (optional - app can prompt)
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Pre-configured Docker Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -p 3000:3000 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_URL=http://your-navidrome-server:4533 \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_USERNAME=your_username \
|
||||||
|
-e NEXT_PUBLIC_NAVIDROME_PASSWORD=your_password \
|
||||||
|
ghcr.io/sillyangel/mice:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
📖 **For detailed Docker configuration, environment variables, troubleshooting, and advanced setups, see [DOCKER.md](./DOCKER.md)**
|
||||||
|
|
||||||
## Migration from Firebase
|
## Migration from Firebase
|
||||||
|
|
||||||
This project was migrated from Firebase to Navidrome. See [NAVIDROME_MIGRATION.md](./NAVIDROME_MIGRATION.md) for detailed migration notes and troubleshooting.
|
This project was migrated from Firebase to Navidrome. See [NAVIDROME_MIGRATION.md](./NAVIDROME_MIGRATION.md) for detailed migration notes and troubleshooting.
|
||||||
|
|||||||
25
docker-compose.override.yml.example
Normal file
25
docker-compose.override.yml.example
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Docker Compose Override Example for Local Development
|
||||||
|
# This file shows how to override the default docker-compose.yml for local development
|
||||||
|
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
mice:
|
||||||
|
# Override to build locally instead of using pre-built image
|
||||||
|
build: .
|
||||||
|
image: mice:local
|
||||||
|
|
||||||
|
# Enable Navidrome configuration for development
|
||||||
|
environment:
|
||||||
|
- NEXT_PUBLIC_NAVIDROME_URL=http://localhost:4533
|
||||||
|
- NEXT_PUBLIC_NAVIDROME_USERNAME=admin
|
||||||
|
- NEXT_PUBLIC_NAVIDROME_PASSWORD=admin
|
||||||
|
- NEXT_PUBLIC_POSTHOG_KEY=${POSTHOG_KEY:-}
|
||||||
|
- NEXT_PUBLIC_POSTHOG_HOST=${POSTHOG_HOST:-}
|
||||||
|
- PORT=${PORT:-3000}
|
||||||
|
|
||||||
|
# Mount source code for development (optional)
|
||||||
|
# volumes:
|
||||||
|
# - .:/app
|
||||||
|
# - /app/node_modules
|
||||||
|
# - /app/.next
|
||||||
31
docker-compose.yml
Normal file
31
docker-compose.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
mice:
|
||||||
|
image: ghcr.io/sillyangel/mice:latest
|
||||||
|
ports:
|
||||||
|
- "${HOST_PORT:-3000}:${PORT:-3000}"
|
||||||
|
environment:
|
||||||
|
# Navidrome Server Configuration (OPTIONAL)
|
||||||
|
# Uncomment and configure these if you want to pre-configure the server connection
|
||||||
|
# If not set, the app will prompt you to configure these settings on first launch
|
||||||
|
# - NEXT_PUBLIC_NAVIDROME_URL=${NAVIDROME_URL:-}
|
||||||
|
# - NEXT_PUBLIC_NAVIDROME_USERNAME=${NAVIDROME_USERNAME:-}
|
||||||
|
# - NEXT_PUBLIC_NAVIDROME_PASSWORD=${NAVIDROME_PASSWORD:-}
|
||||||
|
|
||||||
|
# PostHog Analytics (optional)
|
||||||
|
- NEXT_PUBLIC_POSTHOG_KEY=${POSTHOG_KEY:-}
|
||||||
|
- NEXT_PUBLIC_POSTHOG_HOST=${POSTHOG_HOST:-}
|
||||||
|
|
||||||
|
# Application Port
|
||||||
|
- PORT=${PORT:-3000}
|
||||||
|
|
||||||
|
# Optional: Add a health check
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:${PORT:-3000}"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 40s
|
||||||
|
|
||||||
|
restart: unless-stopped
|
||||||
Reference in New Issue
Block a user