<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Ubuntu Server｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/ubuntu-server/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>Ubuntu Server｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/ubuntu-server/</link><width>144</width><height>144</height></image>
    <description>林鼎淵（Dean Lin）的部落格：生成式 AI 企業內訓講師、外商資安公司軟體專家、7 本書作者。400 多篇文章用白話分享生成式 AI 實戰、Claude Code 與 Vibe Coding 教學、團隊合作與職場成長。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <copyright>© 2020–2026 林鼎淵 Dean Lin</copyright>
    <lastBuildDate>Tue, 21 Jun 2022 21:33:28 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/ubuntu-server/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>放完假後 MySQL Server 就掛了，不是每個錯誤都能靠 Google 找到解答</title>
      <link>https://deanlin.net/blog/202206/mysql-server-down-after-holiday/</link>
      <pubDate>Tue, 21 Jun 2022 21:33:28 +0800</pubDate>
      <guid>https://deanlin.net/blog/202206/mysql-server-down-after-holiday/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>如果你用上圖的錯誤訊息去 Google 搜尋，相信會得到很多解答；但這篇文章遇到的問題，如果用關鍵字搜尋是找不到真正解答的；也因為這次的經驗讓我對 Ubuntu Server、MySQL、apt-mark 有更深一層的認識。</description>
      <media:content url="https://deanlin.net/blog/202206/mysql-server-down-after-holiday/images/mysql-server-down-after-holiday-og_hu_941c008b1b9af0f6.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202206/mysql-server-down-after-holiday/images/mysql-server-down-after-holiday-01.webp" width="1060" height="561" alt="放完假後 MySQL Server 就掛了，不是每個錯誤都能靠 Google 找到解答（圖 1）" fetchpriority="high" decoding="async"></p>
