Pulumi code for my server setup
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Change domain to subdomain, add networkMode to args, and comment out network creation, add mkvtoolnix separately from mkv-muxing-batch-gui, update image digest check

+43 -27
+24 -11
src/index.ts
··· 130 130 webPort: 32400, 131 131 envs: ["VERSION=latest"], 132 132 mounts: [dockerConfMount("plex"), dataMount, gitMount], 133 - extraContainerOptions: { 134 - networkMode: pulumi.interpolate`container:${wireguardService.container.id}`, 135 - }, 133 + networkMode: pulumi.interpolate`container:${wireguardService.container.id}`, 136 134 }); 137 135 138 136 const overseerrService = await ContainerService.create("overseerr", { 139 137 webPort: 5055, 140 - domain: "request", 138 + subdomain: "request", 141 139 mounts: [dockerConfMount("overseerr"), dataMount], 142 140 }); 143 141 ··· 188 186 const librespeedService = await ContainerService.create("librespeed", { 189 187 image: "ghcr.io/librespeed/speedtest", 190 188 webPort: 80, 191 - domain: "speedtest", 189 + subdomain: "speedtest", 192 190 envs: [ 193 191 "TITLE=Speedtest | Bas", 194 192 "TELEMETRY=true", ··· 204 202 await ContainerService.create(`caddy${subdomain}`, { 205 203 image: "caddy", 206 204 webPort: 80, 207 - domain: subdomain, 205 + subdomain: subdomain, 208 206 command: [ 209 207 "caddy", 210 208 "file-server", ··· 241 239 242 240 const theloungeService = await ContainerService.create("thelounge", { 243 241 webPort: 9000, 244 - domain: "irc", 242 + subdomain: "irc", 245 243 mounts: [dockerConfMount("thelounge")], 246 244 }); 247 245 ··· 296 294 }); 297 295 298 296 const resilioSyncService = await ContainerService.create("resilio-sync", { 299 - domain: "sync", 297 + subdomain: "sync", 300 298 webPort: 8888, 301 299 ports: [55555], 302 300 mounts: [ ··· 314 312 315 313 const syncthingService = await ContainerService.create("syncthing", { 316 314 webPort: 8384, 317 - domain: "syncthing", 315 + subdomain: "syncthing", 318 316 ports: [22000, 21027], 319 317 mounts: [ 320 318 dockerConfMount("syncthing"), ··· 330 328 }); 331 329 332 330 const mkvtoolnixService = await ContainerService.create("mkvtoolnix", { 331 + image: "jlesage/mkvtoolnix", 332 + webPort: 5800, 333 + mounts: [dockerConfMount("mkvtoolnix"), dataMount], 334 + envs: [ 335 + `VNC_PASSWORD=${getEnv("VNC_PASSWORD")}`, 336 + "DARK_MODE=true", 337 + "APP_NICENESS=10", 338 + "KEEP_APP_RUNNING=1", 339 + "ENABLE_CJK_FONT=1", 340 + ], 341 + }); 342 + 343 + const mkvMuxingBatchService = await ContainerService.create("mkv-batch", { 333 344 image: "jlesage/mkv-muxing-batch-gui", 334 345 webPort: 5800, 335 - mounts: [dockerConfMount("mkvtoolnix"), dataMount], 346 + subdomain: "mkv-batch", 347 + mounts: [dockerConfMount("mkv-batch"), dataMount], 336 348 envs: [ 337 - `VNC_PASSWORD=${getEnv("MKVTOOLNIX_VNC_PASSWORD")}`, 349 + `VNC_PASSWORD=${getEnv("VNC_PASSWORD")}`, 338 350 "DARK_MODE=true", 339 351 "APP_NICENESS=10", 340 352 "KEEP_APP_RUNNING=1", ··· 384 396 readOnly: true, 385 397 }, 386 398 ], 399 + envs: ["COLLECTOR_CRON_SCHEDULE=0 * * * *"], 387 400 extraContainerOptions: { 388 401 capabilities: { 389 402 adds: ["SYS_RAWIO", "SYS_ADMIN"],
+19 -16
src/service.ts
··· 89 89 const tags = await response.json(); 90 90 const digest = (tags?.manifests ?? tags?.images)?.find( 91 91 (image: any) => 92 - image.architecture === "amd64" || 93 - image.platform?.architecture === "amd64", 92 + (image.os === "linux" || !image.os) && 93 + (image.architecture === "amd64" || 94 + image.platform?.architecture === "amd64"), 94 95 )?.digest; 95 96 96 97 if (!digest) { ··· 111 112 type Args = AtLeast< 112 113 { 113 114 image: string; 114 - domain: string; 115 + subdomain: string; 115 116 hostRule: string; 116 117 webPort: number; 117 118 command: string[]; ··· 121 122 mounts: docker.types.input.ContainerMount[]; 122 123 volumes: docker.types.input.ContainerVolume[]; 123 124 ports: (`${number}:${number}` | number)[]; 125 + networkMode: pulumi.Input<string>; 124 126 aliases: string[]; 125 127 extraContainerOptions: Partial<docker.ContainerArgs>; 126 128 }, 127 129 "image" 128 130 >; 129 131 130 - const network = new docker.Network("haring", { 131 - name: "haring", 132 - driver: "bridge", 133 - }); 132 + // const network = new docker.Network("haring", { 133 + // name: "haring", 134 + // driver: "bridge", 135 + // }); 134 136 135 137 export class ContainerService extends pulumi.ComponentResource { 136 138 public container: docker.Container; ··· 172 174 let host; 173 175 174 176 if (args.webPort) { 175 - host = args.hostRule || `${args.domain || name}.bas.sh`; 177 + host = args.hostRule || `${args.subdomain || name}.bas.sh`; 176 178 177 179 labels = { 178 180 "traefik.enable": "true", ··· 211 213 ports: convertPorts(args.ports), 212 214 mounts: args.mounts, 213 215 volumes: args.volumes, 214 - networksAdvanced: [ 215 - { 216 - name: network.name, 217 - ...(args.aliases && { 218 - aliases: args.aliases, 219 - }), 220 - }, 221 - ], 216 + networkMode: args.networkMode || "bridge", 217 + // networksAdvanced: [ 218 + // { 219 + // name: network.name, 220 + // ...(args.aliases && { 221 + // aliases: args.aliases, 222 + // }), 223 + // }, 224 + // ], 222 225 ...args.extraContainerOptions, 223 226 }, 224 227 {