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