<p>如果你用上圖的錯誤訊息去 Google 搜尋，相信會得到很多解答；但這篇文章遇到的問題，如果用關鍵字搜尋是找不到真正解答的；也因為這次的經驗讓我對 Ubuntu Server、MySQL、apt-mark 有更深一層的認識。</p>
<pre tabindex="0"><code>大綱
ㄧ、問題描述
二、關鍵字搜尋到的方案
三、從 Error Log 猜想問題
四、問題的真實原因
五、解決方案
六、後記
</code></pre><hr>
<h2 id="ㄧ問題描述">ㄧ、問題描述<a class="h-anchor" href="#%e3%84%a7%e5%95%8f%e9%a1%8c%e6%8f%8f%e8%bf%b0" aria-label="這個段落的連結"></a></h2>
<p>上週建立的中介資料庫在經歷一個假日後，在禮拜一被同事回報登入失敗。</p>
<p>一開始我以為是帳號密碼錯誤，又或是公司網路問題；但在成功登入 Server 後，我發現連 root 的權限都無法登入 MySQL DB，並出現如下錯誤：</p>
<pre tabindex="0"><code>ERROR 2002 (HY000): Can’t connect to local MySQL server through socket &#39;/var/run/mysqld/mysqld.sock&#39; (2)
</code></pre><hr>
<h2 id="二關鍵字搜尋到的方案">二、關鍵字搜尋到的方案<a class="h-anchor" href="#%e4%ba%8c%e9%97%9c%e9%8d%b5%e5%ad%97%e6%90%9c%e5%b0%8b%e5%88%b0%e7%9a%84%e6%96%b9%e6%a1%88" aria-label="這個段落的連結"></a></h2>
<p>遇事不知求 Google，我馬上搜尋過去前輩們是怎麼解決這個問題的。</p>
<p><img src="https://deanlin.net/blog/202206/mysql-server-down-after-holiday/images/mysql-server-down-after-holiday-02.webp" width="1400" height="968" alt="二、關鍵字搜尋到的方案（圖 2）" loading="lazy" decoding="async"></p>
<p>解決的方法五花八門，我這邊統整一下大致的方向：</p>
<ol>
<li>重啟 MySQL 服務</li>
<li>調整 MySQL 資料夾權限，補齊遺漏的檔案</li>
<li>重啟整台 Server</li>
<li>把 MySQL 砍掉重裝</li>
</ol>
<p>但很遺憾的，1~3 我都嘗試過了，MySQL 依舊頑強的吐一樣的錯誤，看來不能依靠網路的的解法了。</p>
<hr>
<h2 id="三從-error-log-猜想問題">三、從 Error Log 猜想問題<a class="h-anchor" href="#%e4%b8%89%e5%be%9e-error-log-%e7%8c%9c%e6%83%b3%e5%95%8f%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>因為網路上的方案都失效，所以決定換一個問題處理的方向，去找 MySQL 的 Error Log（其實一開始應該就要這樣做）。</p>
<p><strong>STEP 1</strong>：前往 MySQL 的設定檔。</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
</span></span></code></pre></div><p><strong>STEP 2</strong>：查看 Error Log 存放路徑。</p>
<p><img src="https://deanlin.net/blog/202206/mysql-server-down-after-holiday/images/mysql-server-down-after-holiday-03.webp" width="1400" height="497" alt="三、從 Error Log 猜想問題（圖 3）" loading="lazy" decoding="async"></p>
<p><strong>STEP 3</strong>：查看 Error Log 內容。</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vim /var/log/mysql/error.log
</span></span></code></pre></div><p><img src="https://deanlin.net/blog/202206/mysql-server-down-after-holiday/images/mysql-server-down-after-holiday-04.webp" width="1400" height="599" alt="三、從 Error Log 猜想問題（圖 4）" loading="lazy" decoding="async"></p>
<p>從時間軸發現服務被完整的關閉後就無法重啟，但假日有誰會把服務給關閉呢？</p>
<p>於是我便詢問公司的 MIS 部門，在假日是否有對 Server 進行維護作業。</p>
<p>果然如我所料，對方表示在假日有對各 Server 系統做例行性維護升級，而這台 Ubuntu Server 的 MySQL 正是在這次升級後出問題。</p>
<hr>
<h2 id="四問題的真實原因">四、問題的真實原因<a class="h-anchor" href="#%e5%9b%9b%e5%95%8f%e9%a1%8c%e7%9a%84%e7%9c%9f%e5%af%a6%e5%8e%9f%e5%9b%a0" aria-label="這個段落的連結"></a></h2>
<p>既然問題是由系統升級引起的，那就比較有解決的方向了；在與 MIS 同仁討論後，我們猜想問題應該是 Ubuntu Server 升級後內建的 MySQL 版本為 8.0，但原本安裝的版本為 5.7，因此在升級後發生版本對應不到的問題。</p>
<p>於是我們便執行下面的指令來查看目前 apt 安裝的套件有哪些，以及對應的版本：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>apt list --installed
</span></span></code></pre></div><p>結果如我們所想，系統更新後，新版本的 MySQL 真的把舊版本給覆蓋住了。</p>
<hr>
<h2 id="五解決方案">五、解決方案<a class="h-anchor" href="#%e4%ba%94%e8%a7%a3%e6%b1%ba%e6%96%b9%e6%a1%88" aria-label="這個段落的連結"></a></h2>
<p>但因為這台是給其他合作單位使用的資料庫，而對方因為總總歷史包袱只能選用 MySQL 5.7，所以我們是不能對它做升級的。</p>
<p>但幸好 MIS 在維護前有先將 Server 備份，因此我們如下步驟進行處理：</p>
<p><strong>STEP 1</strong>：用備份將原本的 Ubuntu Server 還原。</p>
<p><strong>STEP 2：</strong>下指令將 MySQL Server 版本鎖定。</p>
<pre tabindex="0"><code>apt-mark hold mysql-server
</code></pre><p><strong>STEP 3</strong>：查看是否有鎖定成功。</p>
<pre tabindex="0"><code>apt-mark showhold
</code></pre><p><strong>STEP 4：</strong>鎖定後再將 Ubuntu Server 做升級維護。</p>
<p><strong>STEP 5：</strong>升級完成後確認 MySQL 版本有鎖定住。</p>
<pre tabindex="0"><code>mysql --version
</code></pre><p>透過上面的步驟後，MySQL 就成功復活了～</p>
<hr>
<h2 id="六後記">六、後記<a class="h-anchor" href="#%e5%85%ad%e5%be%8c%e8%a8%98" aria-label="這個段落的連結"></a></h2>
<p>這個問題花了不少時間才解決，主要是因為我在一開始判斷問題時就走偏了；過去我都是從錯誤訊息找答案，而這次的錯誤訊息卻把我引導到另一個錯誤的方向。</p>
<p>這次的經驗也讓我明白，除了發生問題的本體外，還要多觀察其他有「相依性」的資訊，否則會陷入死胡同，還期待用錯誤的方法得到正確的結果。</p>
<p>但同時也提醒大家，千萬不要看完這篇文章後，回去就把所有安裝的套件版本都鎖死；除非有不得已的理由，不然系統、套件都是需要定期更新的，這樣穩定性、安全性才足夠。</p>
]]></content:encoded>
    </item>
    <item>
      <title>Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04</title>
      <link>https://deanlin.net/blog/202102/redmine-installation-ubuntu/</link>
      <pubDate>Thu, 18 Feb 2021 15:00:45 +0800</pubDate>
      <guid>https://deanlin.net/blog/202102/redmine-installation-ubuntu/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>專案管理的工具非常之多，但是 jira、notion、clickup、trello 這類的專案管理都需要付錢，目前公司採用 Teams 的 planner、Lists 又不符合實際使用情境；之前有短暫的導入 testlink，不過那個 20 年前的 UI…</description>
      <media:content url="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-og_hu_c388eeb4ab5b5808.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>專案管理的工具非常之多，但是 jira、notion、clickup、trello 這類的專案管理都需要付錢，目前公司採用 Teams 的 planner、Lists 又不符合實際使用情境；之前有短暫的導入 testlink，不過那個 20 年前的 UI 設計很快就勸退大家。基於上述原因決定嘗試使用 Redmine 這個專案管理工具，本篇文章會詳細說明安裝的步驟即遭遇過的問題，文章大綱如下：</p>
<pre tabindex="0"><code>一、安裝環境
二、安裝順序
  STEP 1：安裝 MySQL
  STEP 2：建立 Redmine 使用者帳號
  STEP 3：安裝 RVM
  STEP 4：安裝 Ruby
  STEP 5：安裝 Passenger and Nginx
  STEP 6：設定 Nginx
  STEP 7：在 MySQL 增加 redmine 的使用者
  STEP 8：安裝 Redmine
  STEP 9：安裝 Redmine 外掛
  STEP 10：設定 Redmine 寄信功能
