POSTS
Rust, Dreamhost shared hosting, and FastCGI
I’ve been playing with Rust recently, and one of the things I wanted to do with it is get it running on Dreamhost’s shared hosting. After a bit of monkeying around, I got a little demo working with FastCGI.
Why shared hosting?
If you’re wondering why I sometimes use Dreamhost shared hosting instead of VPS/Linode/AWS, the answer is that it’s incredibly cheap for throwaway projects and websites that need a level of availability a Raspberry Pi at home might not be able to deliver.
Start cheap, and move once the project has outgrown what’s available. Use the money you save on coffee and a nicer keyboard ;-)
FastCGI Go Go Go!
As of this writing the shared hosting Passenger support doesn’t have Rust support, but it does have FastCGI, and Rust has FastCGI support in a crate already.
[package]
name = "fcgi-test"
version = "0.1.0"
authors = ["You <you@example.com>"]
edition = "2018"
[dependencies]
fastcgi = "1.0.0"
You can whip up a quick program easily enough, too:
extern crate fastcgi;
use std::io::Write;
use std::time::SystemTime;
fn main() {
fastcgi::run(|mut req| {
write!(
&mut req.stdout(),
"Content-Type: text/plain\n\n{:?}",
SystemTime::now()
)
.unwrap_or(());
});
}
Once you’ve built your project’s executable, drop it in a public-facing
folder, give it an .fcgi
suffix (or do the appropriate Apache
configuration if this needs to look nice), and make sure that the file
is executable.
chmod +x fcgi-test.fcgi
If you aren’t using Linux
Dreamhost shared hosting uses Debian, so if you aren’t using Linux already you’ll need to set up a cross-compilation toolchain. On my Mac, setting up the toolchain was fairly straight-forward with Homebrew.
# This installs the Linux target to your toolchain
rustup target add x86_64-unknown-linux-musl
# Install the binary utilities to make ELF stuff on Mac
brew install x86_64-elf-binutils
Then I added the following to my project’s .cargo/config
file
[build]
target = "x86_64-unknown-linux-musl"
[target.x86_64-unknown-linux-musl]
linker = "x86_64-elf-ld"