feat: bootstrap actix web
This commit is contained in:
parent
5d636892a2
commit
5eca33e9f9
5 changed files with 3424 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
/target
|
/target
|
||||||
|
.env
|
||||||
|
|
3237
Cargo.lock
generated
3237
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
23
Cargo.toml
23
Cargo.toml
|
@ -3,4 +3,27 @@ name = "vanigam"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[workspace]
|
||||||
|
exclude = ["utils/db-migrations"] #, "utils/cache-bust"]
|
||||||
|
memebers = ["."]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
actix-identity = "0.7.1"
|
||||||
|
actix-rt = "2.9.0"
|
||||||
|
actix-session = { version = "0.9.0", features = ["cookie-session"] }
|
||||||
|
actix-web = "4.5.1"
|
||||||
|
async-trait = "0.1.80"
|
||||||
|
config = "0.14.0"
|
||||||
|
derive_more = "0.99.17"
|
||||||
|
log = "0.4.21"
|
||||||
|
mockall = { version = "0.12.1", features = ["nightly"] }
|
||||||
|
pretty_env_logger = "0.5.0"
|
||||||
|
rand = "0.8.5"
|
||||||
|
rust-embed = { version = "8.4.0", features = ["include-exclude"] }
|
||||||
|
serde = { version = "1.0.201", features = ["derive"] }
|
||||||
|
sqlx = { version = "0.7.4", features = ["runtime-tokio-rustls", "postgres", "time"] }
|
||||||
|
tera = "1.19.1"
|
||||||
|
time = { version = "0.3.36", features = ["serde"] }
|
||||||
|
tracing = { version = "0.1.40", features = ["log"] }
|
||||||
|
tracing-actix-web = "0.7.10"
|
||||||
|
url = { version = "2.5.0", features = ["serde"] }
|
||||||
|
|
107
Makefile
Normal file
107
Makefile
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
define deploy_dependencies ## deploy dependencies
|
||||||
|
@-docker create --name ${db} \
|
||||||
|
-e POSTGRES_PASSWORD=password \
|
||||||
|
-p 5432:5432 \
|
||||||
|
postgres
|
||||||
|
docker start ${db}
|
||||||
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define run_migrations ## run database migrations
|
||||||
|
cd utils/db-migrations/ && unset DATABASE_URL && cargo build
|
||||||
|
cd utils/db-migrations/ && cargo run
|
||||||
|
endef
|
||||||
|
|
||||||
|
#define cache_bust ## run cache_busting program
|
||||||
|
# npm run sass
|
||||||
|
# cd utils/cache-bust && cargo run
|
||||||
|
#endef
|
||||||
|
#
|
||||||
|
default: ## Debug build
|
||||||
|
# $(call cache_bust)
|
||||||
|
cargo run -- serve
|
||||||
|
#
|
||||||
|
#cache-bust: ## Run cache buster on static assets
|
||||||
|
# $(call cache_bust)
|
||||||
|
|
||||||
|
check: ## Check for syntax errors on all workspaces
|
||||||
|
cargo check --workspace --tests --all-features
|
||||||
|
#cd utils/cache-bust && cargo check --tests --all-features
|
||||||
|
|
||||||
|
clean: ## Clean all build artifacts and dependencies
|
||||||
|
@cargo clean
|
||||||
|
|
||||||
|
db.migrate: ## run migrations
|
||||||
|
$(call run_migrations)
|
||||||
|
|
||||||
|
db.sqlx.offline: ## prepare sqlx offline data
|
||||||
|
cargo sqlx prepare \
|
||||||
|
--database-url=${DATABASE_URL} -- \
|
||||||
|
--all-features
|
||||||
|
|
||||||
|
#dev-env: ## Download development dependencies
|
||||||
|
# npm install
|
||||||
|
# cargo fetch
|
||||||
|
|
||||||
|
doc: ## Prepare documentation
|
||||||
|
cargo doc --no-deps --workspace --all-features
|
||||||
|
|
||||||
|
docker.build: ## Build docker images
|
||||||
|
docker build \
|
||||||
|
-t libre-solutions/vanigam:master \
|
||||||
|
-t libre-solutions/vanigam:latest \
|
||||||
|
-t libre-solutions/vanigam:0.1.0 .
|
||||||
|
|
||||||
|
docker.publish: docker.build ## Build and publish docker images
|
||||||
|
docker push libre-solutions/vanigam:master
|
||||||
|
docker push libre-solutions/vanigam:latest
|
||||||
|
docker push libre-solutions/vanigam:0.1.0
|
||||||
|
|
||||||
|
|
||||||
|
env.db: ## Deploy dependencies
|
||||||
|
$(call deploy_dependencies)
|
||||||
|
sleep 5
|
||||||
|
$(call run_migrations)
|
||||||
|
|
||||||
|
env.db.recreate: ## Deploy dependencies from scratch
|
||||||
|
@-docker rm -f ${db}
|
||||||
|
$(call deploy_dependencies)
|
||||||
|
sleep 5
|
||||||
|
$(call run_migrations)
|
||||||
|
|
||||||
|
lint: ## Lint codebase
|
||||||
|
cargo fmt -v --all -- --emit files
|
||||||
|
cargo clippy --workspace --tests --all-features
|
||||||
|
|
||||||
|
#migrate: ## run migrations
|
||||||
|
# $(call cache_bust)
|
||||||
|
# unset DATABASE_URL && cargo build
|
||||||
|
# DATABASE_URL=${DATABASE_URL} cargo run -- migrate
|
||||||
|
|
||||||
|
release: ## Release build
|
||||||
|
#$(call cache_bust)
|
||||||
|
cargo build --release
|
||||||
|
|
||||||
|
run: default ## Run debug build
|
||||||
|
cargo run -- serve
|
||||||
|
|
||||||
|
#sqlx-offline-data: ## prepare sqlx offline data
|
||||||
|
# cargo sqlx prepare \
|
||||||
|
# --database-url=${DATABASE_URL} -- \
|
||||||
|
# --all-features
|
||||||
|
|
||||||
|
test: ## Run tests
|
||||||
|
#$(call cache_bust)
|
||||||
|
cargo test --all-features --no-fail-fast
|
||||||
|
|
||||||
|
#test.coverage.xml: ## Generate cobertura.xml test coverage
|
||||||
|
# #$(call cache_bust)
|
||||||
|
# cargo tarpaulin -t 1200 --out Xml
|
||||||
|
#
|
||||||
|
#test.coverage.html: ## Generate HTML code coverage
|
||||||
|
# $(call cache_bust)
|
||||||
|
# cargo tarpaulin -t 1200 --out Html
|
||||||
|
#
|
||||||
|
|
||||||
|
help: ## Prints help for targets with comments
|
||||||
|
@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-].*+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
59
src/main.rs
59
src/main.rs
|
@ -2,11 +2,64 @@
|
||||||
//
|
//
|
||||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
use actix_identity::IdentityMiddleware;
|
||||||
|
use actix_session::{storage::CookieSessionStore, SessionMiddleware};
|
||||||
|
use actix_web::{cookie::Key, middleware, App, HttpServer};
|
||||||
|
use db::migrate::RunMigrations;
|
||||||
|
|
||||||
mod billing;
|
mod billing;
|
||||||
|
mod identity;
|
||||||
mod inventory;
|
mod inventory;
|
||||||
mod ordering;
|
mod ordering;
|
||||||
mod identity;
|
mod settings;
|
||||||
|
mod db;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
fn main() {
|
|
||||||
println!("foo");
|
#[actix_web::main]
|
||||||
|
async fn main() {
|
||||||
|
let settings = settings::Settings::new().unwrap();
|
||||||
|
if env::var("RUST_LOG").is_err() {
|
||||||
|
env::set_var("RUST_LOG", &settings.log);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
// Settings::new() outputs logs, but since we are only setting up logger _after_ Settings is
|
||||||
|
// initialized, this dummy reinitialization will output logs.
|
||||||
|
settings::Settings::new().unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
pretty_env_logger::init();
|
||||||
|
|
||||||
|
let db = db::sqlx_postgres::Postgres::init(&settings.database.url).await;
|
||||||
|
db.migrate().await;
|
||||||
|
|
||||||
|
let secret_key = Key::from(settings.server.cookie_secret.as_bytes());
|
||||||
|
|
||||||
|
let socket_addr = settings.server.get_ip();
|
||||||
|
log::info!("Starting server at: {} {}", socket_addr, settings.server.domain);
|
||||||
|
HttpServer::new(move || {
|
||||||
|
App::new()
|
||||||
|
.wrap(IdentityMiddleware::default())
|
||||||
|
.wrap(tracing_actix_web::TracingLogger::default())
|
||||||
|
.wrap(middleware::Compress::default())
|
||||||
|
.app_data(actix_web::web::Data::new(settings.clone()))
|
||||||
|
.wrap(SessionMiddleware::new(
|
||||||
|
CookieSessionStore::default(),
|
||||||
|
secret_key.clone(),
|
||||||
|
))
|
||||||
|
.wrap(
|
||||||
|
middleware::DefaultHeaders::new().add(("Permissions-Policy", "interest-cohort=()")),
|
||||||
|
)
|
||||||
|
// .configure(auth::adapter::load_adapters(db.pool.clone(), &settings))
|
||||||
|
.configure(utils::random_string::GenerateRandomString::inject())
|
||||||
|
})
|
||||||
|
.bind(&socket_addr)
|
||||||
|
.unwrap()
|
||||||
|
.run()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue