MediaCMSを我がサイト上に構築してみた
July 13, 2026 – 6:58 pmYouTubeもどきの動画サイトを個人サイト専用につくろうとGoogleGeminに聞くと、一番手っ取り早い方法としてDocker経由でMediaCMSを構築するのがよいとのご託宣を得た。
それではということで、Dockerのなんたるかから初めて数日間を要して、わがサイト上にMediaCMSを構築することができた。
冒頭に掲げたのが、MediaCMSを動作させた際のスナップショット。ほぼ、想定したパフォーマンスを達成したことができた。
以下、構築にむけての経験、作業内容を記す。
はじめてのDocker:
名前だけはよく聞いていたDockerについて、実際につかったのは初めて。
Dockerのインストール:
docker-ce.repoのインストール
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
docker 関連プログラムのインストール
$ sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin (省 略) Installed: container-selinux-4:2.240.0-1.el10.noarch containerd.io-2.2.2-1.el10.x86_64 docker-buildx-plugin-0.31.1-1.el10.x86_64 docker-ce-3:29.3.1-1.el10.x86_64 docker-ce-cli-1:29.3.1-1.el10.x86_64 docker-ce-rootless-extras-29.3.1-1.el10.x86_64 docker-compose-plugin-5.1.1-1.el10.x86_64 fuse-overlayfs-1.16-1.el10_1.x86_64 iptables-nft-1.8.11-12.el10_1.x86_64 passt-0^20250512.g8ec1341-4.el10_1.x86_64 passt-selinux-0^20250512.g8ec1341-4.el10_1.noarch Complete! $sudo systemctl start docker $sudo systemctl enable docker $sudo usermod -aG docker $USER $sudo newgrp docker (有効化)
$ docker --version Docker version 29.3.1, build c2be9cc
MediaCMSを動作させるための SSD(512GB)を追加:
構成:
HDD(OS領域) AlmaLinux(ver.10.2)本体、Apache、Dockerプログラム本体
SDD(データ領域)として使用
SDDを物理サーバに付け加えたのちの手続き:
lsblk で新規のSSD device名を確認
(/dev/sdbと仮定)
format(xfs形式)
$sudo parted /dev/sdb mklabel gpt $sudo parted /dev/sdb mkpart primary xfs 0% 100% $sudo mkfs.xfs /dev/sdb1
SSD のマウント:
$sudo mkdir -p /mnt/mediacms-data $sudo mount /dev/sdb1/ /mnt/mediacms-data
deviceのUUIDを取得
$sudo blkid /dev/sdb1 /dev/sdb1: /dev/sda1: UUID="xxxxx-xxxx " BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="primary" PARTUUID="xxx-xxx "
/etc/fstab に以下を追加
UUID=xxxxx /mnt/mediacms-data xfs deffaults 0 0
SSD のマウント後の構成:
$lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 476.9G 0 disk └─sda1 8:1 0 476.9G 0 part /mnt/mediacms-data sdb 8:16 0 74.5G 0 disk └─sdb1 8:17 0 74.5G 0 part /mnt/ssd sdc 8:32 0 238.5G 0 disk └─sdc1 8:33 0 238.5G 0 part /mnt/backup sdd 8:48 0 931.5G 0 disk ├─sdd1 8:49 0 1M 0 part ├─sdd2 8:50 0 1G 0 part /boot └─sdd3 8:51 0 930.5G 0 part ├─almalinux-root 253:0 0 70G 0 lvm / ├─almalinux-swap 253:1 0 15.7G 0 lvm [SWAP] └─almalinux-home 253:2 0 844.8G 0 lvm /home
MeidaCMS を /mnt/media-data上へ展開
$cd /mnt/mediacms-data $git clone https://github.com/mediacms-io/mediacms.git $cd mediacms
docker-compose.yaml を MediaCMSの出力portを8080にし、Proxi設定でapacheで受ける
docker-compose.yaml:
services: migrations: image: mediacms/mediacms:latest volumes: - ./:/home/mediacms.io/mediacms/ environment: ENABLE_UWSGI: 'no' ENABLE_NGINX: 'no' ENABLE_CELERY_SHORT: 'no' ENABLE_CELERY_LONG: 'no' ENABLE_CELERY_BEAT: 'no' ADMIN_USER: 'admin' ADMIN_EMAIL: 'admin@localhost' ADMIN_PASSWORD: 'password' command: "./deploy/docker/prestart.sh" restart: on-failure depends_on: redis: condition: service_healthy db: condition: service_healthy web: image: mediacms/mediacms:latest deploy: replicas: 1 ports: - "8080:80" volumes: - ./:/home/mediacms.io/mediacms/ environment: ENABLE_CELERY_BEAT: 'no' ENABLE_CELERY_SHORT: 'no' ENABLE_CELERY_LONG: 'no' ENABLE_MIGRATIONS: 'no' depends_on: - migrations celery_beat: image: mediacms/mediacms:latest volumes: - ./:/home/mediacms.io/mediacms/ environment: ENABLE_UWSGI: 'no' ENABLE_NGINX: 'no' ENABLE_CELERY_SHORT: 'no' ENABLE_CELERY_LONG: 'no' ENABLE_MIGRATIONS: 'no' depends_on: - redis celery_worker: image: mediacms/mediacms:latest deploy: replicas: 1 volumes: - ./:/home/mediacms.io/mediacms/ environment: ENABLE_UWSGI: 'no' ENABLE_NGINX: 'no' ENABLE_CELERY_BEAT: 'no' ENABLE_MIGRATIONS: 'no' depends_on: - migrations db: image: postgres:17.2-alpine volumes: - ../postgres_data:/var/lib/postgresql/data/ restart: always environment: POSTGRES_USER: mediacms POSTGRES_PASSWORD: mediacms POSTGRES_DB: mediacms TZ: Europe/London healthcheck: test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 5 redis: image: "redis:alpine" restart: always healthcheck: test: ["CMD", "redis-cli","ping"] interval: 10s timeout: 5s retries: 3
https://media.yamasnet.com で MediaCMSを出力するため vhostを以下:
ServerName media.yamasnet.com RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ServerName media.yamasnet.com ServerAdmin webmaster@yamasnet.com ProxyRequests Off ProxyPreserveHost On Require all denied # アクセスを許可するIPアドレス範囲 Require ip 2405:6582:c200::/48 # ローカルからのアクセスを許可 Require ip 127.0.0.1 RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" # 基本的な ProxyPass 設定 ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ SSLEngine on SSLHonorCipherOrder on Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" SSLProtocol -All -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 +TLSv1.3 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile /etc/letsencrypt/live/yamasnet.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/yamasnet.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/yamasnet.com/chain.pem Protocols h2 http/1.1
MediaCMSの立ち上げ:
$ docker compose up -d [+] up 8/8 ✔ Network yukichi_default Created 0.1s ✔ Volume yukichi_db_data Created 0.0s ✔ Container yukichi-redis-1 Healthy 12.7s ✔ Container yukichi-db-1 Healthy 13.2s ✔ Container yukichi-celery_beat-1 Started
動作状況を確認し、正常に立ち上がっていることを確認し、https://media.yamasne.com でブラウザでMediaCMS
[yukichi@server01 mediacms]$ docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mediacms-celery_beat-1 mediacms/mediacms:latest "./deploy/docker/ent…" celery_beat 15 minutes ago Up 15 minutes 80/tcp, 9000/tcp mediacms-celery_worker-1 mediacms/mediacms:latest "./deploy/docker/ent…" celery_worker 15 minutes ago Up 15 minutes 80/tcp, 9000/tcp mediacms-db-1 postgres:17.2-alpine "docker-entrypoint.s…" db 15 minutes ago Up 15 minutes (healthy) 5432/tcp mediacms-redis-1 redis:alpine "docker-entrypoint.s…" redis 15 minutes ago Up 15 minutes (healthy) 6379/tcp mediacms-web-1 mediacms/mediacms:latest "./deploy/docker/ent…" web 15 minutes ago Up 15 minutes 9000/tcp, 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp
MediaCMSで、動画を描画している状態でComputer Resourceの消費状態をみると
$docker ps CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 0ff7f1567315 mediacms-celery_worker-1 0.37% 1.96GiB / 31.02GiB 6.32% 1.85MB / 942kB 32.8kB / 848kB 34 8c2b227052e4 mediacms-web-1 0.03% 267MiB / 31.02GiB 0.84% 230kB / 10MB 32.8kB / 581kB 23 c9de877a387e mediacms-celery_beat-1 0.01% 132.8MiB / 31.02GiB 0.42% 2.04kB / 126B 36.9kB / 832kB 2 af827cb757d2 mediacms-db-1 2.44% 39.88MiB / 31.02GiB 0.13% 83kB / 181kB 0B / 699kB 15 55481ea3e3f8 mediacms-redis-1 2.27% 10.39MiB / 31.02GiB 0.03% 962kB / 1.85MB 0B / 0B 11
非常に軽く動作していることが確認できる。 Docker の素晴らしさを確認!
