about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile34
-rw-r--r--docker-compose.yml26
-rw-r--r--server/src/main.rs9
3 files changed, 53 insertions, 16 deletions
diff --git a/Dockerfile b/Dockerfile
index b9a177a..e003845 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,14 +1,26 @@
-FROM ekidd/rust-musl-builder:latest AS rust
-ADD --chown=rust:rust . ./
+FROM ekidd/rust-musl-builder:latest AS server-cache
+WORKDIR /server
+COPY server/Cargo.* ./
+RUN sudo mkdir src
+RUN echo "fn main() {}" | sudo dd of=src/main.rs
+RUN sudo chown rust:rust .
 RUN cargo build --release
+RUN rm -f target/x86_64-unknown-linux-musl/release/deps/shorest*
 
-FROM node:alpine
-RUN apk --no-cache add ca-certificates
-COPY --from=rust \
-    /home/rust/ \
-    /main
-WORKDIR /main/src
-RUN cd ./client && yarn install && yarn build;
-RUN mv ./target/x86_64-unknown-linux-musl/release/shorest ./shorest
-CMD ./shorest
+FROM node:alpine as client
+WORKDIR /client
+COPY client/package*.json ./
+RUN yarn install
+COPY client ./
+RUN yarn build
+
+FROM server-cache as server
+WORKDIR /server
+COPY server/src src
+RUN cargo build --release
 
+FROM alpine:latest
+WORKDIR /shorest
+COPY --from=client /client/build client/
+COPY --from=server /server/target/x86_64-unknown-linux-musl/release/shorest shorest
+CMD ./shorest
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..5195255
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,26 @@
+version: "3.8"
+services:
+  server:
+    build:
+      context: .
+    container_name: shorest-server
+    ports:
+      - "127.0.0.1:${PORT}:${PORT}"
+    depends_on:
+      - postgres
+    links:
+      - postgres:postgres
+    environment:
+      - PORT
+      - POSTGRES_PASSWORD
+  postgres:
+    image: "postgres:alpine"
+    container_name: shorest-postgres
+    volumes:
+      - database:/var/lib/postgresql/data
+    environment:
+      - POSTGRES_DB=shorest
+      - POSTGRES_PASSWORD
+
+volumes:
+  database:
diff --git a/server/src/main.rs b/server/src/main.rs
index 6ca2fe3..92df222 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -11,12 +11,12 @@ use types::*;
 use actix_web::{middleware, web, HttpServer, App, HttpResponse, Result, HttpRequest};
 use actix_web::web::{Json, Path, Data};
 use diesel::{PgConnection, RunQueryDsl, QueryDsl, ExpressionMethods, QueryResult};
-use dotenv::dotenv;
 use diesel::r2d2::{ConnectionManager, Pool};
 use actix_files::{Files, NamedFile};
 
 fn establish_connection() -> Pool<ConnectionManager<PgConnection>> {
-    let database_url = std::env::var("DATABASE_URL").expect("Cannot find DATABASE_URL. Check .env file.");
+    let password = std::env::var("POSTGRES_PASSWORD").expect("Cannot find POSTGRES_PASSWORD in environment.");
+    let database_url = format!("postgresql://postgres:{}@postgres/shorest", password);
     let manager = ConnectionManager::<PgConnection>::new(database_url);
     Pool::builder().max_size(4).build(manager).expect("Failed to create pool.")
 }
@@ -70,7 +70,7 @@ fn add_to_database_safely(mut hash: String, user_url: String, connection: &PgCon
 }
 
 async fn root(req: HttpRequest) -> HttpResponse {
-    NamedFile::open("./client/build/index.html").unwrap().into_response(&req).unwrap()
+    NamedFile::open("./client/index.html").unwrap().into_response(&req).unwrap()
 }
 
 async fn shorten(params: Json<UserData>, state: Data<PoolState>) -> HttpResponse {
@@ -94,7 +94,6 @@ async fn redirect(info: Path<String>, state: Data<PoolState>) -> HttpResponse {
 
 #[actix_rt::main]
 async fn main() -> std::io::Result<()> {
-    dotenv().ok();
     std::env::set_var("RUST_LOG", "actix_web=info");
     env_logger::init();
 
@@ -118,7 +117,7 @@ async fn main() -> std::io::Result<()> {
                     .route(web::get().to(redirect))
             )
             .service(
-                Files::new("/client/", "./client/build/")
+                Files::new("/client/", "./client/")
             )
     })
         .bind(("0.0.0.0", port))?