Update env handling and docs.

This commit is contained in:
Joe Ardent 2024-03-11 18:21:11 -07:00
parent eb3fe1a8a7
commit fdb2e1587b
5 changed files with 49 additions and 7 deletions

View file

@ -3,6 +3,7 @@ ADMIN_TOKEN=
STRIPE_TOKEN=
FORGEJO_URL=http://localhost:3000
DATABASE_URL=sqlite://queenie.db
DATABASE_FILE=file://queenie.db
MONTHLY_LINK=
ANNUAL_LINK=
LISTENING_ADDR=127.0.0.1

2
.gitignore vendored
View file

@ -1,4 +1,4 @@
/target
.env
*.env
*.db
*.db-*

View file

@ -19,9 +19,12 @@ sqlx db create ; sqlx migrate run
Run the server for development:
```
cargo run
cargo run -- -e .env
```
The `-e` (or `--env`) option tells Queenie where to find its environment configuration file; the
default is `/etc/forgejo/queenie.env`.
The assets used in Queen come from forgejo,
so you can use a local Caddyfile to serve both forgejo and `queen`
(assuming that forgejo is running on localhost:3000):
@ -43,3 +46,7 @@ Run caddy with:
```
caddy run --config Caddyfile
```
## Use in production
There's a sample systemd unit file, `queenie.service`.

16
queenie.service Normal file
View file

@ -0,0 +1,16 @@
[Unit]
Description=Queenie guards the kitten den.
After=syslog.target
After=network.target
[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/forgejo/
ExecStart=/var/lib/forgejo/bin/queenie --env /etc/forgejo/queenie.env
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target

View file

@ -30,8 +30,6 @@ async fn main() {
let pool = db().await;
sqlx::migrate!().run(&pool).await.unwrap();
// the core application, defining the routes and handlers
let app = Router::new()
.stripped_clone("/signup/", get(get_signup).post(post_signup))
@ -52,8 +50,14 @@ async fn main() {
// li'l helpers
//-************************************************************************
#[derive(Debug, Parser)]
#[clap(version, about)]
struct Cli {
#[clap(long, short)]
#[clap(
long,
short,
help = "Path to Queenie's environment config file",
default_value = "/etc/forgejo/queenie.env"
)]
pub env: OsString,
}
@ -69,13 +73,27 @@ fn init() {
}
async fn db() -> SqlitePool {
//let dbfile = std::env::var("DATABASE_URL").unwrap();
let dbfile = std::env::var("DATABASE_FILE").unwrap();
let opts = SqliteConnectOptions::new()
.foreign_keys(true)
.create_if_missing(true)
.journal_mode(sqlx::sqlite::SqliteJournalMode::Wal)
.filename(&dbfile)
.optimize_on_close(true, None);
SqlitePoolOptions::new().connect_with(opts).await.unwrap()
let pool = SqlitePoolOptions::new()
.connect_with(opts.clone())
.await
.unwrap();
sqlx::migrate!().run(&pool).await.unwrap();
let count = sqlx::query_scalar!("select count(*) from customers")
.fetch_one(&pool)
.await
.expect("could not get customer count from DB");
log::info!("Connected to DB, found {count} customers.");
pool
}
async fn mklistener() -> TcpListener {