1 extern crate lemmy_server;
3 extern crate diesel_migrations;
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::*;
18 async fn main() -> io::Result<()> {
20 let settings = Settings::get();
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)
27 .unwrap_or_else(|_| panic!("Error connecting to {}", settings.get_database_url()));
29 // Run the migrations from code
30 let conn = pool.get().unwrap();
31 embedded_migrations::run(&conn).unwrap();
32 run_advanced_migrations(&conn).unwrap();
34 // Set up websocket server
35 let server = ChatServer::startup(pool.clone()).start();
38 "Starting http server at {}:{}",
39 settings.bind, settings.port
42 // Create Http server with websocket support
43 HttpServer::new(move || {
45 .wrap(middleware::Logger::default())
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)
57 .service(actix_files::Files::new(
59 settings.front_end_dir.to_owned(),
61 .service(actix_files::Files::new(
63 settings.front_end_dir.to_owned() + "/documentation",
66 .bind((settings.bind, settings.port))?