三、備註
</code></pre><p><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-01.webp" width="1400" height="784" alt="Redmine 超詳細安裝教學：Redmine 4.1.1 on Ubuntu 16.04（圖 1）" fetchpriority="high" decoding="async"></p>
<h2 id="一安裝環境">一、安裝環境<a class="h-anchor" href="#%e4%b8%80%e5%ae%89%e8%a3%9d%e7%92%b0%e5%a2%83" aria-label="這個段落的連結"></a></h2>
<p>官方沒有建議的硬體規格，但是看到有 <a href="https://www.redmineup.com/pages/blog/self-hosted-on-in-the-cloud-how-to-choose-infrastructure-and-hardware-configuration-for-redmine">文章分享</a> 最低硬體配置如下：</p>
<ul>
<li>Processor: Intel Celeron (min 300 MHz)</li>
<li>RAM: 1–2 GB RAM</li>
<li>HDD: 30–40 GB</li>
</ul>
<p>但通常使用最低硬體配置得到的結果就是容易卡，很多人同時上線使用時會讓卡到讓你懷疑人生，下面是我安裝時的配置目前使用起來算是流暢給大家參考用：</p>
<ul>
<li>Processor: 使用 VMWARE 的虛擬單核心</li>
<li>RAM: 8GB RAM</li>
<li>HDD: 500 GB</li>
<li>OS: ubuntu 16.04</li>
</ul>
<h2 id="二安裝順序">二、安裝順序<a class="h-anchor" href="#%e4%ba%8c%e5%ae%89%e8%a3%9d%e9%a0%86%e5%ba%8f" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>操作時請注意角色權限(root、redmine)，否則安裝到一半會卡住</p>
</blockquote>
<h2 id="step-1安裝-mysql">STEP 1：安裝 MySQL<a class="h-anchor" href="#step-1%e5%ae%89%e8%a3%9d-mysql" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 安裝 MySQL 套件
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install build-essential mysql-server libmysqlclient-dev imagemagick libmagickwand-dev
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 安裝後驗證 MySQL Version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    mysql -u root -p
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/b38188a5ef4141b93c01b319a80b371b" rel="noopener">mysql_install.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-02.webp" width="1258" height="514" alt="看到類似上方的 MySQL 資訊就代表你安裝成功嚕！" loading="lazy" decoding="async">
  <figcaption>看到類似上方的 MySQL 資訊就代表你安裝成功嚕！</figcaption>
</figure>

<h2 id="step-2建立-redmine-使用者帳號">STEP 2：建立 Redmine 使用者帳號<a class="h-anchor" href="#step-2%e5%bb%ba%e7%ab%8b-redmine-%e4%bd%bf%e7%94%a8%e8%80%85%e5%b8%b3%e8%99%9f" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 建立 Redmine 使用者，資料放在 <span style="color:#a5d6ff">`/data/redmine`</span>
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    adduser --system \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --shell /bin/bash \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --gecos &#39;Redmine Administrator&#39; \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --group \
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        --home /data/redmine redmine;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 建立 rvm group
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    groupadd rvm
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 允許 redmine 可以 sudo
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    adduser redmine sudo
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 設定 redmine 密碼
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    passwd redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 將 redmine 使用者加入 rvm 群組
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    usermod -a -G rvm redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/7443c1b56e1f7a585472834ea2ec65b0" rel="noopener">add_redmine_user.md</a>（GitHub Gist）</p>
<h2 id="step-3安裝-rvm">STEP 3：安裝 RVM<a class="h-anchor" href="#step-3%e5%ae%89%e8%a3%9d-rvm" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 安裝gnupg2
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo apt install gnupg2
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 安裝 GPG keys:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 安裝 RVM
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    \curl -sSL https://get.rvm.io | bash -s stable
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 讓 rvm 指令生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    source /data/redmine/.rvm/scripts/rvm
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 確認安裝的RVM版本
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm --version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/c05ee64e18057de7a430df6b474ebd9e" rel="noopener">install_RVM.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-03.webp" width="1400" height="74" alt="看到類似上方的 RVM 資訊就代表你安裝成功嚕！" loading="lazy" decoding="async">
  <figcaption>看到類似上方的 RVM 資訊就代表你安裝成功嚕！</figcaption>
</figure>

<h2 id="step-4安裝-ruby">STEP 4：安裝 Ruby<a class="h-anchor" href="#step-4%e5%ae%89%e8%a3%9d-ruby" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<p>作者的 <strong>RUBY_VERSION 為 2.3.8</strong>，這裡安裝的版本請<a href="https://www.redmine.org/projects/redmine/wiki/redmineinstall#Ruby-interpreter">參考 Redmine 的官方建議</a>，如果安裝其他的版本後續安裝 Redmine 時會發生錯誤</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 檢查 rvm 必要的套件
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm requirements
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 安裝指定的 ruby version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm install ${RUBY_VERSION}
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 將此版本設定為預設
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rvm use ${RUBY_VERSION} --default
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 確認安裝的 Ruby 版本
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ruby --version
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/26719eedd99c32afc8f8d5820e058078" rel="noopener">intsall_ruby.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-04.webp" width="1400" height="74" alt="看到類似上方的 ruby 資訊就代表你安裝成功嚕！" loading="lazy" decoding="async">
  <figcaption>看到類似上方的 ruby 資訊就代表你安裝成功嚕！</figcaption>
</figure>

