[{"data":1,"prerenderedAt":2188},["ShallowReactive",2],{"navigation_docs_en":3,"-en-serveex-apps-vaultwarden-":377,"-en-serveex-apps-vaultwarden--surround":2183},[4,16,94,262,271,332],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":15},"About","i-noto-star","\u002Fen\u002Fabout","en\u002F1.about",[10],{"title":11,"path":12,"stem":13,"icon":14},"Welcome","\u002Fen\u002Fabout\u002Fwelcome","en\u002F1.about\u002F1.welcome","i-lucide-home",false,{"title":17,"icon":18,"path":19,"stem":20,"children":21,"page":15},"General","i-noto-open-book","\u002Fen\u002Fgeneral","en\u002F2.general",[22,26,44,58,76],{"title":17,"path":23,"stem":24,"icon":25},"\u002Fen\u002Fgeneral\u002Fsummary","en\u002F2.general\u002F1.summary","i-lucide-bookmark",{"title":27,"icon":28,"path":29,"stem":30,"children":31,"page":15},"Networking","i-lucide-network","\u002Fen\u002Fgeneral\u002Fnetworking","en\u002F2.general\u002F2.networking",[32,36,40],{"title":33,"path":34,"stem":35},"NAT & DHCP","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fnat","en\u002F2.general\u002F2.networking\u002F1.nat",{"title":37,"path":38,"stem":39},"DNS Zone","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fdns","en\u002F2.general\u002F2.networking\u002F2.dns",{"title":41,"path":42,"stem":43},"Samba","\u002Fen\u002Fgeneral\u002Fnetworking\u002Fsamba","en\u002F2.general\u002F2.networking\u002F3.samba",{"title":45,"icon":46,"path":47,"stem":48,"children":49,"page":15},"Storage","i-lucide-hard-drive","\u002Fen\u002Fgeneral\u002Fstorage","en\u002F2.general\u002F3.storage",[50,54],{"title":51,"path":52,"stem":53},"RAID","\u002Fen\u002Fgeneral\u002Fstorage\u002Fraid","en\u002F2.general\u002F3.storage\u002F1.raid",{"title":55,"path":56,"stem":57},"ZFS","\u002Fen\u002Fgeneral\u002Fstorage\u002Fzfs","en\u002F2.general\u002F3.storage\u002F2.zfs",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":15},"Hardware","i-lucide-server","\u002Fen\u002Fgeneral\u002Fhardware","en\u002F2.general\u002F4.hardware",[64,68,72],{"title":65,"path":66,"stem":67},"The Basics","\u002Fen\u002Fgeneral\u002Fhardware\u002Fbasics","en\u002F2.general\u002F4.hardware\u002F1.basics",{"title":69,"path":70,"stem":71},"Network","\u002Fen\u002Fgeneral\u002Fhardware\u002Fnetwork","en\u002F2.general\u002F4.hardware\u002F2.network",{"title":73,"path":74,"stem":75},"The ProloNAS","\u002Fen\u002Fgeneral\u002Fhardware\u002Fprolonas","en\u002F2.general\u002F4.hardware\u002F3.prolonas",{"title":77,"icon":78,"path":79,"stem":80,"children":81,"page":15},"Linux tips for dummies","i-lucide-terminal","\u002Fen\u002Fgeneral\u002Flinux","en\u002F2.general\u002F5.linux",[82,86,90],{"title":83,"path":84,"stem":85},"Command line basics","\u002Fen\u002Fgeneral\u002Flinux\u002Fcli-basics","en\u002F2.general\u002F5.linux\u002F1.cli-basics",{"title":87,"path":88,"stem":89},"Folders and partitions","\u002Fen\u002Fgeneral\u002Flinux\u002Ffilesystem","en\u002F2.general\u002F5.linux\u002F2.filesystem",{"title":91,"path":92,"stem":93},"Handy CLI tools","\u002Fen\u002Fgeneral\u002Flinux\u002Fhandy-tools","en\u002F2.general\u002F5.linux\u002F3.handy-tools",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":15},"Serveex","i-noto-microscope","\u002Fen\u002Fserveex","en\u002F3.serveex",[100,104,126,144,170,188,202,216,234,248],{"title":101,"path":102,"stem":103,"icon":25},"Introduction","\u002Fen\u002Fserveex\u002Fintroduction","en\u002F3.serveex\u002F1.introduction",{"title":105,"icon":106,"path":107,"stem":108,"children":109,"page":15},"Server core","i-lucide-server-cog","\u002Fen\u002Fserveex\u002Fcore","en\u002F3.serveex\u002F2.core",[110,114,118,122],{"title":111,"path":112,"stem":113},"Debian 13","\u002Fen\u002Fserveex\u002Fcore\u002Finstallation","en\u002F3.serveex\u002F2.core\u002F1.installation",{"title":115,"path":116,"stem":117},"Docker","\u002Fen\u002Fserveex\u002Fcore\u002Fdocker","en\u002F3.serveex\u002F2.core\u002F2.docker",{"title":119,"path":120,"stem":121},"Wireguard","\u002Fen\u002Fserveex\u002Fcore\u002Fwireguard","en\u002F3.serveex\u002F2.core\u002F3.wireguard",{"title":123,"path":124,"stem":125},"SWAG","\u002Fen\u002Fserveex\u002Fcore\u002Fswag","en\u002F3.serveex\u002F2.core\u002F4.swag",{"title":127,"icon":128,"path":129,"stem":130,"children":131,"page":15},"Security","i-lucide-shield","\u002Fen\u002Fserveex\u002Fsecurity","en\u002F3.serveex\u002F3.security",[132,136,140],{"title":133,"path":134,"stem":135},"Cloudflare Zero Trust","\u002Fen\u002Fserveex\u002Fsecurity\u002Fcloudflare","en\u002F3.serveex\u002F3.security\u002F2.cloudflare",{"title":137,"path":138,"stem":139},"TinyAuth","\u002Fen\u002Fserveex\u002Fsecurity\u002Ftinyauth","en\u002F3.serveex\u002F3.security\u002F3.tinyauth",{"title":141,"path":142,"stem":143},"Pocket ID","\u002Fen\u002Fserveex\u002Fsecurity\u002Fpocket-id","en\u002F3.serveex\u002F3.security\u002F4.pocket-id",{"title":145,"icon":146,"path":147,"stem":148,"children":149,"page":15},"Monitoring","i-lucide-chart-no-axes-column","\u002Fen\u002Fserveex\u002Fmonitoring","en\u002F3.serveex\u002F4.monitoring",[150,154,158,162,166],{"title":151,"path":152,"stem":153},"Uptime-Kuma","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fuptime-kuma","en\u002F3.serveex\u002F4.monitoring\u002F1.uptime-kuma",{"title":155,"path":156,"stem":157},"Dozzle","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fdozzle","en\u002F3.serveex\u002F4.monitoring\u002F2.dozzle",{"title":159,"path":160,"stem":161},"Speedtest Tracker","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fspeedtest-tracker","en\u002F3.serveex\u002F4.monitoring\u002F3.speedtest-tracker",{"title":163,"path":164,"stem":165},"Beszel","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fbeszel","en\u002F3.serveex\u002F4.monitoring\u002F4.beszel",{"title":167,"path":168,"stem":169},"UpSnap","\u002Fen\u002Fserveex\u002Fmonitoring\u002Fupsnap","en\u002F3.serveex\u002F4.monitoring\u002F5.upsnap",{"title":171,"icon":172,"path":173,"stem":174,"children":175,"page":15},"Media & Seedbox","i-lucide-list-video","\u002Fen\u002Fserveex\u002Fmedia","en\u002F3.serveex\u002F5.media",[176,180,184],{"title":177,"path":178,"stem":179},"Jellyfin","\u002Fen\u002Fserveex\u002Fmedia\u002Fjellyfin","en\u002F3.serveex\u002F5.media\u002F1.jellyfin",{"title":181,"path":182,"stem":183},"Qbittorrent","\u002Fen\u002Fserveex\u002Fmedia\u002Fqbittorrent","en\u002F3.serveex\u002F5.media\u002F2.qbittorrent",{"title":185,"path":186,"stem":187},"Automation","\u002Fen\u002Fserveex\u002Fmedia\u002Fservarr","en\u002F3.serveex\u002F5.media\u002F3.servarr",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":15},"Cloud Drive & Photos","i-lucide-cloud-upload","\u002Fen\u002Fserveex\u002Fcloud","en\u002F3.serveex\u002F6.cloud",[194,198],{"title":195,"path":196,"stem":197},"Immich","\u002Fen\u002Fserveex\u002Fcloud\u002Fimmich","en\u002F3.serveex\u002F6.cloud\u002F1.immich",{"title":199,"path":200,"stem":201},"Nextcloud","\u002Fen\u002Fserveex\u002Fcloud\u002Fnextcloud","en\u002F3.serveex\u002F6.cloud\u002F2.nextcloud",{"title":203,"icon":204,"path":205,"stem":206,"children":207,"page":15},"File & share","i-lucide-folder-tree","\u002Fen\u002Fserveex\u002Ffiles","en\u002F3.serveex\u002F7.files",[208,212],{"title":209,"path":210,"stem":211},"File Browser Quantum","\u002Fen\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum","en\u002F3.serveex\u002F7.files\u002F1.file-browser-quantum",{"title":213,"path":214,"stem":215},"Pingvin","\u002Fen\u002Fserveex\u002Ffiles\u002Fpingvin","en\u002F3.serveex\u002F7.files\u002F2.pingvin",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":15},"Developpement","i-lucide-code-xml","\u002Fen\u002Fserveex\u002Fdevelopment","en\u002F3.serveex\u002F8.development",[222,226,230],{"title":223,"path":224,"stem":225},"Code-Server","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fcode-server","en\u002F3.serveex\u002F8.development\u002F1.code-server",{"title":227,"path":228,"stem":229},"Forgejo","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fforgejo","en\u002F3.serveex\u002F8.development\u002F2.forgejo",{"title":231,"path":232,"stem":233},"IT Tools","\u002Fen\u002Fserveex\u002Fdevelopment\u002Fit-tools","en\u002F3.serveex\u002F8.development\u002F3.it-tools",{"title":235,"icon":236,"path":237,"stem":238,"children":239,"page":15},"Useful Apps","i-lucide-award","\u002Fen\u002Fserveex\u002Fapps","en\u002F3.serveex\u002F9.apps",[240,244],{"title":241,"path":242,"stem":243},"Adguard Home","\u002Fen\u002Fserveex\u002Fapps\u002Fadguard","en\u002F3.serveex\u002F9.apps\u002F1.adguard",{"title":245,"path":246,"stem":247},"Vaultwarden","\u002Fen\u002Fserveex\u002Fapps\u002Fvaultwarden","en\u002F3.serveex\u002F9.apps\u002F2.vaultwarden",{"title":249,"icon":250,"path":251,"stem":252,"children":253,"page":15},"Advanced","i-lucide-flask-conical","\u002Fen\u002Fserveex\u002Fadvanced","en\u002F3.serveex\u002F91.advanced",[254,258],{"title":255,"path":256,"stem":257},"Authentik","\u002Fen\u002Fserveex\u002Fadvanced\u002Fauthentik","en\u002F3.serveex\u002F91.advanced\u002F1.authentik",{"title":259,"path":260,"stem":261},"Arcane","\u002Fen\u002Fserveex\u002Fadvanced\u002Farcane","en\u002F3.serveex\u002F91.advanced\u002F2.arcane",{"title":263,"icon":264,"path":265,"stem":266,"children":267,"page":15},"Stockeex","i-noto-computer-disk","\u002Fen\u002Fstockeex","en\u002F4.stockeex",[268],{"title":101,"path":269,"stem":270,"icon":25},"\u002Fen\u002Fstockeex\u002Fintroduction","en\u002F4.stockeex\u002F1.introduction",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":15},"My nonsense","i-noto-test-tube","\u002Fen\u002Fnonsense","en\u002F5.nonsense",[277,280,302],{"title":272,"path":278,"stem":279,"icon":25},"\u002Fen\u002Fnonsense\u002Fsummary","en\u002F5.nonsense\u002F1.summary",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":15},"Python","i-lucide-file-code-2","\u002Fen\u002Fnonsense\u002Fpython","en\u002F5.nonsense\u002F2.python",[286,290,294,298],{"title":287,"path":288,"stem":289},"Nvidia Stock Bot","\u002Fen\u002Fnonsense\u002Fpython\u002Fnvidia-stock-bot","en\u002F5.nonsense\u002F2.python\u002F1.nvidia-stock-bot",{"title":291,"path":292,"stem":293},"Adguard CIDRE","\u002Fen\u002Fnonsense\u002Fpython\u002Fadguard-cidre","en\u002F5.nonsense\u002F2.python\u002F2.adguard-cidre",{"title":295,"path":296,"stem":297},"Lumeex","\u002Fen\u002Fnonsense\u002Fpython\u002Flumeex","en\u002F5.nonsense\u002F2.python\u002F3.lumeex",{"title":299,"path":300,"stem":301},"Instameex","\u002Fen\u002Fnonsense\u002Fpython\u002Finstameex","en\u002F5.nonsense\u002F2.python\u002F4.instameex",{"title":303,"icon":304,"path":305,"stem":306,"children":307,"page":15},"Bash","i-lucide-file-terminal","\u002Fen\u002Fnonsense\u002Fbash","en\u002F5.nonsense\u002F3.bash",[308,312,316,320,324,328],{"title":309,"path":310,"stem":311},"Servarr corrector","\u002Fen\u002Fnonsense\u002Fbash\u002Fservarr-duplicates","en\u002F5.nonsense\u002F3.bash\u002F1.servarr-duplicates",{"title":313,"path":314,"stem":315},"LUKS Backup","\u002Fen\u002Fnonsense\u002Fbash\u002Fluks-backup","en\u002F5.nonsense\u002F3.bash\u002F2.luks-backup",{"title":317,"path":318,"stem":319},"Socat Proxy","\u002Fen\u002Fnonsense\u002Fbash\u002Fsocat-proxy","en\u002F5.nonsense\u002F3.bash\u002F3.socat-proxy",{"title":321,"path":322,"stem":323},"HotDisk","\u002Fen\u002Fnonsense\u002Fbash\u002Fhotdisk","en\u002F5.nonsense\u002F3.bash\u002F4.hotdisk",{"title":325,"path":326,"stem":327},"Backrest Docker Stop","\u002Fen\u002Fnonsense\u002Fbash\u002Fbackrest-docker-stop","en\u002F5.nonsense\u002F3.bash\u002F5.backrest-docker-stop",{"title":329,"path":330,"stem":331},"rm Confirmation Guard","\u002Fen\u002Fnonsense\u002Fbash\u002Frm-confirmation","en\u002F5.nonsense\u002F3.bash\u002F6.rm-confirmation",{"title":333,"icon":334,"path":335,"stem":336,"children":337,"page":15},"Recycled","i-noto-recycling-symbol","\u002Fen\u002Frecycled","en\u002F6.recycled",[338,341,355],{"title":333,"path":339,"stem":340,"icon":25},"\u002Fen\u002Frecycled\u002Fsummary","en\u002F6.recycled\u002F1.summary",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":15},"Deprecated","i-lucide-trash-2","\u002Fen\u002Frecycled\u002Fdeprecated","en\u002F6.recycled\u002F2.deprecated",[347,351],{"title":348,"path":349,"stem":350},"Wireguard 14","\u002Fen\u002Frecycled\u002Fdeprecated\u002Fwireguard-14","en\u002F6.recycled\u002F2.deprecated\u002F1.wireguard-14",{"title":352,"path":353,"stem":354},"File Browser","\u002Fen\u002Frecycled\u002Fdeprecated\u002Ffile-browser","en\u002F6.recycled\u002F2.deprecated\u002F2.file-browser",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":15},"Alternatives","i-lucide-arrow-left-right","\u002Fen\u002Frecycled\u002Falternatives","en\u002F6.recycled\u002F3.alternatives",[361,365,369,373],{"title":362,"path":363,"stem":364},"Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fplex","en\u002F6.recycled\u002F3.alternatives\u002F1.plex",{"title":366,"path":367,"stem":368},"Qbittorrent for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fqbittorrent-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F2.qbittorrent for plex",{"title":370,"path":371,"stem":372},"Servarr for Plex","\u002Fen\u002Frecycled\u002Falternatives\u002Fservarr-for-plex","en\u002F6.recycled\u002F3.alternatives\u002F3.servarr for plex",{"title":374,"path":375,"stem":376},"Gitea","\u002Fen\u002Frecycled\u002Falternatives\u002Fgitea","en\u002F6.recycled\u002F3.alternatives\u002F4.gitea",{"id":378,"title":245,"body":379,"contributors":2175,"description":2177,"extension":2178,"hideCopyPage":15,"hideHeader":15,"hideToc":15,"links":2179,"meta":2180,"navigation":1182,"path":246,"seo":2181,"stem":247,"__hash__":2182},"docs_en\u002Fen\u002F3.serveex\u002F9.apps\u002F2.vaultwarden.md",{"type":380,"value":381,"toc":2157},"minimark",[382,390,397,406,415,420,424,915,922,926,932,963,1812,1828,1854,1858,1861,2031,2039,2153],[383,384],"ellipsis",{"blur":385,"left":386,"top":387,"width":388,"z-index":389},"140px","0px","10rem","40rem","60",[391,392,393],"p",{},[394,395],"img",{"alt":245,"src":396},"\u002Fimg\u002Fserveex\u002Fvaultwarden.png",[391,398,399,405],{},[400,401,245],"a",{"href":402,"rel":403},"https:\u002F\u002Fgithub.com\u002Fdani-garcia\u002Fvaultwarden",[404],"nofollow"," is a password management solution (generation, autofill...) that you can host directly on your server. This replaces managers like Google, Apple, or Keepass. Vaultwarden synchronizes your passwords across all your devices with end-to-end encryption.",[391,407,408,409,414],{},"Vaultwarden is a fork of ",[400,410,413],{"href":411,"rel":412},"https:\u002F\u002Fbitwarden.com\u002Ffr-fr\u002Fhelp\u002F",[404],"Bitwarden",".",[416,417,419],"h2",{"id":418},"installation","Installation",[421,422],"file-tree",{":tree":423},"{\"\u002F\":[{\"srv\":[{\"docker\":[{\"vaultwarden\":[\"data\u002F\",\"compose.yaml\",\".env\"]}]}]}]}",[425,426,428,433,445,679,731,735,745,823,826,832,854,905,908,911],"steps",{"level":427},"3",[429,430,432],"h3",{"id":431},"deploy-the-stack","Deploy the stack",[391,434,435,436,440,441,444],{},"Open Dockge, click on ",[437,438,439],"code",{},"compose",", name the stack ",[437,442,443],{},"vaultwarden",", and paste the following:",[446,447,453],"pre",{"className":448,"code":449,"filename":450,"language":451,"meta":452,"style":452},"language-yaml shiki shiki-themes github-dark material-theme github-dark","---\nservices:\n  vaultwarden:\n    container_name: vaultwarden\n    image: vaultwarden\u002Fserver:latest\n    restart: unless-stopped\n    env_file:\n      - .env\n    volumes:\n      - .\u002Fdata\u002F:\u002Fdata\u002F\n    ports:\n      - 3050:80\n    environment:\n      - DOMAIN=${URL}\n      - LOGIN_RATELIMIT_MAX_BURST=10\n      - LOGIN_RATELIMIT_SECONDS=60\n      - ADMIN_RATELIMIT_MAX_BURST=10\n      - ADMIN_RATELIMIT_SECONDS=60\n      - ADMIN_TOKEN=${TOKEN}\n      - SENDS_ALLOWED=true\n      - EMERGENCY_ACCESS_ALLOWED=true\n      - WEB_VAULT_ENABLED=true\n      - SIGNUPS_ALLOWED=false\n      - SIGNUPS_VERIFY=true\n      - SIGNUPS_VERIFY_RESEND_TIME=3600\n      - SIGNUPS_VERIFY_RESEND_LIMIT=5\n","compose.yaml","yaml","",[437,454,455,464,475,483,496,507,518,526,535,543,551,559,567,575,583,591,599,607,615,623,631,639,647,655,663,671],{"__ignoreMap":452},[456,457,460],"span",{"class":458,"line":459},"line",1,[456,461,463],{"class":462},"sEgDM","---\n",[456,465,467,471],{"class":458,"line":466},2,[456,468,470],{"class":469},"sRuoG","services",[456,472,474],{"class":473},"s8jd1",":\n",[456,476,478,481],{"class":458,"line":477},3,[456,479,480],{"class":469},"  vaultwarden",[456,482,474],{"class":473},[456,484,486,489,492],{"class":458,"line":485},4,[456,487,488],{"class":469},"    container_name",[456,490,491],{"class":473},":",[456,493,495],{"class":494},"s11XM"," vaultwarden\n",[456,497,499,502,504],{"class":458,"line":498},5,[456,500,501],{"class":469},"    image",[456,503,491],{"class":473},[456,505,506],{"class":494}," vaultwarden\u002Fserver:latest\n",[456,508,510,513,515],{"class":458,"line":509},6,[456,511,512],{"class":469},"    restart",[456,514,491],{"class":473},[456,516,517],{"class":494}," unless-stopped\n",[456,519,521,524],{"class":458,"line":520},7,[456,522,523],{"class":469},"    env_file",[456,525,474],{"class":473},[456,527,529,532],{"class":458,"line":528},8,[456,530,531],{"class":473},"      -",[456,533,534],{"class":494}," .env\n",[456,536,538,541],{"class":458,"line":537},9,[456,539,540],{"class":469},"    volumes",[456,542,474],{"class":473},[456,544,546,548],{"class":458,"line":545},10,[456,547,531],{"class":473},[456,549,550],{"class":494}," .\u002Fdata\u002F:\u002Fdata\u002F\n",[456,552,554,557],{"class":458,"line":553},11,[456,555,556],{"class":469},"    ports",[456,558,474],{"class":473},[456,560,562,564],{"class":458,"line":561},12,[456,563,531],{"class":473},[456,565,566],{"class":494}," 3050:80\n",[456,568,570,573],{"class":458,"line":569},13,[456,571,572],{"class":469},"    environment",[456,574,474],{"class":473},[456,576,578,580],{"class":458,"line":577},14,[456,579,531],{"class":473},[456,581,582],{"class":494}," DOMAIN=${URL}\n",[456,584,586,588],{"class":458,"line":585},15,[456,587,531],{"class":473},[456,589,590],{"class":494}," LOGIN_RATELIMIT_MAX_BURST=10\n",[456,592,594,596],{"class":458,"line":593},16,[456,595,531],{"class":473},[456,597,598],{"class":494}," LOGIN_RATELIMIT_SECONDS=60\n",[456,600,602,604],{"class":458,"line":601},17,[456,603,531],{"class":473},[456,605,606],{"class":494}," ADMIN_RATELIMIT_MAX_BURST=10\n",[456,608,610,612],{"class":458,"line":609},18,[456,611,531],{"class":473},[456,613,614],{"class":494}," ADMIN_RATELIMIT_SECONDS=60\n",[456,616,618,620],{"class":458,"line":617},19,[456,619,531],{"class":473},[456,621,622],{"class":494}," ADMIN_TOKEN=${TOKEN}\n",[456,624,626,628],{"class":458,"line":625},20,[456,627,531],{"class":473},[456,629,630],{"class":494}," SENDS_ALLOWED=true\n",[456,632,634,636],{"class":458,"line":633},21,[456,635,531],{"class":473},[456,637,638],{"class":494}," EMERGENCY_ACCESS_ALLOWED=true\n",[456,640,642,644],{"class":458,"line":641},22,[456,643,531],{"class":473},[456,645,646],{"class":494}," WEB_VAULT_ENABLED=true\n",[456,648,650,652],{"class":458,"line":649},23,[456,651,531],{"class":473},[456,653,654],{"class":494}," SIGNUPS_ALLOWED=false\n",[456,656,658,660],{"class":458,"line":657},24,[456,659,531],{"class":473},[456,661,662],{"class":494}," SIGNUPS_VERIFY=true\n",[456,664,666,668],{"class":458,"line":665},25,[456,667,531],{"class":473},[456,669,670],{"class":494}," SIGNUPS_VERIFY_RESEND_TIME=3600\n",[456,672,674,676],{"class":458,"line":673},26,[456,675,531],{"class":473},[456,677,678],{"class":494}," SIGNUPS_VERIFY_RESEND_LIMIT=5\n",[680,681,682,690],"tip",{"icon":452},[391,683,684,685,689],{},"✨ ",[686,687,688],"strong",{},"Tip:"," Add the Watchtower label in each container to automate updates",[446,691,693],{"className":448,"code":692,"filename":450,"language":451,"meta":452,"style":452},"---\nservices:\n  vaultwarden:\n    #...\n    labels:\n      - com.centurylinklabs.watchtower.enable=true\n",[437,694,695,699,705,711,717,724],{"__ignoreMap":452},[456,696,697],{"class":458,"line":459},[456,698,463],{"class":462},[456,700,701,703],{"class":458,"line":466},[456,702,470],{"class":469},[456,704,474],{"class":473},[456,706,707,709],{"class":458,"line":477},[456,708,480],{"class":469},[456,710,474],{"class":473},[456,712,713],{"class":458,"line":485},[456,714,716],{"class":715},"sDvJj","    #...\n",[456,718,719,722],{"class":458,"line":498},[456,720,721],{"class":469},"    labels",[456,723,474],{"class":473},[456,725,726,728],{"class":458,"line":509},[456,727,531],{"class":473},[456,729,730],{"class":494}," com.centurylinklabs.watchtower.enable=true\n",[429,732,734],{"id":733},"set-your-environment-variables","Set your environment variables",[391,736,737,738,741,742,491],{},"Next, generate a password hash to put in the ",[437,739,740],{},"TOKEN"," variable in ",[437,743,744],{},".env",[446,746,751],{"className":747,"code":748,"filename":749,"language":750,"meta":452,"style":452},"language-bash shiki shiki-themes github-dark material-theme github-dark","echo -n 'yourpassword' | argon2 \"$(openssl rand -base64 32)\" -e -id -k 65540 -t 3 -p 4\n","Terminal","bash",[437,752,753],{"__ignoreMap":452},[456,754,755,759,763,767,770,773,777,780,783,786,789,792,796,799,802,805,808,811,814,817,820],{"class":458,"line":459},[456,756,758],{"class":757},"sJGgK","echo",[456,760,762],{"class":761},"sJWha"," -n",[456,764,766],{"class":765},"s8K8j"," '",[456,768,769],{"class":494},"yourpassword",[456,771,772],{"class":765},"'",[456,774,776],{"class":775},"sJPTy"," |",[456,778,779],{"class":462}," argon2",[456,781,782],{"class":765}," \"$(",[456,784,785],{"class":462},"openssl",[456,787,788],{"class":494}," rand ",[456,790,791],{"class":761},"-base64",[456,793,795],{"class":794},"swwWl"," 32",[456,797,798],{"class":765},")\"",[456,800,801],{"class":761}," -e",[456,803,804],{"class":761}," -id",[456,806,807],{"class":761}," -k",[456,809,810],{"class":794}," 65540",[456,812,813],{"class":761}," -t",[456,815,816],{"class":794}," 3",[456,818,819],{"class":761}," -p",[456,821,822],{"class":794}," 4\n",[391,824,825],{},"Copy the result securely.",[391,827,828,829,831],{},"In the ",[437,830,744],{}," file, enter the following variables:",[446,833,837],{"className":834,"code":835,"filename":744,"language":836,"meta":452,"style":452},"language-properties shiki shiki-themes github-dark material-theme github-dark","URL=\nTOKEN=\n","properties",[437,838,839,848],{"__ignoreMap":452},[456,840,841,845],{"class":458,"line":459},[456,842,844],{"class":843},"szyEh","URL",[456,846,847],{"class":473},"=\n",[456,849,850,852],{"class":458,"line":466},[456,851,740],{"class":843},[456,853,847],{"class":473},[855,856,857,873],"table",{},[858,859,860],"thead",{},[861,862,863,867,870],"tr",{},[864,865,866],"th",{},"Variable",[864,868,869],{},"Value",[864,871,872],{},"Example",[874,875,876,891],"tbody",{},[861,877,878,883,886],{},[879,880,881],"td",{},[437,882,844],{},[879,884,885],{},"The URL of your Vaultwarden server",[879,887,888],{},[437,889,890],{},"https:\u002F\u002Fvault.yourdomain.com",[861,892,893,897,900],{},[879,894,895],{},[437,896,740],{},[879,898,899],{},"The token you previously copied",[879,901,902],{},[437,903,904],{},"'$argon2id$v=19$m=65540,t=3,p=4$bXBGME...",[391,906,907],{},"Then deploy the container.",[391,909,910],{},"Recently, Vaultwarden requires SSL to be accessed, which prevents access via a local IP. We'll expose it with SWAG, which provides an SSL certificate.",[429,912,914],{"id":913},"done","Done !",[916,917,918,921],"caution",{},[686,919,920],{},"If it fails:"," check your firewall rules.",[416,923,925],{"id":924},"exposing-vaultwarden-with-swag","Exposing Vaultwarden with SWAG",[391,927,928,929,414],{},"The main benefit of Vaultwarden is being able to access it remotely from any device. We'll expose it through ",[400,930,123],{"href":931},"\u002Fserveex\u002Fcore\u002Fswag",[933,934,936,937,940,941,944,945,948,949,952,953,956,957,959,960,414],"note",{"to":935,"icon":452},"\u002Fgeneral\u002Fnetworking\u002Fnat","📋 ",[686,938,939],{},"Before you start:"," Make sure you've created a DNS subdomain like ",[437,942,943],{},"vault.yourdomain.com"," with ",[437,946,947],{},"CNAME"," pointing to ",[437,950,951],{},"yourdomain.com"," and (unless using Cloudflare Zero Trust) that you've forwarded port ",[437,954,955],{},"443"," from your router to your server's ",[437,958,955],{}," via ",[686,961,962],{},"NAT rules",[425,964,965,969,972,1088,1099,1102,1106,1112,1121,1137,1140,1793,1809],{"level":427},[429,966,968],{"id":967},"add-vaultwardens-network-to-swag","Add Vaultwarden's network to SWAG",[391,970,971],{},"In Dockge, go to the SWAG stack and edit the compose file to add the Vaultwarden network:",[446,973,975],{"className":448,"code":974,"filename":450,"language":451,"meta":452,"style":452},"---\nservices:\n  swag:\n     container_name: # ...\n     # ...\n     networks:             # Connects container to custom network\n      # ...\n      - vaultwarden        # Name of the declared network\n    \nnetworks:                  # Defines the custom network\n  # ...\n  vaultwarden:             # Name of the declared network\n    name: vaultwarden_default  # Actual name of the external network\n    external: true\n",[437,976,977,981,987,994,1004,1009,1019,1024,1034,1040,1050,1055,1064,1077],{"__ignoreMap":452},[456,978,979],{"class":458,"line":459},[456,980,463],{"class":462},[456,982,983,985],{"class":458,"line":466},[456,984,470],{"class":469},[456,986,474],{"class":473},[456,988,989,992],{"class":458,"line":477},[456,990,991],{"class":469},"  swag",[456,993,474],{"class":473},[456,995,996,999,1001],{"class":458,"line":485},[456,997,998],{"class":469},"     container_name",[456,1000,491],{"class":473},[456,1002,1003],{"class":715}," # ...\n",[456,1005,1006],{"class":458,"line":498},[456,1007,1008],{"class":715},"     # ...\n",[456,1010,1011,1014,1016],{"class":458,"line":509},[456,1012,1013],{"class":469},"     networks",[456,1015,491],{"class":473},[456,1017,1018],{"class":715},"             # Connects container to custom network\n",[456,1020,1021],{"class":458,"line":520},[456,1022,1023],{"class":715},"      # ...\n",[456,1025,1026,1028,1031],{"class":458,"line":528},[456,1027,531],{"class":473},[456,1029,1030],{"class":494}," vaultwarden",[456,1032,1033],{"class":715},"        # Name of the declared network\n",[456,1035,1036],{"class":458,"line":537},[456,1037,1039],{"class":1038},"slcoZ","    \n",[456,1041,1042,1045,1047],{"class":458,"line":545},[456,1043,1044],{"class":469},"networks",[456,1046,491],{"class":473},[456,1048,1049],{"class":715},"                  # Defines the custom network\n",[456,1051,1052],{"class":458,"line":553},[456,1053,1054],{"class":715},"  # ...\n",[456,1056,1057,1059,1061],{"class":458,"line":561},[456,1058,480],{"class":469},[456,1060,491],{"class":473},[456,1062,1063],{"class":715},"             # Name of the declared network\n",[456,1065,1066,1069,1071,1074],{"class":458,"line":569},[456,1067,1068],{"class":469},"    name",[456,1070,491],{"class":473},[456,1072,1073],{"class":494}," vaultwarden_default",[456,1075,1076],{"class":715},"  # Actual name of the external network\n",[456,1078,1079,1082,1084],{"class":458,"line":577},[456,1080,1081],{"class":469},"    external",[456,1083,491],{"class":473},[456,1085,1087],{"class":1086},"s08Ry"," true\n",[933,1089,1090,1091,1094,1095,414],{},"We're assuming the network name is ",[437,1092,1093],{},"vaultwarden_default",". You can check connectivity by visiting the SWAG dashboard at ",[400,1096,1097],{"href":1097,"rel":1098},"http:\u002F\u002Fyourserverip:81",[404],[391,1100,1101],{},"Restart the stack by clicking \"Deploy\" and wait for SWAG to be fully operational.",[429,1103,1105],{"id":1104},"create-the-subdomainconf-file","Create the subdomain.conf file",[391,1107,1108,1109,491],{},"In SWAG's config folder, create the file ",[437,1110,1111],{},"vault.subdomain.conf",[680,1113,684,1115,1117,1118,1120],{"icon":452,"to":1114},"\u002Fserveex\u002Ffiles\u002Ffile-browser-quantum",[686,1116,688],{}," Use ",[686,1119,209],{}," to navigate and edit files instead of using terminal commands.",[446,1122,1124],{"className":747,"code":1123,"filename":749,"language":750,"meta":452,"style":452},"sudo nano \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fvault.subdomain.conf\n",[437,1125,1126],{"__ignoreMap":452},[456,1127,1128,1131,1134],{"class":458,"line":459},[456,1129,1130],{"class":462},"sudo",[456,1132,1133],{"class":494}," nano",[456,1135,1136],{"class":494}," \u002Fsrv\u002Fdocker\u002Fswag\u002Fconfig\u002Fnginx\u002Fproxy-confs\u002Fvault.subdomain.conf\n",[391,1138,1139],{},"And paste the following configuration:",[446,1141,1145],{"className":1142,"code":1143,"filename":1111,"language":1144,"meta":452,"style":452},"language-nginx shiki shiki-themes github-dark material-theme github-dark","server {\n    listen 443 ssl;\n    listen [::]:443 ssl;\n\n    server_name vault.*;\n\n    include \u002Fconfig\u002Fnginx\u002Fssl.conf;\n\n    client_max_body_size 128M;\n\n    # enable for ldap auth (requires ldap-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n\n    # enable for Authelia (requires authelia-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n\n    # enable for Authentik (requires authentik-location.conf in the location block)\n    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n\n    location \u002F {\n        # enable the next two lines for http auth\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        # enable for ldap auth\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n\n        # enable for Authelia\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n\n        # enable for Authentik\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app vaultwarden;\n        set $upstream_port 80;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n\n    location ~ ^(\u002Fvaultwarden)?\u002Fadmin {\n        # enable the next two lines for http auth\n        #auth_basic \"Restricted\";\n        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n\n        # enable for ldap auth\n        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n\n        # enable for Authelia\n        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n\n        # enable for Authentik\n        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app vaultwarden;\n        set $upstream_port 80;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n\n    location ~ (\u002Fvaultwarden)?\u002Fapi {\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app vaultwarden;\n        set $upstream_port 80;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n\n    location ~ (\u002Fvaultwarden)?\u002Fnotifications\u002Fhub {\n        include \u002Fconfig\u002Fnginx\u002Fproxy.conf;\n        include \u002Fconfig\u002Fnginx\u002Fresolver.conf;\n        set $upstream_app vaultwarden;\n        set $upstream_port 80;\n        set $upstream_proto http;\n        proxy_pass $upstream_proto:\u002F\u002F$upstream_app:$upstream_port;\n    }\n}\n","nginx",[437,1146,1147,1156,1169,1178,1184,1194,1198,1208,1212,1222,1226,1231,1236,1240,1245,1250,1254,1259,1264,1268,1279,1284,1289,1294,1298,1303,1308,1313,1319,1325,1330,1336,1342,1347,1358,1368,1382,1397,1409,1432,1438,1443,1457,1462,1467,1472,1477,1482,1487,1492,1497,1502,1507,1512,1517,1522,1531,1540,1551,1564,1575,1594,1599,1604,1616,1625,1634,1645,1658,1669,1688,1693,1698,1710,1719,1728,1739,1752,1763,1782,1787],{"__ignoreMap":452},[456,1148,1149,1153],{"class":458,"line":459},[456,1150,1152],{"class":1151},"sAoO4","server",[456,1154,1155],{"class":1038}," {\n",[456,1157,1158,1161,1163,1166],{"class":458,"line":466},[456,1159,1160],{"class":775},"    listen ",[456,1162,955],{"class":794},[456,1164,1165],{"class":1038}," ssl",[456,1167,1168],{"class":473},";\n",[456,1170,1171,1173,1176],{"class":458,"line":477},[456,1172,1160],{"class":775},[456,1174,1175],{"class":1038},"[::]:443 ssl",[456,1177,1168],{"class":473},[456,1179,1180],{"class":458,"line":485},[456,1181,1183],{"emptyLinePlaceholder":1182},true,"\n",[456,1185,1186,1189,1192],{"class":458,"line":498},[456,1187,1188],{"class":775},"    server_name ",[456,1190,1191],{"class":1038},"vault.*",[456,1193,1168],{"class":473},[456,1195,1196],{"class":458,"line":509},[456,1197,1183],{"emptyLinePlaceholder":1182},[456,1199,1200,1203,1206],{"class":458,"line":520},[456,1201,1202],{"class":775},"    include ",[456,1204,1205],{"class":1038},"\u002Fconfig\u002Fnginx\u002Fssl.conf",[456,1207,1168],{"class":473},[456,1209,1210],{"class":458,"line":528},[456,1211,1183],{"emptyLinePlaceholder":1182},[456,1213,1214,1217,1220],{"class":458,"line":537},[456,1215,1216],{"class":775},"    client_max_body_size ",[456,1218,1219],{"class":794},"128M",[456,1221,1168],{"class":473},[456,1223,1224],{"class":458,"line":545},[456,1225,1183],{"emptyLinePlaceholder":1182},[456,1227,1228],{"class":458,"line":553},[456,1229,1230],{"class":715},"    # enable for ldap auth (requires ldap-location.conf in the location block)\n",[456,1232,1233],{"class":458,"line":561},[456,1234,1235],{"class":715},"    #include \u002Fconfig\u002Fnginx\u002Fldap-server.conf;\n",[456,1237,1238],{"class":458,"line":569},[456,1239,1183],{"emptyLinePlaceholder":1182},[456,1241,1242],{"class":458,"line":577},[456,1243,1244],{"class":715},"    # enable for Authelia (requires authelia-location.conf in the location block)\n",[456,1246,1247],{"class":458,"line":585},[456,1248,1249],{"class":715},"    #include \u002Fconfig\u002Fnginx\u002Fauthelia-server.conf;\n",[456,1251,1252],{"class":458,"line":593},[456,1253,1183],{"emptyLinePlaceholder":1182},[456,1255,1256],{"class":458,"line":601},[456,1257,1258],{"class":715},"    # enable for Authentik (requires authentik-location.conf in the location block)\n",[456,1260,1261],{"class":458,"line":609},[456,1262,1263],{"class":715},"    #include \u002Fconfig\u002Fnginx\u002Fauthentik-server.conf;\n",[456,1265,1266],{"class":458,"line":617},[456,1267,1183],{"emptyLinePlaceholder":1182},[456,1269,1270,1273,1276],{"class":458,"line":625},[456,1271,1272],{"class":1151},"    location",[456,1274,1275],{"class":462}," \u002F ",[456,1277,1278],{"class":1038},"{\n",[456,1280,1281],{"class":458,"line":633},[456,1282,1283],{"class":715},"        # enable the next two lines for http auth\n",[456,1285,1286],{"class":458,"line":641},[456,1287,1288],{"class":715},"        #auth_basic \"Restricted\";\n",[456,1290,1291],{"class":458,"line":649},[456,1292,1293],{"class":715},"        #auth_basic_user_file \u002Fconfig\u002Fnginx\u002F.htpasswd;\n",[456,1295,1296],{"class":458,"line":657},[456,1297,1183],{"emptyLinePlaceholder":1182},[456,1299,1300],{"class":458,"line":665},[456,1301,1302],{"class":715},"        # enable for ldap auth\n",[456,1304,1305],{"class":458,"line":673},[456,1306,1307],{"class":715},"        #include \u002Fconfig\u002Fnginx\u002Fldap-location.conf;\n",[456,1309,1311],{"class":458,"line":1310},27,[456,1312,1183],{"emptyLinePlaceholder":1182},[456,1314,1316],{"class":458,"line":1315},28,[456,1317,1318],{"class":715},"        # enable for Authelia\n",[456,1320,1322],{"class":458,"line":1321},29,[456,1323,1324],{"class":715},"        #include \u002Fconfig\u002Fnginx\u002Fauthelia-location.conf;\n",[456,1326,1328],{"class":458,"line":1327},30,[456,1329,1183],{"emptyLinePlaceholder":1182},[456,1331,1333],{"class":458,"line":1332},31,[456,1334,1335],{"class":715},"        # enable for Authentik\n",[456,1337,1339],{"class":458,"line":1338},32,[456,1340,1341],{"class":715},"        #include \u002Fconfig\u002Fnginx\u002Fauthentik-location.conf;\n",[456,1343,1345],{"class":458,"line":1344},33,[456,1346,1183],{"emptyLinePlaceholder":1182},[456,1348,1350,1353,1356],{"class":458,"line":1349},34,[456,1351,1352],{"class":775},"        include ",[456,1354,1355],{"class":1038},"\u002Fconfig\u002Fnginx\u002Fproxy.conf",[456,1357,1168],{"class":473},[456,1359,1361,1363,1366],{"class":458,"line":1360},35,[456,1362,1352],{"class":775},[456,1364,1365],{"class":1038},"\u002Fconfig\u002Fnginx\u002Fresolver.conf",[456,1367,1168],{"class":473},[456,1369,1371,1374,1377,1380],{"class":458,"line":1370},36,[456,1372,1373],{"class":775},"        set ",[456,1375,1376],{"class":473},"$",[456,1378,1379],{"class":1038},"upstream_app vaultwarden",[456,1381,1168],{"class":473},[456,1383,1385,1387,1389,1392,1395],{"class":458,"line":1384},37,[456,1386,1373],{"class":775},[456,1388,1376],{"class":473},[456,1390,1391],{"class":1038},"upstream_port ",[456,1393,1394],{"class":794},"80",[456,1396,1168],{"class":473},[456,1398,1400,1402,1404,1407],{"class":458,"line":1399},38,[456,1401,1373],{"class":775},[456,1403,1376],{"class":473},[456,1405,1406],{"class":1038},"upstream_proto http",[456,1408,1168],{"class":473},[456,1410,1412,1415,1417,1420,1422,1425,1427,1430],{"class":458,"line":1411},39,[456,1413,1414],{"class":775},"        proxy_pass ",[456,1416,1376],{"class":473},[456,1418,1419],{"class":1038},"upstream_proto:\u002F\u002F",[456,1421,1376],{"class":473},[456,1423,1424],{"class":1038},"upstream_app:",[456,1426,1376],{"class":473},[456,1428,1429],{"class":1038},"upstream_port",[456,1431,1168],{"class":473},[456,1433,1435],{"class":458,"line":1434},40,[456,1436,1437],{"class":1038},"    }\n",[456,1439,1441],{"class":458,"line":1440},41,[456,1442,1183],{"emptyLinePlaceholder":1182},[456,1444,1446,1448,1451,1455],{"class":458,"line":1445},42,[456,1447,1272],{"class":1151},[456,1449,1450],{"class":775}," ~",[456,1452,1454],{"class":1453},"sxjBU"," ^(\u002Fvaultwarden)?\u002Fadmin ",[456,1456,1278],{"class":1038},[456,1458,1460],{"class":458,"line":1459},43,[456,1461,1283],{"class":715},[456,1463,1465],{"class":458,"line":1464},44,[456,1466,1288],{"class":715},[456,1468,1470],{"class":458,"line":1469},45,[456,1471,1293],{"class":715},[456,1473,1475],{"class":458,"line":1474},46,[456,1476,1183],{"emptyLinePlaceholder":1182},[456,1478,1480],{"class":458,"line":1479},47,[456,1481,1302],{"class":715},[456,1483,1485],{"class":458,"line":1484},48,[456,1486,1307],{"class":715},[456,1488,1490],{"class":458,"line":1489},49,[456,1491,1183],{"emptyLinePlaceholder":1182},[456,1493,1495],{"class":458,"line":1494},50,[456,1496,1318],{"class":715},[456,1498,1500],{"class":458,"line":1499},51,[456,1501,1324],{"class":715},[456,1503,1505],{"class":458,"line":1504},52,[456,1506,1183],{"emptyLinePlaceholder":1182},[456,1508,1510],{"class":458,"line":1509},53,[456,1511,1335],{"class":715},[456,1513,1515],{"class":458,"line":1514},54,[456,1516,1341],{"class":715},[456,1518,1520],{"class":458,"line":1519},55,[456,1521,1183],{"emptyLinePlaceholder":1182},[456,1523,1525,1527,1529],{"class":458,"line":1524},56,[456,1526,1352],{"class":775},[456,1528,1355],{"class":1038},[456,1530,1168],{"class":473},[456,1532,1534,1536,1538],{"class":458,"line":1533},57,[456,1535,1352],{"class":775},[456,1537,1365],{"class":1038},[456,1539,1168],{"class":473},[456,1541,1543,1545,1547,1549],{"class":458,"line":1542},58,[456,1544,1373],{"class":775},[456,1546,1376],{"class":473},[456,1548,1379],{"class":1038},[456,1550,1168],{"class":473},[456,1552,1554,1556,1558,1560,1562],{"class":458,"line":1553},59,[456,1555,1373],{"class":775},[456,1557,1376],{"class":473},[456,1559,1391],{"class":1038},[456,1561,1394],{"class":794},[456,1563,1168],{"class":473},[456,1565,1567,1569,1571,1573],{"class":458,"line":1566},60,[456,1568,1373],{"class":775},[456,1570,1376],{"class":473},[456,1572,1406],{"class":1038},[456,1574,1168],{"class":473},[456,1576,1578,1580,1582,1584,1586,1588,1590,1592],{"class":458,"line":1577},61,[456,1579,1414],{"class":775},[456,1581,1376],{"class":473},[456,1583,1419],{"class":1038},[456,1585,1376],{"class":473},[456,1587,1424],{"class":1038},[456,1589,1376],{"class":473},[456,1591,1429],{"class":1038},[456,1593,1168],{"class":473},[456,1595,1597],{"class":458,"line":1596},62,[456,1598,1437],{"class":1038},[456,1600,1602],{"class":458,"line":1601},63,[456,1603,1183],{"emptyLinePlaceholder":1182},[456,1605,1607,1609,1611,1614],{"class":458,"line":1606},64,[456,1608,1272],{"class":1151},[456,1610,1450],{"class":775},[456,1612,1613],{"class":1453}," (\u002Fvaultwarden)?\u002Fapi ",[456,1615,1278],{"class":1038},[456,1617,1619,1621,1623],{"class":458,"line":1618},65,[456,1620,1352],{"class":775},[456,1622,1355],{"class":1038},[456,1624,1168],{"class":473},[456,1626,1628,1630,1632],{"class":458,"line":1627},66,[456,1629,1352],{"class":775},[456,1631,1365],{"class":1038},[456,1633,1168],{"class":473},[456,1635,1637,1639,1641,1643],{"class":458,"line":1636},67,[456,1638,1373],{"class":775},[456,1640,1376],{"class":473},[456,1642,1379],{"class":1038},[456,1644,1168],{"class":473},[456,1646,1648,1650,1652,1654,1656],{"class":458,"line":1647},68,[456,1649,1373],{"class":775},[456,1651,1376],{"class":473},[456,1653,1391],{"class":1038},[456,1655,1394],{"class":794},[456,1657,1168],{"class":473},[456,1659,1661,1663,1665,1667],{"class":458,"line":1660},69,[456,1662,1373],{"class":775},[456,1664,1376],{"class":473},[456,1666,1406],{"class":1038},[456,1668,1168],{"class":473},[456,1670,1672,1674,1676,1678,1680,1682,1684,1686],{"class":458,"line":1671},70,[456,1673,1414],{"class":775},[456,1675,1376],{"class":473},[456,1677,1419],{"class":1038},[456,1679,1376],{"class":473},[456,1681,1424],{"class":1038},[456,1683,1376],{"class":473},[456,1685,1429],{"class":1038},[456,1687,1168],{"class":473},[456,1689,1691],{"class":458,"line":1690},71,[456,1692,1437],{"class":1038},[456,1694,1696],{"class":458,"line":1695},72,[456,1697,1183],{"emptyLinePlaceholder":1182},[456,1699,1701,1703,1705,1708],{"class":458,"line":1700},73,[456,1702,1272],{"class":1151},[456,1704,1450],{"class":775},[456,1706,1707],{"class":1453}," (\u002Fvaultwarden)?\u002Fnotifications\u002Fhub ",[456,1709,1278],{"class":1038},[456,1711,1713,1715,1717],{"class":458,"line":1712},74,[456,1714,1352],{"class":775},[456,1716,1355],{"class":1038},[456,1718,1168],{"class":473},[456,1720,1722,1724,1726],{"class":458,"line":1721},75,[456,1723,1352],{"class":775},[456,1725,1365],{"class":1038},[456,1727,1168],{"class":473},[456,1729,1731,1733,1735,1737],{"class":458,"line":1730},76,[456,1732,1373],{"class":775},[456,1734,1376],{"class":473},[456,1736,1379],{"class":1038},[456,1738,1168],{"class":473},[456,1740,1742,1744,1746,1748,1750],{"class":458,"line":1741},77,[456,1743,1373],{"class":775},[456,1745,1376],{"class":473},[456,1747,1391],{"class":1038},[456,1749,1394],{"class":794},[456,1751,1168],{"class":473},[456,1753,1755,1757,1759,1761],{"class":458,"line":1754},78,[456,1756,1373],{"class":775},[456,1758,1376],{"class":473},[456,1760,1406],{"class":1038},[456,1762,1168],{"class":473},[456,1764,1766,1768,1770,1772,1774,1776,1778,1780],{"class":458,"line":1765},79,[456,1767,1414],{"class":775},[456,1769,1376],{"class":473},[456,1771,1419],{"class":1038},[456,1773,1376],{"class":473},[456,1775,1424],{"class":1038},[456,1777,1376],{"class":473},[456,1779,1429],{"class":1038},[456,1781,1168],{"class":473},[456,1783,1785],{"class":458,"line":1784},80,[456,1786,1437],{"class":1038},[456,1788,1790],{"class":458,"line":1789},81,[456,1791,1792],{"class":1038},"}\n",[391,1794,1795,1796,1800,1801,1804,1805,1808],{},"Press ",[1797,1798],"kbd",{"value":1799},"Ctrl+O",", then ",[1797,1802],{"value":1803},"Enter"," to save, and ",[1797,1806],{"value":1807},"Ctrl+X"," to exit.",[429,1810,914],{"id":1811},"done-1",[391,1813,1814,1815,1818,1819,1822,1823,414],{},"And there you go! Vaultwarden is now exposed! Visit ",[437,1816,1817],{},"https:\u002F\u002Fvault.yourdomain.com\u002Fadmin"," to access the admin panel and paste the password you specified when generatique the ",[437,1820,1821],{},"ADMIN_TOKEN",". For more information, see the ",[400,1824,1827],{"href":1825,"rel":1826},"https:\u002F\u002Fbitwarden.com\u002Fhelp\u002F",[404],"Bitwarden documentation",[391,1829,1830,1831,1836,1837,1842,1843,1836,1848,1853],{},"Don't forget to install Bitwarden browser extensions (they work with Vaultwarden) for ",[400,1832,1835],{"href":1833,"rel":1834},"https:\u002F\u002Fchromewebstore.google.com\u002Fdetail\u002Fgestionnaire-de-mots-de-p\u002Fnngceckbapebfimnlniiiahkandclblb",[404],"Chrome"," and ",[400,1838,1841],{"href":1839,"rel":1840},"https:\u002F\u002Faddons.mozilla.org\u002Ffr\u002Ffirefox\u002Faddon\u002Fbitwarden-password-manager\u002F",[404],"Firefox",", as well as ",[400,1844,1847],{"href":1845,"rel":1846},"https:\u002F\u002Fapps.apple.com\u002Ffr\u002Fapp\u002Fbitwarden\u002Fid1137397744",[404],"iOS",[400,1849,1852],{"href":1850,"rel":1851},"https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=com.x8bit.bitwarden&hl=fr",[404],"Android"," apps to sync your passwords.",[416,1855,1857],{"id":1856},"protecting-vaultwarden-with-pocket-id","Protecting Vaultwarden with Pocket ID",[391,1859,1860],{},"Unlike most apps on this site, Vaultwarden supports OIDC natively, so there's no need for TinyAuth's forward-auth proxy or Authentik's reverse-proxy trick here: Vaultwarden itself can require an OIDC login before letting anyone into the vault.",[425,1862,1863,1867,1874,1882,1886,1892,1906,1909,1958,2003,2010,2018,2022,2028],{"level":427},[429,1864,1866],{"id":1865},"register-vaultwarden-as-an-oidc-client","Register Vaultwarden as an OIDC client",[391,1868,1869,1873],{},[400,1870,1872],{"href":1871},"\u002Fserveex\u002Fsecurity\u002Fpocket-id#registering-an-oidc-client","Register an OIDC client in Pocket ID"," (or in Authentik, or any other OIDC provider) using this callback URL:",[446,1875,1880],{"className":1876,"code":1878,"language":1879,"meta":452},[1877],"language-text","https:\u002F\u002Fvault.yourdomain.com\u002Fidentity\u002Fconnect\u002Foidc-signin\n","text",[437,1881,1878],{"__ignoreMap":452},[429,1883,1885],{"id":1884},"add-the-sso-variables","Add the SSO variables",[391,1887,1888,1889,1891],{},"Edit Vaultwarden's ",[437,1890,744],{}," file:",[446,1893,1895],{"className":747,"code":1894,"filename":749,"language":750,"meta":452,"style":452},"sudo nano \u002Fsrv\u002Fdocker\u002Fvaultwarden\u002F.env\n",[437,1896,1897],{"__ignoreMap":452},[456,1898,1899,1901,1903],{"class":458,"line":459},[456,1900,1130],{"class":462},[456,1902,1133],{"class":494},[456,1904,1905],{"class":494}," \u002Fsrv\u002Fdocker\u002Fvaultwarden\u002F.env\n",[391,1907,1908],{},"Add the following:",[446,1910,1912],{"className":834,"code":1911,"filename":744,"language":836,"meta":452,"style":452},"SSO_ENABLED=true\nSSO_ONLY=true\nSSO_AUTHORITY=https:\u002F\u002Fid.yourdomain.com\nSSO_CLIENT_ID=\nSSO_CLIENT_SECRET=\n",[437,1913,1914,1925,1934,1944,1951],{"__ignoreMap":452},[456,1915,1916,1919,1922],{"class":458,"line":459},[456,1917,1918],{"class":843},"SSO_ENABLED",[456,1920,1921],{"class":473},"=",[456,1923,1924],{"class":1038},"true\n",[456,1926,1927,1930,1932],{"class":458,"line":466},[456,1928,1929],{"class":843},"SSO_ONLY",[456,1931,1921],{"class":473},[456,1933,1924],{"class":1038},[456,1935,1936,1939,1941],{"class":458,"line":477},[456,1937,1938],{"class":843},"SSO_AUTHORITY",[456,1940,1921],{"class":473},[456,1942,1943],{"class":1038},"https:\u002F\u002Fid.yourdomain.com\n",[456,1945,1946,1949],{"class":458,"line":485},[456,1947,1948],{"class":843},"SSO_CLIENT_ID",[456,1950,847],{"class":473},[456,1952,1953,1956],{"class":458,"line":498},[456,1954,1955],{"class":843},"SSO_CLIENT_SECRET",[456,1957,847],{"class":473},[855,1959,1960,1968],{},[858,1961,1962],{},[861,1963,1964,1966],{},[864,1965,866],{},[864,1967,869],{},[874,1969,1970,1981,1992],{},[861,1971,1972,1978],{},[879,1973,1974],{},[437,1975,1976],{"className":834,"language":836,"style":452},[456,1977,1938],{"class":1038},[879,1979,1980],{},"Your OIDC provider's public URL (Pocket ID here)",[861,1982,1983,1989],{},[879,1984,1985],{},[437,1986,1987],{"className":834,"language":836,"style":452},[456,1988,1948],{"class":1038},[879,1990,1991],{},"The client ID copied from your provider",[861,1993,1994,2000],{},[879,1995,1996],{},[437,1997,1998],{"className":834,"language":836,"style":452},[456,1999,1955],{"class":1038},[879,2001,2002],{},"The client secret copied from your provider",[933,2004,2005,2006,2009],{},"Set ",[437,2007,2008],{},"SSO_ONLY=false"," instead if you'd rather keep the option to log in with a local master password too.",[391,2011,1795,2012,1800,2014,1804,2016,1808],{},[1797,2013],{"value":1799},[1797,2015],{"value":1803},[1797,2017],{"value":1807},[429,2019,2021],{"id":2020},"redeploy-the-stack","Redeploy the stack",[391,2023,2024,2025,2027],{},"Redeploy Vaultwarden. Your next visit to ",[437,2026,890],{}," will prompt for SSO login instead of (or alongside) the local master password.",[429,2029,914],{"id":2030},"done-2",[933,2032,2034,2035,2038],{"to":2033},"https:\u002F\u002Fgithub.com\u002Fdani-garcia\u002Fvaultwarden\u002Fwiki\u002FEnabling-SSO-support-using-OpenId-Connect","See the ",[686,2036,2037],{},"Vaultwarden SSO wiki"," for the full list of options, including per-organization enforcement and master password policies.",[680,2040,2041,2048],{"icon":452},[391,2042,2043,2044,2047],{},"✨ You can use ",[400,2045,255],{"href":2046},"\u002Fserveex\u002Fadvanced\u002Fauthentik"," instead of Pocket ID:",[2049,2050,2052],"collapsible",{"name":2051},"the Authentik setup steps",[425,2053,2055,2060,2071,2075,2093,2097,2114,2150],{"level":2054},"4",[2056,2057,2059],"h4",{"id":2058},"create-a-scope-mapping-for-the-email-claim","Create a scope mapping for the email claim",[391,2061,2062,2063,2066,2067,2070],{},"In Authentik, create a scope mapping named ",[437,2064,2065],{},"email"," with the expression ",[437,2068,2069],{},"return {\"email\": request.user.email, \"email_verified\": True}"," (Vaultwarden requires this claim).",[2056,2072,2074],{"id":2073},"create-the-application-and-provider","Create the application and provider",[391,2076,2077,2078,2080,2081,2084,2085,2088,2089,2092],{},"Create an application and an OAuth2\u002FOpenID Connect provider named ",[437,2079,245],{},", with a redirect URI (type ",[437,2082,2083],{},"Strict",") of ",[437,2086,2087],{},"https:\u002F\u002Fvault.yourdomain.com\u002Fidentity\u002Fconnect\u002Foidc-signin",". Under Advanced protocol settings, set the access token validity to more than 5 minutes, replace the default email scope with your custom mapping, and add the ",[437,2090,2091],{},"offline_access"," scope mapping.",[2056,2094,2096],{"id":2095},"set-vaultwardens-environment-variables","Set Vaultwarden's environment variables",[391,2098,2099,2100,2103,2104,2107,2108,2111,2112,491],{},"Note the provider's ",[686,2101,2102],{},"Client ID",", ",[686,2105,2106],{},"Client Secret",", and ",[686,2109,2110],{},"Slug",", then use them in Vaultwarden's ",[437,2113,744],{},[446,2115,2117],{"className":834,"code":2116,"filename":744,"language":836,"meta":452,"style":452},"SSO_AUTHORITY=https:\u002F\u002Fauthentik.yourdomain.com\u002Fapplication\u002Fo\u002F\u003Cslug>\u002F\nSSO_CLIENT_ID=\nSSO_CLIENT_SECRET=\nSSO_SCOPES=email profile offline_access\n",[437,2118,2119,2128,2134,2140],{"__ignoreMap":452},[456,2120,2121,2123,2125],{"class":458,"line":459},[456,2122,1938],{"class":843},[456,2124,1921],{"class":473},[456,2126,2127],{"class":1038},"https:\u002F\u002Fauthentik.yourdomain.com\u002Fapplication\u002Fo\u002F\u003Cslug>\u002F\n",[456,2129,2130,2132],{"class":458,"line":466},[456,2131,1948],{"class":843},[456,2133,847],{"class":473},[456,2135,2136,2138],{"class":458,"line":477},[456,2137,1955],{"class":843},[456,2139,847],{"class":473},[456,2141,2142,2145,2147],{"class":458,"line":485},[456,2143,2144],{"class":843},"SSO_SCOPES",[456,2146,1921],{"class":473},[456,2148,2149],{"class":1038},"email profile offline_access\n",[2056,2151,914],{"id":2152},"done-3",[2154,2155,2156],"style",{},"html pre.shiki code .sEgDM, html code.shiki .sEgDM{--shiki-light:#B392F0;--shiki-default:#FFCB6B;--shiki-dark:#B392F0}html pre.shiki code .sRuoG, html code.shiki .sRuoG{--shiki-light:#85E89D;--shiki-default:#F07178;--shiki-dark:#85E89D}html pre.shiki code .s8jd1, html code.shiki .s8jd1{--shiki-light:#E1E4E8;--shiki-default:#89DDFF;--shiki-dark:#E1E4E8}html pre.shiki code .s11XM, html code.shiki .s11XM{--shiki-light:#9ECBFF;--shiki-default:#C3E88D;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sDvJj, html code.shiki .sDvJj{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sJGgK, html code.shiki .sJGgK{--shiki-light:#79B8FF;--shiki-default:#82AAFF;--shiki-dark:#79B8FF}html pre.shiki code .sJWha, html code.shiki .sJWha{--shiki-light:#79B8FF;--shiki-default:#C3E88D;--shiki-dark:#79B8FF}html pre.shiki code .s8K8j, html code.shiki .s8K8j{--shiki-light:#9ECBFF;--shiki-default:#89DDFF;--shiki-dark:#9ECBFF}html pre.shiki code .sJPTy, html code.shiki .sJPTy{--shiki-light:#F97583;--shiki-default:#89DDFF;--shiki-dark:#F97583}html pre.shiki code .swwWl, html code.shiki .swwWl{--shiki-light:#79B8FF;--shiki-default:#F78C6C;--shiki-dark:#79B8FF}html pre.shiki code .szyEh, html code.shiki .szyEh{--shiki-light:#F97583;--shiki-default:#F07178;--shiki-dark:#F97583}html pre.shiki code .slcoZ, html code.shiki .slcoZ{--shiki-light:#E1E4E8;--shiki-default:#EEFFFF;--shiki-dark:#E1E4E8}html pre.shiki code .s08Ry, html code.shiki .s08Ry{--shiki-light:#79B8FF;--shiki-default:#FF9CAC;--shiki-dark:#79B8FF}html pre.shiki code .sAoO4, html code.shiki .sAoO4{--shiki-light:#F97583;--shiki-default:#C792EA;--shiki-dark:#F97583}html pre.shiki code .sxjBU, html code.shiki .sxjBU{--shiki-light:#DBEDFF;--shiki-default:#C3E88D;--shiki-dark:#DBEDFF}",{"title":452,"searchDepth":466,"depth":466,"links":2158},[2159,2164,2169],{"id":418,"depth":466,"text":419,"children":2160},[2161,2162,2163],{"id":431,"depth":477,"text":432},{"id":733,"depth":477,"text":734},{"id":913,"depth":477,"text":914},{"id":924,"depth":466,"text":925,"children":2165},[2166,2167,2168],{"id":967,"depth":477,"text":968},{"id":1104,"depth":477,"text":1105},{"id":1811,"depth":477,"text":914},{"id":1856,"depth":466,"text":1857,"children":2170},[2171,2172,2173,2174],{"id":1865,"depth":477,"text":1866},{"id":1884,"depth":477,"text":1885},{"id":2020,"depth":477,"text":2021},{"id":2030,"depth":477,"text":914},[2176],"Djeex","Install Vaultwarden, a self-hosted Bitwarden-compatible password manager to replace Google or Apple password managers across all your devices.","md",null,{},{"title":245,"description":2177},"mHw5RxKPnbXD8-TJUPXCuGHUrGFp2NbTEvL-VF_vIo4",[2184,2186],{"title":241,"path":242,"stem":243,"description":2185,"children":-1},"Install AdGuard Home for network-wide ad and tracker blocking with DNS-over-HTTPS, client management, and custom filtering rules.",{"title":255,"path":256,"stem":257,"description":2187,"children":-1},"Install Authentik as a self-hosted identity provider, configure MFA and protect your services with SSO and reverse proxy authentication.",1788645848997]