]> Untitled Git - lemmy.git/blob - server/src/main.rs
Merge branch 'federation_add_fed_columns' of https://yerbamate.dev/dessalines/lemmy...
[lemmy.git] / server / src / main.rs
1 extern crate lemmy_server;
2 #[macro_use]
3 extern crate diesel_migrations;
4
5 use actix::prelude::*;
6 use actix_web::*;
7 use diesel::r2d2::{ConnectionManager, Pool};
8 use diesel::PgConnection;
9 use lemmy_server::db::code_migrations::run_advanced_migrations;
10 use lemmy_server::routes::{api, federation, feeds, index, nodeinfo, webfinger, websocket};
11 use lemmy_server::settings::Settings;
12 use lemmy_server::websocket::server::*;
13 use std::io;
14
15 embed_migrations!();
16
17 #[actix_rt::main]
18 async fn main() -> io::Result<()> {
19   env_logger::init();
20   let settings = Settings::get();
21
22   // Set up the r2d2 connection pool
23   let manager = ConnectionManager::<PgConnection>::new(&settings.get_database_url());
24   let pool = Pool::builder()
25     .max_size(settings.database.pool_size)
26     .build(manager)
27     .unwrap_or_else(|_| panic!("Error connecting to {}", settings.get_database_url()));
28
29   // Run the migrations from code
30   let conn = pool.get().unwrap();
31   embedded_migrations::run(&conn).unwrap();
32   run_advanced_migrations(&conn).unwrap();
33
34   // Set up websocket server
35   let server = ChatServer::startup(pool.clone()).start();
36
37   println!(
38     "Starting http server at {}:{}",
39     settings.bind, settings.port
40   );
41
42   // Create Http server with websocket support
43   HttpServer::new(move || {
44     App::new()
45       .wrap(middleware::Logger::default())
46       .data(pool.clone())
47       .data(server.clone())
48       // The routes
49       .configure(api::config)
50       .configure(federation::config)
51       .configure(feeds::config)
52       .configure(index::config)
53       .configure(nodeinfo::config)
54       .configure(webfinger::config)
55       .configure(websocket::config)
56       // static files
57       .service(actix_files::Files::new(
58         "/static",
59         settings.front_end_dir.to_owned(),
60       ))
61       .service(actix_files::Files::new(
62         "/docs",
63         settings.front_end_dir.to_owned() + "/documentation",
64       ))
65   })
66   .bind((settings.bind, settings.port))?
67   .run()
68   .await
69 }