MediaCMSを我がサイト上に構築してみた

July 13, 2026 – 6:58 pm

YouTubeもどきの動画サイトを個人サイト専用につくろうと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 の素晴らしさを確認!


Post a Comment