2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nginx でホストしたローカルの MediaWiki をポート開放せずに公開する

Last updated at Posted at 2024-08-25

初めに

運営している Minecraft サーバーの情報をまとめる Wiki のセットアップをしたので、振り返りがてら書いてみました。

環境

  • OS: Ubuntu 22.04 (Proxmox 上の LXC コンテナ)
  • Web サーバー: Nginx (1.18)
  • Wiki ソフト: MediaWiki (1.42.1)
  • プロキシ: Cloudflared (2024.8.3)
  • データベース: Maria DB
  • PHP: version 8.1

パッケージのインストール、セットアップ

インストール

apt update, apt upgrade などで普通に更新しつつ、 nginx, mariadb, php 関連のパッケージもインストールする。

apt install mariadb-server php php-intl php-mbstring php-xml php-apcu php-curl php-mysql
apt install php-intl php-mbstring php-xml php-apcu php-curl
apt install git unzip # unzip は必要な場合のみ

落として来たら nginx と mariadb を自動的で起動するようにする。

systemctl enable nginx
systemctl enable mariadb

Maria DB

mariadb はここからデータベースの設定を行う。

mysql_secure_installation
# パスワードは変更しないので Enter キーを押して次へ
Enter current password for root (enter for none): 

# unix_socket に変更すると面倒らしい[1]ので n を入力して次へ
Switch to unix_socket authentication [Y/n]: n

# 変更しない方が良いと思います。n を入力して次へ
Change the root password? [Y/n]: n

# 匿名ユーザーは必要ないので y を入力して次へ
Remove anonymous users? [Y/n]: y

# 今回は DB と Nginx を同じマシンで動かすのでリモートからのルートログインを許可しない。 y を入力して次へ。
Disallow root login remotely? [Y/n]: y

# テスト用のデータベースを削除するので y を入力して次へ。
Remove test database and access to it? [Y/n]: y

# 設定を反映するために今すぐリロードするので y を入力して終わり
Reload privilege tables now? [Y/n]: y

Maria DB のデータベース、データベースユーザーを作成する。

mysql -u root -p

CREATE DATABASE データベース名;
CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';
GRANT ALL PRIVILEGES ON データベース名.* TO 'ユーザー名'@'localhost';
FLUSH PRIVILEGES;
EXIT;

今回は Nginx と Maria DB を同じマシンで動かすので、場所を 'localhost' にする。


Nginx

MediaWiki 用の Nginx サーバーブロックを設定する。
/etc/nginx/sites-available/mediawiki を作成する。
(/etc/nginx/sites-available/mediawiki)

# mediawiki

server {
    listen 80;
    server_name ドメインかIP; # 例: wiki.example.com

    root /var/www/html/mediawiki;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        try_files $uri /index.php;
        expires max;
        log_not_found off;
    }
}

保存して終了し、/etc/nginx/sites-enabled/ にシンボリックリンクを作成、作成したコンフィグのテストを行いエラーが出なければ Nginx をリロードする。

ln -s /etc/nginx/sites-available/mediawiki /etc/nginx/sites-enabled/
nginx -t # コンフィグのテスト
systemctl reload nginx

コンフィグのテストで [warn][emerg] と表示されたら構文ミスや記載事項に過不足があるので、それらが表示されなくなるまで修正とテストを繰り返す。


Nginx その 2

ここまでの設定では、 Nginx のログに利用者の IP アドレスではなくループバックアドレスが記録されてしまう。そこで以下の設定を /etc/nginx/nginx.conf に追記し、正しいアドレスを記録するようにする。

/etc/nginx/nginx.conf
http {
        # http ディレクティブに追記する
        
        ## cloudflared settings
        set_real_ip_from 127.0.0.1/32;
        set_real_ip_from ::1/64;
        real_ip_header CF-Connecting-IP;
}

追記したら、保存して Nginx を再起動する。


Cloudflared

ここ から利用するサーバーマシンのアーキテクチャに合ったパッケージをダウンロードする。今回は Intel CPU を搭載した Linux マシンで動かすので、cloudflared-linux-amd64.deb を落とす。
ディレクトリはどこでもよい。

wget https://github.com/cloudflare/cloudflared/releases/download/2024.8.3/cloudflared-linux-amd64.deb

.deb ファイルを落として来たら apt install を実行してインストールする。

apt install ./cloudflared-linux-amd64.deb

インストールしたら Cloudflare のアカウントと紐づける。

cloudflared tunnel login

上記のコマンドを実行すると認証用の URL が表示されるので、クリックして認証を済ませる。
次に Cloudflare Zero trust のダッシュボードでトンネルを作成する。
"+ Create tunnel" をクリック。
image.png


Cloudflared を選択。
image.png


トンネル名を入力。
image.png

ホスト名はご自由に(例: wiki.example.com)
サービスは http://localhost:80 とする。

作成すると起動スクリプトを cloudflared に登録するコマンドが表示されるので、コピーして実行する。
(clouflared は既にインストールしてあるので、インストールスクリプトが省かれた小さいボックスの方をコピる)

自動で起動してくるように設定される。


MediaWiki

ここ から tar ファイル、もしくは zip ファイルをダウンロードして、 /var/www に配置し、解凍する。
(バージョン はその時の Mediawiki のバージョン)

# tar
tar -zxvf mediawiki-バージョン.tar

# zip
unzip mediawiki-バージョン.zip

mediawiki-バージョンmediawiki に改名する。

mv mediawiki-バージョン mediawiki

/var/www/mediawiki 配下のコンテンツを全てデフォルトの Web サーバー用ユーザー www-data が所有するようにする。

chown -R www-data:www-data /var/www/mediawiki

/var/www/mediawiki 配下のすべてのコンテンツのパーミッションを 755 にする。(オーナー以外の書き込みを禁止)

chmod -R 755 /var/www/mediawiki

ここまで来てようやく MediaWiki の設定に取り掛かることができる。

http://設定したドメイン へアクセスして初期設定を行う。
手順など

すべての設定が終了すると、設定していたブラウザで LocalSettings.php がダウンロードされるのでサーバーの /var/www/mediawiki/ に配置する。
(touch LocalSettings.php でファイルを作成して内容をコピペするなど)

この際、所有権を www-data:www-data に、パーミッションを 600 に設定しておく。

chown www-data:www-data LocalSettings.php
chmod 600 LocalSettings.php

終わりに

1 日溶かしました。403, 503, 1033......

参考ページ

[1]

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?