Deploy
Here are the steps to get your app in production with HTTPS support.
Create the production folder
Create a "build" folder where you can put all your static assets and production files.
Here is an example of structure:
build/
├── js /
│ └── main.js
├── css/
│ └── main.css
├── img/
│ ├── logo-sm.png
│ └── logo-xl.png
└── mainINFO
Configure your asset builder (Vite.js, ...) to store the files inside the "build" folder.
Compile for production
First, add a prod directive to serve your app on port 9000:
module main
import khalyomede.mantis.http { create_app }
fn main() {
app := create_app(
port: $if prod { 9000 } $else { 80 }
// ...
)
app.serve() or { panic(err) }
}Run this command to build your HTTP app (main.v):
v -prod -obsfucate -compress -os linux -o build/main main.vINFO
Change the option -os linux with the target OS of your choice. See V documentation about cross compilation.
Production serveur (VPS)
Launch your server:
> ./main
2024-12-23T16:11:59.304636018Z [INFO] listening on 0.0.0.0:9000
2024-12-23T16:11:59.304667317Z [INFO] Serving requests with up to 1 workers (standalone mode)Then, we advice you use Nginx to serve your app. It will allow you to use certbot to setup an SSL ceritifcate (HTTPS).
WARNING
Make sure you own a domain name as getting an SSL certificate requires a valid domain name.
Here is a typical Nginx configuration:
server {
listen 80;
listen 443 default_server ssl;
server_name your-domain-name.com;
root /home/user/app; # Customize this folder where you put the content of the "build" folder.
# Custom access and error logs for this server
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log warn;
# Try static files first, then proxy to Mantis
location / {
try_files $uri @mantis;
expires 7d;
add_header Cache-Control "public, no-transform";
}
# Fallback location for Mantis
location @mantis {
proxy_pass http://localhost:9000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}