{"id":32783,"date":"2023-09-06T17:41:12","date_gmt":"2023-01-25T17:42:06","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/"},"modified":"2024-04-30T21:46:30","modified_gmt":"2024-04-30T13:46:30","slug":"%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/","title":{"rendered":"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668"},"content":{"rendered":"<h2>\u9996\u5148<\/h2>\n<p>\u516d\u6247\u82b1\u6210\u957f\u4e86\u3002<br \/>\n\u56e0\u4e3a\u4ee5\u524d\u6211\u4e00\u76f4\u5728\u9a97\u4eba\u8bf4\u8981\u5efa\u7acb\u4e00\u4e2a\u72ec\u7acb\u7684\u670d\u52a1\u5668\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e00\u76f4\u90fd\u6ca1\u6709\u5efa\u6210\u3002\u6240\u4ee5\u6211\u60f3\u53c2\u52a0\u4e00\u4e0b #MisskeyInstallBattle\uff0c\u5c1d\u8bd5\u7740\u521b\u5efa\u4e86\u4e00\u4e2a\u3002<br \/>\n\u8fd9\u662f\u4e00\u4e2a\u6a21\u4eff\u4ed6\u4eba\u6784\u5efa\u6b65\u9aa4\u7684\u5907\u5fd8\u5f55\u3002<br \/>\n\u867d\u7136\u6211\u5bf9Linux\u4e00\u7a8d\u4e0d\u901a\u2122\uff0c\u4f46\u8fd8\u662f\u7a0d\u5fae\u505a\u4e86\u4e00\u4e9b\u9ebb\u70e6\u7684\u4e8b\u60c5\uff0c\u5e0c\u671b\u80fd\u5bf9\u5176\u4ed6\u4eba\u6709\u4e9b\u53c2\u8003\u4ef7\u503c\u3002<\/p>\n<h2>\u8fd9\u6b21\u7684\u6784\u6210<\/h2>\n<p>\u5728\u4f7f\u7528Fedora\u65f6\uff0c\u6211\u4eec\u53c2\u8003\u4e86\u5b98\u65b9\u7684\u5b89\u88c5\u65b9\u6cd5\uff08\u4e0d\u4f7f\u7528Docker\uff09\u6765\u786e\u5b9a\u6b65\u9aa4\u548c\u8f6f\u4ef6\u3002<\/p>\n<p>&nbsp;<\/p>\n<h3>\u865a\u62df\u4e13\u7528\u670d\u52a1\u5668\u73af\u5883<\/h3>\n<p>\u4f7f\u7528\u5361\u9ad8\u4e9a\u4e91\u670d\u52a1\u3002<\/p>\n<div>\n<div class=\"post-table\">\u9805\u76ee\u5024OSFedora 39 BetaCPU2\u30b3\u30a2\u30e1\u30e2\u30ea2 GB\u30b9\u30c8\u30ec\u30fc\u30b8200GB<\/div>\n<\/div>\n<h3>\u57df\u540d\u7cfb\u7edf<\/h3>\n<p>\u5728Gandi.net\u4e0a\u83b7\u5f97\u3002<\/p>\n<h3>\u6bcf\u4e2a\u8f6f\u4ef6\u7248\u672c\u5728\u4efb\u52a1\u65f6\u70b9\u4e0a\u7684\u60c5\u51b5<\/h3>\n<p>\u4e3a\u4e86\u652f\u6301QUIC\uff0c\u9700\u8981\u6784\u5efaNginx\u3002<\/p>\n<div>\n<div class=\"post-table\">\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30d0\u30fc\u30b8\u30e7\u30f3Misskeyv2023.10.1Node.jsv20.8.1PostgreSQL15.4Redis7.2.1FFmpeg6.0Nginx1.25.2 w\/ quictls<\/div>\n<\/div>\n<h3>\u5bf9\u8c61\u5b58\u50a8<\/h3>\n<p>\u4f7f\u7528\u4e86\u82a5\u672b\u3002<\/p>\n<h3>\u8bc1\u4e66<\/h3>\n<p>\u4f7f\u7528ZeroSSL\u3002<\/p>\n<p>(Note: This is a direct translation of the given statement into Chinese.)<\/p>\n<h3>\u90ae\u7bb1<\/h3>\n<p>\u4f7f\u7528\u6a31\u82b1\u7684\u90ae\u7bb1\u3002<\/p>\n<h3>\u4e0d\u4f7f\u7528\u7684\u7269\u54c1 (B\u00f9 de<\/h3>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Docker<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Cloudflare<\/ul>\n<h2>\u64cd\u4f5c\u7cfb\u7edf\u5b89\u88c5<\/h2>\n<h3>\u521b\u5efaVPS\u5b9e\u4f8b<\/h3>\n<p>\u767b\u5f55KAGOYA\u4e91VPS\u63a7\u5236\u9762\u677f\u3002<br \/>\n\u4e3a\u4e86\u4f7f\u7528\u4e0d\u5728\u6a21\u677f\u4e2d\u7684\u8f6f\u4ef6\u5305\uff0c\u4e0a\u4f20Fedora\u7684ISO\u6620\u50cf\u3002<br \/>\n\u590d\u5236\u7c98\u8d34\u5230Fedora\u4e0b\u8f7d\u9875\u9762\u7684ISO\u5b9e\u9645URL\u3002<br \/>\n\u7531\u4e8eISO\u6620\u50cf\u4f1a\u57281\u5929\u540e\u6d88\u5931\uff0c\u56e0\u6b64\u540d\u79f0\u53ef\u4ee5\u4efb\u610f\u8bbe\u7f6e\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d140737434c4406bfa204\/24-0.png\" alt=\"rezjr97uum9u96g.png\" \/><\/div>\n<div>\u5982\u679c\u4f7f\u7528\u5176\u4ed6\u64cd\u4f5c\u7cfb\u7edf\u6620\u50cf\uff0c\u7531\u4e8eKAGOYA\u7684\u6620\u50cf\u662f\u5728BIOS\u4e0a\u8fd0\u884c\u7684\uff0c\u56e0\u6b64\u65e0\u6cd5\u542f\u52a8\u4ec5\u652f\u6301UEFI\u7684\u81ea\u5b9a\u4e49ISO\uff08\u5982CentOS Stream 9\uff09\u3002<\/div>\n<p>\u8f6c\u5230\u201c\u521b\u5efa\u5b9e\u4f8b\u201d\u9875\u9762\uff0c\u9009\u62e9\u5df2\u4e0a\u4f20\u5230ISO\u6620\u50cf\u7684\u56fe\u50cf\u3002<br \/>\n\u9009\u62e9\u4ee5CPU 2\u6838 \/ \u5185\u5b582GB \/ \u5b58\u50a8200GB\u4e3a\u89c4\u683c\u7684\u5b9e\u4f8b\u3002\uff08\u9274\u4e8e\u6b64\u6b21\u4f7f\u7528\u5bf9\u8c61\u5b58\u50a8\uff0c\u53ef\u80fd\u4e0d\u9700\u8981\u9009\u62e9\u5927\u5bb9\u91cf\u7684\u5b58\u50a8\u3002\uff09<br \/>\nvirtio\u4fdd\u6301\u9ed8\u8ba4\u8bbe\u7f6e\u5373\u53ef\u3002<br \/>\n\u8f93\u5165\u63a7\u5236\u53f0\u767b\u5f55\u5bc6\u7801\u548c\u5b9e\u4f8b\u540d\u79f0\uff08\u4e3a\u4e86\u7ba1\u7406VPS\uff0c\u540d\u79f0\u53ef\u4ee5\u968f\u610f\uff09\uff0c\u7136\u540e\u521b\u5efa\u5b9e\u4f8b\u3002<br \/>\n\u521b\u5efa\u5b9e\u4f8b\u540e\uff0c\u8f6c\u5230\u5b9e\u4f8b\u4fe1\u606f\u9875\u9762\uff0c\u786e\u8ba4\u5206\u914d\u7684IPv4\u548cIPv6\u5730\u5740\u3002<\/p>\n<h3>DNS\u8bb0\u5f55\u6ce8\u518c<\/h3>\n<h4>\u6b63\u5f15\u304d \u7684\u610f\u601d\u662f\u201c\u53e4\u65f6\u5019\u8239\u6216\u6c7d\u8f66\u4ece\u80cc\u9762\u53cd\u65b9\u5411\u9a76\u79bb\u201d\u3002<\/h4>\n<p>\u767b\u5f55Gandi.net\uff0c\u5728\u76ee\u6807\u57df\u540d\u4e2d\u6dfb\u52a0\u4e00\u4e2aA\u8bb0\u5f55\uff08IPv4\uff09\u548c\u4e00\u4e2aAAAA\u8bb0\u5f55\uff08IPv6\uff09\u3002TTL\u4fdd\u6301\u9ed8\u8ba4\u503c\u5373\u53ef\u3002<\/p>\n<h4>\u9006\u5f15\u304d can be paraphrased in Chinese as &#8220;\u53cd\u5411\u641c\u7d22&#8221; .<\/h4>\n<p>\u5728KAGOYA\u7684\u5b9e\u4f8b\u4fe1\u606f\u7684\u9006\u5f15\u8bbe\u7f6e\u5904\u8f93\u5165\u57df\u540d\u3002<\/p>\n<h3>&#8220;\u5b89\u88c5&#8221;<\/h3>\n<p>\u5f53\u60a8\u542f\u52a8\u63a7\u5236\u53f0\u65f6\uff0c\u5c06\u5f39\u51fa\u4e00\u4e2a\u663e\u793a\u63a7\u5236\u53f0\u7684\u5f39\u7a97\u3002<br \/>\n\u7531\u4e8e\u67d0\u4e9b\u6d4f\u89c8\u5668\u4f1a\u5c06\u5f39\u7a97\u963b\u6b62\u4e00\u6b21\uff0c\u60a8\u53ef\u4ee5\u5728\u6388\u6743\u540e\u518d\u6b21\u542f\u52a8\u3002<br \/>\n\u6b64\u5916\uff0c\u7531\u4e8e\u5c4f\u5e55\u5f88\u5feb\u4f1a\u8d85\u65f6\uff0c\u60a8\u53ef\u4ee5\u6bcf\u6b21\u6309\u4e0bF5\u6216Ctrl+R\u6765\u91cd\u65b0\u52a0\u8f7d\u9875\u9762\uff0c\u6216\u8005\u91cd\u65b0\u6253\u5f00\u7a97\u53e3\u3002<\/p>\n<p>\u786e\u8ba4Fedora\u5b89\u88c5\u754c\u9762\u662f\u5426\u663e\u793a\u3002<\/p>\n<h4>\u8bed\u8a00\u8bbe\u7f6e<\/h4>\n<p>\u7531\u4e8e\u8f6c\u6362\u4e3a\u65e5\u8bed\u53ef\u80fd\u4f1a\u7a0d\u5fae\u9ebb\u70e6\uff0c\u6240\u4ee5\u8bf7\u7ee7\u7eed\u4f7f\u7528\u82f1\u8bed\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d140737434c4406bfa204\/37-0.png\" alt=\"hfyk9gapjgb3t23.png\" \/><\/div>\n<h4>\u5b89\u88c5\u6982\u8ff0<\/h4>\n<p>\u6309\u7167\u4ee5\u4e0b\u8bbe\u5b9a\u7684\u987a\u5e8f\u8fdb\u884c\u8bb0\u8ff0\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d140737434c4406bfa204\/40-0.png\" alt=\"uxxknkz79537ytd.png\" \/><\/div>\n<h5>\u952e\u76d8<\/h5>\n<p>\u6839\u636e\u81ea\u5df1\u4f7f\u7528\u7684\u952e\u76d8\u9009\u62e9\u82f1\u8bed\uff08\u7f8e\u56fd\uff09\u6216\u65e5\u8bed\u3002\uff08\u5b9e\u9645\u4e0a\uff0c\u7531\u4e8e\u51e0\u4e4e\u90fd\u662f\u4f7f\u7528SSH\u64cd\u4f5c\uff0c\u9664\u4e86\u6700\u521d\u7684\u5bc6\u7801\u8f93\u5165\u5916\uff0c\u952e\u76d8\u5e76\u4e0d\u592a\u76f8\u5173\u3002\uff09<\/p>\n<h5>\u8bed\u8a00\u652f\u6301<\/h5>\n<p>\u6682\u65f6\u589e\u52a0\u4e00\u9879\u65e5\u8bed\uff08\u65e5\u672c\uff09\u5185\u5bb9\u3002<\/p>\n<h5>\u8f6f\u4ef6\u9009\u62e9<\/h5>\n<p>\u786e\u8ba4\u5df2\u9009\u62e9 Fedora \u670d\u52a1\u5668\u7248\u3002<\/p>\n<h5>\u5b89\u88c5\u76ee\u6807\u5730\u70b9<\/h5>\n<p>\u9009\u62e9Custom\u5e76\u70b9\u51fbDone\u3002<\/p>\n<p>\u8fdb\u5165\u5206\u533a\u521b\u5efa\u754c\u9762\uff0c\u9996\u5148\u9009\u62e9LVM\u81ea\u52a8\u521b\u5efa(\u70b9\u51fb\u6b64\u5904\u81ea\u52a8\u521b\u5efa)\u3002<\/p>\n<p>BIOS Boot\u3001\/boot\u3001\/\u8fd9\u4e09\u4e2a\u5206\u533a\u5c06\u81ea\u52a8\u521b\u5efa\u3002<\/p>\n<p>\u7531\u4e8e2GB\u7684\u5185\u5b58\u4e0d\u8db3\u4ee5\u6784\u5efaMisskey\uff0c\u56e0\u6b64\u4f7f\u7528&#8221;+&#8221;\u6765\u521b\u5efaswap\u3002\u7531\u4e8e\u6b64\u6b21\u4f7f\u7528\u4e86\u5927\u5bb9\u91cf\u7684\u5b58\u50a8\uff0c\u6240\u4ee5\u521b\u5efa\u4e86\u7a0d\u5fae\u591a\u4e00\u70b9\u76848GiB\u3002<\/p>\n<p>\u7136\u540e\uff0c\u5728Desired Capacity\u7684\/\u5206\u533a\u5904\u586b\u5165\u975e\u5e38\u5927\u7684\u503c\u5e76\u70b9\u51fbUpdate\uff0c\u5269\u4f59\u7684\u5168\u90e8\u5bb9\u91cf\u5c06\u81ea\u52a8\u5206\u914d\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d140737434c4406bfa204\/49-0.png\" alt=\"aj86nb8ie8atm7z.png\" \/><\/div>\n<h5>\u7f51\u7edc\u548c\u4e3b\u673a\u540d<\/h5>\n<p>\u5728\u4ee5\u592a\u7f51\uff08ens3\uff09\u88ab\u9009\u62e9\u72b6\u6001\u4e0b\uff0c\u70b9\u51fb\u201c\u914d\u7f6e\u201d\u3002<\/p>\n<h6>IPv4 \u914d\u7f6e<\/h6>\n<div>\n<div class=\"post-table\">\u9805\u76ee\u5024MethodManualAddress\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u753b\u9762\u306eIPv4\u306eIPNetmask\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u753b\u9762\u306e\u30b5\u30d6\u30cd\u30c3\u30c8Gateway\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u753b\u9762\u306e\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4DNS servers\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u753b\u9762\u306eDNS\u3001<br \/>\n\u307e\u305f\u306f\u304a\u597d\u304d\u306aDNS\u30b5\u30fc\u30d0\u306eIP\u3092\u30ab\u30f3\u30de(,)\u5f62\u5f0f\u3067\u5165\u529b<\/div>\n<\/div>\n<h6>IPv6\u8bbe\u7f6e<\/h6>\n<div>\n<div class=\"post-table\">\u9805\u76ee\u5024MethodManualAddress\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u753b\u9762\u306eIPv6\u306eIPPrefix64GatewayIPv6\u306e\u5148\u982d4\u3064\u90e8\u5206\u306b::1\u3092\u4ed8\u52a0 (xxxx:yyyy:zzzz:wwww::1)DNS servers\u304a\u597d\u304d\u306aDNS\u30b5\u30fc\u30d0\u306eIP\u3092\u30ab\u30f3\u30de(,)\u5f62\u5f0f\u3067\u5165\u529b<\/div>\n<\/div>\n<p>\u4e00\u65e6\u5b8c\u6210\u8f93\u5165\u4e4b\u540e\uff0c\u8bf7\u4fdd\u5b58\u5e76\u6fc0\u6d3b\u3002\u5982\u679cDNS\u8bb0\u5f55\u5df2\u7ecf\u751f\u6548\uff0c\u5219\u5728\u5f53\u524d\u4e3b\u673a\u540d\u5904\u4f1a\u663e\u793a\u57df\u540d\u3002<br \/>\n\u5982\u679c\u663e\u793a\u4e86\u201ckagoya\u201d\u7684\u5185\u5bb9\uff0c\u5219\u8bf7\u5728\u4e3b\u673a\u540d\u5904\u8f93\u5165\u8981\u4f7f\u7528\u7684\u57df\u540d\u5e76\u5e94\u7528\u3002<\/p>\n<h5>\u65f6\u95f4\u548c\u65e5\u671f<\/h5>\n<p>\u70b9\u51fb\u65e5\u672c\u5730\u533a\u3002\u786e\u4fdd\u65f6\u533a\u8bbe\u7f6e\u4e3aAsia\/Tokyo\uff0c\u7f51\u7edc\u65f6\u95f4\u5df2\u542f\u7528\u3002<\/p>\n<h5>\u7528\u6237\u521b\u5efa<\/h5>\n<p>\u8f93\u5165\u7528\u6237\u540d\u548c\u5bc6\u7801\u3002\u786e\u8ba4\u4e24\u4e2a\u590d\u9009\u6846\u90fd\u88ab\u9009\u4e2d\u3002<\/p>\n<h5>\u5f00\u59cb\u5b89\u88c5<\/h5>\n<p>\u5728\u4ee5\u4e0a\u7684\u8bbe\u7f6e\u4e0b\uff0c\u70b9\u51fb\u201cBegin Installation\u201d\u6309\u94ae\uff0c\u5f00\u59cb\u5b89\u88c5\u3002<br \/>\n\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u901a\u8fc7\u201cReboot System\u201d\u91cd\u65b0\u542f\u52a8\u3002<br \/>\n\u786e\u4fdd\u5b89\u88c5\u7684\u64cd\u4f5c\u7cfb\u7edf\u6210\u529f\u542f\u52a8\u3002<\/p>\n<h2>SSH\u8fde\u63a5\u8bbe\u7f6e<\/h2>\n<p>\u4f7f\u7528\u624b\u5934\u7684\u7ec8\u7aef\u8f6f\u4ef6\u8fdb\u884cSSH\u8fde\u63a5\uff0c\u4e3a\u4e86\u52a0\u5f3a\u5b89\u5168\u6027\uff0c\u66f4\u6539SSH\u7684\u7aef\u53e3\u53f7\u5e76\u5207\u6362\u5230\u516c\u94a5\u8ba4\u8bc1\u3002<\/p>\n<h3>\u516c\u958b\u5bc6\u94a5\u52a0\u5bc6<\/h3>\n<h4>\u6dfb\u52a0\u65b0\u7684\u9470\u5319<\/h4>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u3067\u9375\u3092\u4f5c\u6210\u3059\u308b(\u624b\u9806\u7701\u7565)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30b5\u30fc\u30d0\u306bSCP\u306a\u3069\u3092\u7528\u3044\u3066\u4f5c\u6210\u3057\u305f\u516c\u958b\u9375\u3092\u30ea\u30e2\u30fc\u30c8\u306b\u8ee2\u9001\u3059\u308b(\u624b\u9806\u7701\u7565)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u4ee5\u4e0b\u30b3\u30de\u30f3\u30c9\u3067authorized_keys\u306b\u9375\u3092\u767b\u9332<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nb\">mkdir<\/span> ~\/.ssh\r\n<span class=\"nb\">cat<\/span> <span class=\"o\">(<\/span>\u6301\u3063\u3066\u304d\u305f\u30d5\u30a1\u30a4\u30eb<span class=\"o\">)<\/span> <span class=\"o\">&gt;&gt;<\/span> ~\/.ssh\/authorized_keys\r\n<span class=\"nb\">chmod <\/span>700 ~\/.ssh\r\n<span class=\"nb\">chmod <\/span>600 ~\/.ssh\/authorized_keys\r\n<span class=\"nb\">rm<\/span> <span class=\"o\">(<\/span>\u6301\u3063\u3066\u304d\u305f\u30d5\u30a1\u30a4\u30eb<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u516c\u958b\u9375\u8a8d\u8a3c\u3067\u5bfe\u5fdc\u3059\u308b\u79d8\u5bc6\u9375\u3092\u6307\u5b9a\u3057\u3001SSH\u63a5\u7d9a\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/ul>\n<h4>\u7981\u6b62\u4f7f\u7528\u5bc6\u7801\u767b\u5f55\u548croot\u767b\u5f55<\/h4>\n<p>\/etc\/ssh\/sshd_config.d\/\u5185\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u8ffd\u8a18<\/p>\n<pre class=\"post-pre\"><code>PermitRootLogin no\r\nPasswordAuthentication no\r\n<\/code><\/pre>\n<p>sudo systemctl restart sshd.service\u3067SSH\u30b5\u30fc\u30d0\u3092\u518d\u8d77\u52d5\u3057\u3001\u4eca\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u7dad\u6301\u3057\u305f\u307e\u307e\u5225\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/p>\n<h3>\u66f4\u6539\u7aef\u53e3\u7f16\u53f7<\/h3>\n<h4>\u6dfb\u52a0\u7aef\u53e3\u53f7<\/h4>\n<h5>\u66f4\u6539sshd_config\u6587\u4ef6<\/h5>\n<p>\/etc\/ssh\/sshd_config.d\/\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u8ffd\u8a18<\/p>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ Port 22\r\n+ Port (\u5909\u66f4\u5f8c\u306e\u30dd\u30fc\u30c8\u756a\u53f7)\r\n<\/span><span class=\"p\">PermitRootLogin no\r\nPasswordAuthentication no\r\n<\/span><\/code><\/pre>\n<h5>\u589e\u52a0\u9632\u706b\u5899<\/h5>\n<ul class=\"post-ul\">ssh\u306e\u30b5\u30fc\u30d3\u30b9\u30d5\u30a1\u30a4\u30eb\u3092\u8907\u88fd\u3059\u308b<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo cp<\/span> \/usr\/lib\/firewalld\/services\/ssh.xml \/etc\/firewalld\/services\/ssh-alt.xml\r\n<\/code><\/pre>\n<p>ssh-alt.xml\u3092\u5909\u66f4<\/p>\n<pre class=\"post-pre\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;service&gt;\r\n<span class=\"gd\">- &lt;short&gt;SSH&lt;\/short&gt;\r\n<\/span><span class=\"gi\">+ &lt;short&gt;SSH-ALT&lt;\/short&gt;\r\n<\/span>  &lt;description&gt;Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessin    g your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.&lt;\/description&gt;\r\n<span class=\"gd\">- &lt;port protocol=\"tcp\" port=\"22\"\/&gt;\r\n<\/span><span class=\"gi\">+ &lt;port protocol=\"tcp\" port=\"(\u5909\u66f4\u5f8c\u306e\u30dd\u30fc\u30c8\u756a\u53f7)\"\/&gt;\r\n<\/span>&lt;\/service&gt;\r\n<\/code><\/pre>\n<ul class=\"post-ul\">\u4ee5\u4e0b\u3067\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u30eb\u30fc\u30eb\u8ffd\u52a0<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c\"># ssh-alt\u3092\u53cd\u6620<\/span>\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--reload<\/span>\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--get-services<\/span> | <span class=\"nb\">grep <\/span>ssh-alt\r\n\r\n<span class=\"c\"># ssh-alt\u3092\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u30eb\u30fc\u30eb\u306b\u8ffd\u52a0<\/span>\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--permanent<\/span> <span class=\"nt\">--add-service<\/span><span class=\"o\">=<\/span>ssh-alt\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--reload<\/span>\r\n\r\n<span class=\"c\"># \u78ba\u8a8d<\/span>\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--list-all<\/span>\r\n<\/code><\/pre>\n<h5>\u6dfb\u52a0SELinux\u89c4\u5219<\/h5>\n<ul class=\"post-ul\">\u4ee5\u4e0b\u5b9f\u884c<\/ul>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>semanage port <span class=\"nt\">--add<\/span> <span class=\"nt\">--type<\/span> ssh_port_t <span class=\"nt\">--proto<\/span> tcp <span class=\"o\">(<\/span>\u5909\u66f4\u5f8c\u306e\u30dd\u30fc\u30c8\u756a\u53f7<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<p>sudo systemctl restart sshd.service\u3067SSH\u30b5\u30fc\u30d0\u3092\u518d\u8d77\u52d5\u3057\u3001\u5909\u66f4\u5f8c\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/p>\n<h4>\u5220\u9664\u7aef\u53e3\u53f7\u3002<\/h4>\n<h5>\u66f4\u6539sshd_config\u6587\u4ef6<\/h5>\n<p>\/etc\/ssh\/sshd_config.d\/\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u5909\u66f4<\/p>\n<pre class=\"post-pre\"><code><span class=\"gd\">- Port 22\r\n<\/span><span class=\"p\">Port (\u5909\u66f4\u5f8c\u306e\u30dd\u30fc\u30c8\u756a\u53f7)\r\nPermitRootLogin no\r\nPasswordAuthentication no\r\n<\/span><\/code><\/pre>\n<h5>\u5220\u9664\u9632\u706b\u5899<\/h5>\n<ul class=\"post-ul\">\u4ee5\u4e0b\u3067\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u30eb\u30fc\u30eb\u524a\u9664<\/ul>\n<pre class=\"post-pre\"><code><span class=\"c\"># ssh\u3092\u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u30eb\u30fc\u30eb\u304b\u3089\u524a\u9664<\/span>\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--permanent<\/span> <span class=\"nt\">--remove-service<\/span><span class=\"o\">=<\/span>ssh\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--reload<\/span>\r\n\r\n<span class=\"c\"># \u78ba\u8a8d<\/span>\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--list-all<\/span>\r\n<\/code><\/pre>\n<p>sudo systemctl restart sshd.service\u3067SSH\u30b5\u30fc\u30d0\u3092\u518d\u8d77\u52d5\u3057\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30dd\u30fc\u30c8\u756a\u53f7\u3067\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/p>\n<h2>\u5176\u4ed6\u9632\u706b\u5899\u66f4\u65b0<\/h2>\n<h3>\u5173\u95ed\u9a7e\u9a76\u8231<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--permanent<\/span> <span class=\"nt\">--remove-service<\/span><span class=\"o\">=<\/span>cockpit\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--reload<\/span>\r\n<span class=\"nb\">sudo <\/span>systemctl disable <span class=\"nt\">--now<\/span> cockpit.socket\r\n<\/code><\/pre>\n<h3>\u4f7fHTTP\u534f\u8bae\u8fdb\u884c\u901a\u4fe1\u3002<\/h3>\n<h4>\u9632\u706b\u5899\u89c4\u5219<\/h4>\n<p>\u5982\u679c\u672a\u5b9a\u4e49http3\uff0c\u5219\u901a\u8fc7add-port\u5c06443\/udp\u4f20\u9012\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--permanent<\/span> <span class=\"nt\">--add-service<\/span><span class=\"o\">=<\/span>http\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--permanent<\/span> <span class=\"nt\">--add-service<\/span><span class=\"o\">=<\/span>https\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--permanent<\/span> <span class=\"nt\">--add-service<\/span><span class=\"o\">=<\/span>http3\r\n<span class=\"nb\">sudo <\/span>firewall-cmd <span class=\"nt\">--reload<\/span>\r\n<\/code><\/pre>\n<h4>SELinux\u89c4\u5219 (SELinux<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>setsebool <span class=\"nt\">-P<\/span> httpd_can_network_connect 1\r\n<span class=\"nb\">sudo <\/span>setsebool <span class=\"nt\">-P<\/span> httpd_can_network_relay 1\r\n<span class=\"nb\">sudo <\/span>semanage port <span class=\"nt\">--add<\/span> <span class=\"nt\">--type<\/span> http_port_t <span class=\"nt\">--proto<\/span> udp 443\r\n<\/code><\/pre>\n<h3>\u9632\u62a4\u4e91<\/h3>\n<p>\u968f\u4fbf\u653e\u5728\u90a3\u91cc\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>fail2ban\r\n<span class=\"nb\">sudo <\/span>systemctl <span class=\"nb\">enable<\/span> <span class=\"nt\">--now<\/span> fail2ban.service\r\n<\/code><\/pre>\n<h2>\u69cb\u5efaNginx<\/h2>\n<p>\u5982\u679c\u8981\u5c06Nginx\u9002\u914dQUIC\u534f\u8bae\uff0c\u90a3\u4e48\u53ea\u4f7f\u7528\u8f6f\u4ef6\u5305\u81ea\u5e26\u7684Nginx\uff0c\u5b83\u662f\u4f7f\u7528\u7684\u5185\u7f6eOpenSSL\uff08\u4e0d\u652f\u6301QUIC\uff09\uff0c\u6240\u4ee5\u65e0\u6cd5\u8fd0\u884cQUIC\u3002<br \/>\n\u56e0\u6b64\uff0c\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u96c6\u6210\u4e86\u652f\u6301QUIC\u7684SSL\u8f6f\u4ef6\u5305\u7684Nginx\u3002<br \/>\n\u6b64\u5916\uff0c\u7531\u4e8eWasabi\u5b58\u50a8\u4e0d\u80fd\u8fdb\u884c\u516c\u5171\u8bbf\u95ee\uff08\u8bf7\u53c2\u8003\u4ee5\u4e0b\u4fe1\u606f\uff09\uff0c\u56e0\u6b64\u9700\u8981\u4ee5\u67d0\u79cd\u65b9\u5f0f\u96c6\u6210AWS\u7684\u8eab\u4efd\u9a8c\u8bc1\u8bbf\u95ee\u529f\u80fd\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u8fd9\u6b21\u6211\u4eec\u5c06\u4f7f\u7528quictls\u6765\u66ff\u4ee3OpenSSL\uff0c\u5e76\u4f7f\u7528ngx_aws_auth\u6a21\u5757\u6765\u8fdb\u884cAWS\u7684\u8ba4\u8bc1\u3002<\/p>\n<h3>\u5b89\u88c5\u57fa\u672c\u8f6f\u4ef6\u5305\u3002<\/h3>\n<p>\u5b89\u88c5\u901a\u7528\u5305\u4ee5\u6784\u5efa\u3002\u6bcf\u4e2a\u6784\u5efa\u4e2d\u6240\u9700\u7684\u7279\u5b9a\u5305\u4f1a\u9010\u6b21\u5217\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf groupinstall <span class=\"s1\">'Development Tools'<\/span>\r\n<span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>cmake\r\n<\/code><\/pre>\n<h3>\u5feb\u901fTLS\u7684\u5b89\u88c5<\/h3>\n<h4>\u542f\u7528kTLS<\/h4>\n<p>\u636e\u8bf4\u5c06TLS\u5904\u7406\u59d4\u6258\u7ed9\u5185\u6838\u53ef\u4ee5\u63d0\u9ad8\u6027\u80fd\uff0c\u6240\u4ee5\u6211\u60f3\u8bd5\u4e00\u8bd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>modprobe tls\r\n<\/code><\/pre>\n<h4>\u5b89\u88c5\u5fc5\u8981\u7684\u8f6f\u4ef6\u5305<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>perl wget gcc gcc-arm-linux-gnu tcp_wrappers\r\n<\/code><\/pre>\n<h4>\u4e0b\u8f7d\u6e90\u4ee3\u7801<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd<\/span> \/usr\/local\/src\r\n<span class=\"nb\">sudo <\/span>git clone https:\/\/github.com\/quictls\/openssl.git\r\n<span class=\"nb\">cd <\/span>openssl\r\n<span class=\"nb\">sudo <\/span>git submodule update <span class=\"nt\">--init<\/span>\r\n<\/code><\/pre>\n<h4>\u5b89\u88c5<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo<\/span> .\/Configure enable-ktls\r\n<span class=\"nb\">sudo <\/span>make\r\n<span class=\"nb\">sudo <\/span>make <span class=\"nb\">install<\/span>\r\n<\/code><\/pre>\n<h4>\u8bbe\u7f6e\u5e93\u7684\u8def\u5f84<\/h4>\n<p>\u7531\u4e8e\/usr\/local\/lib64\u8def\u5f84\u6ca1\u6709\u88ab\u6b63\u786e\u8bbe\u7f6e\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u5176\u6dfb\u52a0\u5230\u73af\u5883\u53d8\u91cf\u4e2d\u901a\u884c\u3002<\/p>\n<p>\/etc\/ld.so.conf.d\/\u5185\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u8ffd\u8a18<\/p>\n<pre class=\"post-pre\"><code>\/usr\/local\/lib\r\n\/usr\/local\/lib64\r\n<\/code><\/pre>\n<p>sudo ldconfig\u3067\u53cd\u6620<\/p>\n<p>openssl version\u3092\u5b9f\u884c\u3057\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u306b+quic\u304c\u3064\u3044\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/p>\n<p>\u7559\u4e0bquictls\u7684\u6e90\u4ee3\u7801\u4f9b\u5728\u6784\u5efaNginx\u65f6\u4f7f\u7528\u3002<\/p>\n<h3>\u51c6\u5907AWS\u4ee3\u7406\u6a21\u5757<\/h3>\n<p>\u542c\u8bf4Wasabi\u65e0\u6cd5\u8fdb\u884c\u516c\u5171\u8bbf\u95ee\uff0c\u5e76\u4e14\u4f3c\u4e4e\u65e0\u6cd5\u6b63\u5e38\u4f7f\u7528SigV4\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u5b83\u4e0d\u8d77\u4f5c\u7528\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u7531\u4e8e\u6ca1\u6709\u529e\u6cd5\uff0c\u4e3a\u4e86\u80fd\u591f\u4f7f\u7528SigV2\u8fdb\u884c\u8ba4\u8bc1\uff0c\u9700\u8981\u5c06\u6a21\u5757\u66f4\u6539\u4e3aV2\u5206\u652f\u7684\u7248\u672c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd<\/span> \/usr\/local\/src\r\n<span class=\"nb\">sudo <\/span>git clone https:\/\/github.com\/anomalizer\/ngx_aws_auth.git\r\n<span class=\"nb\">cd <\/span>ngx_aws_auth\r\n<span class=\"nb\">sudo <\/span>git checkout AuthV2\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u8fd9\u662f\u4e00\u4e2a\u65e7\u7684\u7a0b\u5e8f\uff0c\u5982\u679c\u4fdd\u6301\u4e0d\u53d8\uff0c\u5c06\u65e0\u6cd5\u5728\u5f53\u524d\u7684Nginx\u6784\u5efa\u8fc7\u7a0b\u4e2d\u8fd0\u884c\u3002<br \/>\n\u8bf7\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u4e8b\u5148\u5bf9\u4ee3\u7801\u8fdb\u884c\u90e8\u5206\u66f4\u6539\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo sed<\/span> <span class=\"nt\">-i<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'s\/\\(ngx_http_variable_unknown_header(\\)\\(val\\)\/\\1r, \\2\/'<\/span> ngx_http_aws_auth_module.c\r\n<\/code><\/pre>\n<h3>\u63d0\u4f9bBrotli\u538b\u7f29\u6a21\u5757<\/h3>\n<p>\u542c\u8bf4\u901a\u4fe1\u91cf\u8981\u51cf\u5c11\uff1f\u90a3\u5c31\u8d81\u673a\u8bd5\u8bd5\u770b\u3002<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd<\/span> \/usr\/local\/src\r\n<span class=\"nb\">sudo <\/span>git clone https:\/\/github.com\/google\/ngx_brotli.git\r\n<span class=\"nb\">cd <\/span>ngx_brotli\r\n<span class=\"nb\">sudo <\/span>git submodule update <span class=\"nt\">--init<\/span>\r\n<\/code><\/pre>\n<h3>\u5b89\u88c5Nginx<\/h3>\n<h4>\u6dfb\u52a0\u7528\u6237<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>useradd <span class=\"nt\">--system<\/span> <span class=\"nt\">--comment<\/span> <span class=\"s1\">'Nginx web server'<\/span> <span class=\"nt\">--home-dir<\/span> \/var\/local\/lib\/nginx <span class=\"nt\">--shell<\/span> \/sbin\/nologin nginx\r\n<\/code><\/pre>\n<h4>\u5b89\u88c5\u6240\u9700\u7684\u8f6f\u4ef6\u5305<\/h4>\n<p>\u7531\u4e8e\u8fc7\u5ea6\u914d\u7f6e\u9009\u9879\uff0c\u5bfc\u81f4\u6240\u9700\u7684\u8f6f\u4ef6\u5305\u6570\u91cf\u589e\u52a0\u3002\u5982\u679c\u4e0d\u9700\u8981\u7684\u8bdd\uff0c\u4e5f\u8bb8\u53ef\u4ee5\u5220\u9664\u9009\u9879\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>pcre-devel libxslt-devel gd-devel GeoIP-devel gperftools\r\n<\/code><\/pre>\n<h4>\u8bf7\u4e0b\u8f7d\u8d44\u6e90\u3002<\/h4>\n<p>\u5728\u4e0b\u8f7d\u7f51\u7ad9\u4e0a\u67e5\u770b\u516c\u5f0f\u7684\u7248\u672c\u4fe1\u606f\uff0c\u7136\u540e\u4e0b\u8f7d\u76f8\u5e94\u7684\u7248\u672c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd<\/span> \/usr\/local\/src\r\n<span class=\"nb\">sudo <\/span>curl <span class=\"nt\">-O<\/span> https:\/\/nginx.org\/download\/nginx-1.25.2.tar.gz\r\n<span class=\"nb\">sudo tar <\/span>xvf nginx-1.25.2.tar.gz\r\n<span class=\"nb\">cd <\/span>nginx-1.25.2\r\n<\/code><\/pre>\n<h4>\u8fdb\u884c\u914d\u7f6e<\/h4>\n<p>\u7531\u4e8e\u8bd5\u9519\u7684\u7ed3\u679c\uff0c\u6211\u4eec\u9009\u62e9\u4e86\u4ee5\u4e0b\u9009\u9879\u8fdb\u884c\u6267\u884c\u3002\u7531\u4e8e\u5bf9\u7ec6\u8282\u7684\u89e3\u91ca\u4e0d\u662f\u5f88\u6e05\u695a\uff0c\u6240\u4ee5\u7701\u7565\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo<\/span> .\/configure <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--prefix<\/span><span class=\"o\">=<\/span>\/var\/local\/nginx <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--sbin-path<\/span><span class=\"o\">=<\/span>\/usr\/local\/sbin\/nginx <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--modules-path<\/span><span class=\"o\">=<\/span>\/usr\/local\/lib64\/nginx\/modules <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--conf-path<\/span><span class=\"o\">=<\/span>\/usr\/local\/etc\/nginx\/nginx.conf <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--error-log-path<\/span><span class=\"o\">=<\/span>\/var\/local\/log\/nginx\/error.log <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--http-log-path<\/span><span class=\"o\">=<\/span>\/var\/local\/log\/nginx\/access.log <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--http-client-body-temp-path<\/span><span class=\"o\">=<\/span>\/var\/local\/lib\/nginx\/tmp\/client_body <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--http-proxy-temp-path<\/span><span class=\"o\">=<\/span>\/var\/local\/lib\/nginx\/tmp\/proxy <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--http-fastcgi-temp-path<\/span><span class=\"o\">=<\/span>\/var\/local\/lib\/nginx\/tmp\/fastcgi <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--http-uwsgi-temp-path<\/span><span class=\"o\">=<\/span>\/var\/local\/lib\/nginx\/tmp\/uwsgi <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--http-scgi-temp-path<\/span><span class=\"o\">=<\/span>\/var\/local\/lib\/nginx\/tmp\/scgi <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--pid-path<\/span><span class=\"o\">=<\/span>\/run\/nginx.pid <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--lock-path<\/span><span class=\"o\">=<\/span>\/run\/lock\/nginx.lock <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--user<\/span><span class=\"o\">=<\/span>nginx <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--group<\/span><span class=\"o\">=<\/span>nginx <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-threads<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-file-aio<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-debug<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_ssl_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_v2_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_v3_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_realip_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_addition_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_xslt_module<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_image_filter_module<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_geoip_module<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_sub_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_dav_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_flv_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_mp4_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_gunzip_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_gzip_static_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_auth_request_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_random_index_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_secure_link_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_degradation_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_slice_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_stub_status_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-http_perl_module<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-mail<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-mail_ssl_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-stream<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-stream_realip_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-stream_geoip_module<\/span><span class=\"o\">=<\/span>dynamic <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-stream_ssl_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-stream_ssl_preread_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-google_perftools_module<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-compat<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-pcre<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-pcre-jit<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-openssl<\/span><span class=\"o\">=<\/span>\/usr\/local\/src\/openssl <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-openssl-opt<\/span><span class=\"o\">=<\/span>enable-ktls <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--add-module<\/span><span class=\"o\">=<\/span>\/usr\/local\/src\/ngx_brotli <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--add-module<\/span><span class=\"o\">=<\/span>\/usr\/local\/src\/ngx_aws_auth <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-cc-opt<\/span><span class=\"o\">=<\/span><span class=\"s1\">'-g -O2 -m64 -mtune=generic -fPIC -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-all -fstack-clash-protection -fcf-protection -grecord-gcc-switches -I\/usr\/local\/src\/openssl\/include'<\/span> <span class=\"se\">\\<\/span>\r\n<span class=\"nt\">--with-ld-opt<\/span><span class=\"o\">=<\/span><span class=\"s1\">'-no-pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-Bsymbolic-functions -L\/usr\/local\/src\/openssl\/ssl'<\/span>\r\n<\/code><\/pre>\n<h4>\u8fdb\u884c<\/h4>\n<p>\u7f16\u8bd1\u5e76\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>make\r\n<span class=\"nb\">sudo <\/span>make <span class=\"nb\">install<\/span>\r\n<\/code><\/pre>\n<h3>SELinux \u4e0a\u4e0b\u6587\u4fee\u6539<\/h3>\n<p>\u6211\u89c9\u5f97\u5982\u679c\u5c06\u5176\u8bbe\u7f6e\u4e3aunconfined_service_t\u5e76\u4e14\u8fd0\u884cSELinux\uff0c\u610f\u4e49\u4e0d\u592a\u5927\uff0c\u56e0\u6b64\u9700\u8981\u4fee\u6b63\u4e0a\u4e0b\u6587\u4ee5\u4f7f\u5176\u4e0e\u901a\u8fc7dnf\u5b89\u88c5\u65f6\u76f8\u540c\u7684\u65b9\u5f0f\u3002<\/p>\n<h4>\u521b\u5efa\u76f8\u5173\u6587\u4ef6\u5939<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/usr\/local\/etc\/nginx\/conf.d\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/usr\/local\/etc\/nginx\/default.d\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/usr\/local\/lib64\/nginx\/modules\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/local\/cache\/nginx\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/local\/lib\/nginx\/tmp\/client_body\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/local\/lib\/nginx\/tmp\/proxy\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/local\/lib\/nginx\/tmp\/fastcgi\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/local\/lib\/nginx\/tmp\/uwsgi\r\n<span class=\"nb\">sudo mkdir<\/span> <span class=\"nt\">-p<\/span> \/var\/local\/lib\/nginx\/tmp\/scgi\r\n<\/code><\/pre>\n<h4>\u6539\u53d8\u80cc\u666f\u60c5\u51b5<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-a<\/span> <span class=\"nt\">-f<\/span> f <span class=\"nt\">-s<\/span> system_u <span class=\"nt\">-t<\/span> httpd_exec_t <span class=\"s1\">'\/usr\/local\/sbin\/nginx'<\/span>\r\n<span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-a<\/span> <span class=\"nt\">-f<\/span> a <span class=\"nt\">-s<\/span> system_u <span class=\"nt\">-t<\/span> httpd_config_t <span class=\"s1\">'\/usr\/local\/etc\/nginx(\/.*)?'<\/span>\r\n<span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-a<\/span> <span class=\"nt\">-f<\/span> a <span class=\"nt\">-s<\/span> system_u <span class=\"nt\">-t<\/span> httpd_sys_content_t <span class=\"s1\">'\/var\/local\/nginx\/html(\/.*)?'<\/span>\r\n<span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-a<\/span> <span class=\"nt\">-f<\/span> a <span class=\"nt\">-s<\/span> system_u <span class=\"nt\">-t<\/span> httpd_var_lib_t <span class=\"s1\">'\/var\/local\/lib\/nginx(\/.*)?'<\/span>\r\n<span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-a<\/span> <span class=\"nt\">-f<\/span> a <span class=\"nt\">-s<\/span> system_u <span class=\"nt\">-t<\/span> httpd_log_t <span class=\"s1\">'\/var\/local\/log\/nginx(\/.*)?'<\/span>\r\n<span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-a<\/span> <span class=\"nt\">-f<\/span> a <span class=\"nt\">-s<\/span> system_u <span class=\"nt\">-t<\/span> httpd_cache_t <span class=\"s1\">'\/var\/local\/cache\/nginx(\/.*)?'<\/span>\r\n\r\n<span class=\"c\"># \u78ba\u8a8d<\/span>\r\n<span class=\"nb\">sudo <\/span>semanage fcontext <span class=\"nt\">-l<\/span> | <span class=\"nb\">grep <\/span>nginx\r\n<\/code><\/pre>\n<h4>\u60c5\u5883\u53cd\u6620<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>restorecon <span class=\"nt\">-vF<\/span> \/usr\/local\/sbin\/nginx\r\n<span class=\"nb\">sudo <\/span>restorecon <span class=\"nt\">-vFR<\/span> \/usr\/local\/etc\/nginx\r\n<span class=\"nb\">sudo <\/span>restorecon <span class=\"nt\">-vFR<\/span> \/var\/local\/nginx\/html\r\n<span class=\"nb\">sudo <\/span>restorecon <span class=\"nt\">-vFR<\/span> \/var\/local\/lib\/nginx\r\n<span class=\"nb\">sudo <\/span>restorecon <span class=\"nt\">-vFR<\/span> \/var\/local\/log\/nginx\r\n<span class=\"nb\">sudo <\/span>restorecon <span class=\"nt\">-vFR<\/span> \/var\/local\/cache\/nginx\r\n<\/code><\/pre>\n<h3>\u7f16\u8f91nginx.conf\u6587\u4ef6<\/h3>\n<p>\u751f\u6210\u7684nginx.conf\u5728\u6784\u5efa\u65f6\u8def\u5f84\u7b49\u662f\u9ed8\u8ba4\u7684\uff0c\u5982\u679c\u4e0d\u6b63\u786e\u66f4\u6539\uff0c\u5b83\u5c31\u65e0\u6cd5\u8fd0\u884c\u3002<br \/>\n\u7531\u4e8e\u5df2\u7ecf\u5927\u91cf\u4fee\u6539\u4e86\uff08\u4ec5\u4ec5\u505a\u4e86\u4e0ednf\u4e2dnginx\u683c\u5f0f\u7684\u5408\u9002\u8c03\u6574\uff09\uff0c\u6240\u4ee5\u5c06\u6587\u4ef6\u6574\u4f53\u66ff\u6362\u4e3a\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">user<\/span>  <span class=\"s\">nginx<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">worker_processes<\/span>  <span class=\"s\">auto<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">error_log<\/span>  <span class=\"n\">\/var\/local\/log\/nginx\/error.log<\/span> <span class=\"s\">notice<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">pid<\/span>  <span class=\"n\">\/run\/nginx.pid<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"c1\"># Load dynamic modules.<\/span>\r\n<span class=\"k\">include<\/span>  <span class=\"n\">\/usr\/local\/lib64\/nginx\/modules\/*.conf<\/span>;\r\n\r\n<span class=\"k\">events<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kn\">worker_connections<\/span>  <span class=\"mi\">1024<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">http<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"kn\">log_format<\/span>  <span class=\"s\">main<\/span>  <span class=\"s\">'<\/span><span class=\"nv\">$remote_addr<\/span> <span class=\"s\">-<\/span> <span class=\"nv\">$remote_user<\/span> <span class=\"s\">[<\/span><span class=\"nv\">$time_local<\/span><span class=\"s\">]<\/span> <span class=\"s\">\"<\/span><span class=\"nv\">$request<\/span><span class=\"s\">\"<\/span> <span class=\"s\">'<\/span>\r\n                      <span class=\"s\">'<\/span><span class=\"nv\">$status<\/span> <span class=\"nv\">$body_bytes_sent<\/span> <span class=\"s\">\"<\/span><span class=\"nv\">$http_referer<\/span><span class=\"s\">\"<\/span> <span class=\"s\">'<\/span>\r\n                      <span class=\"s\">'\"<\/span><span class=\"nv\">$http_user_agent<\/span><span class=\"s\">\"<\/span> <span class=\"s\">\"<\/span><span class=\"nv\">$http_x_forwarded_for<\/span><span class=\"s\">\"'<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"kn\">access_log<\/span>  <span class=\"n\">\/var\/local\/log\/nginx\/access.log<\/span>  <span class=\"s\">main<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"kn\">sendfile<\/span>             <span class=\"no\">on<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"kn\">tcp_nopush<\/span>           <span class=\"no\">on<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"kn\">keepalive_timeout<\/span>    <span class=\"mi\">65<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"kn\">types_hash_max_size<\/span>  <span class=\"mi\">4096<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"kn\">charset<\/span> <span class=\"s\">utf-8<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"kn\">include<\/span>              <span class=\"n\">\/usr\/local\/etc\/nginx\/mime.types<\/span><span class=\"p\">;<\/span>\r\n    <span class=\"kn\">default_type<\/span>         <span class=\"nc\">application\/octet-stream<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"c1\"># Load modular configuration files from the \/etc\/nginx\/conf.d directory.<\/span>\r\n    <span class=\"kn\">include<\/span>  <span class=\"n\">\/usr\/local\/etc\/nginx\/conf.d\/*.conf<\/span><span class=\"p\">;<\/span>\r\n\r\n    <span class=\"kn\">server<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kn\">listen<\/span>       <span class=\"mi\">80<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kn\">listen<\/span>       <span class=\"s\">[::]:80<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kn\">server_name<\/span>  <span class=\"s\">_<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kn\">root<\/span>         <span class=\"n\">\/var\/local\/nginx\/html<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"c1\"># Load configuration files for the default server block.<\/span>\r\n        <span class=\"kn\">include<\/span>  <span class=\"n\">\/usr\/local\/etc\/nginx\/default.d\/*.conf<\/span><span class=\"p\">;<\/span>\r\n\r\n        <span class=\"c1\">#error_page  404              \/404.html;<\/span>\r\n        <span class=\"c1\">#location = \/404.html {<\/span>\r\n        <span class=\"c1\">#}<\/span>\r\n\r\n        <span class=\"c1\"># redirect server error pages to the static page \/50x.html<\/span>\r\n        <span class=\"c1\">#<\/span>\r\n        <span class=\"kn\">error_page<\/span>   <span class=\"mi\">500<\/span> <span class=\"mi\">502<\/span> <span class=\"mi\">503<\/span> <span class=\"mi\">504<\/span>  <span class=\"n\">\/50x.html<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kn\">location<\/span> <span class=\"p\">=<\/span> <span class=\"n\">\/50x.html<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u786e\u8ba4sudo nginx -t\u7684\u7ed3\u679c\u662f\u5426\u6210\u529f\u3002<\/p>\n<h3>\u521b\u5efasystemd\u5355\u4f4d\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u4ee5\u4e0b\u6587\u4ef6\u3002<\/p>\n<p>\uff08?2023-10-22 \u8ffd\u7b46\uff1a\u82e5\u4e0d\u6dfb\u52a0Restart=always\uff0c\u5219\u64cd\u4f5c\u7cfb\u7edf\u91cd\u542f\u65f6\u4f1a\u5d29\u6e83\uff0c\u6545\u5728\u4e0b\u65b9\u7684misskey.service\u4e2d\u6dfb\u52a0\u4e86\u76f8\u540c\u7684\u5185\u5bb9\u3002\uff09<\/p>\n<pre class=\"post-pre\"><code>[Unit]\r\nDescription=The NGINX HTTP and reverse proxy server\r\nAfter=network-online.target remote-fs.target nss-lookup.target\r\nWants=network-online.target\r\n\r\n[Service]\r\nType=forking\r\nPIDFile=\/run\/nginx.pid\r\nExecStartPre=\/usr\/bin\/rm -f \/run\/nginx.pid\r\nExecStartPre=\/usr\/local\/sbin\/nginx -t\r\nExecStart=\/usr\/local\/sbin\/nginx\r\nExecReload=\/usr\/local\/sbin\/nginx -s reload\r\nExecStop=\/bin\/kill -s QUIT $MAINPID\r\nPrivateTmp=true\r\nTimeoutSec=60\r\nStandardOutput=journal\r\nStandardError=journal\r\nSyslogIdentifier=nginx\r\nRestart=always\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u901a\u8fc7\u5728\u6d4f\u89c8\u5668\u4e2d\u4f7f\u7528http:\/\/\uff08\u57df\u540d\uff09\u8fdb\u884c\u8bbf\u95ee\uff0c\u8fd0\u884c\u5e76\u5728\u540e\u53f0\u6301\u7eed\uff0c\u9700\u4f7f\u7528sudo systemctl enable &#8211;now nginx.service\u547d\u4ee4\u8fdb\u884c\u542f\u52a8\u3002<\/p>\n<h2>\u9881\u53d1\u8bc1\u4e66<\/h2>\n<p>\u8bf7\u53c2\u8003\u4ee5\u4e0b\u6b65\u9aa4\uff0c\u4f7f\u7528lego\u751f\u6210ZeroSSL\u7684\u8bc1\u4e66\u3002<\/p>\n<p>&nbsp;<\/p>\n<h3>\u83b7\u53d6ZeroSSL API\u5bc6\u94a5<\/h3>\n<p>ZeroSSL\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b<br \/>\n\u767b\u9332\u5b8c\u4e86\u5f8c\u3001Developer\u30bf\u30d6\u3088\u308aAPI Key\u3092\u78ba\u8a8d\u3059\u308b<\/p>\n<h3>\u4e50\u9ad8\u7684\u5b89\u88c5<\/h3>\n<p>\u4e3a\u4e86\u811a\u672c\uff0c\u8fd8\u9700\u8981\u5b89\u88c5\u4e00\u4e2aJSON\u5904\u7406\u5668\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>golang-github-acme-lego jq\r\n<\/code><\/pre>\n<h3>\u64b0\u5199\u8bc1\u4e66\u53d1\u884c\u811a\u672c<\/h3>\n<p>\u8bf7\u521b\u5efa\u4ee5\u4e0b\u811a\u672c\u3002(\u5730\u70b9\u53ef\u4ee5\u5728\u4efb\u4f55\u5730\u65b9)<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">#!\/bin\/bash<\/span>\r\n\r\n<span class=\"nv\">API_KEY<\/span><span class=\"o\">=(<\/span>ZeroSSL\u3067\u53d6\u5f97\u3057\u305fAPI\u30ad\u30fc<span class=\"o\">)<\/span>\r\n<span class=\"nv\">EMAIL<\/span><span class=\"o\">=(<\/span>ZeroSSL\u306b\u767b\u9332\u3057\u305f\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\uff1f<span class=\"o\">)<\/span>\r\n<span class=\"nv\">DOMAIN<\/span><span class=\"o\">=(<\/span>\u8a8d\u8a3c\u3057\u305f\u3044\u30c9\u30e1\u30a4\u30f3\u540d<span class=\"o\">)<\/span>\r\n<span class=\"nv\">WEBROOT_PATH<\/span><span class=\"o\">=<\/span>\/var\/local\/nginx\/html\r\n<span class=\"nv\">CERTKEY_PATH<\/span><span class=\"o\">=<\/span>\/etc\/zerossl\r\n\r\n<span class=\"nv\">JSON<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>curl <span class=\"nt\">-s<\/span> <span class=\"nt\">-X<\/span> POST <span class=\"s2\">\"https:\/\/api.zerossl.com\/acme\/eab-credentials?access_key=<\/span><span class=\"nv\">$API_KEY<\/span><span class=\"s2\">\"<\/span><span class=\"si\">)<\/span>\r\n<span class=\"nv\">EAB_KID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$JSON<\/span><span class=\"s2\">\"<\/span> | jq <span class=\"nt\">-r<\/span> .eab_kid<span class=\"si\">)<\/span>\r\n<span class=\"nv\">EAB_HMAC_KEY<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$JSON<\/span><span class=\"s2\">\"<\/span> | jq <span class=\"nt\">-r<\/span> .eab_hmac_key<span class=\"si\">)<\/span>\r\n\r\nlego <span class=\"nt\">--http<\/span> <span class=\"nt\">--http<\/span>.webroot <span class=\"s2\">\"<\/span><span class=\"nv\">$WEBROOT_PATH<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--path<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$CERTKEY_PATH<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--eab<\/span> <span class=\"nt\">--kid<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$EAB_KID<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--hmac<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$EAB_HMAC_KEY<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--server<\/span> <span class=\"s2\">\"https:\/\/acme.zerossl.com\/v2\/DV90\"<\/span> <span class=\"nt\">--domains<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$DOMAIN<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--email<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$EMAIL<\/span><span class=\"s2\">\"<\/span> <span class=\"nt\">--accept-tos<\/span> <span class=\"s2\">\"<\/span><span class=\"nv\">$1<\/span><span class=\"s2\">\"<\/span>\r\n<\/code><\/pre>\n<h3>\u9881\u53d1\u8bc1\u4e66<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo chmod <\/span>a+x \/usr\/local\/bin\/lego-invoke.sh\r\n<span class=\"nb\">sudo <\/span>lego-invoke.sh run\r\n<\/code><\/pre>\n<h3>\u4e3a\u4e86\u4f7f\u7528Misskey\uff0c\u51c6\u5907\u597dnginx\u7684\u914d\u7f6e\u3002<\/h3>\n<p>\u57fa\u65bcNginx\u914d\u7f6e\u7684\u516c\u5f0f\uff0c\u6dfb\u52a0\u4e86QUIC\u652f\u6301\u3001kTLS\u652f\u6301\u548cBrotli\u58d3\u7e2e\u652f\u6301\u3002<br \/>\n\u5c0d\u8c61\u5132\u5b58\u7684\u4ee3\u7406\u63cf\u8ff0\u5c07\u5728\u4e4b\u5f8c\u88dc\u5145\u3002<\/p>\n<pre class=\"post-pre\"><code># For WebSocket\r\nmap $http_upgrade $connection_upgrade {\r\n    default upgrade;\r\n    ''      close;\r\n}\r\n\r\nproxy_cache_path \/var\/local\/cache\/nginx levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;\r\n\r\nserver {\r\n    listen 80;\r\n    listen [::]:80;\r\n    server_name (\u30c9\u30e1\u30a4\u30f3\u540d);\r\n\r\n    # For SSL domain validation\r\n    root \/var\/local\/nginx\/html;\r\n    location \/.well-known\/acme-challenge\/ { allow all; }\r\n    location \/.well-known\/pki-validation\/ { allow all; }\r\n    location \/ { return 301 https:\/\/$server_name$request_uri; }\r\n}\r\n\r\nserver {\r\n    listen 443 quic reuseport;\r\n    listen [::]:443 quic reuseport;\r\n    listen 443 ssl;\r\n    listen [::]:443 ssl;\r\n    server_name (\u30c9\u30e1\u30a4\u30f3\u540d);\r\n\r\n    # QUIC settings\r\n    http3 on;\r\n    http3_hq on;\r\n    http2 on;\r\n    quic_retry on;\r\n    ssl_early_data on;\r\n\r\n    ssl_session_timeout 1d;\r\n    ssl_session_cache shared:ssl_session_cache:10m;\r\n    ssl_session_tickets off;\r\n\r\n    # To use ZeroSSL certificate\r\n    ssl_certificate     \/etc\/zerossl\/certificates\/(\u30c9\u30e1\u30a4\u30f3\u540d).crt;\r\n    ssl_certificate_key \/etc\/zerossl\/certificates\/(\u30c9\u30e1\u30a4\u30f3\u540d).key;\r\n\r\n    # To use Let's Encrypt certificate\r\n    #ssl_certificate     \/etc\/letsencrypt\/live\/example.tld\/fullchain.pem;\r\n    #ssl_certificate_key \/etc\/letsencrypt\/live\/example.tld\/privkey.pem;\r\n\r\n    # To use Debian\/Ubuntu's self-signed certificate (For testing or before issuing a certificate)\r\n    #ssl_certificate     \/etc\/ssl\/certs\/ssl-cert-snakeoil.pem;\r\n    #ssl_certificate_key \/etc\/ssl\/private\/ssl-cert-snakeoil.key;\r\n\r\n    # SSL protocol settings\r\n    ssl_protocols TLSv1.2 TLSv1.3;\r\n    ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_8_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;\r\n    ssl_prefer_server_ciphers off;\r\n    ssl_stapling on;\r\n    ssl_stapling_verify on;\r\n    ssl_conf_command Options KTLS;\r\n\r\n    # Change to your upload limit\r\n    client_max_body_size 80m;\r\n\r\n    # brotli setting\r\n    brotli on;\r\n    brotli_comp_level 7;\r\n    brotli_static on;\r\n    brotli_types application\/atom+xml application\/javascript application\/json application\/rss+xml application\/vnd.ms-fontobject application\/x-font-opentype application\/x-font-truetype application\/x-font-ttf application\/x-javascript application\/xhtml+xml application\/xml audio\/mpeg font\/eot font\/opentype font\/otf font\/truetype image\/svg+xml image\/vnd.microsoft.icon image\/x-icon image\/x-win-bitmap text\/css text\/javascript text\/plain text\/xml;\r\n\r\n    # Proxy to S3 storage\r\n\r\n    # Proxy to Node\r\n    location \/ {\r\n        proxy_pass http:\/\/127.0.0.1:3000;\r\n        proxy_set_header Host $host;\r\n        proxy_http_version 1.1;\r\n        proxy_redirect off;\r\n\r\n        # If it's behind another reverse proxy or CDN, remove the following.\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto https;\r\n\r\n        # For WebSocket\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection $connection_upgrade;\r\n\r\n        # Cache settings\r\n        proxy_cache cache1;\r\n        proxy_cache_lock on;\r\n        proxy_cache_use_stale updating;\r\n        proxy_force_ranges on;\r\n        add_header X-Cache $upstream_cache_status;\r\n\r\n        # To negotiate with QUIC directly\r\n        add_header Alt-Svc 'h3=\":443\"; h3-29=\":443\"; ma=86400';\r\n    }\r\n}\r\n\r\n<\/code><\/pre>\n<p>sudo nginx -t\u306e\u7d50\u679c\u304csuccessful\u306b\u306a\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3002<\/p>\n<p>sudo systemctl restart nginx.service\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u518d\u8d77\u52d5\u3059\u308b\u3002<br \/>\n\u30d6\u30e9\u30a6\u30b6\u304b\u3089https:\/\/(\u30c9\u30e1\u30a4\u30f3\u540d)\u3067\u30a2\u30af\u30bb\u30b9\u3057\u3001ZeroSSL\u3067\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3002(\u73fe\u6642\u70b9\u3067\u306f\u30ea\u30af\u30a8\u30b9\u30c8\u7d50\u679c\u306f502\u30a8\u30e9\u30fc\u3067OK)<\/p>\n<h2>Misskey\u7684\u69cb\u5efa\u6e96\u5099<\/h2>\n<h3>\u521b\u5efa\u7528\u6237<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>useradd <span class=\"nt\">--system<\/span> <span class=\"nt\">--comment<\/span> <span class=\"s1\">'Misskey app server'<\/span> <span class=\"nt\">--home-dir<\/span> \/opt\/misskey <span class=\"nt\">--shell<\/span> \/bin\/bash misskey\r\n<\/code><\/pre>\n<h3>\u5b89\u88c5 Node.js<\/h3>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/span>\r\n<span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>https:\/\/rpm.nodesource.com\/pub_20.x\/nodistro\/repo\/nodesource-release-nodistro-1.noarch.rpm\r\n<span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>nodejs <span class=\"nt\">--setopt<\/span><span class=\"o\">=<\/span>nodesource-nodejs.module_hotfixes<span class=\"o\">=<\/span>1\r\n\r\n<span class=\"c\"># \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d<\/span>\r\nnode <span class=\"nt\">-v<\/span>\r\n\r\n<span class=\"c\"># corepack enable<\/span>\r\n<span class=\"nb\">sudo <\/span>corepack <span class=\"nb\">enable<\/span>\r\n<\/code><\/pre>\n<h3>\u5f15\u5165PostgreSQL<\/h3>\n<h4>\u5b89\u88c5<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>postgresql postgresql-server postgresql-upgrade\r\n<span class=\"nb\">sudo <\/span>postgresql-setup <span class=\"nt\">--initdb<\/span>\r\n\r\n<span class=\"c\"># \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d<\/span>\r\npostgres <span class=\"nt\">--version<\/span>\r\n\r\n<span class=\"c\"># \u5b9f\u884c<\/span>\r\n<span class=\"nb\">sudo <\/span>systemctl <span class=\"nb\">enable<\/span> <span class=\"nt\">--now<\/span> postgresql.service\r\n<\/code><\/pre>\n<h4>\u521b\u5efa\u7528\u6237\u548c\u6570\u636e\u5e93<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo<\/span> <span class=\"nt\">-u<\/span> postgres psql\r\nCREATE ROLE misskey LOGIN PASSWORD <span class=\"s1\">'(pgsql\u306emisskey\u30e6\u30fc\u30b6\u7528\u306e\u30d1\u30b9\u30ef\u30fc\u30c9)'<\/span><span class=\"p\">;<\/span>\r\nCREATE DATABASE <span class=\"o\">(<\/span>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d<span class=\"o\">)<\/span> OWNER misskey<span class=\"p\">;<\/span>\r\n<span class=\"se\">\\q<\/span>\r\n<\/code><\/pre>\n<h4>\u8fde\u63a5\u8bbe\u7f6e<\/h4>\n<p>\u5982\u679c\u6309\u7167\u73b0\u5728\u7684\u60c5\u51b5\uff0c\u6570\u636e\u5e93\u8bbf\u95ee\u5728\u6743\u9650\u65b9\u9762\u53ef\u80fd\u4e0d\u4f1a\u987a\u5229\u8fdb\u884c\uff0c\u6240\u4ee5\u8bf7\u5c06\u6240\u6709\u201call all\u201d\u884c\u7684METHOD\u66f4\u6539\u4e3atrust\u3002<\/p>\n<pre class=\"post-pre\"><code># TYPE  DATABASE        USER            ADDRESS                 METHOD\r\n\r\n# \"local\" is for Unix domain socket connections only\r\n<span class=\"gd\">- local   all             all                                     peer\r\n<\/span><span class=\"gi\">+ local   all             all                                     trust\r\n<\/span># IPv4 local connections:\r\n<span class=\"gd\">- host    all             all             127.0.0.1\/32            ident\r\n<\/span><span class=\"gi\">+ host    all             all             127.0.0.1\/32            trust\r\n<\/span># IPv6 local connections:\r\n<span class=\"gd\">- host    all             all             ::1\/128                 ident\r\n<\/span><span class=\"gi\">+ host    all             all             ::1\/128                 trust\r\n<\/span># Allow replication connections from localhost, by a user with the\r\n# replication privilege.\r\n<span class=\"p\">local   replication     all                                     peer\r\nhost    replication     all             127.0.0.1\/32            ident\r\nhost    replication     all             ::1\/128                 ident\r\n<\/span><\/code><\/pre>\n<h4>\u8fdb\u884cDB\u8c03\u4f18<\/h4>\n<p>\u901a\u8fc7\u4f7f\u7528PGTune\uff0c\u53ef\u4ee5\u6839\u636e\u4f7f\u7528\u7684\u673a\u5668\u89c4\u683c\u83b7\u53d6\u9002\u7528\u4e8ePostgreSQL\u7684\u8c03\u6574\u8bbe\u7f6e\u3002\u672c\u6b21\u5c06\u8f93\u5165\u5982\u4e0b\u5185\u5bb9\uff0c\u5e76\u786e\u8ba4\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n<div>\n<div class=\"post-table\">\u9805\u76ee\u5024DB version15Total Memory (RAM)2GBNumber of CPUs2Number of Connections100<\/div>\n<\/div>\n<p>\u6839\u636e\u83b7\u5f97\u7684\u8f93\u51fa\u7ed3\u679c\uff0c\u7f16\u8f91\/var\/lib\/pgsql\/data\/postgresql.conf\u6587\u4ef6\u7684\u76f8\u5e94\u884c\u3002\u8bf7\u6ce8\u610f\u987a\u5e8f\u53ef\u80fd\u4f1a\u4e71\u3002<\/p>\n<div>\n<div class=\"post-table\">\u8a2d\u5b9a\u5024\u884c\u756a\u53f7max_connections65\u884c\u76eeshared_buffers127\u884c\u76eeeffective_cache_size403\u884c\u76eemaintenance_work_mem140\u884c\u76eecheckpoint_completion_target238\u884c\u76eewal_buffers226\u884c\u76eedefault_statistics_target426\u884c\u76eerandom_page_cost395\u884c\u76eeeffective_io_concurrency187\u884c\u76eework_mem138\u884c\u76eehuge_pages129\u884c\u76eemin_wal_size241\u884c\u76eemax_wal_size242\u884c\u76ee<\/div>\n<\/div>\n<p>\u7f16\u8f91\u5b8c\u6210\u540e\uff0c\u4f7f\u7528systemctl restart postgresql.service\u8fdb\u884c\u91cd\u542f\u3002<\/p>\n<h3>Redis\u7684\u5b89\u88c5<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>redis\r\n<span class=\"nb\">sudo <\/span>systemctl <span class=\"nb\">enable<\/span> <span class=\"nt\">--now<\/span> redis\r\n\r\n<span class=\"c\"># \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d<\/span>\r\nredis-server <span class=\"nt\">--version<\/span>\r\n<\/code><\/pre>\n<h3>\u5b89\u88c5FFmpeg<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>https:\/\/download1.rpmfusion.org\/free\/fedora\/rpmfusion-free-release-<span class=\"si\">$(<\/span>rpm <span class=\"nt\">-E<\/span> %fedora<span class=\"si\">)<\/span>.noarch.rpm\r\n<span class=\"nb\">sudo <\/span>dnf <span class=\"nb\">install <\/span>ffmpeg\r\n\r\n<span class=\"c\"># \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d<\/span>\r\nffmpeg <span class=\"nt\">-version<\/span>\r\n<\/code><\/pre>\n<h3>jemalloc\u7684\u9a8c\u8bc1<\/h3>\n<p>\u636e\u8bf4\u5982\u679c\u5c06\u5185\u5b58\u5206\u914d\u5668\u66f4\u6539\u4e3ajemalloc\uff0c\u53ef\u4ee5\u7f13\u89e3Misskey v13\u7684\u5185\u5b58\u95ee\u9898\uff0c\u56e0\u6b64\u6211\u4eec\u6253\u7b97\u4f7f\u7528jemalloc\u3002<br \/>\n\u8bf7\u901a\u8fc7\u4ee5\u4e0b\u547d\u4ee4\u786e\u8ba4\u662f\u5426\u5df2\u5b89\u88c5\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>find \/ <span class=\"nt\">-name<\/span> <span class=\"s2\">\"*jemalloc*\"<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6ca1\u6709\u5b89\u88c5\uff0c\u8bf7\u4f7f\u7528sudo dnf install jemalloc\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<h2>Misskey\u7684\u5b89\u88c5<\/h2>\n<h3>\u4e0b\u8f7dMisskey<\/h3>\n<pre class=\"post-pre\"><code>sudo mkdir \/opt\/misskey\r\nsudo chown misskey:misskey \/opt\/misskey\r\nsudo -iu misskey\r\ncd \/opt\r\ngit clone --recursive https:\/\/github.com\/misskey-dev\/misskey.git\r\ncd misskey\r\ngit checkout master\r\ngit submodule update --init\r\nNODE_ENV=production pnpm install --frozen-lockfile\r\n<\/code><\/pre>\n<h3>\u9ed8\u8ba4.yml\u6587\u4ef6\u7684\u8bbe\u7f6e<\/h3>\n<p>\u521b\u5efa\u4e0b\u5217\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># Misskey URL<\/span>\r\n<span class=\"na\">url<\/span><span class=\"pi\">:<\/span> <span class=\"s\">https:\/\/(\u30c9\u30e1\u30a4\u30f3\u540d)\/<\/span>\r\n<span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3000<\/span>\r\n\r\n<span class=\"c1\"># PostgreSQL setting<\/span>\r\n<span class=\"na\">db<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">host<\/span><span class=\"pi\">:<\/span> <span class=\"s\">localhost<\/span>\r\n  <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5432<\/span>\r\n  <span class=\"na\">db  <\/span><span class=\"pi\">:<\/span> <span class=\"s\">(PostgreSQL\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u540d)<\/span>\r\n  <span class=\"na\">user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">(PostgreSQL\u306e\u30e6\u30fc\u30b6\u30fc\u540d)<\/span>\r\n  <span class=\"na\">pass<\/span><span class=\"pi\">:<\/span> <span class=\"s\">(PostgreSQL\u306e\u30d1\u30b9\u30ef\u30fc\u30c9)<\/span>\r\n\r\n<span class=\"c1\"># Redis setting<\/span>\r\n<span class=\"na\">redis<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">host<\/span><span class=\"pi\">:<\/span> <span class=\"s\">localhost<\/span>\r\n  <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n\r\n<span class=\"c1\"># ID type<\/span>\r\n<span class=\"na\">id<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">aid'<\/span>\r\n\r\n<span class=\"c1\"># syslog setting<\/span>\r\n<span class=\"na\">syslog<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">host<\/span><span class=\"pi\">:<\/span> <span class=\"s\">localhost<\/span>\r\n  <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">514<\/span>\r\n\r\n<span class=\"c1\"># proxy setting<\/span>\r\n<span class=\"na\">proxyRemoteFiles<\/span><span class=\"pi\">:<\/span> <span class=\"kc\">true<\/span>\r\n\r\n<span class=\"c1\"># ActivityPub setting<\/span>\r\n<span class=\"na\">signToActivityPubGet<\/span><span class=\"pi\">:<\/span> <span class=\"kc\">true<\/span>\r\n<\/code><\/pre>\n<h3>Misskey\u7684\u6784\u5efa<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nb\">cd<\/span> \/opt\/misskey\r\n<span class=\"nv\">NODE_ENV<\/span><span class=\"o\">=<\/span>production pnpm run build\r\npnpm run init\r\n<\/code><\/pre>\n<h3>\u542f\u52a8\u6d4b\u8bd5<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nv\">NODE_ENV<\/span><span class=\"o\">=<\/span>production pnpm run start\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u80fd\u591f\u5728\u6d4f\u89c8\u5668\u4e0a\u8bbf\u95ee\u3002<\/p>\n<h3>\u521b\u5efasystemd\u7684\u5355\u4f4d\u6587\u4ef6<\/h3>\n<p>\u521b\u5efa\u4e0b\u5217\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>[Unit]\r\nDescription=Misskey daemon\r\n\r\n[Service]\r\nType=simple\r\nUser=misskey\r\nExecStart=\/usr\/bin\/npm start\r\nWorkingDirectory=\/opt\/misskey\r\nEnvironment=\"NODE_ENV=production\"\r\nEnvironment=\"LD_PRELOAD=\/usr\/lib64\/libjemalloc.so.2\"\r\nTimeoutSec=60\r\nStandardOutput=journal\r\nStandardError=journal\r\nSyslogIdentifier=misskey\r\nRestart=always\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n<\/code><\/pre>\n<p>\u4f7f\u7528sudo systemctl enable &#8211;now misskey.service\u547d\u4ee4\u6765\u542f\u52a8\u5e76\u4f7f\u5176\u5e38\u9a7b\u5316\u3002<\/p>\n<h2>\u8bf7\u8bbe\u7f6eMisskey<\/h2>\n<h3>\u521d\u59cb\u8bbe\u5b9a<\/h3>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u6700\u521d\u306e\u7ba1\u7406\u30e6\u30fc\u30b6\u30fc\u3092\u4f5c\u6210<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300c\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u300c\u8a2d\u5b9a\u300d\u2192\u300c\u30e2\u30c7\u30ec\u30fc\u30b7\u30e7\u30f3\u300d<\/ul>\n<\/li>\n<\/ul>\n<p>\u300c\u8ab0\u3067\u3082\u65b0\u898f\u767b\u9332\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u300d\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059<br \/>\n\u300c\u30a2\u30ab\u30a6\u30f3\u30c8\u767b\u9332\u306b\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5fc5\u9808\u306b\u3059\u308b\u300d\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u308b<br \/>\n\u300c\u5229\u7528\u898f\u7d04URL\u300d\u300c\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc\u30dd\u30ea\u30b7\u30fcURL\u300d\u3092\u5165\u529b\u3059\u308b<\/p>\n<p>\u4f7f\u308f\u306a\u3044\u5834\u5408\u3067\u3082\u306a\u3093\u3089\u304b\u306e\u5024\u3092\u3044\u3063\u305f\u3093\u5165\u308c\u306a\u3044\u3068\u4fdd\u5b58\u3067\u304d\u306a\u3044\u306e\u3067\u3001\u3044\u3063\u305f\u3093\u5165\u308c\u3066\u4fdd\u5b58\u5f8c\u306b\u7a7a\u6b04\u306b\u3057\u3066\u4fdd\u5b58\u3057\u76f4\u3059<\/p>\n<p>\u300c\u4e88\u7d04\u30e6\u30fc\u30b6\u30fc\u540d\u300d\u306b\u300cmedia\u300d\u3092\u8ffd\u52a0<\/p>\n<p>\u300c\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u300c\u8a2d\u5b9a\u300d\u2192\u300c\u5168\u822c\u300d<\/p>\n<p>\u300c\u30b5\u30fc\u30d0\u30fc\u540d\u300d\u300c\u7ba1\u7406\u8005\u306e\u540d\u524d\u300d\u300c\u7ba1\u7406\u8005\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u300d\u300c\u904b\u55b6\u8005\u60c5\u5831URL\u300d\u3092\u5165\u529b\u3059\u308b<\/p>\n<p>\u4f7f\u308f\u306a\u3044\u5834\u5408\u3067\u3082(\u4ee5\u4e0b\u7565)<\/p>\n<p>\u300c\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u300c\u8a2d\u5b9a\u300d\u2192\u300c\u305d\u306e\u4ed6\u300d<\/p>\n<p>\u300c\u30b5\u30fc\u30d0\u30fc\u306e\u30de\u30b7\u30f3\u60c5\u5831\u3092\u516c\u958b\u3059\u308b\u300d\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u308b<\/p>\n<p>\u53cd\u6620\u306b\u306fMisskey\u306e\u518d\u8d77\u52d5\u304c\u5fc5\u8981<\/p>\n<h3>\u7535\u5b50\u90ae\u4ef6\u53d1\u9001\u529f\u80fd<\/h3>\n<p>\u56e0\u4e3a\u72ec\u7acb\u7684\u57df\u540d\u611f\u89c9\u6bd4\u8f83\u4e13\u4e1a\uff0c\u6240\u4ee5\u6211\u539f\u672c\u6253\u7b97\u4f7f\u7528Gandi.net\u7684\u90ae\u7bb1\u529f\u80fd\uff0c\u4f46\u5f88\u5feb\u5b83\u4f3c\u4e4e\u8981\u53d8\u6210\u6536\u8d39\u4e86\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u6211\u9009\u62e9\u5728\u4fbf\u5b9c\u7684\u6a31\u82b1\u90ae\u4ef6\u4fe1\u7bb1\u4e2d\u4ec5\u6258\u7ba1\u90ae\u4ef6\u670d\u52a1\u5668\uff0c\u800c\u4e0d\u8fc1\u79fb\u57df\u540d\uff0c\u8fd9\u6837\u5c31\u4e0d\u7528\u82b1\u8d39\u592a\u591a\u8d39\u7528\u3002<\/p>\n<p>&nbsp;<\/p>\n<h4>\u589e\u52a0\u7535\u5b50\u90ae\u4ef6\u5730\u5740<\/h4>\n<p>\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3001\u300c\u5951\u7d04\u4e2d\u306e\u30b5\u30fc\u30d3\u30b9\u4e00\u89a7\u300d\u2192\u300c\u3055\u304f\u3089\u306e\u30e1\u30fc\u30eb\u30dc\u30c3\u30af\u30b9\u300d\u3088\u308a\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u3092\u958b\u304f<br \/>\n\u300c\u30e1\u30fc\u30eb\u300d\u2192\u300c\u30e1\u30fc\u30eb\u4e00\u89a7\u300d\u2192\u300c\u65b0\u898f\u8ffd\u52a0\u300d\u3088\u308a\u3001\u30e1\u30fc\u30eb\u914d\u4fe1\u306b\u4f7f\u7528\u3057\u305f\u3044\u30e6\u30fc\u30b6\u30fc\u540d\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8ffd\u52a0\u3059\u308b<br \/>\n\u300c(\u30e6\u30fc\u30b6\u30fc\u540d)@\u30c9\u30e1\u30a4\u30f3\u300d\u304c\u8ffd\u52a0\u3055\u308c\u308b\u3053\u3068\u3092\u78ba\u8a8d<\/p>\n<h4>\u6dfb\u52a0\u57df\u540d<\/h4>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300c\u30c9\u30e1\u30a4\u30f3\/SSL\u300d\u2192\u300c\u30c9\u30e1\u30a4\u30f3\/SSL\u300d\u2192\u300c\u30c9\u30e1\u30a4\u30f3\u65b0\u898f\u8ffd\u52a0\u300d\u3092\u9078\u629e<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300c\u4ed6\u793e\u3067\u53d6\u5f97\u3057\u305f\u30c9\u30e1\u30a4\u30f3\u3092\u79fb\u7ba1\u305b\u305a\u306b\u4f7f\u3046\u300d\u3092\u9078\u629e<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u300c\u4ed6\u793e\u3067\u53d6\u5f97\u3057\u305f\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\u306e\u8ffd\u52a0\u300d\u306e\u3068\u3053\u308d\u306b\u5951\u7d04\u3057\u3066\u3044\u308b\u30c9\u30e1\u30a4\u30f3\u3092\u5165\u529b\u3057\u3001\u8ffd\u52a0<\/ul>\n<h4>DNS\u8bb0\u5f55\u8bbe\u7f6e<\/h4>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u8ffd\u52a0\u3057\u305f\u30c9\u30e1\u30a4\u30f3\u306e\u300c\u8a2d\u5b9a\u300d\u306b\u3001\u300cSPF\u30ec\u30b3\u30fc\u30c9\u306e\u4f7f\u7528\u300d\u306b\u30c1\u30a7\u30c3\u30af\u304c\u5165\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001\u300c\u30c9\u30e1\u30a4\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u306b\u9077\u79fb\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300c\u767b\u9332\u6e08\u307f\u30be\u30fc\u30f3\u300d\u2192\u300c\u30be\u30fc\u30f3 &gt;\u300d\u306b\u3042\u308bTXT\u30ec\u30b3\u30fc\u30c9(SPF\u30ec\u30b3\u30fc\u30c9\u306e\u3084\u3064)\u306e\u30c6\u30ad\u30b9\u30c8\u3092\u30b3\u30d4\u30fc<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Gandi.net\u306b\u79fb\u52d5\u3057\u3001\u300cDNS\u30ec\u30b3\u30fc\u30c9\u300d\u306e\u300c\u8a73\u7d30\u8868\u793a\u300d\u3088\u308a\u30ec\u30b3\u30fc\u30c9\u3092\u76f4\u63a5\u7de8\u96c6<\/ul>\n<pre class=\"post-pre\"><code><span class=\"gi\">+ @ 10800 IN MX 0 xxx.sakura.ne.jp.(xxx\u306fSPF\u30ec\u30b3\u30fc\u30c9\u306b\u3064\u3044\u3066\u3044\u308bwww\u306a\u3093\u3061\u3083\u3089\u3092\u5165\u308c\u308b)\r\n+ @ 10800 IN TXT (\u30b3\u30d4\u30fc\u3057\u3066\u304d\u305fSPF\u30ec\u30b3\u30fc\u30c9)\r\n<\/span><span class=\"gd\">- @ 10800 IN MX 10 spool.mail.gandi.net.\r\n- @ 10800 IN MX 50 fb.mail.gandi.net.\r\n- @ 10800 IN TXT \"v=spf1 include:_mailcust.gandi.net ?all\"\r\n- _imap._tcp 10800 IN SRV 0 0 0   .\r\n- _imaps._tcp 10800 IN SRV 0 1 993 mail.gandi.net.\r\n- _pop3._tcp 10800 IN SRV 0 0 0   .\r\n- _pop3s._tcp 10800 IN SRV 10 1 995 mail.gandi.net.\r\n- _submission._tcp 10800 IN SRV 0 1 465 mail.gandi.net.\r\n- gm1._domainkey 10800 IN CNAME gm1.gandimail.net.\r\n- gm2._domainkey 10800 IN CNAME gm2.gandimail.net.\r\n- gm3._domainkey 10800 IN CNAME gm3.gandimail.net.\r\n- webmail 10800 IN CNAME webmail.gandi.net.\r\n<\/span><\/code><\/pre>\n<h4>Misskey\u7684\u8bbe\u7f6e<\/h4>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300c\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u300c\u8a2d\u5b9a\u300d\u2192\u300c\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0\u30fc\u300d<\/ul>\n<\/li>\n<\/ul>\n<p>\u300c\u30e1\u30fc\u30eb\u914d\u4fe1\u6a5f\u80fd\u3092\u6709\u52b9\u5316\u3059\u308b\u300d\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u308b<\/p>\n<p>\u4ee5\u4e0b\u306e\u901a\u308a\u8a2d\u5b9a<\/p>\n<div>\n<div class=\"post-table\">\u9805\u76ee\u5024\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9(\u30e6\u30fc\u30b6\u30fc\u540d)@(\u72ec\u81ea\u30c9\u30e1\u30a4\u30f3\u540d)\u30db\u30b9\u30c8(\u3055\u3063\u304d\u306eMX\u30ec\u30b3\u30fc\u30c9\u306b\u5165\u308c\u305f\u3084\u3064\u3001\u672b\u5c3e\u306e.\u306f\u4e0d\u8981)\u30dd\u30fc\u30c8587\u30e6\u30fc\u30b6\u30fc\u540d(\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3068\u540c\u3058)\u30d1\u30b9\u30ef\u30fc\u30c9(\u30e1\u30fc\u30eb\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d1\u30b9\u30ef\u30fc\u30c9)<\/div>\n<\/div>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4fdd\u5b58\u3057\u3001\u914d\u4fe1\u30c6\u30b9\u30c8\u3092\u5b9f\u65bd\u3057\u3001\u30c6\u30b9\u30c8\u30e1\u30fc\u30eb\u304c\u5c4a\u304f\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>\u6570\u5206\u304f\u3089\u3044\u6642\u9593\u304b\u304b\u308b\u304b\u3082<\/p>\n<h3>\u5bf9\u8c61\u5b58\u50a8\u914d\u7f6e<\/h3>\n<h4>Wasabi\u914d\u7f6e\u7684\u8bbe\u7f6e<\/h4>\n<p>?2023-11-02 \u9644\u6ce8\uff1a\u6839\u636e\u65e5\u5fd7\u524d\u7f00\uff0c\u4f3c\u4e4e\u53ef\u4ee5\u521b\u5efa\u6587\u4ef6\u5939\uff0c\u6240\u4ee5\u8fdb\u884c\u4e86\u4fee\u6539\uff0c\u4f7f\u5176\u90fd\u653e\u5165\u540c\u4e00\u4e2a\u6587\u4ef6\u5939\u4e2d\u3002<\/p>\n<p>Wasabi \u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3001Bucket\u3092\u4f5c\u6210<\/p>\n<p>\u4e00\u5fdc\u30d7\u30ed\u30d1\u30c6\u30a3\u306f\u30d0\u30b1\u30c3\u30c8\u306e\u30ed\u30b0\u3060\u3051\u6709\u52b9\u306b\u3057\u3001\u30ed\u30b0\u7528\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u306b\u300clog\/\u300d\u3092\u6307\u5b9a\u3057\u3066\u304a\u3044\u305f<\/p>\n<div>\u5982\u679c\u9009\u62e9\u4e86Tokyo\u5730\u533a\uff0c\u5219\u6b63\u786e\u7684\u533a\u57df\u540d\u79f0\u4e0d\u662fap-northeast-1\uff0c\u800c\u662f&#8221;ap-northeast-1-ntt&#8221;\uff1b<br \/>\n\u5982\u679c\u9009\u62e9\u4e86Osaka\u5730\u533a\uff0c\u5219\u6b63\u786e\u7684\u533a\u57df\u540d\u79f0\u4e0d\u662fap-northeast-2\uff0c\u800c\u662f&#8221;ap-northeast-2-ntt&#8221;\u3002<\/div>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300c\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u300d\u2192\u300cCreate Access Key\u300d\u3088\u308a\u3001\u30eb\u30fc\u30c8\u30e6\u30fc\u30b6\u30fc\u3067\u30ad\u30fc\u3092\u4f5c\u6210<\/ul>\n<\/li>\n<\/ul>\n<p>\u30a2\u30af\u30bb\u30b9\u30ad\u30fc\u3068\u79d8\u5bc6\u9375\u306e\u4e21\u65b9\u3092\u63a7\u3048\u3066\u304a\u304f<\/p>\n<h4>Nginx\u914d\u7f6e<\/h4>\n<p>\u5728\u5bf9\u8c61\u5b58\u50a8\u4e2d\u6dfb\u52a0\u5982\u4e0b\u6240\u8ff0\u7684\u4ee3\u7406\u3002<\/p>\n<pre class=\"post-pre\"><code>    # Proxy to S3 storage\r\n    location \/media\/ {\r\n        rewrite \/(.*) \/(\u30d0\u30b1\u30c3\u30c8\u540d)\/$1 break;\r\n\r\n        # If it's behind another reverse proxy or CDN, remove the following.\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto https;\r\n\r\n        # AWS compatible authentication with Signature Version 2\r\n        proxy_pass http:\/\/s3.(\u30ea\u30fc\u30b8\u30e7\u30f3\u540d).wasabisys.com;\r\n        proxy_set_header Host s3.(\u30ea\u30fc\u30b8\u30e7\u30f3\u540d).wasabisys.com;\r\n\r\n        aws_access_key (\u30a2\u30af\u30bb\u30b9\u30ad\u30fc);\r\n        aws_secret_key (\u79d8\u5bc6\u9375);\r\n        s3_bucket (\u30d0\u30b1\u30c3\u30c8\u540d);\r\n        chop_prefix \/(\u30d0\u30b1\u30c3\u30c8\u540d);\r\n\r\n        proxy_set_header Authorization $s3_auth_token;\r\n        proxy_set_header x-amz-date $aws_date;\r\n    }\r\n<\/code><\/pre>\n<p>sudo nginx -t\u306e\u7d50\u679c\u304csuccessful\u306b\u306a\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3002<\/p>\n<p>sudo systemctl restart nginx.service\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u518d\u8d77\u52d5\u3059\u308b\u3002<\/p>\n<h4>Misskey\u7684\u8bbe\u7f6e<\/h4>\n<ul class=\"post-ul\">\u300c\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30d1\u30cd\u30eb\u300d\u2192\u300c\u8a2d\u5b9a\u300d\u2192\u300c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u300d\u3088\u308a\u300c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u3092\u4f7f\u7528\u300d\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u3001\u4ee5\u4e0b\u306e\u901a\u308a\u8a2d\u5b9a\u3059\u308b\u3002<\/ul>\n<div>\n<div class=\"post-table\">\u9805\u76ee\u5024Base URL(Misskey\u3068\u540c\u3058URL)Bucket(\u30d0\u30b1\u30c3\u30c8\u540d)PrefixmediaEndpoint(proxy_pass\u306e\u3068\u3053\u308d\u306b\u66f8\u3044\u305fURL)Region(\u30ea\u30fc\u30b8\u30e7\u30f3\u540d)Access Key(\u30a2\u30af\u30bb\u30b9\u30ad\u30fc)Secret Key(\u79d8\u5bc6\u9375)SSL\u3092\u4f7f\u7528\u3059\u308b\u6709\u52b9Proxy\u3092\u5229\u7528\u3059\u308b\u6709\u52b9\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6642\u306b&#8217;public-read&#8217;\u3092\u8a2d\u5b9a\u3059\u308b\u7121\u52b9s3ForcePathStyle\u6709\u52b9<\/div>\n<\/div>\n<p>\u4e0a\u4f20\u6587\u4ef6\u5230\u4e91\u7aef\u540e\uff0c\u786e\u4fdd\u80fd\u591f\u8bfb\u5199\u548c\u8bbf\u95ee\u5b83\u3002<\/p>\n<h3>\u5176\u4ed6\u529f\u80fd<\/h3>\n<h4>\u670d\u52a1\u5de5\u4f5c\u8005<\/h4>\n<p>\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u751f\u6210\u5e76\u8bbe\u7f6e\u516c\u94a5\u548c\u79c1\u94a5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">sudo <\/span>npm <span class=\"nb\">install <\/span>web-push <span class=\"nt\">-g<\/span>\r\nweb-push generate-vapid-keys\r\n<\/code><\/pre>\n<h4>\u673a\u5668\u4eba\u4fdd\u62a4<\/h4>\n<p>\u867d\u7136\u4e00\u822c\u4e0d\u4f1a\u516c\u5f00\uff0c\u4f46\u8fd8\u662f\u91c7\u7528hCaptcha\u4f5c\u4e3a\u4e00\u79cd\u9884\u9632\u63aa\u65bd\u3002<\/p>\n<ul class=\"post-ul\">\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3057\u3001\u30b5\u30a4\u30c8\u30ad\u30fc\u3068\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u63a7\u3048\u3066\u304a\u304d\u3001Misskey\u3067\u5165\u529b<\/ul>\n<h4>DeepL API \u6df1\u5ea6\u5b66\u4e60\u8bed\u8a00\u7ffb\u8bd1\u63a5\u53e3<\/h4>\n<p>\u611f\u89c9\u53ef\u80fd\u6ca1\u4ec0\u4e48\u5fc5\u8981\uff0c\u4f46\u8fd8\u662f\u8bd5\u4e00\u8bd5\u5427\u3002<\/p>\n<p>DeepL\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332<br \/>\n\u300c\u30a2\u30ab\u30a6\u30f3\u30c8\u300d\u2192\u300c\u30a2\u30ab\u30a6\u30f3\u30c8\u300d\u2192\u300cDeepL API\u3067\u4f7f\u7528\u3059\u308b\u8a8d\u8a3c\u30ad\u30fc\u300d\u306e\u30ad\u30fc\u3092\u63a7\u3048\u3066\u304a\u304d\u3001Misskey\u3067\u5165\u529b<\/p>\n<h4>\u5173\u4e8e\u4ee3\u7406\u8d26\u6237\u548c\u89d2\u8272\u5206\u914d\u7b49\u4e8b\u9879<\/h4>\n<p>\u542c\u8bf4\u5982\u679c\u4e8b\u5148\u4e0d\u53d1\u5e03\u7b14\u8bb0\uff0c\u5c31\u641c\u7d22\u4e0d\u5230\u4efb\u4f55\u4e1c\u897f\u3002<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u56e0\u4e3a\u6211\u521a\u521a\u5efa\u8bbe\u4e86\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u4ece\u73b0\u5728\u5f00\u59cb\u5c31\u50cf\u4e00\u4e2a\u4eba\u5c45\u4f4f\u7684\u611f\u89c9\u3002<br \/>\n\u81f3\u4e8e\u8fd0\u7ef4\u65b9\u9762\uff0c\u6211\u8fd8\u6ca1\u6709\u5b8c\u5168\u8c03\u67e5\uff0c\u5982\u679c\u611f\u5174\u8da3\u7684\u8bdd\uff0c\u4ee5\u540e\u518d\u9010\u6b65\u4e86\u89e3\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u516d\u6247\u82b1\u6210\u957f\u4e86\u3002 \u56e0\u4e3a\u4ee5\u524d\u6211\u4e00\u76f4\u5728\u9a97\u4eba\u8bf4\u8981\u5efa\u7acb\u4e00\u4e2a\u72ec\u7acb\u7684\u670d\u52a1\u5668\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e00\u76f4\u90fd\u6ca1\u6709\u5efa\u6210\u3002\u6240\u4ee5\u6211\u60f3\u53c2\u52a0\u4e00\u4e0b  [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-32783","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8emisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u516d\u6247\u82b1\u6210\u957f\u4e86\u3002 \u56e0\u4e3a\u4ee5\u524d\u6211\u4e00\u76f4\u5728\u9a97\u4eba\u8bf4\u8981\u5efa\u7acb\u4e00\u4e2a\u72ec\u7acb\u7684\u670d\u52a1\u5668\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e00\u76f4\u90fd\u6ca1\u6709\u5efa\u6210\u3002\u6240\u4ee5\u6211\u60f3\u53c2\u52a0\u4e00\u4e0b [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8emisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-25T17:42:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T13:46:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d140737434c4406bfa204\/24-0.png\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/\",\"name\":\"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-01-25T17:42:06+00:00\",\"dateModified\":\"2024-04-30T13:46:30+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8emisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668","og_description":"\u9996\u5148 \u516d\u6247\u82b1\u6210\u957f\u4e86\u3002 \u56e0\u4e3a\u4ee5\u524d\u6211\u4e00\u76f4\u5728\u9a97\u4eba\u8bf4\u8981\u5efa\u7acb\u4e00\u4e2a\u72ec\u7acb\u7684\u670d\u52a1\u5668\uff0c\u4f46\u5b9e\u9645\u4e0a\u4e00\u76f4\u90fd\u6ca1\u6709\u5efa\u6210\u3002\u6240\u4ee5\u6211\u60f3\u53c2\u52a0\u4e00\u4e0b [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8emisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-01-25T17:42:06+00:00","article_modified_time":"2024-04-30T13:46:30+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d140737434c4406bfa204\/24-0.png"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"13 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/","name":"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-01-25T17:42:06+00:00","dateModified":"2024-04-30T13:46:30+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u6211\u5c1d\u8bd5\u5efa\u7acb\u4e86\u4e00\u4e2a\u9002\u7528\u4e8eMisskey\u7684\u72ec\u7acb\u670d\u52a1\u5668"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%b0%9d%e8%af%95%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e9%80%82%e7%94%a8%e4%ba%8emisskey%e7%9a%84%e7%8b%ac%e7%ab%8b%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=32783"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32783\/revisions"}],"predecessor-version":[{"id":94485,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32783\/revisions\/94485"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=32783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=32783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=32783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}