Add github workflow and dockerfile

This commit is contained in:
Brandon Thomas
2020-06-29 00:30:28 -04:00
parent d4853707c7
commit de5a5b0783
6 changed files with 97 additions and 17 deletions
+11
View File
@@ -0,0 +1,11 @@
.git
.idea/
target/
# Ignore Files
*png
*pt
*pyc
*pyo
*wav
*~
+22
View File
@@ -0,0 +1,22 @@
name: Publish Docker image to GitHub Package Registry
on: push
jobs:
build:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master' # Only on master
steps:
- name: Copy Repo Files
uses: actions/checkout@master
#This Action Emits 2 Variables, IMAGE_SHA_NAME and IMAGE_URL
#which you can reference in subsequent steps
- name: Publish Docker Image to GPR
uses: machine-learning-apps/gpr-docker-publish@master
id: docker
with:
IMAGE_NAME: 'tts-service-proxy'
DOCKERFILE_PATH: 'Dockerfile'
BUILD_CONTEXT: '.'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Generated
+12 -12
View File
@@ -695,6 +695,18 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382"
[[package]]
name = "tts-service-proxy"
version = "0.0.1"
dependencies = [
"anyhow",
"env_logger",
"futures",
"hyper",
"hyper-reverse-proxy",
"log",
]
[[package]] [[package]]
name = "unicase" name = "unicase"
version = "2.6.0" version = "2.6.0"
@@ -710,18 +722,6 @@ version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
[[package]]
name = "voder-proxy"
version = "0.0.1"
dependencies = [
"anyhow",
"env_logger",
"futures",
"hyper",
"hyper-reverse-proxy",
"log",
]
[[package]] [[package]]
name = "want" name = "want"
version = "0.2.0" version = "0.2.0"
+2 -2
View File
@@ -1,5 +1,5 @@
[package] [package]
name = "voder-proxy" name = "tts-service-proxy"
edition = "2018" edition = "2018"
version = "0.0.1" version = "0.0.1"
authors = [ authors = [
@@ -9,7 +9,7 @@ authors = [
publish = false publish = false
[[bin]] [[bin]]
name = "voder-proxy" name = "tts-service-proxy"
path = "src/main.rs" path = "src/main.rs"
[dependencies] [dependencies]
+44
View File
@@ -0,0 +1,44 @@
# Unsure if I want to create minimal images yet that run under Alpine Linux.
# I have instructions for that here: https://hub.docker.com/r/echelon/testcontainer/dockerfile
FROM ubuntu:xenial as build
WORKDIR /tmp
RUN apt-get update \
&& apt-get install -y \
build-essential \
curl \
libssl-dev \
libssl1.0.0 \
pkg-config
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
| sh -s -- --default-toolchain stable -y
COPY Cargo.lock .
COPY Cargo.toml .
COPY src/ ./src
RUN $HOME/.cargo/bin/cargo fetch
#RUN LD_LIBRARY_PATH=/usr/lib:${LD_LIBRARY_PATH} $HOME/.cargo/bin/cargo build
RUN LD_LIBRARY_PATH=/usr/lib:${LD_LIBRARY_PATH} $HOME/.cargo/bin/cargo build --release
# Final image
FROM ubuntu:xenial
WORKDIR /
#COPY --from=build /tmp/target/debug/tts-service-proxy /
COPY --from=build /tmp/target/release/tts-service-proxy /
# SSL certs are required for crypto
COPY --from=build /etc/ssl /etc/ssl
# Required dynamically linked libraries
COPY --from=build /lib/x86_64-linux-gnu/libssl.* /lib/x86_64-linux-gnu/
COPY --from=build /lib/x86_64-linux-gnu/libcrypto.* /lib/x86_64-linux-gnu/
# Make sure all the links resolve
RUN ldd tts-service-proxy
EXPOSE 8080
CMD LD_LIBRARY_PATH=/usr/lib /tts-service-proxy
+6 -3
View File
@@ -50,15 +50,18 @@ fn main() {
let addr = ([127, 0, 0, 1], 13900).into(); let addr = ([127, 0, 0, 1], 13900).into();
// A `Service` is needed for every connection. // A `Service` is needed for every connection.
let make_svc = make_service_fn(|socket: &AddrStream| { let make_svc = make_service_fn(move |socket: &AddrStream| {
let remote_addr = socket.remote_addr(); let remote_addr = socket.remote_addr();
let route_a = route_one.clone();
let route_b = route_two.clone();
service_fn(move |req: Request<Body>| { // returns BoxFut service_fn(move |req: Request<Body>| { // returns BoxFut
if req.uri().path().starts_with("/first") { if req.uri().path().starts_with("/first") {
return hyper_reverse_proxy::call(remote_addr.ip(), &route_one, req) return hyper_reverse_proxy::call(remote_addr.ip(), &route_a, req)
} else if req.uri().path().starts_with("/second") { } else if req.uri().path().starts_with("/second") {
return hyper_reverse_proxy::call(remote_addr.ip(), &route_two, req) return hyper_reverse_proxy::call(remote_addr.ip(), &route_b, req)
} else { } else {
debug_request(req) debug_request(req)