Skip to content

Instantly share code, notes, and snippets.

@stevedylandev
Created October 2, 2025 18:41
Show Gist options
  • Select an option

  • Save stevedylandev/5a59b209d429733aab8d44ff968cda1e to your computer and use it in GitHub Desktop.

Select an option

Save stevedylandev/5a59b209d429733aab8d44ff968cda1e to your computer and use it in GitHub Desktop.

Revisions

  1. stevedylandev created this gist Oct 2, 2025.
    129 changes: 129 additions & 0 deletions FreshRSS.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,129 @@
    >[!NOTE]
    >Make sure `docker-compose` is installed
    ## Step 1: Create Directory Structure
    ```bash
    bashmkdir -p ~/freshrss
    cd ~/freshrss
    ```

    ## Step 2: Create docker-compose.yml
    Create a file called `docker-compose.yml`:

    ```yaml
    version: "3"

    services:
    freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    hostname: freshrss
    restart: unless-stopped
    ports:
    - "3555:80"
    volumes:
    - ./data:/var/www/FreshRSS/data
    - ./extensions:/var/www/FreshRSS/extensions
    environment:
    - TZ=America/New_York # Change to your timezone
    - CRON_MIN=*/30 # Update feeds every 30 minutes
    ```
    ## Step 3: Create systemd Service File
    Create the systemd service file:
    ```bash
    sudo nano /etc/systemd/system/freshrss.service
    ```
    Paste the following content (replace USERNAME with your actual username):
    ```ini
    [Unit]
    Description=FreshRSS Docker Compose Service
    Requires=docker.service
    After=docker.service network-online.target
    Wants=network-online.target

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    WorkingDirectory=/home/USERNAME/freshrss
    ExecStartPre=/usr/bin/docker compose pull
    ExecStart=/usr/bin/docker compose up -d
    ExecStop=/usr/bin/docker compose down
    ExecReload=/usr/bin/docker compose pull
    ExecReload=/usr/bin/docker compose up -d
    TimeoutStartSec=0

    [Install]
    WantedBy=multi-user.target
    ```
    ## Step 4: Create Tailscale Funnel Service (Optional)
    Create a separate service for the Tailscale funnel:
    ```bash
    sudo nano /etc/systemd/system/freshrss-tailscale-funnel.service
    ```
    Paste the following:
    ```ini
    [Unit]
    Description=Tailscale Funnel for FreshRSS
    After=freshrss.service tailscaled.service
    Requires=freshrss.service tailscaled.service

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/bin/tailscale funnel 3555
    ExecStop=/usr/bin/tailscale funnel --remove 3555
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
    ```

    ## Step 5: Enable and Start Services
    ```bash
    # Reload systemd to recognize new services
    sudo systemctl daemon-reload

    # Enable services to start on boot
    sudo systemctl enable freshrss.service
    sudo systemctl enable freshrss-tailscale-funnel.service

    # Start FreshRSS
    sudo systemctl start freshrss.service

    # Start Tailscale funnel
    sudo systemctl start freshrss-tailscale-funnel.service
    ```
    Step 6: Verify Everything is Running
    ```bash
    # Check FreshRSS service status
    sudo systemctl status freshrss.service

    # Check Tailscale funnel status
    sudo systemctl status freshrss-tailscale-funnel.service

    # Check if container is running
    docker ps

    # Check Tailscale funnel status
    sudo tailscale funnel status
    ```
    ## Useful Management Commands
    ```bash
    # Stop services
    sudo systemctl stop freshrss-tailscale-funnel.service
    sudo systemctl stop freshrss.service

    # Restart services
    sudo systemctl restart freshrss.service
    sudo systemctl restart freshrss-tailscale-funnel.service

    # View logs
    sudo journalctl -u freshrss.service -f
    sudo journalctl -u freshrss-tailscale-funnel.service -f
    docker logs -f freshrss

    # Disable services
    sudo systemctl disable freshrss-tailscale-funnel.service
    sudo systemctl disable freshrss.service
    ```