Allow customizing the listening address and port

This commit is contained in:
Armaël Guéneau 2025-01-02 12:13:27 +01:00
parent 7ac6fb2a37
commit 00cb127953
2 changed files with 22 additions and 3 deletions

View file

@ -30,6 +30,8 @@ Forgery reads the following environment variables:
- `STORAGE_BACKEND`: either `local` (default) or `s3`. Chose `local` to store - `STORAGE_BACKEND`: either `local` (default) or `s3`. Chose `local` to store
the application state to local files, or `s3` to store them in S3-compatible the application state to local files, or `s3` to store them in S3-compatible
storage (see below for corresponding configuration variables). storage (see below for corresponding configuration variables).
- `LISTEN_ADDR`: address on which the webserver listens (default: `0.0.0.0`)
- `LISTEN_PORT`: port on which the webserver listens (default: `8080`)
Environment variables read when `ACTUALLY_BAN_USERS=true`: Environment variables read when `ACTUALLY_BAN_USERS=true`:
- `SMTP_ADDRESS`: address of the SMTP relay used to send email notifications - `SMTP_ADDRESS`: address of the SMTP relay used to send email notifications
@ -57,5 +59,4 @@ Environment variables read when `STORAGE_BACKEND=s3`:
could not be locked, but delete the account after the grace period even if could not be locked, but delete the account after the grace period even if
the email could not be sent…) the email could not be sent…)
- auth: add support for connecting to the forge using oauth? - auth: add support for connecting to the forge using oauth?
- allow customizing the address & port on which to listen
- improve error handling - improve error handling

View file

@ -57,6 +57,8 @@ pub struct Config {
pub org_name: String, pub org_name: String,
pub admin_contact_email: String, pub admin_contact_email: String,
pub actually_ban: ActuallyBan, pub actually_ban: ActuallyBan,
pub listen_addr: String,
pub listen_port: u16,
} }
impl Config { impl Config {
@ -81,11 +83,21 @@ impl Config {
Err(_) => ActuallyBan::No, Err(_) => ActuallyBan::No,
}; };
let listen_addr = std::env::var("LISTEN_ADDR").unwrap_or(String::from("0.0.0.0"));
let listen_port: u16 =
match std::env::var("LISTEN_PORT").map(|s| u16::from_str_radix(&s, 10)) {
Ok(Err(e)) => return Err(anyhow!("LISTEN_PORT: invalid value ({})", e)),
Ok(Ok(p)) => p,
Err(_) => 8080,
};
Ok(Config { Ok(Config {
forge_url: Url::parse(&forge_url_s).context("parsing FORGEJO_URL")?, forge_url: Url::parse(&forge_url_s).context("parsing FORGEJO_URL")?,
org_name, org_name,
admin_contact_email, admin_contact_email,
actually_ban, actually_ban,
listen_addr,
listen_port,
}) })
} }
} }
@ -479,7 +491,10 @@ async fn main() -> anyhow::Result<()> {
.spawn(async move { workers::lock_and_notify_users(config, storage, forge, db).await }) .spawn(async move { workers::lock_and_notify_users(config, storage, forge, db).await })
}; };
println!("Listening on http://127.0.0.1:8080"); println!(
"Listening on http://{}:{}",
config.listen_addr, config.listen_port
);
let app = Router::new() let app = Router::new()
.route("/", get(get_index).post(post_classified_index)) .route("/", get(get_index).post(post_classified_index))
@ -488,7 +503,10 @@ async fn main() -> anyhow::Result<()> {
.with_state(shared_state); .with_state(shared_state);
let webserver = { let webserver = {
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap(); let listener =
tokio::net::TcpListener::bind((config.listen_addr.clone(), config.listen_port))
.await
.unwrap();
axum::serve(listener, app) axum::serve(listener, app)
}; };