feat: deployment (#46)
This commit is contained in:
		
							
								
								
									
										85
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										85
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @@ -687,6 +687,17 @@ dependencies = [ | |||||||
|  "syn 2.0.74", |  "syn 2.0.74", | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "diesel_migrations" | ||||||
|  | version = "2.2.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" | ||||||
|  | dependencies = [ | ||||||
|  |  "diesel", | ||||||
|  |  "migrations_internals", | ||||||
|  |  "migrations_macros", | ||||||
|  | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "diesel_table_macro_syntax" | name = "diesel_table_macro_syntax" | ||||||
| version = "0.2.0" | version = "0.2.0" | ||||||
| @@ -2028,6 +2039,27 @@ version = "2.7.4" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "migrations_internals" | ||||||
|  | version = "2.2.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  |  "toml", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "migrations_macros" | ||||||
|  | version = "2.2.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" | ||||||
|  | dependencies = [ | ||||||
|  |  "migrations_internals", | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "mime" | name = "mime" | ||||||
| version = "0.3.17" | version = "0.3.17" | ||||||
| @@ -2575,6 +2607,15 @@ dependencies = [ | |||||||
|  "syn 2.0.74", |  "syn 2.0.74", | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "serde_spanned" | ||||||
|  | version = "0.6.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "serde_urlencoded" | name = "serde_urlencoded" | ||||||
| version = "0.7.1" | version = "0.7.1" | ||||||
| @@ -2944,6 +2985,7 @@ dependencies = [ | |||||||
|  "async-std", |  "async-std", | ||||||
|  "chrono", |  "chrono", | ||||||
|  "diesel", |  "diesel", | ||||||
|  |  "diesel_migrations", | ||||||
|  "dioxus", |  "dioxus", | ||||||
|  "dioxus-logger", |  "dioxus-logger", | ||||||
|  "dioxus-query", |  "dioxus-query", | ||||||
| @@ -3028,6 +3070,40 @@ dependencies = [ | |||||||
|  "tokio", |  "tokio", | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "toml" | ||||||
|  | version = "0.8.19" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  |  "serde_spanned", | ||||||
|  |  "toml_datetime", | ||||||
|  |  "toml_edit", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "toml_datetime" | ||||||
|  | version = "0.6.8" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" | ||||||
|  | dependencies = [ | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "toml_edit" | ||||||
|  | version = "0.22.20" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" | ||||||
|  | dependencies = [ | ||||||
|  |  "indexmap 2.4.0", | ||||||
|  |  "serde", | ||||||
|  |  "serde_spanned", | ||||||
|  |  "toml_datetime", | ||||||
|  |  "winnow", | ||||||
|  | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "tower" | name = "tower" | ||||||
| version = "0.4.13" | version = "0.4.13" | ||||||
| @@ -3625,6 +3701,15 @@ version = "0.52.6" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "winnow" | ||||||
|  | version = "0.6.18" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" | ||||||
|  | dependencies = [ | ||||||
|  |  "memchr", | ||||||
|  | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "xxhash-rust" | name = "xxhash-rust" | ||||||
| version = "0.8.12" | version = "0.8.12" | ||||||
|   | |||||||
| @@ -27,6 +27,7 @@ time = "0.3.36" | |||||||
| dioxus-sdk = { version = "0.5.0", features = ["i18n"] } | dioxus-sdk = { version = "0.5.0", features = ["i18n"] } | ||||||
| unic-langid-impl = "0.9.5" | unic-langid-impl = "0.9.5" | ||||||
| voca_rs = "1.15.2" | voca_rs = "1.15.2" | ||||||
|  | diesel_migrations = { version = "2.2.0", features = ["postgres"] } | ||||||
|  |  | ||||||
| [features] | [features] | ||||||
| default = [] | default = [] | ||||||
|   | |||||||
| @@ -0,0 +1,27 @@ | |||||||
|  | services: | ||||||
|  |   app: | ||||||
|  |     build: | ||||||
|  |       dockerfile: docker/prod/app/Dockerfile | ||||||
|  |     networks: | ||||||
|  |       - default | ||||||
|  |       - web-server-network | ||||||
|  |     restart: always | ||||||
|  |     depends_on: [ "db" ] | ||||||
|  |  | ||||||
|  |   db: | ||||||
|  |     image: postgres:16.4-bookworm | ||||||
|  |     volumes: [ "db_data:/var/lib/postgresql/data" ] | ||||||
|  |     networks: | ||||||
|  |       - default | ||||||
|  |     environment: | ||||||
|  |       POSTGRES_DB: todo_baggins | ||||||
|  |       POSTGRES_USER: app | ||||||
|  |       POSTGRES_PASSWORD: app | ||||||
|  |     restart: always | ||||||
|  |  | ||||||
|  | volumes: | ||||||
|  |   db_data: | ||||||
|  |  | ||||||
|  | networks: | ||||||
|  |   web-server-network: | ||||||
|  |     external: true | ||||||
|   | |||||||
| @@ -1,5 +1,3 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  |  | ||||||
| diesel migration run |  | ||||||
|  |  | ||||||
| supervisord -c /etc/supervisor/conf.d/supervisord.conf | supervisord -c /etc/supervisor/conf.d/supervisord.conf | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								docker/prod/app/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								docker/prod/app/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | FROM rust:1.80-bookworm AS builder | ||||||
|  |  | ||||||
|  | RUN rustup target add wasm32-unknown-unknown && \ | ||||||
|  |     cargo install dioxus-cli diesel_cli && \ | ||||||
|  |     apt-get update && apt-get install -y nodejs=18.19.0+dfsg-6~deb12u2 npm=9.2.0~ds1-1 supervisor=4.2.5-1 | ||||||
|  |  | ||||||
|  | COPY . /srv/app | ||||||
|  | WORKDIR /srv/app | ||||||
|  |  | ||||||
|  | RUN npm install && \ | ||||||
|  |     npm run build && \ | ||||||
|  |     dx build --release | ||||||
|  |  | ||||||
|  | FROM debian:bookworm-slim AS runner | ||||||
|  |  | ||||||
|  | RUN apt-get update && apt-get install -y libpq5=15.8-0+deb12u1 | ||||||
|  |  | ||||||
|  | COPY --from=builder /srv/app/dist /srv/app/dist | ||||||
|  | COPY .env /srv/app/.env | ||||||
|  |  | ||||||
|  | RUN chown -R 1000:1000 /srv/app | ||||||
|  |  | ||||||
|  | WORKDIR /srv/app | ||||||
|  |  | ||||||
|  | HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1 | ||||||
|  |  | ||||||
|  | USER 1000:1000 | ||||||
|  |  | ||||||
|  | CMD ["./dist/todo-baggins"] | ||||||
							
								
								
									
										11
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/main.rs
									
									
									
									
									
								
							| @@ -7,18 +7,23 @@ mod server; | |||||||
| mod query; | mod query; | ||||||
| mod utils; | mod utils; | ||||||
| mod internationalization; | mod internationalization; | ||||||
|  | mod migrations; | ||||||
|  |  | ||||||
| use components::app::App; | use components::app::App; | ||||||
| use dioxus::prelude::*; | use dioxus::prelude::*; | ||||||
| use dioxus_logger::tracing::{info, Level}; | use dioxus_logger::tracing::{info, Level}; | ||||||
|  |  | ||||||
| fn main() { | fn main() { | ||||||
|     dioxus_logger::init(Level::INFO).expect("failed to initialize logger"); |     dioxus_logger::init(Level::INFO).expect("Failed to initialize the logger."); | ||||||
|     info!("starting app"); |  | ||||||
|  |  | ||||||
|  |     info!("Running migrations."); | ||||||
|  |     server_only!( | ||||||
|  |         migrations::run_migrations().expect("Failed to run migrations."); | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     info!("Starting app."); | ||||||
|     let cfg = server_only!( |     let cfg = server_only!( | ||||||
|         dioxus::fullstack::Config::new().addr(std::net::SocketAddr::from(([0, 0, 0, 0], 8000))) |         dioxus::fullstack::Config::new().addr(std::net::SocketAddr::from(([0, 0, 0, 0], 8000))) | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     LaunchBuilder::fullstack().with_cfg(cfg).launch(App); |     LaunchBuilder::fullstack().with_cfg(cfg).launch(App); | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								src/migrations/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/migrations/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; | ||||||
|  | use std::error::Error; | ||||||
|  |  | ||||||
|  | const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations"); | ||||||
|  |  | ||||||
|  | pub(crate) fn run_migrations() -> Result<(), Box<dyn Error + Send + Sync + 'static>> { | ||||||
|  |     let mut connection = crate::server::database_connection::establish_database_connection()?; | ||||||
|  |  | ||||||
|  |     connection.run_pending_migrations(MIGRATIONS)?; | ||||||
|  |  | ||||||
|  |     Ok(()) | ||||||
|  | } | ||||||
| @@ -1,4 +1,4 @@ | |||||||
| mod database_connection; | pub(crate) mod database_connection; | ||||||
| pub(crate) mod projects; | pub(crate) mod projects; | ||||||
| pub(crate) mod tasks; | pub(crate) mod tasks; | ||||||
| pub(crate) mod subtasks; | pub(crate) mod subtasks; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Matouš Volf
					Matouš Volf