diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..ca94dbb --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,39 @@ +name: Build and Push Docker Image to GHCR + +on: + push: + branches: ["main"] + tags: ["v*.*.*"] + +jobs: + build-and-push: + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..777544e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM golang:1.25 AS builder + +WORKDIR /app + +ENV CGO_ENABLED=1 GOOS=linux GOARCH=amd64 +RUN apt-get update && apt-get install -y gcc libc6-dev sqlite3 ca-certificates + +COPY go.mod go.sum ./ +RUN go mod download +COPY . . + +RUN go build -ldflags="-w -s" -o passport + +# ---- Runtime Stage ---- +FROM gcr.io/distroless/cc-debian12 + +WORKDIR /data +COPY --from=builder /app/passport /usr/local/bin/passport +EXPOSE 3000 + +CMD ["/usr/local/bin/passport"] \ No newline at end of file diff --git a/README.md b/README.md index c4f8321..31a8e13 100644 --- a/README.md +++ b/README.md @@ -17,47 +17,68 @@ Passport is a simple, fast, and lightweight web dashboard/new tab replacement. ## Usage -1. Clone the repository -2. Configure the `.env` file, an example is provided in the `.env.example` file, see below for every available environment variable -4. Deploy `passport` to your web server -5. profit +### Docker + +Passport is available as a Docker image via this repository. This is the recommended way to run Passport. + +```bash +docker run -d --name passport -p 3000:3000 -e PASSPORT_ADMIN_USERNAME=admin -e PASSPORT_ADMIN_PASSWORD=password ghcr.io/juls0730/passport:latest +``` + +### Building from source + +If you want to build from source, you will need to install the dependencies first. + +```bash +go install github.com/juls0730/zqdgr@latest +go install github.com/tailwindlabs/tailwindcss-cli@latest +``` + +Then you can build the binary. + +```bash +go build -o passport +``` + +You can then run the binary. ### Configuration #### Passport configuration -| Environment Variable | Description | Required | Default | -| --- | --- | --- | --- | -| `PASSPORT_DEV_MODE` | Enables dev mode | false | false | -| `PASSPORT_ENABLE_PREFORK` | Enables preforking | false | false | -| `PASSPORT_ENABLE_WEATHER` | Enables weather data, see [Weather configuration](#weather-configuration) | false | false | -| `PASSPORT_ENABLE_UPTIME` | Enables uptime data, see [Uptime configuration](#uptime-configuration) | false | false | -| `PASSPORT_ADMIN_USERNAME` | The username for the admin dashboard | true | -| `PASSPORT_ADMIN_PASSWORD` | The password for the admin dashboard | true | -| `PASSPORT_SEARCH_PROVIDER` | The search provider to use for the search bar, without any query parameters | true | -| `PASSPORT_SEARCH_PROVIDER_QUERY_PARAM` | The query parameter to use for the search provider, e.g. `q` for most providers |false | q | +| Environment Variable | Description | Required | Default | +| -------------------------------------- | ------------------------------------------------------------------------------- | -------- | ------- | +| `PASSPORT_DEV_MODE` | Enables dev mode | false | false | +| `PASSPORT_ENABLE_PREFORK` | Enables preforking | false | false | +| `PASSPORT_ENABLE_WEATHER` | Enables weather data, see [Weather configuration](#weather-configuration) | false | false | +| `PASSPORT_ENABLE_UPTIME` | Enables uptime data, see [Uptime configuration](#uptime-configuration) | false | false | +| `PASSPORT_ADMIN_USERNAME` | The username for the admin dashboard | true | +| `PASSPORT_ADMIN_PASSWORD` | The password for the admin dashboard | true | +| `PASSPORT_SEARCH_PROVIDER` | The search provider to use for the search bar, without any query parameters | true | +| `PASSPORT_SEARCH_PROVIDER_QUERY_PARAM` | The query parameter to use for the search provider, e.g. `q` for most providers | false | q | #### Weather configuration -| Environment Variable | Description | Required | Default | -| --- | --- | --- | --- | -| `OPENWEATHER_PROVIDER` | The weather provider to use, currently only `openweathermap` is supported | true | openweathermap | -| `OPENWEATHER_API_KEY` | The OpenWeather API key | if enabled | | -| `OPENWEATHER_TEMP_UNITS` | The temperature units to use, either `metric` or `imperial` | false | metric | -| `OPENWEATHER_LAT` | The latitude of your location | if enabled | | -| `OPENWEATHER_LON` | The longitude of your location | if enabled | | -| `OPENWEATHER_UPDATE_INTERVAL` | The interval in minutes to update the weather data | false | 15 | +| Environment Variable | Description | Required | Default | +| ----------------------------- | ------------------------------------------------------------------------- | ---------- | -------------- | +| `OPENWEATHER_PROVIDER` | The weather provider to use, currently only `openweathermap` is supported | true | openweathermap | +| `OPENWEATHER_API_KEY` | The OpenWeather API key | if enabled | | +| `OPENWEATHER_TEMP_UNITS` | The temperature units to use, either `metric` or `imperial` | false | metric | +| `OPENWEATHER_LAT` | The latitude of your location | if enabled | | +| `OPENWEATHER_LON` | The longitude of your location | if enabled | | +| `OPENWEATHER_UPDATE_INTERVAL` | The interval in minutes to update the weather data | false | 15 | #### Uptime configuration -| Environment Variable | Description | Required | Default | -| --- | --- | --- | --- | -| `UPTIMEROBOT_API_KEY` | The UptimeRobot API key | if enabled | | -| `UPTIMEROBOT_UPDATE_INTERVAL` | The interval in seconds to update the uptime data | false | 300 | +| Environment Variable | Description | Required | Default | +| ----------------------------- | ------------------------------------------------- | ---------- | ------- | +| `UPTIMEROBOT_API_KEY` | The UptimeRobot API key | if enabled | | +| `UPTIMEROBOT_UPDATE_INTERVAL` | The interval in seconds to update the uptime data | false | 300 | ### Adding links and categories -The admin dashboard can be accessed at `/admin`, you will be redirected to the login page if you are not logged in, use the credentials you configured in the `.env` file to login. Once logged in you can add links and categories. +The admin dashboard can be accessed at `/admin`, you will be redirected to the login page if you are not logged in, use +the credentials you configured via the environment variables to login. Once logged in you can add links and categories. ## License