GitHub ActionsからDockerでMkDocsビルドを実行し、Nginxでサイトを公開する
Markdownで記載したコンテンツをGitHub Actionsの(Pagesなどでは無く)Self-Hosted Runnerを使ってMkDocsでビルドし、NginxでWebサイトとして公開する手順をメモしておきます。MkDocs自体はsig9/mkdocs-materialというDockerコンテナを使ってビルドします。
尚、今回はSelf-Hosted Runner側にはx64のUbuntuを利用します。
検証環境¶
| 対象 | バージョン | 
|---|---|
| Ubuntu | 24.04.3 LTS | 
| Docker | 28.5.1 | 
| Nginx | 1.24.0 | 
Dockerのインストール¶
Ubuntu へ docker をインストールするワンライナーの内容に従ってワンライナーでDockerをインストールします。
curl -fsSL https://get.docker.com | sh
Nginxのインストール¶
Ubuntu 22.04.4LTS へ Nginx をインストールするの手順に従ってUbuntu公式リポジトリからNginxをインストールします。また、同メモ中に記載があるようにドキュメントルートをApache風にしています。
sudo apt install -y nginx && \
sudo rm -f /usr/share/nginx/html/index.html && \
sudo rm -rf /var/www/html/ && \
sudo ln -s /usr/share/nginx/html /var/www/
GitHub Actions用ユーザの作成¶
Slef-Hosted Runner用のLinuxユーザを作成します。
adduser --disabled-password --gecos "" "actions-runner"
セキュリティ的には好ましくありませんが、GitHub ActionsでCI/CDする際に権限不足とならないよう、/etc/sudoersに無制限でsudo出来る設定をします。
actions-runner ALL=NOPASSWD: ALL
Self-Hosted Runnerのインストール¶
Step.1¶
GitHubのリポジトリ画面からSettings→Actions→Runners→New self-hosted runnerをクリックします。

Step.2¶
今回利用するRunner環境にあわせてRunner ImageにはLinuxを、Architectureにはx64を選択します。次にLinux上でDownloadとConfigureセクションのコマンドを実行します。但し、./run.shは実行せず、その手前で止めます。run.shは一時的にRunnerを起動しますが、OS再起動などを実施するとRunnerは停止状態に戻ります。これでは不便である為、後の手順でRunnerをサービスとしてインストールします。

実際の実行例は以下の通りです。rootユーザで作業することは推奨されない為、事前に作成しておいたユーザへ切り替えて作業を行います。
# sudo su - actions-runner
$ mkdir actions-runner && cd actions-runner
$ curl -o actions-runner-linux-x64-2.328.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.328.0/actions-runner-linux-x64-2.328.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  216M  100  216M    0     0  39.9M      0  0:00:05  0:00:05 --:--:-- 38.3M
$ echo "01066fad3a2893e63e6ca880ae3a1fad5bf9329d60e77ee15f2b97c148c3cd4e  actions-runner-linux-x64-2.328.0.tar.gz" | shasum -a 256 -c
actions-runner-linux-x64-2.328.0.tar.gz: OK
$ tar xzf ./actions-runner-linux-x64-2.328.0.tar.gz
$ ./config.sh --url https://github.com/xxxxxxx/yyyyyyyyy --token ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
--------------------------------------------------------------------------------
|        ____ _ _   _   _       _          _        _   _                      |
|       / ___(_) |_| | | |_   _| |__      / \   ___| |_(_) ___  _ __  ___      |
|      | |  _| | __| |_| | | | | '_ \    / _ \ / __| __| |/ _ \| '_ \/ __|     |
|      | |_| | | |_|  _  | |_| | |_) |  / ___ \ (__| |_| | (_) | | | \__ \     |
|       \____|_|\__|_| |_|\__,_|_.__/  /_/   \_\___|\__|_|\___/|_| |_|___/     |
|                                                                              |
|                       Self-hosted runner registration                        |
|                                                                              |
--------------------------------------------------------------------------------
# Authentication
√ Connected to GitHub
# Runner Registration
Enter the name of the runner group to add this runner to: [press Enter for Default]
Enter the name of runner: [press Enter for localhost] runner1
This runner will have the following labels: 'self-hosted', 'Linux', 'X64'
Enter any additional labels (ex. label-1,label-2): [press Enter to skip]
√ Runner successfully added
√ Runner connection is good
# Runner settings
Enter name of work folder: [press Enter for _work]
√ Settings Saved.
Step.3¶
Runnerがインストールされましたが、まだオフライン状態です。

Runnerをサービスとして起動します。初期状態で自動起動設定にはなっていたのですが停止していた為、あわせてサービスを開始します。
sudo ./svc.sh install
sudo ./svc.sh start
これでオンライン状態(Idle)になりました。

Workflowの設定¶
Gitリポジトリは以下のディレクトリ構造にしました。.github/workflows/ディレクトリ配下にGitHub Actionsで実行させたいWorkflowを定義したYAMLファイルを任意のファイル名で保存します。
├── .github
│   └── workflows
│       └── mkdocs_build.yml
├── .gitignore
├── docs
│   └── index.md
├── mkdocs.yml
└── requirements.txt
今回、Workflowの内容は以下にしました。
name: Build and Deploy MkDocs (Self-Hosted)
on:
  push:
    branches: [main]
jobs:
  build-and-deploy:
    runs-on: self-hosted
    steps:
      - name: Checkout code
        uses: actions/checkout@v5
      - name: Build MkDocs site
        run: |
          sudo docker run --rm \
            -v ${{ github.workspace }}:/root \
            sig9/mkdocs-material:9.6.21 \
            mkdocs build --clean --strict
          sudo chown -R `id -u`:`id -g` ${{ github.workspace }}/site
      - name: Deploy to /var/www/html
        run: |
          sudo rm -rf /var/www/html/*
          sudo cp -r ${{ github.workspace }}/site/* /var/www/html/
          sudo chown -R www-data:www-data /var/www/html
          sudo chmod -R 755 /var/www/html
CI/CDする¶
この状態でGitHub上のリポジトリへPushされるとGitHub Actionsが実行されます。

WebブラウザでLinuxサーバへアクセスするとMkDocsでビルドされたサイトが表示されました。

参考¶
mkdocs buildのヘルプ¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  |  | 
svc.sh¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179  |  |