Deploy Rust thế nào ?
Rust
27
deploy
2
White

Giang Nguyen viết ngày 25/03/2017

Hôm nay mình viết một demo nhỏ về deploy một rust project bằng Systemd

1. Start project

Khơi tạo một server bằng cargo

cargo new --bin server

Server này mình sẽ dùng hyper bản mới nhất đông nghĩa với nó đã support tokio rồi nhé. Tokio là một cái tên khá hot trong những tháng vừa qua của Rust :v.

Edit lại file Cargo.toml

[package]
name = "server"
version = "0.1.0"
authors = ["Giang Nguyen <hngnaig@gmail.com>"]

[dependencies]
redis = "0.5.3"
hyper = { git="https://github.com/hyperium/hyper", brand="master" }
futures = "0.1"

Implement một Service mới

extern crate futures;
extern crate hyper;

use self::hyper::server::{Request, Response, Http, Service};
use self::hyper::error::Error;
use self::hyper::status::StatusCode;
use self::hyper::header::{ContentType, ContentLength};

use self::futures::future;

const BODY: &'static str = "Hello!, world";

struct Server;

impl Service for Server {
    type Request = Request;
    type Response = Response;
    type Error = Error;
    type Future = future::FutureResult<Response, Error>;
    fn call(&self, req: Request) -> Self::Future {
        println!("{:?}", req);
        future::ok(Response::new()
            .with_status(StatusCode::Ok)
            .with_header(ContentType::plaintext())
            .with_header(ContentLength(BODY.len() as u64))
            .with_body(BODY))
    }
}

pub fn run() {
    let address = "127.0.0.1:3000".parse().unwrap();
    let server = Http::new().bind(&address, || Ok(Server)).unwrap();
    server.run().unwrap();
}

không được dùng unwrap đối với production, nhưng ở đây mình test nên cố ý cho nó panic

main.rs

mod server;

fn main() {
    server::run();
}

Server của ta được start với địa chỉ 127.0.0.1:3000 nhưng làm thế nào để cho nó chạy daemon. Như nodejs thì dùng pm2, đối với loại này chúng ta dùng gì được hiện tại mình thấy có cách là dùng systemd.

2. Setup systemd

Tạo mới systemd

sudo vi /etc/systemd/system/rust.service
[Unit]
Description=Server Rust

[Service]
Type=simple
ExecStart=/path/server
WorkingDirectory=/projects/server

User=nobody
Group=nogroup

# Allow many incoming connections
LimitNOFILE=infinity

# Allow core dumps for debugging
LimitCORE=infinity

StandardInput=null
StandardOutput=syslog
StandardError=syslog
Restart=always

[Install]
WantedBy=multi-user.target

Install service

sudo systemctl daemon reload

Active service

sudo systemctl enable rust

Vì nó là service nên bạn có thể dùng command service để quản lý xem status, enable hoặc disable service đó.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Giang Nguyen

20 bài viết.
34 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
30 5
(Ảnh) Hai ngày nay mình đã tìm hiểu về Amazon S3, Cloudfront và Letsencrypt để xây dựng 2 trang web static, thứ nhất là trang chủ của (Link) và t...
Giang Nguyen viết hơn 1 năm trước
30 5
White
9 0
Đôi dòng về ID3 (Ảnh) Nếu bạn nào chưa biết thì có thể đọc phần này, hoặc biết rồi thì có thể next tới phần kế tiếp nhé. 1. Giới thiệu Như hì...
Giang Nguyen viết hơn 1 năm trước
9 0
White
8 0
Type Result Type trên dùng để làm gì? Result được dùng cho những trường hợp chúng ta muốn return lại một giá trị nào đó (Ok) hoặc propagating erro...
Giang Nguyen viết hơn 1 năm trước
8 0
Bài viết liên quan
White
3 3
Hôm nay tự viết lại cái note này về quá trình học Rust, xem như là tự giúp mình nhớ sâu và rõ hơn về Rust. Note này sẽ ngắn gọn hơn bản (Link). Sơ...
Giang Nguyen viết hơn 1 năm trước
3 3
White
0 0
fn plus_5(x: Option) i32 { x.unwrap_or(0) + 5 } fn main() { assert_eq(15, plus_5(Some(10))); } Compile không lỗi, thay đổi chút xíu nhỏ, ...
Giang Nguyen viết gần 2 năm trước
0 0
White
2 4
Cài đặt Rust trên Arch Linux Việc cài đặt Rust trên môi trường Arch Linux khá là đơn giản. pacman có sẵn gói (Link) và (Link), bạn có thể chọn các...
Huy Trần viết 1 năm trước
2 4
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
34 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!