<h2 id="step-5安裝-passenger-and-nginx">STEP 5：安裝 Passenger and Nginx<a class="h-anchor" href="#step-5%e5%ae%89%e8%a3%9d-passenger-and-nginx" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 安裝 Passenger PGP key 和 HTTPS support for package manager
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install -y dirmngr gnupg
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install -y apt-transport-https ca-certificates
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. Add passenger APT repository
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sh -c &#39;echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main &gt; /etc/apt/sources.list.d/passenger.list&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt update
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 安裝 Passenger and NGINX
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    apt install -y nginx-extras passenger
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/b44c3fa2e4c3a95b133182431af9da3c" rel="noopener">install_Passenger_Nginx.md</a>（GitHub Gist）</p>
<h2 id="step-6設定-nginx">STEP 6：設定 Nginx<a class="h-anchor" href="#step-6%e8%a8%ad%e5%ae%9a-nginx" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 編輯 Nginx 設定檔案
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi /etc/nginx/nginx.conf
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 移除此行註解#：`</span>include /etc/nginx/passenger.conf;<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`conf
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ...
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ##
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    # Phusion Passenger config
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ##
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    # Uncomment it if you installed passenger or passenger-enterprise
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ##
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    include /etc/nginx/passenger.conf;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 接下來要調整 Nginx 的網站設定，所以建議先備份原本的設定
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 編輯 Nginx 的網站設定
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi /etc/nginx/sites-available/default
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6. 調整網站的根目錄位置以及 Passenger 設定
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #root /var/www/html; #將原本的註解或是移除
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    root /data/redmine/current/public;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    passenger_enabled on;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    client_max_body_size 10m;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7. 把 location 段落註解
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #location / {
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">            # First attempt to serve request as file, then
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">            # as directory, then fall back to displaying a 404.
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #       try_files $uri $uri/ =404;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    #}
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/dc2d42e3059a7beff2912bbd34be52ea" rel="noopener">set_nginx.md</a>（GitHub Gist）</p>
<p>完成上述步驟後再做以下驗證：</p>
<ol>
<li>更改目錄權限： <code>chown -R www-data /var/www</code></li>
<li>重啟 Nginx： <code>systemctl restart nginx</code></li>
<li>驗證 Passenger and NGINX: <code>/usr/bin/passenger-config validate-install</code></li>
</ol>
<p><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-05.webp" width="1030" height="426" alt="STEP 6：設定 Nginx（圖 5）" loading="lazy" decoding="async"></p>
<p>4. 檢查 Ngninx 狀態與 Passenger process: <code>/usr/sbin/passenger-memory-stats</code></p>
<p><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-06.webp" width="1400" height="498" alt="STEP 6：設定 Nginx（圖 6）" loading="lazy" decoding="async"></p>
<h2 id="step-7在-mysql-增加-redmine-的使用者">STEP 7：在 MySQL 增加 redmine 的使用者<a class="h-anchor" href="#step-7%e5%9c%a8-mysql-%e5%a2%9e%e5%8a%a0-redmine-%e7%9a%84%e4%bd%bf%e7%94%a8%e8%80%85" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： root</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 登入 MySQL
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    mysql -u root -p
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 創建 redmine 資料庫
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    CREATE DATABASE redmine CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 創建 redmine 使用者，密碼記得自行調整
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    CREATE USER &#39;redmine&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;password&#39;;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 給予使用者權限
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    GRANT ALL PRIVILEGES ON redmine.* TO &#39;redmine&#39;@&#39;localhost&#39;;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6. 使權限生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    FLUSH PRIVILEGES;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7. 離開 MySQL
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    quit;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/f0d6fa77b683a40cec8d44e5be51e36c" rel="noopener">mysql_add_redmine_user.md</a>（GitHub Gist）</p>
<h2 id="step-8安裝-redmine">STEP 8：安裝 Redmine<a class="h-anchor" href="#step-8%e5%ae%89%e8%a3%9d-redmine" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<h3 id="-下載官方-image">下載官方 image<a class="h-anchor" href="#-%e4%b8%8b%e8%bc%89%e5%ae%98%e6%96%b9-image" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 到[<span style="color:#7ee787">官方網站</span>](https://www.redmine.org/projects/redmine/wiki/Download)了解最新的stable版本（筆者安裝版本為 4.1.1）
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">2.</span> 前往放置 redmine image 的目錄
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd /data/redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 下載官方 image 並解壓縮
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    wget https://www.redmine.org/releases/redmine-4.1.1.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    tar zxvf redmine-4.1.1.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 建立連結資料夾 current
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    ln -s redmine-4.1.1 current
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 前往連結資料夾
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd current
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/523ff799ed15fd78787e5664bcd589e3" rel="noopener">redmine_download.md</a>（GitHub Gist）</p>
<h3 id="-調整-redmine-裡面的資料庫設定">調整 redmine 裡面的資料庫設定<a class="h-anchor" href="#-%e8%aa%bf%e6%95%b4-redmine-%e8%a3%a1%e9%9d%a2%e7%9a%84%e8%b3%87%e6%96%99%e5%ba%ab%e8%a8%ad%e5%ae%9a" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 將 redmine 的資料庫範例設定檔複製一份
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cp -pR config/database.yml.example config/database.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 編輯資料庫設定檔案
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi config/database.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`  
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3.  調整 production 的資訊即可，內容填上 STEP7 建立的使用者資訊即可
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    production:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      adapter: mysql2
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      database: redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      host: localhost
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      username: redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      password: &#34;your password&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      # Use &#34;utf8&#34; instead of &#34;utfmb4&#34; for MySQL prior to 5.7.7
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      encoding: utf8mb4
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/9cb24f48fd8b8fa969c4138a12186a76" rel="noopener">redmine_database_config.md</a>（GitHub Gist）</p>
<h3 id="-下載相關套件">下載相關套件<a class="h-anchor" href="#-%e4%b8%8b%e8%bc%89%e7%9b%b8%e9%97%9c%e5%a5%97%e4%bb%b6" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 先確認當前資料夾為 <span style="color:#a5d6ff">`/data/redmine/current`</span>
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    pwd
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 執行 gem, bundle 安裝依賴套件
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    gem install bundler
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle install --without development test
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    &gt; 如果安裝過程中遇到錯誤可能是因為沒有安裝到 ruby 的套件  
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    &gt; 1. 先安裝 `</span>sudo apt-get install ruby-dev<span style="color:#a5d6ff">`  
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    &gt; 2. 再執行一次 `</span>bundle install --without development test` 確認有無報錯
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/540d8de42ff10326664acdb6f29c08d4" rel="noopener">redmine_install_package.md</a>（GitHub Gist）</p>
<h3 id="-初始化-redmine">初始化 redmine<a class="h-anchor" href="#-%e5%88%9d%e5%a7%8b%e5%8c%96-redmine" aria-label="這個段落的連結"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 先確認當前資料夾為 /data/redmine/current
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    pwd
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 用 Rake 啟動 redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle exec rake generate_secret_token
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. Migrate Database Schema(初始化資料庫)
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    RAILS_ENV=production bundle exec rake db:migrate
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. Load Initial Data(下面會請你選擇語言，預設為英文，語言後續都能再做調整)
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    RAILS_ENV=production bundle exec rake redmine:load_default_data
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 用 Nginx 重啟 Redmine
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo systemctl restart nginx
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/79b903f7c4f1f22821aa91bbb21dca06" rel="noopener">redmine_init.md</a>（GitHub Gist）</p>
<p>接下來你可以瀏覽 <code>http:&lt;server_ip&gt;</code> ，如果順利的話可以看到 Redmine 登入畫面如下：</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-07.webp" width="1148" height="565" alt="預設 admin/admin 登入" loading="lazy" decoding="async">
  <figcaption>預設 <code>admin/admin</code> 登入</figcaption>
</figure>

<h2 id="step-9安裝-redmine-外掛">STEP 9：安裝 Redmine 外掛<a class="h-anchor" href="#step-9%e5%ae%89%e8%a3%9d-redmine-%e5%a4%96%e6%8e%9b" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<p>Plugin 安裝方式雷同，下面以 <code>Redmine Dashboard 2</code>為範例安裝</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 先進入 redmine 的 plugin 資料夾
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd /current/plugins
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 下載 plugin，最新的 release 請參考[官方](https://github.com/jgraichen/redmine_dashboard)
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    wget https://github.com/jgraichen/redmine_dashboard/archive/v2.9.0.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 解壓縮檔案
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    tar zxvf v2.9.0.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 移除壓縮檔
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rm v2.9.0.tar.gz
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">6.  安裝相關套件
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle install
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">7. 將套件相關 DB 進行 migrate 到 production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    rake db:migrate RAILS_ENV=production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">8. 將套件安裝至 production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    bundle exec rake redmine:plugins:migrate RAILS_ENV=production
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">9. 安裝完畢後重啟讓設定生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo systemctl restart nginx
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/d625c9f43d9667e086f3eb73328becb6" rel="noopener">redmine_plugin.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-08.webp" width="1148" height="529" alt="安裝成功後的外掛程式會直接出現喔～" loading="lazy" decoding="async">
  <figcaption>安裝成功後的外掛程式會直接出現喔～</figcaption>
</figure>

<h2 id="step-10設定-redmine-寄信功能">STEP 10：設定 Redmine 寄信功能<a class="h-anchor" href="#step-10%e8%a8%ad%e5%ae%9a-redmine-%e5%af%84%e4%bf%a1%e5%8a%9f%e8%83%bd" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>角色： redmine</p>
</blockquote>
<p>如果沒做這個步驟是寄不出信的，需要做下面的調整即可</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-09.webp" width="1400" height="125" alt="設定前在：網站管理&gt;設定&gt;電子郵件提醒選項。會出現的畫面" loading="lazy" decoding="async">
  <figcaption>設定前在：網站管理&gt;設定&gt;電子郵件提醒選項。會出現的畫面</figcaption>
</figure>

<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span><span style="color:#ff7b72">1.</span> 進入 redmine 設定的資料夾
</span></span><span style="display:flex;"><span>    ``<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cd /current/config
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">2. 將 redmine 的設定範例設定檔複製一份
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    cp -pR configuration.yml.example configuration.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">3. 編輯 redmine 設定檔案
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    vi configuration.yml
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">4. 調整 production 的資訊即可，下面用 Gmail 作為範例
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    production:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      delivery_method: :smtp
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">      smtp_settings:
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        enable_starttls_auto: true
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        address: &#34;smtp.gmail.com&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        port: 587
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        domain: &#34;smtp.gmail.com&#34; # &#39;your.domain.com&#39; for GoogleApps
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        authentication: :plain
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        user_name: &#34;email&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">        password: &#34;email pw&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">     `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">5. 設定完畢後重啟生效
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>`<span style="color:#a5d6ff">`
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    sudo systemctl restart nginx
</span></span></span><span style="display:flex;"><span><span style="color:#a5d6ff">    `</span>``
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/120f7f2368b770899f5cacdc8344e61a" rel="noopener">redmine_email.md</a>（GitHub Gist）</p>
<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-10.webp" width="1147" height="488" alt="網站管理&gt;設定&gt;電子郵件提醒選項的右下角會有“寄送測試郵件的按鈕”提供測試喔" loading="lazy" decoding="async">
  <figcaption>網站管理&gt;設定&gt;電子郵件提醒選項的右下角會有“寄送測試郵件的按鈕”提供測試喔</figcaption>
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202102/redmine-installation-ubuntu/images/redmine-installation-ubuntu-11.webp" width="1262" height="484" alt="收到的測試郵件會長這個樣子" loading="lazy" decoding="async">
  <figcaption>收到的測試郵件會長這個樣子</figcaption>
</figure>

<h2 id="三備註">三、備註<a class="h-anchor" href="#%e4%b8%89%e5%82%99%e8%a8%bb" aria-label="這個段落的連結"></a></h2>
<ol>
<li>如果進入網頁時畫面沒有顯示應該是因為防火牆問題，可以用下面指令嘗試：<code>sudo ufw allow http</code> 、<code>sudo ufw allow https</code></li>
<li>參考資源：<a href="https://rickhw.github.io/2019/05/11/Redmine/Install-Redmine40x-on-Ubuntu1604/">Redmine 安裝篇：Redmine 4.0.x on Ubuntu 16.04</a>、<a href="https://rickhw.github.io/2017/03/18/Redmine/Redmine-Plugins/">Redmine Plugins and Themes</a>、<a href="https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Ubuntu_step_by_step">HowTo Install Redmine on Ubuntu step by step</a></li>
</ol>
<hr>
<pre tabindex="0"><code>安裝完後如果想進一步了解如何使用 Redmine，可以參考以下文章：
👍 如何用 Redmine 做專案管理＆體驗心得
👍 Redmine Plugins &amp; Themes 介紹：那些我成功擴充的外掛
👍 用 Redmine 做專案管理 — 管理者不可不知的設定
👍 用 Redmine 做專案管理 — 一般用戶不可不知的基礎功能
👍 Redmine 教育訓練 — 依角色權限說明
</code></pre><hr>
<h3 class="h-nomark" id="-讀完這篇文章後">🙂 讀完這篇文章後<a class="h-anchor" href="#-%e8%ae%80%e5%ae%8c%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0%e5%be%8c" aria-label="這個段落的連結"></a></h3>
]]></content:encoded>
    </item>
    <item>
      <title>Ubuntu Server基本環境</title>
      <link>https://deanlin.net/blog/202006/ubuntu-server-basic-setup/</link>
      <pubDate>Mon, 15 Jun 2020 14:50:44 +0800</pubDate>
      <guid>https://deanlin.net/blog/202006/ubuntu-server-basic-setup/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>這篇文章是以部署網頁為導向的環境設定</description>
      <media:content url="https://deanlin.net/blog/202006/ubuntu-server-basic-setup/images/ubuntu-server-basic-setup-og_hu_6c2efbcf4b04d6f3.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202006/ubuntu-server-basic-setup/images/ubuntu-server-basic-setup-01.webp" width="1200" height="630" alt="Ubuntu Server基本環境（圖 1）" fetchpriority="high" decoding="async"></p>
<p>這篇文章是以部署網頁為導向的環境設定</p>
<h2 class="h-nomark" id="1ssh的安裝為了ssh連線">1、ssh的安裝(為了ssh連線)<a class="h-anchor" href="#1ssh%e7%9a%84%e5%ae%89%e8%a3%9d%e7%82%ba%e4%ba%86ssh%e9%80%a3%e7%b7%9a" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt-get install ssh -y
</span></span></code></pre></div><p><strong>如果遇到：package ‘ssh’ has no installation candidate的錯誤，要記得更新</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>apt-get update
</span></span></code></pre></div><h2 class="h-nomark" id="2生成金鑰">2、生成金鑰<a class="h-anchor" href="#2%e7%94%9f%e6%88%90%e9%87%91%e9%91%b0" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>ssh-keygen
</span></span><span style="display:flex;"><span>cd .ssh
</span></span><span style="display:flex;"><span>mv id_rsa.pub authorized_keys
</span></span></code></pre></div><h2 class="h-nomark" id="3修改配置文件etcsshsshd_config">3、修改配置文件，/etc/ssh/sshd_config<a class="h-anchor" href="#3%e4%bf%ae%e6%94%b9%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6etcsshsshd_config" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/ssh/sshd_config
</span></span></code></pre></div><p>將# AuthorizedKeysFile %h/.ssh/authorized_keys，把前面的#去掉即可，這個是允許ssh登入的檔案路徑</p>
<p>註:如果server有安裝gitlab，可能會被拒絕連線，要再加上這個設定:StrictModes no</p>
<p>修改完記得要將ssh重啟才會生效：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo service ssh restart
</span></span></code></pre></div><h2 class="h-nomark" id="4windows上啟動putty進行如下配置">4、windows上啟動putty，進行如下配置<a class="h-anchor" href="#4windows%e4%b8%8a%e5%95%9f%e5%8b%95putty%e9%80%b2%e8%a1%8c%e5%a6%82%e4%b8%8b%e9%85%8d%e7%bd%ae" aria-label="這個段落的連結"></a></h2>
<p>（1）Session-Logging-Hostname:填上你的linux的ip</p>
<p>（2）Windows －Translation － 在下拉選單裡選上UTF－8，這裡不設定，登入後將會出現中文亂碼。</p>
<p>（3）Connection- Data — Auto login username:填上你登入ubuntu時用的使用者名稱。</p>
<p>（4）Connection- SSH-Auth-Private key file for authentication:選上id_rsa.ppk；</p>
<h2 class="h-nomark" id="5設定-authorized_keys-信任清單">5、設定 Authorized_keys 信任清單<a class="h-anchor" href="#5%e8%a8%ad%e5%ae%9a-authorized_keys-%e4%bf%a1%e4%bb%bb%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<pre tabindex="0"><code>vi authorized_keys
</code></pre><p>進去後貼上rsa key</p>
<h2 class="h-nomark" id="6確定能用ssh-key登入後再去修改配置文件">6、確定能用ssh key登入後再去修改配置文件<a class="h-anchor" href="#6%e7%a2%ba%e5%ae%9a%e8%83%bd%e7%94%a8ssh-key%e7%99%bb%e5%85%a5%e5%be%8c%e5%86%8d%e5%8e%bb%e4%bf%ae%e6%94%b9%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/ssh/sshd_config
</span></span></code></pre></div><p>修改：PasswordAuthentication no 禁止使用者用密碼登入</p>
<p>之後記得重啟</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo service ssh restart
</span></span></code></pre></div><h2 class="h-nomark" id="7-ubuntu-based-gnulinux-上的防火牆">7、 Ubuntu based GNU/Linux 上的防火牆<a class="h-anchor" href="#7-ubuntu-based-gnulinux-%e4%b8%8a%e7%9a%84%e9%98%b2%e7%81%ab%e7%89%86" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo apt-get install ufw
</span></span><span style="display:flex;"><span>sudo ufw enable
</span></span><span style="display:flex;"><span>sudo ufw allow from 192.168.0.0/12<span style="color:#ff7b72;font-weight:bold">(</span>你允許的網路環境<span style="color:#ff7b72;font-weight:bold">)</span>
</span></span></code></pre></div><h2 class="h-nomark" id="8每台的ubuntu-default-editor都改成vim">8、每台的ubuntu default editor都改成vim<a class="h-anchor" href="#8%e6%af%8f%e5%8f%b0%e7%9a%84ubuntu-default-editor%e9%83%bd%e6%94%b9%e6%88%90vim" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo update-alternatives — set editor /usr/bin/vim.basic
</span></span></code></pre></div><h2 class="h-nomark" id="9將ip改為static-ip">9、將ip改為static ip<a class="h-anchor" href="#9%e5%b0%87ip%e6%94%b9%e7%82%bastatic-ip" aria-label="這個段落的連結"></a></h2>
<p>先看新增的網卡名稱</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd /proc/sys/net/ipv4/conf
</span></span></code></pre></div><p><strong>Ubuntu 16作法：</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/network/interfaces
</span></span><span style="display:flex;"><span>auto ens160
</span></span><span style="display:flex;"><span>iface ens160 inet static
</span></span><span style="display:flex;"><span>address 192.168.3.60
</span></span><span style="display:flex;"><span>netmask 255.255.0.0
</span></span><span style="display:flex;"><span>gateway 192.168.1.254
</span></span><span style="display:flex;"><span>dns-nameservers 168.95.1.1 168.95.192.1
</span></span></code></pre></div><p>改完後</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo /etc/init.d/networking restart
</span></span></code></pre></div><p><strong>Ubuntu 18作法：</strong></p>
<pre tabindex="0"><code>vi /etc/netplan/50-cloud-init.yaml
</code></pre><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#7ee787">network</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">ethernets</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">        </span><span style="color:#7ee787">enp0s3</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">            </span><span style="color:#7ee787">addresses</span>:<span style="color:#6e7681"> </span>[<span style="color:#a5d6ff">192.168.0.10</span><span style="color:#a5d6ff">/24]</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">            </span><span style="color:#7ee787">gateway4</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">192.168.0.1</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">            </span><span style="color:#7ee787">nameservers</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">              </span><span style="color:#7ee787">addresses</span>:<span style="color:#6e7681"> </span>[<span style="color:#a5d6ff">8.8.8.8</span>,<span style="color:#a5d6ff">8.8.4.4</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">            </span><span style="color:#7ee787">dhcp4</span>:<span style="color:#6e7681"> </span><span style="color:#79c0ff">no</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">version</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">2</span><span style="color:#6e7681">
</span></span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/d0fcc16dd59df0e5152449c27cd6d1f9" rel="noopener">50-cloud-init.yaml</a>（GitHub Gist）</p>
<p>改完後</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo netplan try
</span></span></code></pre></div><p><strong>Ubuntu 20作法：</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo vi /etc/netplan/00-installer-config.yaml
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic"># This is the network config written by &#39;subiquity&#39;</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#7ee787">network</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">ethernets</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">    </span><span style="color:#7ee787">ens160</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span><span style="color:#7ee787">addresses</span>:<span style="color:#6e7681"> </span>[<span style="color:#a5d6ff">your_ip_address/12]</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span><span style="color:#7ee787">gateway4</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">your_gateway</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span><span style="color:#7ee787">optional</span>:<span style="color:#6e7681"> </span><span style="color:#79c0ff">true</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span><span style="color:#7ee787">nameservers</span>:<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">        </span><span style="color:#7ee787">addresses</span>:<span style="color:#6e7681"> </span>[<span style="color:#a5d6ff">168.95.1.1</span>,<span style="color:#a5d6ff">168.95.192.1</span>,<span style="color:#a5d6ff">8.8.8.8</span>,<span style="color:#a5d6ff">8.8.4.4</span>]<span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">      </span><span style="color:#7ee787">dhcp4</span>:<span style="color:#6e7681"> </span><span style="color:#79c0ff">no</span><span style="color:#6e7681">
</span></span></span><span style="display:flex;"><span><span style="color:#6e7681">  </span><span style="color:#7ee787">version</span>:<span style="color:#6e7681"> </span><span style="color:#a5d6ff">2</span><span style="color:#6e7681">
</span></span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/33b1639b9d52bae158f0c0eb363f025b" rel="noopener">00-installer-config.yaml</a>（GitHub Gist）</p>
<blockquote>
<p>PS.如果發現改成靜態網址後無法ssh登入，請把 addresses 的遮罩改為 <code>/12</code></p>
</blockquote>
<h2 class="h-nomark" id="10ubuntu新增使用者並設成-sudo-user">10、ubuntu新增使用者並設成 Sudo user<a class="h-anchor" href="#10ubuntu%e6%96%b0%e5%a2%9e%e4%bd%bf%e7%94%a8%e8%80%85%e4%b8%a6%e8%a8%ad%e6%88%90-sudo-user" aria-label="這個段落的連結"></a></h2>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ sudo adduser newuser
</span></span><span style="display:flex;"><span>$ usermod -aG sudo newuser
</span></span></code></pre></div><p>如果要取消這位使用者的 sudoer 資格</p>
<pre tabindex="0"><code>$sudo deluser newuser sudo
</code></pre><p>如果要刪除這位使用者</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo deluser — remove-home userNameHere
</span></span></code></pre></div><p>Add public key to allow remote SSH login for the new user</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>su — newuser
</span></span><span style="display:flex;"><span>mkdir ~/.ssh
</span></span><span style="display:flex;"><span>vim ~/.ssh/authorized_keys
</span></span></code></pre></div><p>查詢帳號有 sudoer 的權限</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ sudo cat /etc/group | grep sudo
</span></span><span style="display:flex;"><span>$ sudo cat /etc/group | grep admin
</span></span></code></pre></div><h2 class="h-nomark" id="11linux與windows間傳送檔案">11、Linux與Windows間傳送檔案<a class="h-anchor" href="#11linux%e8%88%87windows%e9%96%93%e5%82%b3%e9%80%81%e6%aa%94%e6%a1%88" aria-label="這個段落的連結"></a></h2>
<p>複製本機檔案到linux</p>
<pre tabindex="0"><code>pscp d:\path\file_name account@192.10.3.64:/path
</code></pre><h2 class="h-nomark" id="12lvm-storage相關問題">12、LVM storage相關問題<a class="h-anchor" href="#12lvm-storage%e7%9b%b8%e9%97%9c%e5%95%8f%e9%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>因為ubuntu 18.4使用的時候，不知道設定為何默認初始硬碟只有4GB，如果要釋放出剩餘的硬碟空間，用以下指令即可</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo lvextend -rl +100%FREE /dev/mapper/ubuntu — vg-ubuntu — lv
</span></span></code></pre></div><p>參考資源：</p>
<p><a href="https://www.peterdavehello.org/2016/01/ubuntu-based-gnulinux-firewall-ufw-essential-config/"><strong>Ufw防火牆設定</strong></a></p>
<p><a href="https://web.archive.org/web/20210411220744/https://www.howtoing.com/deploy-node-js-application-with-pm2-on-ubuntu" title="原網頁已失效，連到網際網路檔案館的存檔"><strong>如何在Ubuntu 16.04上使用PM2部署Node.js应用程序</strong></a></p>
<p><a href="https://tw.saowen.com/a/45fd6b0293c602372e720ea216d07c8ac0751f49c19e235126260221367818e6"><strong>windows下如何使用ssh遠端登入Linux</strong></a></p>
<p><a href="https://loveamberbird.wordpress.com/2013/08/21/%E3%80%90%E7%AD%86%E8%A8%98%E3%80%91%E5%9C%A8linux%E8%88%87windows%E9%96%93%E5%82%B3%E9%80%81%E6%AA%94%E6%A1%88%E6%AD%A5%E9%A9%9F%E6%95%99%E5%AD%B8/"><strong>在Linux與Windows間傳送檔案 — 步驟教學</strong></a></p>
<p><a href="https://stackoverflow.com/questions/31813080/windows-10-ssh-keys"><strong>win10如果要產生登入的SSH KEY</strong></a></p>
<p><a href="https://blog.csdn.net/youyudexiaowangzi/article/details/48729897"><strong>sudo被玩壞參考</strong></a></p>
<p><a href="https://askubuntu.com/questions/1090773/understanding-free-space-volumes-on-ubuntu%20https://blog.xuite.net/lichangying/wretch/214360626-%E5%A6%82%E4%BD%95%E5%8B%95%E6%85%8B%E6%94%BE%E5%A4%A7LVM&#43;on&#43;Linux">LVM storage釋放剩餘空間</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
