2023/07/07(金)Debian 12 (bookworm) インストールメモ

2020/01/20(月)Debian10で Apache + php-fpm の正しい設定メモ

Apache + php-fpm 環境で Debian 9(jessie) から 10(buster) にアップデートしたら動かなくなったので、メモ。

概要

Debian付属のmod_phpはスレッドセーフではないため、Apacheを event_mpm や worker_mpm で運用している場合は使用できません(prefork専用)。

そもそも今どきmod_phpで動作させるのはナンセンスなので、FastCGIデーモンによるPHP環境 PHP-FPM を使用します。

Debian10での設定

  • Apache 2.4
  • PHP 7.3 (php7.3-fpm)
apt-get install php-fpm libapache2-mod-fcgid

php-fpmをインストールすることで自動的に「php-fpm7.3」サービスが起動します。

/etc/apache2/conf-available 以下に php7.3-fpm.conf が作られるので、これを有効にします。

cd /etc/apache2/conf-enabled
ln -s ../conf-available/php7.3-fpm.conf

proxy_fcgi_moduleが必要なのでこれも有効にします。

cd /etc/apache2/mods-enabled
ln -s ../mods-available/proxy_fcgi.load

この状態で、Apacheを再起動すれば有効になっているはずです。ついでに、OPcacheも最初から有効になっています。

php7.3-fpm.confの中身(特に変更せず)

# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.php$">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        Require all denied
    </FilesMatch>
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

以前使っていた古い設定

Debian 9(jessie)でも全く同じ設定で動作するのですが、以前は古い設定を使っていました。その設定を書いておきます。

  • php-fpm7.0
  • libapache2-mod-fastcgi (Debian9までしか提供されず)

Apache2の libapache2-mod-fastcgi(libapache2-mod-fcgidではダメ)を有効化してから、sites-available/000-default.conf 等に以下の設定を行います。

<IfModule mod_fastcgi.c>
        AddHandler      fastcgi-script  .fcgi
        AddHandler      php7.0-fcgi     .php
        Action          php7.0-fcgi     /usr/sbin/php-fpm7.0
        FastCgiExternalServer   /usr/sbin/php-fpm7.0 -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
        FastCgiConfig           -maxClassProcesses 100

        <Directory /usr/sbin>
                <Files php-fpm7.0>
                        Require all granted
                </Files>
        </Directory>
</IfModule>

何が変更になったのか

外部プログラムを呼び出して、そこから php-fpm サーバに接続するという形式が無効になったようです。上に書いた古い設定は多くの新しいLinuxディストリビューションで無効になっているようです

この古い設定を行った場合、エラーログ等はなく「404 Not Found」と言われ白紙のページが出るだけなので混乱します。

現在は Apache に直接組み込んだ FastCGIのProxyのモジュール(proxy_fcgi_module)から、直接php-fpmに接続するようになりました。このほうが遥かに効率的です。

メモ

  • php-fpmを利用する場合、SuEXECと併用できない。
    • SuEXECと同じことをしたければ、php-fpmデーモン(設定ファイル)を権限(ユーザー)ごとに分ける必要がある。

2015/01/30(金)Debian - jessie インストールメモ

記述が散らばってきたのと、さすがに古くなった部分があるのでまとめメモ。

キーボード環境の設定

apt-get install console-setup
dpkg-reconfigure locales

コンソールとGRUB画面の設定

高解像度すぎて使いにくいのでほどほどに。

# vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="video=800x600-16"
GRUB_GFXMODE=800x600
GRUB_GFXPAYLOAD_LINUX=keep
# update-grub

ついでに「mitigations=off」してMeltdown対策などをオフにすると、古いIntel CPUでは(セキュリティを犠牲にして)パフォーマンスが向上するらしい。

# vi /etc/default/grub
GRUB_CMDLINE_LINUX="video=800x600-16 mitigations=off"

fbterm

# apt-get install fbterm unifont
# usermod -aG video <user id>
# vi ~/.fbtermrc
font-names=unifont
font-size=16

このままだとアンチエイリアスが掛からないので設定する。(設定済の場合は不要)

# vi ~/.font.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
	<edit name="antialias" mode="assign">
		<bool>true</bool>
	</edit>
</match>
</fontconfig>

固定IP

# vi /etc/network/interfaces
auto eth0
iface eth0 inet static
	address 192.168.1.20
	netmask 255.255.255.0
	gateway 192.168.1.1
#	mtu 9000

rpcbindとeximを止める

# apt-get remove --purge rpcbind nfs-common
# apt-get remove --purge exim4 exim4-base exim4-config exim4-daemon-light

rootとwheel

# vi /etc/pam.d/su
auth       required   pam_wheel.so group=adm
# gpasswd -a USER adm

firewallの導入

# touch /etc/network/if-pre-up.d/iptables
# ln -s /etc/network/if-pre-up.d/iptables /etc/
# chmod +x /etc/network/if-pre-up.d/iptables
# vi /etc/iptables

設定詳細はこちらの記事

hosts.allow/deny

ALL : my_hostname
ALL : localhost
sshd : .jp

sshdのパスワード認証とrootログインを禁止

# vi /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
# /etc/rc.d/ssh restart

鍵認証設定後に。

localeの変更

# dpkg-reconfigure locales

tmpfsの設定変更

デフォルトだと実メモリの半分以上をtmpfsに割り当てられてしまいます。実使用分しかメモリを消費しないとはいえ気持ち悪いです。

