Docker env #34
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@@ -0,0 +1,2 @@
|
||||
.env
|
||||
!/.env.docker
|
@@ -8,7 +8,10 @@ pkg/
|
||||
.gitea/
|
||||
|
||||
# Ignore environment files (configure via docker-compose instead)
|
||||
.env*
|
||||
.env
|
||||
.env.sample
|
||||
.env.docker
|
||||
.env.docker.sample
|
||||
|
||||
# Ignore IDE/editor specific files
|
||||
.idea/
|
||||
@@ -18,4 +21,4 @@ pkg/
|
||||
*.DS_Store
|
||||
|
||||
# Add any other files/directories you don't need in the image
|
||||
# e.g., logs/, tmp/
|
||||
# e.g., logs/, tmp/
|
||||
|
6
.env.docker.sample
Normal file
6
.env.docker.sample
Normal file
@@ -0,0 +1,6 @@
|
||||
SECRET_KEY=refero34o8rfhfjn983thf39fhc943rf923n3h
|
||||
POSTGRES_USER=icarus_op_test
|
||||
POSTGRES_PASSWORD=password
|
||||
POSTGRES_DB=icarus_auth_test_db
|
||||
POSTGRES_HOST=auth_db
|
||||
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/${POSTGRES_DB}
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
/target
|
||||
Cargo.lock
|
||||
.env
|
||||
.env.docker
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "icarus_auth"
|
||||
version = "0.3.4"
|
||||
version = "0.3.6"
|
||||
edition = "2024"
|
||||
rust-version = "1.86"
|
||||
|
||||
|
11
Dockerfile
11
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 ./.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)
|
||||
@@ -68,4 +73,4 @@ EXPOSE 3000
|
||||
|
||||
# Set the command to run your application
|
||||
# Ensure this matches the binary name copied above
|
||||
CMD ["./icarus_auth"]
|
||||
CMD ["./icarus_auth"]
|
||||
|
@@ -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
|
||||
|
23
src/lib.rs
23
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 {
|
||||
#[cfg(debug_assertions)] // Example: Only load .env in debug builds
|
||||
dotenvy::dotenv().ok();
|
||||
env::var(keys::DBURL).expect(keys::error::ERROR)
|
||||
// dotenvy::dotenv().ok();
|
||||
// dotenvy::from_filename(".env").ok();
|
||||
// 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) {
|
||||
|
@@ -74,6 +74,7 @@ mod tests {
|
||||
pub const LIMIT: usize = 6;
|
||||
|
||||
pub async fn get_pool() -> Result<sqlx::PgPool, sqlx::Error> {
|
||||
dotenvy::dotenv().ok(); // Load .env file if it exists
|
||||
let tm_db_url = std::env::var(keys::DBURL).expect("DATABASE_URL must be present");
|
||||
let tm_options = sqlx::postgres::PgConnectOptions::from_str(&tm_db_url).unwrap();
|
||||
sqlx::PgPool::connect_with(tm_options).await
|
||||
|
Reference in New Issue
Block a user