Merge pull request 'Add docker.' (#1) from Dessalines/pict-rs:add_docker into master

This commit is contained in:
Aode 2020-06-07 23:02:40 +00:00
commit db8bdacd1c
8 changed files with 119 additions and 3 deletions

3
.dockerignore Normal file
View file

@ -0,0 +1,3 @@
target
.git
docker/dev/volumes

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
/target
/data
/docker/dev/volumes

View file

@ -35,6 +35,24 @@ Running locally, port 8080, storing data in data/, and only allowing the `thumbn
$ ./pict-rs -a 127.0.0.1:8080 -p data/ -w thumbnail identity
```
#### Docker
Run the following commands:
```
# Create a folder for the files (anywhere works)
mkdir /pict-rs
cd /pict-rs
wget https://git.asonix.dog/asonix/pict-rs/raw/branch/master/docker/prod/docker-compose.yml
sudo docker-compose up -d
```
#### Docker Development
Run the following to develop in docker:
```
git clone https://git.asonix.dog/asonix/pict-rs
cd pict-rs/docker/dev
docker-compose up --build
```
### API
pict-rs offers four endpoints:
- `POST /image` for uploading an image. Uploaded content must be valid multipart/form-data with an

30
docker/dev/Dockerfile Normal file
View file

@ -0,0 +1,30 @@
# Build
FROM ekidd/rust-musl-builder:1.44.0 as rust
# Cache deps
WORKDIR /app
RUN sudo chown -R rust:rust .
RUN USER=root cargo new server
WORKDIR /app/server
COPY Cargo.toml Cargo.lock ./
RUN sudo chown -R rust:rust .
RUN mkdir -p ./src/bin \
&& echo 'fn main() { println!("Dummy") }' > ./src/bin/main.rs
RUN cargo build --release
RUN rm -f ./target/x86_64-unknown-linux-musl/release/deps/pict_rs*
COPY src ./src/
# Build for release
RUN cargo build --frozen --release
FROM alpine:3.11
# Copy resources
COPY --from=rust /app/server/target/x86_64-unknown-linux-musl/release/pict-rs /app/pict-rs
RUN addgroup -g 1000 pictrs
RUN adduser -D -s /bin/sh -u 1000 -G pictrs pictrs
RUN chown pictrs:pictrs /app/pict-rs
USER pictrs
EXPOSE 8080
CMD ["/app/pict-rs"]

28
docker/dev/deploy.sh Normal file
View file

@ -0,0 +1,28 @@
# To deploy, run ./deploy [tag]
#!/bin/sh
git checkout master
# Creating the new tag
new_tag="$1"
# Changing the docker-compose prod
sed -i "s/asonix\/pictrs:.*/asonix\/pictrs:$new_tag/" ../prod/docker-compose.yml
git add ../prod/docker-compose.yml
# The commit
git commit -m"Version $new_tag"
git tag $new_tag
# Rebuilding docker
docker-compose build
docker tag dev_pictrs:latest asonix/pictrs:x64-$new_tag
docker push asonix/pictrs:x64-$new_tag
# Build for Raspberry Pi / other archs
# TODO
docker manifest push asonix/pictrs:$new_tag
# Push
git push origin $new_tag
git push

View file

@ -0,0 +1,15 @@
version: '3.3'
services:
pictrs:
build:
context: ../../
dockerfile: docker/dev/Dockerfile
user: root
ports:
- "127.0.0.1:8080:8080"
restart: always
environment:
- PICTRS_PATH=/app/data
volumes:
- ./volumes/pictrs:/app/data

View file

@ -0,0 +1,13 @@
version: '3.3'
services:
pictrs:
image: asonix/pictrs:v0.0.1
user: root
ports:
- "127.0.0.1:8080:8080"
restart: always
environment:
- PICTRS_PATH=/app/data
volumes:
- ./volumes/pictrs:/app/data

View file

@ -5,23 +5,31 @@ pub(crate) struct Config {
#[structopt(
short,
long,
help = "The address and port the server binds to, e.g. 127.0.0.1:80"
env = "PICTRS_ADDR",
default_value = "0.0.0.0:8080",
help = "The address and port the server binds to. Default: 0.0.0.0:8080"
)]
addr: SocketAddr,
#[structopt(short, long, help = "The path to the data directory, e.g. data/")]
#[structopt(
short,
long,
env = "PICTRS_PATH",
help = "The path to the data directory, e.g. data/")]
path: PathBuf,
#[structopt(
short,
long,
help = "An image format to convert all uploaded files into, supports 'jpg' and 'png'"
env = "PICTRS_FORMAT",
help = "An optional image format to convert all uploaded files into, supports 'jpg' and 'png'"
)]
format: Option<Format>,
#[structopt(
short,
long,
env = "PICTRS_FILTER_WHITELIST",
help = "An optional list of filters to whitelist, supports 'identity', 'thumbnail', and 'blur'"
)]
whitelist: Option<Vec<String>>,