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"]