[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-omekas實作分散架構的omekas-on-dcoker":3},{"id":4,"slug":5,"title":6,"description":7,"content":8,"date":9,"image":10,"imageAlt":6,"author":11,"categories":14,"path":20,"minRead":21},118,"omekas實作分散架構的omekas-on-dcoker","[OmekaS]實作分散架構的OmekaS on Dcoker","實作分散架構的omekas on Dcoker 好吧，我不太確定這次標題要怎麼寫XD終於完成了專案的環境轉移， […]","\u003Ch1>實作分散架構的omekas on Dcoker\u003C\u002Fh1>\n\u003Cp>好吧，我不太確定這次標題要怎麼寫XD終於完成了專案的環境轉移，原先我們的OmekaS是建置Vmware上，最近由於辦公室搬遷關係，順便做了系統環境大搬遷(\u003Cdel>才怪\u003C\u002Fdel>)，這邊就分享整個架構的作法與遇到問題。\u003C\u002Fp>\n\u003Ch3>架構說明\u003C\u002Fh3>\n\u003Cp>考慮到一個好系統的三大特性：可靠性 (Reliabilty)、可擴展性 (Scalability)、可維護性 (Maintainability)，毅然決然選定了Docker為基礎來進行轉移，並且一定要實作負載平衡(load balancing)，由於辦公室已經採用proxmox(PVE)環境(上述的Vmware架在別的辦公室)，那就來試試看PVE的LXC(LinuX Containers) + Docker吧！\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>也許有人會問用了LXC為什麼還要用Docker？我們的考量點是也許未來不一定還會使用PVE環境，為了最大幅度的可搬遷性決定使用泛用度更高的Docker\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>既然已經選定建置方式了，那接下來就得考慮幾個實務問題：\u003C\u002Fp>\n\u003Col>\n\u003Cli>資料庫放在哪？\u003C\u002Fli>\n\u003Cli>檔案放在哪？\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>關於資料庫\u003C\u002Fh4>\n\u003Cp>OmekaS使用MySQL，因為分散架構關係，我們將SQL拉出去獨立做一台Docker。\u003C\u002Fp>\n\u003Ch4>關於檔案\u003C\u002Fh4>\n\u003Cp>麻煩的就在於檔案，但還好OmekaS這種典藏系統我們在使用過程中不太常出現大量檔案存取問題，所以考慮「共同存取」特性就好，於是決定使用了NAS來存放系統文件，再使用NFS形式mount在不同台主機中，實作「共同存取」功能。\u003C\u002Fp>\n\u003Cp>根據上述，最後就會產生出幾台Docke in LXC的服務(參考架構圖)\u003Cbr \u002F>\nFrontend(WebServer) \u003Cem> 2\u003Cbr \u002F>\nBackend(SQL) \u003C\u002Fem>1\u003Cbr \u002F>\nNAS * 1 (採用trueNAS建置)\u003C\u002Fp>\n\u003Cp>\u003Cimg decoding=\"async\" src=\"\u002Fapi\u002Fproxy-image?url=https%3A%2F%2Fpost.billxu.net%2Fwp-content%2Fuploads%2F2022%2F08%2FOmekas%E8%99%9B%E6%93%AC%E5%8C%96%E6%9E%B6%E6%A7%8B.drawio.png\" alt=\"架構圖\" \u002F>\u003C\u002Fp>\n\u003Cp>相關文章：\u003Ca href=\"https:\u002F\u002Fpost.billxu.net\u002Farchives\u002F111\" title=\"docker-compose for OmekaS\">docker-compose for OmekaS\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>遇到問題\u003C\u002Fh3>\n\u003Cp>一如往常地沒那麼順利，很快就遇到幾個問題XD\u003C\u002Fp>\n\u003Ch4>NAS掛載\u003C\u002Fh4>\n\u003Cp>原本我們打算使用synology的NAS來當作Docker使用的磁碟區，已解決共同使用，但最後發現檔案權限會卡住，以至於OmekaS不能順利取用媒體。最後只好改為在PVE中也建置一台NAS來掛載，原本擔心效能但發現其實還不錯。\u003Cbr \u002F>\n使用NAS掛載要注意幾件事：\u003C\u002Fp>\n\u003Col>\n\u003Cli>我們是用NFS來實作\u003C\u002Fli>\n\u003Cli>注意LSC的特權容器要打開\u003C\u002Fli>\n\u003Cli>docker-compose.yml的特權不一定要開\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch4>sendmail\u003C\u002Fh4>\n\u003Cp>OmekaS有些功能會需要寄信，這部分就會需要本機內建smtp，所以要加上兩件事，首先是Dockerfile中要設定安裝與啟動sendmail\u003C\u002Fp>\n\u003Cpre>\u003Ccode>RUN apt-get update &amp;&amp; \\\n    apt-get install -y --no-install-recommends sendmail &amp;&amp; \\\n    rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>再來就是需要賦予FQDN這樣sendmail才能正常運作，須在docker-compose.yml加上\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-yml\">hostname: &lt;your-domain&gt; #need FQDN for mail\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>喚醒\u003C\u002Fh4>\n\u003Cp>以下是兩台設定的分享\u003C\u002Fp>\n\u003Ch3>Backend(SQL)\u003C\u002Fh3>\n\u003Ch4>docker-compose.yml\u003C\u002Fh4>\n\u003Cpre>\u003Ccode class=\"language-yaml\">version: &quot;3&quot;\n\nservices:\n  mariadb:\n    image: mariadb:latest\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: blabla\n      MYSQL_DATABASE: omeka\n      MYSQL_USER: user\n      MYSQL_PASSWORD: password\n    ports:\n      - &quot;3306:3306&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Frontend\u003C\u002Fh3>\n\u003Ch4>docker-compose.yml\u003C\u002Fh4>\n\u003Cpre>\u003Ccode class=\"language-yaml\">version: &quot;3&quot;\n\nservices:\n  omekas:\n    build: .\n    container_name: omekas\n    hostname: &lt;your-domain&gt; #need FADN for mail\n    restart: always\n    ports:\n      - &quot;80:80&quot;\n    volumes:\n      - html:\u002Fvar\u002Fwww\u002Fhtml\n    privileged: true\n\nvolumes:\n  html:\n    driver_opts:\n      type: &quot;nfs&quot;\n      o: &quot;addr=address&quot;\n      device: &quot;:\u002Ffloder\u002F&quot;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Dockerfile\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>FROM pudding\u002Fdlll-paas-base-image:php-7.4-apache-20220617-1837\n\nUSER root\nEXPOSE 80\nRUN apt-get update &amp;&amp; \\\n    apt-get install -y --no-install-recommends sendmail &amp;&amp; \\\n    rm -rf \u002Fvar\u002Flib\u002Fapt\u002Flists\u002F*\n\nRUN docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd\nRUN docker-php-ext-install gd\n\nRUN rm -rf \u002Fvar\u002Fwww\u002Fhtml\nRUN mkdir -p \u002Fvar\u002Fwww\u002Fhtml\n\nWORKDIR \u002Fvar\u002Fwww\u002F\n\nCOPY .\u002Fwait-for-it.sh \u002Fvar\u002Fwww\u002Fwait-for-it.sh\nRUN chmod +x wait-for-it.sh\n\n#start senmail\nRUN sed -i &#039;\u002F#!\\\u002Fbin\\\u002Fsh\u002Faservice sendmail restart&#039; \n\nCMD [&quot;.\u002Fwait-for-it.sh&quot;, &quot;targetHost:port&quot;,&quot;--strict&quot;, &quot;--&quot;, &quot;apache2-foreground&quot;]\n\u003C\u002Fcode>\u003C\u002Fpre>\n","2022-10-27T10:00:50","\u002Fapi\u002Fproxy-image?url=https%3A%2F%2Fpost.billxu.net%2Fwp-content%2Fuploads%2F2022%2F05%2FOmekaBadge.png",{"name":12,"link":13},"Chih Fan","http:\u002F\u002Fpost.billxu.net",[15,18],{"name":16,"slug":17},"Devops","devops",{"name":19,"slug":19},"omekas","\u002Fblog\u002Fomekas實作分散架構的omekas-on-dcoker",1]