Add VPS reverse proxy services
This commit is contained in:
parent
782b3ef4bf
commit
5cc67b9347
2 changed files with 134 additions and 0 deletions
|
|
@ -1,7 +1,65 @@
|
||||||
{ config, pkgs, lib, ... }:
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# Universal container configuration
|
||||||
|
commonUID = "1000";
|
||||||
|
commonGID = "100";
|
||||||
|
systemTZ = config.time.timeZone;
|
||||||
|
in
|
||||||
{
|
{
|
||||||
# Container definitions for vps host
|
# Container definitions for vps host
|
||||||
virtualisation.oci-containers.containers = {
|
virtualisation.oci-containers.containers = {
|
||||||
|
# Static web server for homepage
|
||||||
|
homepage = {
|
||||||
|
image = "docker.io/nginx:alpine";
|
||||||
|
|
||||||
|
volumes = [
|
||||||
|
"/home/yanlin/www/homepage:/usr/share/nginx/html:ro"
|
||||||
|
"/home/yanlin/www/homepage-nginx.conf:/etc/nginx/conf.d/default.conf:ro"
|
||||||
|
];
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
"traefik.enable" = "true";
|
||||||
|
"traefik.http.routers.homepage.rule" = "Host(`www.yanlincs.com`)";
|
||||||
|
"traefik.http.routers.homepage.entrypoints" = "websecure";
|
||||||
|
"traefik.http.routers.homepage.tls" = "true";
|
||||||
|
"traefik.http.routers.homepage.tls.certresolver" = "cloudflare";
|
||||||
|
"traefik.http.routers.homepage.tls.domains[0].main" = "yanlincs.com";
|
||||||
|
"traefik.http.routers.homepage.tls.domains[0].sans[0]" = "*.yanlincs.com";
|
||||||
|
"traefik.http.services.homepage.loadbalancer.server.port" = "80";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraOptions = [
|
||||||
|
"--network=podman"
|
||||||
|
];
|
||||||
|
|
||||||
|
autoStart = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Static web server for blog
|
||||||
|
blog = {
|
||||||
|
image = "docker.io/nginx:alpine";
|
||||||
|
|
||||||
|
volumes = [
|
||||||
|
"/home/yanlin/www/blog:/usr/share/nginx/html:ro"
|
||||||
|
"/home/yanlin/www/blog-nginx.conf:/etc/nginx/conf.d/default.conf:ro"
|
||||||
|
];
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
"traefik.enable" = "true";
|
||||||
|
"traefik.http.routers.blog.rule" = "Host(`blog.yanlincs.com`)";
|
||||||
|
"traefik.http.routers.blog.entrypoints" = "websecure";
|
||||||
|
"traefik.http.routers.blog.tls" = "true";
|
||||||
|
"traefik.http.routers.blog.tls.certresolver" = "cloudflare";
|
||||||
|
"traefik.http.routers.blog.tls.domains[0].main" = "*.yanlincs.com";
|
||||||
|
"traefik.http.services.blog.loadbalancer.server.port" = "80";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraOptions = [
|
||||||
|
"--network=podman"
|
||||||
|
];
|
||||||
|
|
||||||
|
autoStart = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,84 @@
|
||||||
services.traefik.dynamicConfigOptions = {
|
services.traefik.dynamicConfigOptions = {
|
||||||
http = {
|
http = {
|
||||||
routers = {
|
routers = {
|
||||||
|
# Redirect from yanlincs.com to www.yanlincs.com
|
||||||
|
homepage-redirect = {
|
||||||
|
rule = "Host(`yanlincs.com`)";
|
||||||
|
entrypoints = "websecure";
|
||||||
|
service = "homepage-redirect";
|
||||||
|
middlewares = [ "homepage-redirect" ];
|
||||||
|
tls = {
|
||||||
|
certResolver = "cloudflare";
|
||||||
|
domains = [{
|
||||||
|
main = "yanlincs.com";
|
||||||
|
sans = [ "www.yanlincs.com" ];
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Photo service (Immich)
|
||||||
|
photo = {
|
||||||
|
rule = "Host(`photo.yanlincs.com`)";
|
||||||
|
entrypoints = "websecure";
|
||||||
|
service = "photo";
|
||||||
|
tls = {
|
||||||
|
certResolver = "cloudflare";
|
||||||
|
domains = [{
|
||||||
|
main = "*.yanlincs.com";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Cloud service (Nextcloud)
|
||||||
|
cloud = {
|
||||||
|
rule = "Host(`cloud.yanlincs.com`)";
|
||||||
|
entrypoints = "websecure";
|
||||||
|
service = "cloud";
|
||||||
|
tls = {
|
||||||
|
certResolver = "cloudflare";
|
||||||
|
domains = [{
|
||||||
|
main = "*.yanlincs.com";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
services = {
|
services = {
|
||||||
|
# Redirect service
|
||||||
|
homepage-redirect = {
|
||||||
|
loadBalancer = {
|
||||||
|
servers = [{
|
||||||
|
url = "http://localhost:1"; # Dummy backend, won't be used due to redirect
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Photo service backend
|
||||||
|
photo = {
|
||||||
|
loadBalancer = {
|
||||||
|
servers = [{
|
||||||
|
url = "http://hs.yanlincs.com:5000";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Cloud service backend
|
||||||
|
cloud = {
|
||||||
|
loadBalancer = {
|
||||||
|
servers = [{
|
||||||
|
url = "http://hs.yanlincs.com:5001";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
middlewares = {
|
||||||
|
# Redirect middleware
|
||||||
|
homepage-redirect = {
|
||||||
|
redirectRegex = {
|
||||||
|
regex = "^https://yanlincs\\.com/(.*)";
|
||||||
|
replacement = "https://www.yanlincs.com/$1";
|
||||||
|
permanent = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue