build: 👷 Container

This commit is contained in:
Ahmet Kaan GÜMÜŞ 2024-05-31 03:27:26 +03:00
parent 942e1c4698
commit b28908ec56
7 changed files with 56 additions and 18 deletions

7
Dockerfile Normal file
View file

@ -0,0 +1,7 @@
FROM rust:1.77.2-alpine3.18
COPY Cargo.toml ./
COPY src ./src
RUN apk update
RUN apk add musl-dev
RUN cargo build --release
CMD [ "/target/release/acapair_follow_ban_api"]

View file

@ -1,9 +1,14 @@
[![Rust](https://github.com/Acapair/acapair_follow_ban_api/actions/workflows/rust.yml/badge.svg)](https://github.com/Acapair/acapair_follow_ban_api/actions/workflows/rust.yml)
# Acapair Follow Ban API
>: means they are variable.
Container Start Config:
>podman run --rm --net host -v ABSOLUTE_PATH_FROM_HOST:/configs:z -v ABSOLUTE_PATH_FROM_HOST:/certificates:z localhost/acapair_follow_ban_api:latest
## Exposed URLs
>: means they are variable.
Alive Ping(get): "/"
Create User(post): "/:username"

View file

@ -2,4 +2,4 @@ address=0.0.0.0:5000
username=root
password=root
namespace=acapair
database=acapair
database=acapair

View file

@ -0,0 +1,2 @@
ip_address=127.0.0.1
port=3434

View file

@ -1,3 +1,5 @@
use std::net::IpAddr;
use serde::{Deserialize, Serialize};
use surrealdb::{
engine::remote::ws::Client,
@ -19,6 +21,12 @@ pub struct DataBaseConfig {
pub database: String,
}
#[derive(Debug, Clone)]
pub struct ServerConfig {
pub ip_address: IpAddr,
pub port: u16,
}
#[derive(Debug, Clone)]
pub struct AppState {
pub db: Surreal<Client>,

View file

@ -1,26 +1,17 @@
use acapair_follow_ban_api::{
db::db_operations::connect,
routing,
utils::{database_config, tls_config},
utils::{database_config, server_config, tls_config},
AppState,
};
use std::{env, net::SocketAddr};
fn take_args() -> String {
let mut bind_address: String = String::new();
for element in env::args() {
bind_address = element;
}
println!("\n\n\tOn Air -> https://{}\n\n", bind_address);
bind_address
}
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
println!("Hello, world!");
let tls_config = tls_config().await;
let database_config = database_config().await;
let server_config = server_config().await;
println!("{:#?}", database_config);
let state = AppState {
@ -28,8 +19,11 @@ async fn main() {
};
let app = routing::routing(axum::extract::State(state)).await;
let addr = take_args().parse::<SocketAddr>().unwrap();
let addr = SocketAddr::new(server_config.ip_address, server_config.port);
println!(
"\n\n\tOn Air -> https://{}\n\n",
format!("{}:{}", server_config.ip_address, server_config.port)
);
axum_server::bind_rustls(addr, tls_config)
.serve(app.into_make_service())
.await

View file

@ -1,7 +1,7 @@
use axum_server::tls_rustls::RustlsConfig;
use tokio::{fs::File, io::AsyncReadExt};
use crate::DataBaseConfig;
use crate::{DataBaseConfig, ServerConfig};
pub async fn tls_config() -> RustlsConfig {
RustlsConfig::from_pem_file("certificates/fullchain.pem", "certificates/privkey.pem")
@ -10,7 +10,7 @@ pub async fn tls_config() -> RustlsConfig {
}
pub async fn database_config() -> DataBaseConfig {
let mut config_file = File::open("configs/databaseconfig").await.unwrap();
let mut config_file = File::open("configs/database_config.txt").await.unwrap();
let mut config_unparsed = String::new();
config_file
.read_to_string(&mut config_unparsed)
@ -33,3 +33,25 @@ pub async fn database_config() -> DataBaseConfig {
database: configs_cleaned[4].to_string(),
}
}
pub async fn server_config() -> ServerConfig {
let mut config_file = File::open("configs/server_config.txt").await.unwrap();
let mut config_unparsed = String::new();
config_file
.read_to_string(&mut config_unparsed)
.await
.unwrap();
let configs_parsed: Vec<&str> = config_unparsed.split_terminator('\n').collect();
let mut configs_cleaned: Vec<&str> = vec![];
for element in configs_parsed {
let dirty: Vec<&str> = element.split('=').collect();
configs_cleaned.push(dirty[1]);
}
ServerConfig {
ip_address: configs_cleaned[0].parse().unwrap(),
port: configs_cleaned[1].parse().unwrap(),
}
}