Browse Source

Dockerize app

main
Quentin 1 year ago
parent
commit
5dd4544360
  1. 3
      .dockerignore
  2. 23
      Dockerfile
  3. 2
      README.md
  4. 14
      docker-compose.yml
  5. 2
      src/consul_actor.rs
  6. 17
      src/main.rs

3
.dockerignore

@ -0,0 +1,3 @@
target
.git

23
Dockerfile

@ -0,0 +1,23 @@
FROM debian:bullseye-slim as builder
RUN apt-get update && \
apt-get install -y rustc cargo libssl-dev pkg-config
WORKDIR /srv
# Build dependencies and cache them
COPY Cargo.* ./
RUN mkdir -p src && \
echo "fn main() {println!(\"if you see this, the build broke\")}" > src/main.rs && \
cargo build --release && \
rm -r src && \
rm target/release/deps/diplonat*
# Build final app
COPY ./src ./src
RUN cargo build --release
FROM debian:bullseye-slim
RUN apt-get update && apt-get install -y libssl1.1
COPY --from=builder /srv/target/release/diplonat /usr/local/sbin/diplonat
CMD ["/usr/local/sbin/diplonat"]

2
README.md

@ -3,7 +3,7 @@ Diplonat
## Feature set
* [ ] (Re)Configure NAT via UPNP/IGD (prio: high)
* [X] (Re)Configure NAT via UPNP/IGD (prio: high)
* [ ] (Re)Configure nftable (prio: low)
* [ ] (Re)Configure DNS via ??? (prio: low)

14
docker-compose.yml

@ -0,0 +1,14 @@
version: '3.4'
services:
diplonat:
build: .
image: superboum/amd64_diplonat:v1
network_mode: host # required by UPNP/IGD
environment:
DIPLONAT_PRIVATE_IP: 192.168.0.18
DIPLONAT_REFRESH_TIME: 60
DIPLONAT_EXPIRATION_TIME: 300
DIPLONAT_CONSUL_NODE_NAME: lheureduthe
RUST_LOG: debug

2
src/consul_actor.rs

@ -92,7 +92,7 @@ impl ConsulActor {
Ok(c) => c,
Err(e) => {
self.consul.watch_node_reset();
self.retries = cmp::min(u32::MAX - 1, self.retries) + 1;
self.retries = cmp::min(std::u32::MAX - 1, self.retries) + 1;
let will_retry_in = retry_to_time(self.retries, Duration::from_secs(600));
error!("Failed to query consul. Will retry in {}s. {}", will_retry_in.as_secs(), e);
delay_for(will_retry_in).await;

17
src/main.rs

@ -5,9 +5,6 @@ mod consul_actor;
mod igd_actor;
mod diplonat;
//use std::net::SocketAddrV4;
//use std::collections::HashMap;
//use igd::PortMappingProtocol;
use log::*;
use diplonat::Diplonat;
@ -18,18 +15,4 @@ async fn main() {
let mut diplo = Diplonat::new().await.expect("Setup failed");
diplo.listen().await.expect("A runtime error occured");
/*
let gateway = match search_gateway(Default::default()).await {
Ok(g) => g,
Err(err) => return println!("Faild to find IGD: {}", err),
};
let service = format!("{}:{}", config.private_ip, 1234);
let service: SocketAddrV4 = service.parse().expect("Invalid socket address");
match gateway.add_port(PortMappingProtocol::TCP, 1234, service, config.expiration_time, "diplonat").await {
Ok(_) => (),
Err(e) => return println!("Unable to insert port 1234: {}", e),
};
*/
}
Loading…
Cancel
Save