/etc/default/tmpfsを書き換えればいろいろ設定できるはずと思ったら、Debian jessieは「sysvinit」ではなくなってるらしく/etc/default/tmpfsに設定しても意味がない

/etc/systemd 以下に書くのが正解なようですが、どう書けばいいかの情報がないのでしばらく保留……。

ntp設定

server   ntp.example.jp iburst
# IPv6
server   -6 ntp.example.jp iburst

状態確認

ntpq -p

PostgreSQLのリポジトリ追加

PostgreSQLの最新版が使えなかったり、アップグレードごとにメジャーバージョンが入れ替わって(古いバージョンのメンテが終わって)毎度DB移行が面倒なので。

# vi /etc/apt/sources.list
deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
# apt-get install gnupg
# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

PostgreSQLの設定

いつも /var/lib/postgresql ではなく /home/postgres にDBファイルを置くのだけども、ファイル移動したりシンボリックリンクしたりスマートじゃない方法で解決してました。

postgresql-commonだけ先に入れて、データディレクトリを変更。

# apt-get install postgresql-common
# vi /etc/postgresql-common/createcluster.conf
data_directory = '/home/postgres/%v/%c'

その後、任意のpostgresqlを導入。

後から変更

デフォルトDBの削除。

# pg_dropcluster --stop 9.4 main
# rm -rf /var/lib/postgresql

データディレクトリを変更してDB作成。

# vi /etc/postgresql-common/createcluster.conf
data_directory = '/home/postgres/%v/%c'
# pg_createcluster 9.4 main --options

pg_cluster系コマンドで複数のDBの起動などもできるらしい。

autovacuumの設定

デフォルトではオートvacuumが3worker×1分ごとに動作しようとし(必ず動作するわけではない)、そのたびにHDDにfsyncしてしまいます。ほとんど使用しないDBには無駄なディスク負荷なので、postgresql.conf の設定を変更しました。

autovacuum_max_workers = 1
autovacuum_naptime = 1d

GNU parted

# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) unit gb
(parted) print free
(parted) mkpart primary ext4 0 100%
(parted) print

コンソール日本語入力

# apt-get install uim-fep uim-anthy
# vi /usr/share/uim/generic-key-custom.scm
(define-custom 'generic-on-key '("zenkaku-hankaku" "<Control> ")
(define-custom 'generic-off-key '("zenkaku-hankaku" "<Control> ")

あとは「uim-fep」コマンドで起動。「CTRL+SPACE」でon/off。

その他

雑多メモ

特定のポートを使用中のプロセスを調べる。

# lsof -i:111
# netstat -ap

特定のファイルを含むパッケージを調べる。

$ dpkg -S [filename]

UUIDの確認。

# blkid /dev/sda1
# ls -l /dev/disk/by-uuid/

ia32-libsの代替。

# apt-get install lib32z1

開発環境一式。

# apt-get install build-essential

sshログイン時のメッセージ表示はpam.d/sshdで制御できる。

session    optional     pam_motd.so motd=/run/motd.dynamic noupdate
session    optional     pam_motd.so

バージョンの確認。

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.1 (jessie)
Release:        8.1
Codename:       jessie

2011/06/24(金)Linuxブートシーケンスまとめ。GRUBと起動トラブルのメモ

mdadmで作ったソフトウェアRAIDに障害があってRAIDを組みなおしてたのですが、まともに起動しないトラブルに見舞われて格闘してました。

その時に調べたGRUB2と起動の仕組みについてのメモ。

環境

  • Ubuntu 10.04 / Debian 6
  • ブートローダー GRUB2 (Ver1.98)
  • 起動ディスク RAID1(ミラー)
  • ファイルシステム構成 / から起動(/bootは / ファイルシステム内)*1

ここで説明するGRUBはGRUB2です。GRUB(Ver0.98)とは異なりますのでご注意ください。

続きを読む

2011/02/03(木)Debian 5.0 で Postfix の設定メモ

インストール

# apt-get install postfix dovecot-pop3d

dovecotも使うので入れますが、この記事では解説しません。

設定

Maildir形式に設定

# メールのFQDN
myhostname = xxxx.dom
# 受信するドメインの一覧
mydestination =
  example.net,
  example.dom,
  localhost
relayhost =

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
append_at_myorigin = yes
# コメントアウト(ここが有効だとMaildirにならない)
#mailbox_command = /usr/bin/procmail -a "$EXTENSION"

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
recipient_delimiter = +
inet_interfaces = all

# セキュリティ用のVersion等を隠す
smtpd_banner = ESMTP unknow
# メールdirに
home_mailbox = Maildir/
# メールボックスを無制限に
message_size_limit = 16777216
mailbox_size_limit = 0

バーチャルドメイン

複数のドメインがあるとき、ドメインごとに受信ユーザーを変更することができます。

main.cfの設定

virtual_alias_maps = hash:/etc/postfix/virtual

/etc/postfix/virtualの作成

foo@example.com		bar
foo@example.net		xxx@other.dom

ここからデータベースを生成します。

# postmap /etc/postfix/virtual

"portmap"ではなく"postmap"であることに注意してください。これは、sendmailにおける以下のコマンドとほぼ同じ意味です。

# cd /etc/postfix
# makemap hash virtual<virtual

/etc/postfix/virtual.dbが無事生成されたら再起動してください。/etc/aliasesと同様に、これらのファイル更新時は再起動は必要ありません。*1

virtualの生成コマンドを忘れそうなら、Makefileを置いておくのも手です。

# Makefile
virtual.db: virtual
  postmap virtual

*1 : .dbファイルの再生成は必要です。

SMTP Authとmutt