# **Homepage Service Documentation**

## **Overview**

**Homepage** is a self-hosted dashboard application designed for organizing and accessing web-based services. With features like bookmarks, service integrations, and Docker monitoring, it serves as a central hub for managing home labs efficiently. This guide details the configuration and setup of Homepage using Docker Compose, ensuring a simple, scalable, and maintainable deployment.

---

## **Docker Setup**

### **Docker Compose Configuration**

```yaml
services:
  homepage:
    image: ghcr.io/gethomepage/homepage:latest
    container_name: homepage
    environment:
      PUID: 1000 # Replace with your user ID
      PGID: 1000 # Replace with your group ID
    ports:
      - "3000:3000" # Map external port as needed
    volumes:
      - /opt/homepage/config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock:ro # Optional for Docker integrations
      - /opt/homepage/config/icons:/app/public/icons
    restart: unless-stopped
```

#### **Key Configuration Details**

1. **Image**: Pulls the official `ghcr.io/gethomepage/homepage:latest` image for the latest features and updates.
2. **Environment Variables**:
    - `PUID` and `PGID` ensure file permissions align with the host user, avoiding access issues.
3. **Ports**: Maps port `3000` on the container to port `3000` on the host.
4. **Volumes**:
    - `/opt/homepage/config`: Stores configuration files persistently.
    - `/var/run/docker.sock`: Optional for Docker container monitoring.
    - `/opt/homepage/config/icons`: Hosts custom service icons.
5. **Restart Policy**: Ensures the service restarts automatically unless manually stopped.

---

### **Configuration Directory Structure**

The configuration directory `/opt/homepage/config` on the host contains all the files needed to customize and manage Homepage:

```plaintext
/opt/homepage/config/
├── bookmarks.yaml          # Bookmark definitions for the dashboard
├── config.yml              # Main configuration file
├── custom.css              # Custom CSS for styling
├── custom.js               # Custom JavaScript for advanced tweaks
├── docker.yaml             # Docker container monitoring configuration
├── icons/                  # Directory for service icons
├── kubernetes.yaml         # Kubernetes integration configuration
├── logs/                   # Logs for troubleshooting
├── services.yaml           # Definitions for services displayed on the dashboard
├── settings.yaml           # General settings for Homepage
├── settings.yaml.bck       # Backup of settings
├── widgets.yaml            # Widget configuration
```

---

## **Deployment Instructions**

1. **Prepare Your Environment**:
    
    - Install Docker and Docker Compose on your server.
    - Create the directory `/opt/homepage/config` for storing configuration files.
2. **Deploy Homepage**:  
    Save the provided `docker-compose.yml` file and start the service:
    
    ```bash
    docker-compose up -d
    ```
    
3. **Access the Dashboard**:  
    Open a web browser and navigate to:
    
    ```none
    http://<your-server-ip>:3000
    ```
    
4. **Customize Your Dashboard**:
    
    - Edit files such as `services.yaml` or `widgets.yaml` in `/opt/homepage/config`.
    - Restart the container to apply changes:
        
        ```bash
        docker-compose restart homepage
        ```
        
5. **Add Custom Icons**:  
    Place your icon files in `/opt/homepage/config/icons` and reference them in `services.yaml`.
    

---

## **Additional Features**

### **Docker Monitoring**

To enable container monitoring, mount the Docker socket:

```yaml
volumes:
  - /var/run/docker.sock:/var/run/docker.sock:ro
```

This integration allows Homepage to display real-time container stats.

### **Custom Styles and Scripts**

- **Custom CSS**: Modify the appearance of the dashboard by editing `custom.css`.
- **Custom JavaScript**: Add advanced functionality by editing `custom.js`.

---

## **Best Practices**

1. **Backup Configuration**:  
    Regularly backup `/opt/homepage/config` to prevent data loss:
    
    ```bash
    tar -czvf homepage-config-backup.tar.gz /opt/homepage/config
    ```
    
2. **Security**:
    
    - Use a firewall to restrict access to port `3000` if the dashboard is for internal use only.
    - Optionally set up a reverse proxy with SSL using Nginx or Traefik.
3. **Update Homepage**:  
    Keep Homepage updated by pulling the latest image and recreating the container:
    
    ```bash
    docker-compose pull
    docker-compose up -d
    ```
    

---

## **Why Use Homepage?**

- **Centralized Access**: Consolidate all your services in one intuitive dashboard.
- **Customizable**: Fully tailor the dashboard’s layout, services, and appearance to your needs.
- **Integration Capabilities**: Monitor Docker containers, display widgets, and manage bookmarks seamlessly.
- **Lightweight**: Minimal resource consumption ensures smooth performance in home lab environments.