<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>运维 &#8211; 寂静花园</title>
	<atom:link href="https://www.addesp.com/archives/category/%E8%BF%90%E7%BB%B4/feed" rel="self" type="application/rss+xml" />
	<link>https://www.addesp.com</link>
	<description>寂静中交织着热情</description>
	<lastBuildDate>Wed, 05 May 2021 02:04:45 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>
	<item>
		<title>对文章《使用 Docker 最小化部署 Misskey》的补充</title>
		<link>https://www.addesp.com/archives/3598</link>
					<comments>https://www.addesp.com/archives/3598#comments</comments>
		
		<dc:creator><![CDATA[ADD-SP]]></dc:creator>
		<pubDate>Thu, 11 Feb 2021 17:27:39 +0000</pubDate>
				<category><![CDATA[运维]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Misskey]]></category>
		<guid isPermaLink="false">https://www.addesp.com/?p=3598</guid>

					<description><![CDATA[本文主要起补充作用，大致的流程上面的文章已经讲的很清楚了，这里主要整理一下遇到的坑。]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">写在前面</h2>



<p class="wp-block-paragraph">被补充文章的链接：<a href="https://candinya.com/posts/minimal-misskey-docker-deploy/" target="_blank" rel="noreferrer noopener">使用 Docker 最小化部署 Misskey</a>。</p>



<p class="wp-block-paragraph">本文主要起补充作用，大致的流程上面的文章已经讲的很清楚了，这里主要整理一下遇到的坑。</p>



<p class="wp-block-paragraph"><strong>如果你遇到了下文中没有提到的错误，比如无法订阅中继，建议按照官方文档的流程构建镜像，而不是按照上面的文章使用现有的镜像。<span class="has-inline-color has-vivid-red-color">构建镜像时如果爆内存本文有解决方式</span>。</strong></p>



<h2 class="wp-block-heading">数据库初始化失败</h2>



<h3 class="wp-block-heading">症状</h3>



<p class="wp-block-paragraph">运行下面的命令时出错，报错信息中包含应该能看见这段信息：getaddrinfo ENOTFOUND db 。</p>



<pre class="wp-block-code language-shell"><code>docker-compose run --rm web yarn run init</code></pre>



<h3 class="wp-block-heading">解决</h3>



<p class="wp-block-paragraph">尝试手动启动 redis 和 db 两个容器，等待容器内的数据库就绪后重新运行数据库初始化命令。等待时间只能自己把握，不放心就等个几分钟应该就可以了。</p>



<h3 class="wp-block-heading">原因</h3>



<p class="wp-block-paragraph">这是因为数据库容器内的数据库服务在运行数据库初始化命令时并未就绪。截止至截稿日，最新的版本是 v12.69.0，官方提供的文档中并未提醒这一情况。</p>



<p class="wp-block-paragraph">官方提供的容器编排文件 <code>docker-compose.yml</code> 通过 <code>links</code> 配置规定了容器的启动顺序，但是这并不能保证容器内的数据库服务已经就绪。这一点 Docker 在官方文档中有提醒。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>You can control the order of service startup and shutdown with the&nbsp;<a href="https://docs.docker.com/compose/compose-file/compose-file-v3/#depends_on" target="_blank" rel="noreferrer noopener">depends_on</a>&nbsp;option. Compose always starts and stops containers in dependency order, where dependencies are determined by&nbsp;<code>depends_on</code>,&nbsp;<code>links</code>,&nbsp;<code>volumes_from</code>, and&nbsp;<code>network_mode: "service:..."</code>.</p><p>However, for startup Compose does not wait until a container is “ready” (whatever that means for your particular application) &#8211; only until it’s running. There’s a good reason for this.</p><p>The problem of waiting for a database (for example) to be ready is really just a subset of a much larger problem of distributed systems. In production, your database could become unavailable or move hosts at any time. Your application needs to be resilient to these types of failures.</p><cite><a href="https://docs.docker.com/compose/startup-order/" target="_blank" rel="noreferrer noopener">Control startup and shutdown order in Compose | Docker Documentation</a></cite></blockquote>



<p class="wp-block-paragraph">Misskey 官方已经发现了这个问题：<a href="https://github.com/syuilo/misskey/issues/1546" target="_blank" rel="noreferrer noopener" title="https://github.com/syuilo/misskey/issues/1546">Error: getaddrinfo ENOTFOUND でプロセスが落ちる · Issue #1546 · syuilo/misskey</a>。</p>



<h2 class="wp-block-heading">构建镜像时爆内存</h2>



<h3 class="wp-block-heading">症状</h3>



<p class="wp-block-paragraph">运行下面这行命令后显示堆内存不足。</p>



<pre class="wp-block-code language-shell"><code>docker-compose build</code></pre>



<h3 class="wp-block-heading">解决</h3>



<p class="wp-block-paragraph">修改镜像构建的指导文件 <code>Dockerfile</code>，修改命令 <code>yarn build</code> 为下面的命令，然后重新构建镜像。</p>



<pre class="wp-block-code language-shell"><code>export NODE_OPTIONS="--max-old-space-size=2048" &amp;&amp; yarn build</code></pre>



<h3 class="wp-block-heading">原因</h3>



<p class="wp-block-paragraph">主要是因为 WebPack 在 build 时会有一个内存占用的峰值。<sup><a href="#参考资料" title="#参考资料">[1]</a></sup>这一问题截止至截稿日官方的中英文文档也并未提醒。Github 已经有用户开 issue 提出了文档修改建议：<a href="https://github.com/syuilo/misskey/issues/4983" target="_blank" rel="noreferrer noopener" title="https://github.com/syuilo/misskey/issues/4983">Clarify hardware requirements in the installation guide · Issue #4983 · syuilo/misskey</a>。</p>



<p class="wp-block-paragraph"><em>我曾经以为是单纯的内存不足，一度把 swap 增加到 10GB 还不行才反应过来没准是其它原因。</em></p>



<h2 class="wp-block-heading">写在最后</h2>



<p class="wp-block-paragraph">在 Github 读日文 issue 做不到啊。</p>



<h2 class="wp-block-heading" id="参考资料">参考资料</h2>



<ul class="wp-block-list"><li>[1] <a href="https://github.com/syuilo/misskey/issues/4983#issuecomment-496021137" target="_blank" rel="noreferrer noopener" title="https://github.com/syuilo/misskey/issues/4983#issuecomment-496021137">Clarify hardware requirements in the installation guide · Issue #4983 · syuilo/misskey</a></li><li>[2] <a href="https://docs.docker.com/compose/startup-order/" target="_blank" rel="noreferrer noopener">Control startup and shutdown order in Compose | Docker Documentation</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.addesp.com/archives/3598/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
