Compare commits

..

6 Commits

Author SHA1 Message Date
3cf787cf98 Fix #195 2021-04-14 21:53:17 -07:00
46e22cf74e Fix certificate error on ARM #193 2021-04-15 04:50:03 +00:00
5c2e134924 Include Cargo.lock. Fixes #191 2021-04-14 21:44:16 -07:00
c6244585fa Add database.red instance. Closes #194 2021-04-15 04:35:57 +00:00
9f1ba274eb Document ARM Docker deployment in README 2021-04-10 14:31:26 -07:00
93ed1c6f0c Fix Dockerfile healthchecks 2021-04-09 22:38:13 -07:00
8 changed files with 1484 additions and 27 deletions

View File

@ -33,4 +33,4 @@ jobs:
file: ./Dockerfile.arm64 file: ./Dockerfile.arm64
platforms: linux/arm64 platforms: linux/arm64
push: true push: true
tags: spikecodes/libreddit:latest tags: spikecodes/libreddit:arm

3
.gitignore vendored
View File

@ -1,2 +1 @@
/target /target
Cargo.lock

1460
Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@ name = "libreddit"
description = " Alternative private front-end to Reddit" description = " Alternative private front-end to Reddit"
license = "AGPL-3.0" license = "AGPL-3.0"
repository = "https://github.com/spikecodes/libreddit" repository = "https://github.com/spikecodes/libreddit"
version = "0.10.1" version = "0.10.3"
authors = ["spikecodes <19519553+spikecodes@users.noreply.github.com>"] authors = ["spikecodes <19519553+spikecodes@users.noreply.github.com>"]
edition = "2018" edition = "2018"
@ -20,6 +20,6 @@ hyper = { version = "0.14.5", features = ["full"] }
hyper-rustls = "0.22.1" hyper-rustls = "0.22.1"
route-recognizer = "0.3.0" route-recognizer = "0.3.0"
serde_json = "1.0.64" serde_json = "1.0.64"
tokio = { version = "1.4.0", features = ["full"] } tokio = { version = "1.5.0", features = ["full"] }
time = "0.2.26" time = "0.2.26"
url = "2.2.1" url = "2.2.1"

View File

@ -1,15 +1,11 @@
#################################################################################################### ####################################################################################################
## Builder ## Builder
#################################################################################################### ####################################################################################################
FROM rust:latest AS builder FROM rust:alpine AS builder
RUN rustup target add x86_64-unknown-linux-musl RUN apk add --no-cache musl-dev
RUN apt update && apt install -y musl-tools musl-dev
RUN update-ca-certificates
RUN adduser --home /nonexistent --no-create-home --disabled-password libreddit WORKDIR /libreddit
WORKDIR /usr/src/libreddit
COPY . . COPY . .
@ -18,26 +14,23 @@ RUN cargo build --target x86_64-unknown-linux-musl --release
#################################################################################################### ####################################################################################################
## Final image ## Final image
#################################################################################################### ####################################################################################################
FROM scratch FROM alpine:latest
# Import user information from builder.
COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder /etc/group /etc/group
# Import ca-certificates from builder # Import ca-certificates from builder
COPY --from=builder /usr/share/ca-certificates /usr/share/ca-certificates COPY --from=builder /usr/share/ca-certificates /usr/share/ca-certificates
COPY --from=builder /etc/ssl/certs /etc/ssl/certs COPY --from=builder /etc/ssl/certs /etc/ssl/certs
# Copy our build # Copy our build
COPY --from=builder /usr/src/libreddit/target/x86_64-unknown-linux-musl/release/libreddit /usr/local/bin/libreddit COPY --from=builder /libreddit/target/x86_64-unknown-linux-musl/release/libreddit /usr/local/bin/libreddit
# Use an unprivileged user. # Use an unprivileged user.
RUN adduser --home /nonexistent --no-create-home --disabled-password libreddit
USER libreddit USER libreddit
# Tell Docker to expose port 8080 # Tell Docker to expose port 8080
EXPOSE 8080 EXPOSE 8080
# Run a healthcheck every minute to make sure Libreddit is functional # Run a healthcheck every minute to make sure Libreddit is functional
HEALTHCHECK --interval=1m --timeout=3s CMD curl -f http://localhost:8080/settings || exit 1 HEALTHCHECK --interval=1m --timeout=3s CMD wget --spider --q http://localhost:8080/settings || exit 1
CMD ["libreddit"] CMD ["libreddit"]

View File

@ -16,7 +16,9 @@ RUN cargo install --path .
#################################################################################################### ####################################################################################################
FROM alpine:latest FROM alpine:latest
RUN apk add --no-cache curl # Import ca-certificates from builder
COPY --from=builder /usr/share/ca-certificates /usr/share/ca-certificates
COPY --from=builder /etc/ssl/certs /etc/ssl/certs
# Copy our build # Copy our build
COPY --from=builder /usr/local/cargo/bin/libreddit /usr/local/bin/libreddit COPY --from=builder /usr/local/cargo/bin/libreddit /usr/local/bin/libreddit
@ -29,6 +31,6 @@ USER libreddit
EXPOSE 8080 EXPOSE 8080
# Run a healthcheck every minute to make sure Libreddit is functional # Run a healthcheck every minute to make sure Libreddit is functional
HEALTHCHECK --interval=1m --timeout=3s CMD curl -f http://localhost:8080/settings || exit 1 HEALTHCHECK --interval=1m --timeout=3s CMD wget --spider --q http://localhost:8080/settings || exit 1
CMD ["libreddit"] CMD ["libreddit"]

