diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f70fa48 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.env +!/.env.docker diff --git a/Dockerfile b/Dockerfile index 5c144a5..199a162 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,9 +34,14 @@ RUN --mount=type=ssh mkdir src && \ # Copy the actual source code COPY src ./src # If you have other directories like `templates` or `static`, copy them too -COPY .env.docker ./.env +COPY .env.docker ./.env.docker COPY migrations ./migrations +# Explicitly expose the env var +# ENV DATABASE_URL=${DATABASE_URL} +ARG ENV_FILE=.env.docker +COPY ${ENV_FILE} ./.env.docker + # << --- SSH MOUNT ADDED HERE --- >> # Build *only* dependencies to leverage Docker cache # This dummy build caches dependencies as a separate layer @@ -60,7 +65,7 @@ COPY --from=builder /usr/src/app/target/release/icarus_auth . # Copy other necessary files like .env (if used for runtime config) or static assets # It's generally better to configure via environment variables in Docker though -COPY --from=builder /usr/src/app/.env . +COPY --from=builder /usr/src/app/.env.docker . COPY --from=builder /usr/src/app/migrations ./migrations # Expose the port your Axum app listens on (e.g., 3000 or 8000) diff --git a/docker-compose.yaml b/docker-compose.yaml index ed72c2b..e350c3a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -11,7 +11,9 @@ services: # Map host port 8000 to container port 3000 (adjust as needed) - "8000:3000" env_file: - - .env + - .env.docker + environment: + - DATABASE_URL=${DATABASE_URL} depends_on: auth_db: condition: service_healthy # Wait for the DB to be healthy before starting the app diff --git a/src/lib.rs b/src/lib.rs index c81cfea..8821f9d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,7 +19,6 @@ mod connection_settings { pub mod db { use sqlx::postgres::PgPoolOptions; - use std::env; use crate::{connection_settings, keys}; @@ -34,9 +33,25 @@ pub mod db { } async fn get_db_url() -> String { - dotenvy::dotenv().ok(); + // dotenvy::dotenv().ok(); // dotenvy::from_filename(".env").ok(); - env::var(keys::DBURL).expect(keys::error::ERROR) + // env::var(keys::DBURL).expect(keys::error::ERROR) + + /* + std::env::var(keys::DBURL) + .or_else(|_| { + dotenvy::dotenv().ok(); + dotenvy::var(keys::DBURL) + }) + .expect("DATABASE_URL must be set in environment or .env file") + */ + if let Err(_) = dotenvy::from_filename(".env.docker") { + eprintln!("Note: .env.docker not found, using system env vars"); + dotenvy::dotenv().ok(); + std::env::var(keys::DBURL).expect(keys::error::ERROR) + } else { + std::env::var(keys::DBURL).expect(keys::error::ERROR) + } } pub async fn migrations(pool: &sqlx::PgPool) {