Ubuntu 22.04 + Nginx + PHP8.1 + MariaDB + Sambaをインストール

開発用仮想マシンにUbuntu 22.04をインストールしたときの覚書。

環境: Ubuntu 22.04.03, nginx 1.24.0, php 8.1.2

Ubuntuのバージョンを確認。
# less /etc/os-release

インストールして初期設定は前の記事を参考に。
参考: Ubuntu Server 22.04 を仮想マシンとしてインストール


1.nginxのインストール

公式サイトに従って最新版をapt経由でインストールできるようにする。
参考: nginx: Linux packages

必要なツールをインストール。
# apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

公式の認証用文字列から公開鍵暗号方式で認証キーを生成してバイナリ形式で保存。
teeコマンドはファイル出力と標準出力が同時にできるコマンド。
# curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor |  tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

認証キーを検証。
# gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid                      nginx signing key <signing-key@nginx.com>

stable(安定版)パッケージをaptリストに追加する。
# echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list

ディストリビューション標準よりnginx公式を優先させる。
# echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n"  | tee /etc/apt/preferences.d/99nginx

取得して情報表示、インストール。
apt update
# apt info nginx
# apt install nginx

nginxのバージョンとコンパイルオプション確認。
# nginx -V

nginx version: nginx/1.24.0
built by gcc 11.2.0 (Ubuntu 11.2.0-19ubuntu1)
built with OpenSSL 3.0.2 15 Mar 2022
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -ffile-prefix-map=/data/builder/debuild/nginx-1.24.0/debian/debuild-base/nginx-1.24.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

起動、自動起動ON、確認
# systemctl start nginx
# systemctl enable nginx
# systemctl list-unit-files -t service | grep nginx

CPU数の設定がautoになっているか確認。
# less /etc/nginx/nginx.conf

GitLabから共通設定をcloneしておく(プライベートリポジトリです)。
# cd /etc/nginx/conf.d/
# git clone git@gitlab.com:hoge-settings/nginx-global.git global

ユーザーグループ「www」を作成。
nginxユーザーをwwwグループに追加。
# groupadd www
# usermod -G www nginx
# less /etc/nginx/nginx.conf

user  nginx www;

ユーザーのグループ確認して、nginx再起動。
# groups nginx
# nginx -t
# systemctl restart nginx


2.phpをインストール

apt経由でインストール。
# apt install php-fpm php-gd php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath php-xml php-zip

バージョン確認
# php -v

PHP 8.1.2-1ubuntu2.14 (cli) (built: Aug 18 2023 11:41:11) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.14, Copyright (c), by Zend Technologies

php8.2を試したいときは有志の人が公開しているリポジトリを追加する。

特別な事情がない限りディストリビューション標準をインストールした方が間違いがない。
最新を追いすぎるとextensionをビルドするときにハマることがある。

起動確認。
参照しているconfの場所も確認。
# systemctl status php8.1-fpm
# systemctl list-unit-files -t service | grep php8.1-fpm

実行ユーザーを変更する。
Unix socketの場所を変更(運用しているCentOSと合わせたいから)
# less /etc/php/8.1/fpm/pool.d/www.conf

user = nginx
group = www
listen.owner = nginx
listen.group = www
listen = /run/php-fpm/www.sock

Unix socketの場所を作る。
# mkdir /run/php-fpm
# chown nginx.www /run/php-fpm

起動スクリプトを編集する。
# less /lib/systemd/system/php8.1-fpm.service

他の起動ファイルも編集しないといけないことが分かったので止めた。

タイムゾーンを設定する。
# less /etc/php/8.1/fpm/php.ini

date.timezone = "Asia/Tokyo"

timezoneの確認。
# php -r 'echo date("Y/m/d H:i");'

セッションの書き込みディレクトリ権限を変更。
# chown nginx.www -R /var/lib/php/*
※ PHP更新時に毎回変更しないといけない

起動スクリプトを編集したので、再起動して自動起動するか確認。
# reboot
# systemctl status php8.1-fpm


3.MariaDBをインストール

apt経由でインストール。
# apt install mariadb-server

バージョン確認。
# mariadb --version

mariadb  Ver 15.1 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

起動確認
# systemctl status mariadb
# systemctl list-unit-files -t service | grep mariadb

初期設定スクリプトを実行。
# mariadb-secure-installation

文字コードの確認。
# mariadb -u root -p

MariaDB [(none)]> SHOW VARIABLES LIKE 'collation%';

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb3_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

MariaDB [(none)]> show variables like 'char%';

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb3                    |
| character_set_connection | utf8mb3                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb3                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8mb3                    |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

本番環境ではチューニングを忘れずに。


4.phpMyAdminをインストール

公式サイトからダウンロードして設置する。

# mkdir /home/httpd
# mkdir /home/httpd/httpdocs
# cd /home/httpd/httpdocs
# curl -O https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-english.tar.gz
# tar -xzvf phpMyAdmin-5.2.1-english.tar.gz
# mv phpMyAdmin-5.2.1-english phpMyAdmin
# rm phpMyAdmin-5.2.1-english.tar.gz

tmpフォルダを書き込み可にする。
# mkdir /home/httpd/httpdocs/phpMyAdmin/tmp
# chown nginx.www /home/httpd/httpdocs/phpMyAdmin/tmp

nginxの設定。
他のサーバーを参考にコピペする。
# cd /etc/nginx/conf.d/
# vi 01_phpMyAdmin.conf

nginxの再起動。
# nginx -t
# systemctl restart nginx

ブラウザでアクセスして確認。

開発環境なのでconfig.inc.phpを設置してパスワードなしでログインできるようにする。
# cd /home/httpd/httpdocs/phpMyAdmin/
# cp config.sample.inc.php config.inc.php
# less config.inc.php

$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'password';


5.Sambaをインストール

WindowsのエクスプローラーからLAN経由でアクセスしたいので、Sambaをインストールする。
# apt install samba

バージョン確認。
# smbd -V

Version 4.15.13-Ubuntu

起動確認
# systemctl status smbd
# systemctl list-unit-files -t service | grep smbd

既存Linuxユーザー「daiki」をsambaユーザーとして追加する。
# smbpasswd -a daiki

ユーザー一覧を確認
# pdbedit -L

設定ファイル編集。
# less /etc/samba/smb.conf

   workgroup = VM
   netbios name = vm-dev4

   map to guest = Never
   security = user

[opt]
        comment = Option Directory
        path = /opt
        browseable = yes
        writable = yes

[httpd]
        comment = httpd
        path = /home/httpd
        browseable = yes
        writable = yes

共有したフォルダをdaikiユーザーで書き込み可能にする。
# chown daiki -R /opt/

samba再起動して確認。
# systemctl restart smbd
# systemctl status smbd

WindowsからNetBIOS名でPINGを打って確認する。

Windowsのエクスプローラーから「\\vm-dev4」にアクセスする。

メールアドレス: VM\daiki
パスワード: (設定したパスワード)

sambaの接続状況を確認。
# smbstatus

一応daikiユーザーをwwwグループに追加しておく。
# usermod -G www daiki

確認
# groups daiki



【関連記事】