View File

@ -37,6 +37,7 @@ Feel free to [open an issue](https://github.com/spikecodes/libreddit/issues/new)
| [reddit.invak.id](https://reddit.invak.id) | 🇧🇬 BG | | | [reddit.invak.id](https://reddit.invak.id) | 🇧🇬 BG | |
| [reddit.phii.me](https://reddit.phii.me) | 🇺🇸 US | | | [reddit.phii.me](https://reddit.phii.me) | 🇺🇸 US | |
| [libreddit.silkky.cloud](https://libreddit.silkky.cloud) | 🇫🇮 FI | | | [libreddit.silkky.cloud](https://libreddit.silkky.cloud) | 🇫🇮 FI | |
| [libreddit.database.red](https://libreddit.database.red) | 🇺🇸 US | ✅ |
| [spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion](http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion) | 🇮🇳 IN | | | [spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion](http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion) | 🇮🇳 IN | |
| [fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion](http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion) | 🇩🇪 DE | | | [fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion](http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion) | 🇩🇪 DE | |
| [libreddit.himiko7xl2skojc6odi7hykl626gt4qki3vxdbv33u2u3af76d6k32ad.onion](http://libreddit.himiko7xl2skojc6odi7hykl626gt4qki3vxdbv33u2u3af76d6k32ad.onion) | 🇫🇮 FI | | | [libreddit.himiko7xl2skojc6odi7hykl626gt4qki3vxdbv33u2u3af76d6k32ad.onion](http://libreddit.himiko7xl2skojc6odi7hykl626gt4qki3vxdbv33u2u3af76d6k32ad.onion) | 🇫🇮 FI | |
@ -157,6 +158,8 @@ docker pull spikecodes/libreddit
docker run -d --name libreddit -p 80:8080 spikecodes/libreddit docker run -d --name libreddit -p 80:8080 spikecodes/libreddit
``` ```
To deploy on `arm64` platforms, simply replace `spikecodes/libreddit` in the commands above with `spikecodes/libreddit:arm`.
## 3) AUR ## 3) AUR
For ArchLinux users, Libreddit is available from the AUR as [`libreddit-git`](https://aur.archlinux.org/packages/libreddit-git). For ArchLinux users, Libreddit is available from the AUR as [`libreddit-git`](https://aur.archlinux.org/packages/libreddit-git).

View File

@ -205,10 +205,10 @@ async fn main() {
.at("/r/:sub/w") .at("/r/:sub/w")
.get(|r| async move { Ok(redirect(format!("/r/{}/wiki", r.param("sub").unwrap_or_default()))) }.boxed()); .get(|r| async move { Ok(redirect(format!("/r/{}/wiki", r.param("sub").unwrap_or_default()))) }.boxed());
app app
.at("/r/:sub/w/:page") .at("/r/:sub/w/*page")
.get(|r| async move { Ok(redirect(format!("/r/{}/wiki/{}", r.param("sub").unwrap_or_default(), r.param("wiki").unwrap_or_default()))) }.boxed()); .get(|r| async move { Ok(redirect(format!("/r/{}/wiki/{}", r.param("sub").unwrap_or_default(), r.param("wiki").unwrap_or_default()))) }.boxed());
app.at("/r/:sub/wiki").get(|r| subreddit::wiki(r).boxed()); app.at("/r/:sub/wiki").get(|r| subreddit::wiki(r).boxed());
app.at("/r/:sub/wiki/:page").get(|r| subreddit::wiki(r).boxed()); app.at("/r/:sub/wiki/*page").get(|r| subreddit::wiki(r).boxed());
app.at("/r/:sub/about/sidebar").get(|r| subreddit::sidebar(r).boxed()); app.at("/r/:sub/about/sidebar").get(|r| subreddit::sidebar(r).boxed());
@ -223,10 +223,10 @@ async fn main() {
// View Reddit wiki // View Reddit wiki
app.at("/w").get(|_| async { Ok(redirect("/wiki".to_string())) }.boxed()); app.at("/w").get(|_| async { Ok(redirect("/wiki".to_string())) }.boxed());
app app
.at("/w/:page") .at("/w/*page")
.get(|r| async move { Ok(redirect(format!("/wiki/{}", r.param("page").unwrap_or_default()))) }.boxed()); .get(|r| async move { Ok(redirect(format!("/wiki/{}", r.param("page").unwrap_or_default()))) }.boxed());
app.at("/wiki").get(|r| subreddit::wiki(r).boxed()); app.at("/wiki").get(|r| subreddit::wiki(r).boxed());
app.at("/wiki/:page").get(|r| subreddit::wiki(r).boxed()); app.at("/wiki/*page").get(|r| subreddit::wiki(r).boxed());
// Search all of Reddit // Search all of Reddit
app.at("/search").get(|r| search::find(r).boxed()); app.at("/search").get(|r| search::find(r).boxed());