<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VitePress on Tom 除錯中</title><link>https://tomleesm.github.io/tags/vitepress/</link><description>Recent content in VitePress on Tom 除錯中</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 15 Jul 2025 14:59:27 +0800</lastBuildDate><atom:link href="https://tomleesm.github.io/tags/vitepress/index.xml" rel="self" type="application/rss+xml"/><item><title>用 docker compose 安裝與執行 VitePress</title><link>https://tomleesm.github.io/posts/2025/07/install-vitepress-docker/</link><pubDate>Tue, 15 Jul 2025 14:59:27 +0800</pubDate><guid>https://tomleesm.github.io/posts/2025/07/install-vitepress-docker/</guid><description>&lt;h2 id="簡介"&gt;簡介&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://vitepress.dev/"&gt;VitePress&lt;/a&gt; 是一種靜態網站產生器，類似 Git Book 那樣的東西，我用它來寫讀書筆記。官方文件只有用已經裝好 Node.js 的 VitePress 安裝方式，沒有用 docker 安裝的說明，Google 搜尋半天也找不到，好不容易自己試出了可以用的方式，所以記錄在這裡。&lt;/p&gt;
&lt;h2 id="vitepress-image"&gt;VitePress image&lt;/h2&gt;
&lt;p&gt;新增檔案 Dockerfile 內容如下&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;FROM node:22-alpine
RUN yarn add global vitepress
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;docker 一般把程式用 root 全域安裝，一般網路上找到的方法是設定 &lt;code&gt;packages.json&lt;/code&gt;，然後用指令 &lt;code&gt;npm install&lt;/code&gt; 安裝，這樣檔案容易有權限問題(&lt;code&gt;packages.json&lt;/code&gt; 變成 &lt;code&gt;root:root&lt;/code&gt; )。當然可以換成 &lt;code&gt;npm add -g vitepress&lt;/code&gt;，用 yarn 只是因為安裝的比較快。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker build . -t vitepress:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;執行上述指令後，建立 vitepress:latest image。&lt;/p&gt;
&lt;h2 id="載入需要的檔案和設定"&gt;載入需要的檔案和設定&lt;/h2&gt;
&lt;p&gt;新增檔案 &lt;code&gt;docker-compose.yaml&lt;/code&gt; 內容如下&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;book_notes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;vitepress:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;book_notes&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./:/app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;working_dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/node_modules/vitepress/bin/vitepress.js dev --host 0.0.0.0&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;restart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;no&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;5173:5173&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用 docker compose 在載入容器後載入需要的檔案和設定，所以不是在 Dockerfile 設定：&lt;/p&gt;</description></item></channel></rss>