forked from Deuxfleurs/diplonat
Dockerize app
This commit is contained in:
parent
3e2ea02d62
commit
5dd4544360
6 changed files with 42 additions and 19 deletions
3
.dockerignore
Normal file
3
.dockerignore
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
target
|
||||||
|
.git
|
||||||
|
|
23
Dockerfile
Normal file
23
Dockerfile
Normal file
|
@ -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"]
|
|
@ -3,7 +3,7 @@ Diplonat
|
||||||
|
|
||||||
## Feature set
|
## 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 nftable (prio: low)
|
||||||
* [ ] (Re)Configure DNS via ??? (prio: low)
|
* [ ] (Re)Configure DNS via ??? (prio: low)
|
||||||
|
|
||||||
|
|
14
docker-compose.yml
Normal file
14
docker-compose.yml
Normal file
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ impl ConsulActor {
|
||||||
Ok(c) => c,
|
Ok(c) => c,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
self.consul.watch_node_reset();
|
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));
|
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);
|
error!("Failed to query consul. Will retry in {}s. {}", will_retry_in.as_secs(), e);
|
||||||
delay_for(will_retry_in).await;
|
delay_for(will_retry_in).await;
|
||||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -5,9 +5,6 @@ mod consul_actor;
|
||||||
mod igd_actor;
|
mod igd_actor;
|
||||||
mod diplonat;
|
mod diplonat;
|
||||||
|
|
||||||
//use std::net::SocketAddrV4;
|
|
||||||
//use std::collections::HashMap;
|
|
||||||
//use igd::PortMappingProtocol;
|
|
||||||
use log::*;
|
use log::*;
|
||||||
use diplonat::Diplonat;
|
use diplonat::Diplonat;
|
||||||
|
|
||||||
|
@ -18,18 +15,4 @@ async fn main() {
|
||||||
|
|
||||||
let mut diplo = Diplonat::new().await.expect("Setup failed");
|
let mut diplo = Diplonat::new().await.expect("Setup failed");
|
||||||
diplo.listen().await.expect("A runtime error occured");
|
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…
Reference in a new issue