Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
在解決問題之道上不斷前行

好吧,我不太確定這次標題要怎麼寫XD終於完成了專案的環境轉移,原先我們的OmekaS是建置Vmware上,最近由於辦公室搬遷關係,順便做了系統環境大搬遷(才怪),這邊就分享整個架構的作法與遇到問題。
考慮到一個好系統的三大特性:可靠性 (Reliabilty)、可擴展性 (Scalability)、可維護性 (Maintainability),毅然決然選定了Docker為基礎來進行轉移,並且一定要實作負載平衡(load balancing),由於辦公室已經採用proxmox(PVE)環境(上述的Vmware架在別的辦公室),那就來試試看PVE的LXC(LinuX Containers) + Docker吧!
也許有人會問用了LXC為什麼還要用Docker?我們的考量點是也許未來不一定還會使用PVE環境,為了最大幅度的可搬遷性決定使用泛用度更高的Docker
既然已經選定建置方式了,那接下來就得考慮幾個實務問題:
OmekaS使用MySQL,因為分散架構關係,我們將SQL拉出去獨立做一台Docker。
麻煩的就在於檔案,但還好OmekaS這種典藏系統我們在使用過程中不太常出現大量檔案存取問題,所以考慮「共同存取」特性就好,於是決定使用了NAS來存放系統文件,再使用NFS形式mount在不同台主機中,實作「共同存取」功能。
根據上述,最後就會產生出幾台Docke in LXC的服務(參考架構圖)
Frontend(WebServer)  2
Backend(SQL) 1
NAS * 1 (採用trueNAS建置)

相關文章:docker-compose for OmekaS
一如往常地沒那麼順利,很快就遇到幾個問題XD
原本我們打算使用synology的NAS來當作Docker使用的磁碟區,已解決共同使用,但最後發現檔案權限會卡住,以至於OmekaS不能順利取用媒體。最後只好改為在PVE中也建置一台NAS來掛載,原本擔心效能但發現其實還不錯。
使用NAS掛載要注意幾件事:
OmekaS有些功能會需要寄信,這部分就會需要本機內建smtp,所以要加上兩件事,首先是Dockerfile中要設定安裝與啟動sendmail
RUN apt-get update && \
    apt-get install -y --no-install-recommends sendmail && \
    rm -rf /var/lib/apt/lists/*再來就是需要賦予FQDN這樣sendmail才能正常運作,須在docker-compose.yml加上
hostname: <your-domain> #need FQDN for mail以下是兩台設定的分享
version: "3"
services:
  mariadb:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: blabla
      MYSQL_DATABASE: omeka
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
version: "3"
services:
  omekas:
    build: .
    container_name: omekas
    hostname: <your-domain> #need FADN for mail
    restart: always
    ports:
      - "80:80"
    volumes:
      - html:/var/www/html
    privileged: true
volumes:
  html:
    driver_opts:
      type: "nfs"
      o: "addr=address"
      device: ":/floder/"FROM pudding/dlll-paas-base-image:php-7.4-apache-20220617-1837
USER root
EXPOSE 80
RUN apt-get update && \
    apt-get install -y --no-install-recommends sendmail && \
    rm -rf /var/lib/apt/lists/*
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --enable-gd
RUN docker-php-ext-install gd
RUN rm -rf /var/www/html
RUN mkdir -p /var/www/html
WORKDIR /var/www/
COPY ./wait-for-it.sh /var/www/wait-for-it.sh
RUN chmod +x wait-for-it.sh
#start senmail
RUN sed -i '/#!\/bin\/sh/aservice sendmail restart' 
CMD ["./wait-for-it.sh", "targetHost:port","--strict", "--", "apache2-foreground"]