mirror of
https://github.com/blackboxprogramming/blackroad-apps.git
synced 2026-03-17 07:57:18 -05:00
feat: prepare all services for production deployment
Co-authored-by: blackboxprogramming <118287761+blackboxprogramming@users.noreply.github.com>
This commit is contained in:
5
roadchain/.dockerignore
Normal file
5
roadchain/.dockerignore
Normal file
@@ -0,0 +1,5 @@
|
||||
target
|
||||
.git
|
||||
.gitignore
|
||||
README.md
|
||||
.DS_Store
|
||||
5
roadchain/.env.example
Normal file
5
roadchain/.env.example
Normal file
@@ -0,0 +1,5 @@
|
||||
# Server
|
||||
PORT=8080
|
||||
|
||||
# CORS
|
||||
CORS_ORIGIN=https://your-domain.com
|
||||
18
roadchain/Dockerfile
Normal file
18
roadchain/Dockerfile
Normal file
@@ -0,0 +1,18 @@
|
||||
FROM rust:1.75-slim AS builder
|
||||
WORKDIR /app
|
||||
RUN apt-get update && apt-get install -y pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
|
||||
COPY Cargo.toml ./
|
||||
RUN mkdir src && echo "fn main() {}" > src/main.rs
|
||||
RUN cargo build --release && rm -f target/release/deps/roadchain*
|
||||
COPY src ./src
|
||||
RUN cargo build --release
|
||||
|
||||
FROM debian:bookworm-slim
|
||||
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /app
|
||||
RUN groupadd --system appgroup && useradd --system --gid appgroup appuser
|
||||
COPY --from=builder /app/target/release/roadchain .
|
||||
RUN chown appuser:appgroup ./roadchain
|
||||
USER appuser
|
||||
EXPOSE 8080
|
||||
CMD ["./roadchain"]
|
||||
@@ -5,6 +5,7 @@ use sha2::{Sha256, Digest};
|
||||
use std::sync::Mutex;
|
||||
use chrono::Utc;
|
||||
use uuid::Uuid;
|
||||
use std::env;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct Block {
|
||||
@@ -62,9 +63,10 @@ async fn root() -> impl Responder {
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
let port = std::env::var("PORT").unwrap_or_else(|_| "8080".to_string());
|
||||
let port = env::var("PORT").unwrap_or_else(|_| "8080".to_string());
|
||||
let addr = format!("0.0.0.0:{}", port);
|
||||
|
||||
let allowed_origin = env::var("CORS_ORIGIN").unwrap_or_else(|_| "http://localhost:3000".to_string());
|
||||
|
||||
let genesis = Block::new(0, "Genesis".to_string(), "0".to_string());
|
||||
let app_state = web::Data::new(AppState {
|
||||
blockchain: Mutex::new(vec![genesis]),
|
||||
@@ -73,10 +75,16 @@ async fn main() -> std::io::Result<()> {
|
||||
println!("RoadChain running on port {}", port);
|
||||
|
||||
HttpServer::new(move || {
|
||||
let cors = Cors::default()
|
||||
.allowed_origin(&allowed_origin)
|
||||
.allowed_methods(vec!["GET", "POST"])
|
||||
.allowed_headers(vec!["Content-Type", "Authorization"])
|
||||
.max_age(3600);
|
||||
App::new()
|
||||
.wrap(Cors::default().allow_any_origin())
|
||||
.wrap(cors)
|
||||
.app_data(app_state.clone())
|
||||
.route("/health", web::get().to(health_check))
|
||||
.route("/api/health", web::get().to(health_check))
|
||||
.route("/", web::get().to(root))
|
||||
})
|
||||
.bind(&addr)?
|
||||
|
||||
Reference in New Issue
Block a user