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
|
||||
|
||||
* [ ] (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
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,
|
||||
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
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…
Reference in a new issue