Ubuntu&NetBookによるWebサーバ構築メモ 2011/03/17〜21
2004年頃にデスクトップ(自作)PC上にて、Fedora2でWebサーバ稼動。
今まで元気に稼動させてきた訳なんですが、例の震災による計画停電を受けて
急遽ATOMのNetBookでWebサーバ構築しようと思い立ち、以下はその構築記。
Ubuntuはあまり良く分かっていないので、手探りにて。
■環境・OS選定
我が家唯一のノートPCとなるMSiU100Plusを利用。
バッテリーによる公称駆動時間は2.5時間、計画停電3時間より少ないけど
基本、液晶を止めたまま運用するんで、持つ事を祈って。
元々入っていたXPは活かしつつ、パーティション分けでマルチブート。
OSについては、ubuntu-10.04LTS-desktop-i386.iso を利用。
上記NetNookに対しVideoDriverも認識し、BootLoaderも正しく動作したのが
選定理由。なるべくGUIを使う方針なので、ubuntu server版は敢えてスルー。
その他の候補については以下の通りNG
Fedora12:画面認識せず(テキストMODE化)
Fedora14:USB bootが妙なエラーで上手くいかん
CD焼きで通ったものの英語専用&BootLoaderがFedora専用に。
CentOS5.5:画面認識せず(テキストMODE化)
Ubuntu10.10:USB bootが妙なエラーで上手くいかん
■OS導入
先のisoイメージを unetbootin-windows というソフトで起動USBメモリ化。
元々MSiU100Plusは160GB HDDがXPシステムに60GB、データに100GBと
パーティション分けされているので、予め後者側をパーティションクリア。
USBメモリから起動、言語&キーは日本語を選び、導入先は最大の空きパーティション。
あとはメインユーザのアカウント名&パスを決定、設定項目はこの程度。
Ubuntuではrootユーザのパスワードは設定しない模様?
自分1人でしか使わないので自動ログイン設定で。
但しその場合、起動時にはパス入力求めないくせに、スクリーンセーバ後の復帰画面で
要パス入力がデフォになってて不思議(なので後で切る)。
普通にDHCPからIP取得して、この状態で既にネット利用可能。
ちなみに無線LANは使わずに有線LANで運用。
無線LANはWPAキーなどを設定すれば一応動くものの、妙に不安定?にて
何時の間にか途切れて再度WPAキー入力求められたり、と面倒だったので。
■OS更新
システム-システム管理-アップデートマネージャ、より
取り敢えず表示されているアップデートは当てまくっておく。
その後のアップデートについては「通知のみ」として、強いて自動適用はしない。
(勝手にリブートされても困るので!)
このOS更新をしている間は遠隔操作が不安定になる様子?
(1クリックが多重クリック扱いになったり…)
なので、後述の遠隔操作設定よりは先に実機でOS更新をしておいた方が無難。
■初期設定〜遠隔操作まで
システム-設定-ネットワーク接続、より
有線-Auto eth0を編集、IPv4設定より自動(DHCP)→手動 にてIPを固定化。
システム-設定-電源管理の設定、より
ノートPCを閉じたときの動作をブランクスクリーンへ。
システム-設定-GNOMEスクリーンセーバー、より
スクリーンセーバーを起動したら画面をロック、のチェックを外す。
システム-設定-リモートデスクトップ、より
共有を許可し、接続の毎回確認は外し、パスワード入力要求を設定。
これで他のPCからVNC-Viewerにて遠隔操作可能。
但し、この時点ではUbuntu起動後の最初のVNC接続のみログイン用キーリングを
実機側で要求されてしまうため、以下の対応。
アプリケーション-アクセサリ-パスワードと暗号鍵、より
パスワードloginの右クリックからパスワードの変更、旧パスのみ入力し
新パスを空値設定(&安全でないストレージを使うを選択)。
ここまで設定すれば、実機は閉じたまま遠隔運用可能。
その後、画面上下のウインドウズバー?については、適当に好みで
パネル類を追加しても良い。
※CPU周波数モニタはATOM N280の周波数に正しく対応していないため、%表示で利用
VNC利用だとマウスカーソルが小さい黒点になってしまって使いにくいけど、
ちょろっと調べた限り改善策見当たらず(ので我慢)。
■samba導入
システム-システム管理-Synapticパッケージマネージャ、より
samba、system-config-samba をインストール。
(sambaで検索し、チェックして適用。以下同様)
システム-システム管理-Samba、より
「追加」ボタンから共有フォルダの設定。
基本タブでは公開フォルダ&共有名を指定、書き込み可能&可視にチェック。
アクセスタブでは共有するユーザにチェックし、OK。
プリファレンス-Sambaユーザ、から共有するユーザに対し編集とし、
パスワードを再入力。
※sambaパスワードはログインパスワードとは独立しているため、
こちらでも再度パスワードを設定しておく必要がある。
■ftp&ssh導入
Synapticパッケージマネージャより vsftpd、openssh-server をインストール。
vsftpはデフォルトで書き込みが禁止&Uploadファイルが一般Read不可と
なっているため、以下の対応。
sudo vi /etc/vsftpd.conf にて設定ファイルを編集
#write_enable=YES この行のコメント化を外し、
#local_umask=022 この行のコメント化も外しファイル保存
sudo restart vsftpd サービス再起動
取り敢えずこの時点で、ssh外部コンソール接続とftp接続は可能。
どちらも直でroot接続は不可。OS導入時に設定したユーザ&パスを用いる。
ssh接続は、sudo su(パスはログインユーザ側)にてroot化可能。
puttyの2007/08/06版(以降)にて、変換の文字コードをUTF-8としておけば
日本語表示も問題なし。※古いputtyでは全角文字が表示出来ない事もある。
ftp接続は、ffftpの最新版(1.97bなど)にて、ファイル名の文字コードを
UTF-8と指定すれば全角ファイル名も含めて利用可能。
■apache導入
Synapticパッケージマネージャ、より以下の導入。
apache2
apache2-mpm-worker
apache2-utils
apache2.2-bin
apache2.2-common
※依存する〜〜を、と出たら全て導入
◇設定ファイル類
/etc/apache2/apache2.conf apache設定ファイルの親(ここから他をinclude)
/etc/apache2/httpd.conf 旧apache設定ファイル(中身は空)
/etc/apache2/ports.conf ポート設定ファイル(listen 80 が入っている程度)
/etc/apache2/conf.d/ 追加モジュール類の設定ファイル用置き場
及び、以下に細かな設定ファイル群が存在
/etc/apache2/mods-available モジュール類の設定ファイル
/etc/apache2/sites-available バーチャルホスト毎の設定ファイル
これらは以下のコマンドにてenable側リンクが修正され、有効無効を切り替える。
a2ensite サイトの有効
a2dissite サイトの無効
a2enmod モジュールの有効
a2dismod モジュールの無効
ここでSSI実行のために、以下を実施しておく。
sudo a2enmod include
(201601 Apache2.4では sudo a2enmod cgi も必要)
以下の設定修正(sudo vi ファイル名、もしくは gksudo gedit ファイル名)
◇/etc/apache2/conf.d/security より(201601 /etc/apache2/conf-enabled/security.conf)
ServerTokens Off (201601 Offは使えなくなった? Minimalで運用か)
ServerSignature Off
◇/etc/apache2/mods-enabled/mime.conf より
AddHandler cgi-script .cgi (コメント化を解除)
◇/etc/apache2/apache2.conf より
LogFormat "%h %l %u %t \"%!414r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined ←!414 の追加
SetEnvIf Request_URI \.(mp3|mid|lzh|zip|pdf|flac) musiclog
SetEnvIf Request_URI "\.(gif|jpg|png|ico|css)$" nolog
SetEnvIf Remote_Addr 192.168. nolog !musiclog
SetEnvIf RequestReferer bot\.htm nolog
SetEnvIf Request_URI default \.ida nolog
SetEnvIf Request_URI cmd \.exe nolog
SetEnvIf Request_URI mod_ssl:error:HTTP-request nolog
SetEnvIf Request_URI "NULL\.IDA" nolog
SetEnvIf Request_URI "^/_mem_bin/" nolog
SetEnvIf Request_URI "^/_vti_bin/" nolog
SetEnvIf Request_URI "^/c/" nolog
SetEnvIf Request_URI "^/d/" nolog
SetEnvIf Request_URI "^/msadc/" nolog
SetEnvIf Request_URI "^/MSADC/" nolog
SetEnvIf Request_URI "^/scripts/" nolog
◇/etc/apache2/sites-available/default より(201601 apache2.confに移った模様)
Options None
AllowOverride None
Order Deny,Allow
Deny from all
(→201601 apache2.4では後述)
Options Includes FollowSymLinks ExecCGI
XBitHack on
AllowOverride All
Order allow,deny
Allow from all
CustomLog /var/log/apache2/access.log combined env=!nolog
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/music_log.%Y%m%d 604800 540" combined env=musiclog
(↑201601 apache2.4では後述)
設定変更後はapache2サービスの再起動
sudo /etc/init.d/apache2 restart
■webコンテンツ・ログ
/var/www/ ドキュメントルート (201601 この下にhtmlフォルダが挟まってる?)
/var/log/apache2/ 各種ログの配置場所
/var/www/webalizer アクセスログ解析結果
/var/www の書き込み権限を変更(ownerがrootのため手抜き設定)
sudo chmod 777 /var/www
sudo chmod 666 /var/www/index.html (その後、適当にリネーム)
その後は/var/wwwにWEBコンテンツを移行。
Windows機を経由したりした場合、フォルダの権限が700(ownerのみアクセス可)
となってしまっている事があるが、そのままだとフォルダ内の.htaccessの
検索が出来ずにエラーとなるため、グループ&otherの権限を変更
chmod 755 フォルダ名
(その他、通常のファイルは644、cgiは755、書き込みのあるファイルは766
一時的にファイルを作成するフォルダは777)
/etc/logrotate.d/apache2 の記載の通り、/var/log/apache2/*.log ファイル群は
日次ローテートされる。※/etc/cron.daily/logrotate にて実行
世代数は、/etc/logrotate.conf の通り4世代。
尚、先のログ出力設定では、通常のこの4世代ログとは別に、env=musiclog として、
music_log.YYYYMMDD 形式でもDL状況抜粋ログを別途出力している。
こちらは永久保存。
■webalizer ※後述の通り、実際はwebalizerは利用せず(201601でも同様)
Synapticパッケージマネージャより webalizer をインストール。
レポート配置場所の権限変更(ownerがrootのため手抜き設定)
sudo chmod 777 /var/www/webalizer
読み込み制限のために、/etc/apache2/conf.d の中に webalizer.conf を用意。
AuthName "Webalizer AREA"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
require user ここにユーザ名
satisfy any
Order deny,allow
Deny from all
# Allow from 127.0.0.1
及び、 /etc/apache2 の下に .htpasswd を用意。
/usr/bin/htpasswd -c /etc/apache2/.htpasswd ここにユーザ名
その後にパスワード入力
(ここで一度apache2サービスを再起動)
予め、/var/lib/webalizer フォルダを作っておく
設定については、/etc/webalizer/webalizer.conf より
LogFile /var/log/apache2/access.log
HistoryName /var/lib/webalizer/webalizer.hist
Incremental yes
IncrementalName /var/lib/webalizer/webalizer.current
HostName ホスト名(もしくはプライベートIP記載も可)
DNSCache /var/lib/webalizer/dns_cache.db
DNSChildren 10
Quiet yes
TopURLs 500
TopReferrers 100
HideReferrer サイトURL/
HideReferrer Direct Request
手動実行する場合は以下。
sudo /usr/bin/webalizer -c /etc/webalizer/webalizer.conf
集計をやり直したくなった場合は、以下の2フォルダの全ファイルを削除
/var/lib/webalizer/
/var/www/webalizer/
/etc/cron.daily/webalizer にて日次集計される設定となっているが、
毎時集計したい場合は、/etc/cron.hourly にコピー(or ln)しておく。
(補足)
ubuntuの環境変数LANGは、printenvで確認すると以下となっている。
LANG=ja_JP.UTF-8
この状態でwebalizerを集計すると、ubuntu10.04対応webalizerでは
表の項目名等を日本語表示する様に試みるが、その日本語対応がbugっている?
らしく、部分的に文字化けしつつ他のhtmlタグを破損させ、結果的に表示が壊れる。
そこで、/etc/cron.hourly/webalizer について、処理の序盤に以下を追加。
export LANG=C
※と、ここまで記述しておきながら、どうもubuntu10.04とwebalizer2.01の
組み合わせでは2回目以降の更新が上手くいかず、ちょっと調べても
イマイチ改善策が見当たらないので、awstatsに乗り換えマス…
■awstats
Synapticパッケージマネージャより awstats をインストール。
読み込み制限のために、/etc/apache2/sites-available/default より
(201601 apache2.confに移動した模様)
Alias /awstats-icon/ /usr/share/awstats/icon/
Options None
AllowOverride None
Order allow,deny
Allow from all
(201601 conf-availables/serve-cgi-bin.conf で定義)
AuthName "awstats AREA"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd
require user ここにユーザ名
satisfy any
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order deny,allow
Deny from all
# Allow from 127.0.0.1
及び、 /etc/apache2 の下に .htpasswd を用意。
/usr/bin/htpasswd -c /etc/apache2/.htpasswd username
(ここで一度apache2サービスを再起動)
/etc/awstats/ 配下について、元のawstats.confをコピー。
例えば、awstats.conf → awstats.mysite.conf
ここで「mysite」の部分が今後のconfig名となる。
awstats.mysite.confの修正
LogFile="/var/log/apache2/access.log" ※こちらはデフォルトのまま
LogFormat=1
SiteDomain="mysite.com"
SkipHosts="127.0.0.1 REGEX[^192\.168\.0]"
初回集計は、以下。
sudo perl /usr/lib/cgi-bin/awstats.pl -config=mysite -update
結果表示は、webブラウザより以下を開く
http://mysite.com/cgi-bin/awstats.pl?config=mysite
自動実行のために、/etc/cron.d/awstats の修正。
(元)
0,10,20,30,40,50 * * * * www-data [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.conf -a -r /var/log/apache2/access.log ] && /usr/lib/cgi-bin/awstats.pl -config=awstats -update >/dev/null
↓(変更後)(201601 後述)
0,10,20,30,40,50 * * * * root [ -x /usr/lib/cgi-bin/awstats.pl ] && /usr/lib/cgi-bin/awstats.pl -config=mysite -update >/dev/null
蓄積データの保存場所は、/var/lib/awstats 、再集計したい場合はここをクリア。
設定カスタマイズとしては、awstats.mysite.conf の以下の辺りを修正。
MaxNbOfDownloadShown = 10
MaxNbOfPageShown = 10
MaxNbOfRefererShown = 10
MaxNbOfKeyphrasesShown = 10
MaxNbOfKeywordsShown = 10
※http://ubusrv.no-ip.info/index.php?AWStats サイトの情報を
参考にさせて頂きました。感謝です。
■おまけ
ハードウェアモニタリングのために、以下の導入
lm-sensors
sensors-applet (201601 Gnome以外の環境ではxsensorsなどで表示可)
起動時にhddtempデーモンの開始にはチェックを入れる
リスンwするI/Fやポートはデフォルトのまま
sudo sensors-detect より、質問にはyesと答えまくる
(最後のみデフォルトがNoなのでYesに変更)(201601 ALLデフォで良い?)
一度ログオフしてログオン。
その後、パネルにHardware Sensors Monitorを追加。
■2016年1月 ION-Atom機にubuntu14.04LTS 64bitを導入
標準状態で何故かスタートメニュー的なI/Fが存在しないため、Ubuntuソフトウェアセンターから
ClassicMenu Indicatorなどを導入
システムツールの中に「ソフトウェアの更新」と「ソフトウェアとアップデート」の
類似機能が存在するが、前者は後者の中の3つ目のタブな模様。
システムツール-ネットワークツールからeth0への設定でIPv4の直指定。
しかし設定I/Fが分かりにくく、普通に設定しているだけでもエラーで跳ねられるので
IP設定はGUIのは諦めて/etc/network/interfacesいじるべきっぽい
通常のターミナルはユーティリティの中の端末。
デスクトップ共有の設定がメニューから見付からないので検索で探す。
ユーザーがログインしていないとVNC接続出来ない様子なので
特定ユーザを自動ログイン設定しておくこと。
キーリング要求や画面ロックパスワード要求はなくなった模様。
opensshは「Secure shellクライアントおよびサーバ(メタパッケージ)」を入れる。
apacheはapache2 2.4.7-1ubuntu4.9を導入
追加アドオンはデフォのufwに加えて、apache2-utils も追加(rotatelogsのため)
/etc/apache2/apache2.conf より
最終行にサーバ名追記
Servername abab.dip.jp
ubuntu14.04LTSのapache2.4ではcgiモジュールがデフォルトで無効化されているので
sudo a2enmod cgi でCGI有効化
apache2.4系では
Order Allow,Deny
Allow from all
ではなく
Require all granted
に変わった模様。よって、apache2.confの記載は以下
Options Includes FollowSymLinks ExecCGI
XBitHack on
AllowOverride All
Require all granted
rotatelogsの位置が/usr/sbinから/usr/binに変更のため、apache2.confの記載は以下
CustomLog /var/log/apache2/access.log combined env=!nolog
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/music_log.%Y%m%d 604800 540" combined env=musiclog
awstatsの自動実行 /etc/cron.d/awstats の修正は、既存をコメント化して
0,10,20,30,40,50 * * * * root /usr/lib/cgi-bin/awstats.pl -config=myTestServer -update > /dev/null
awstatsのcgi-binへの設定については、apache2.config から conf-availables/serve-cgi-bin.conf に移行
CPU使用率が常に50〜70%台となり、sudo topで調べるとxorgが占有。
GPUドライバが汎用になっていて、nvidiaのドライバを調べると
http://www.nvidia.co.jp/download/driverResults.aspx/95387/jp
Linux 64bit 340.96にIONサポートの記載あり
sudo apt-get install nvdia-340 で導入
■2024年12月 Ubuntu22.04.5LTS化&HTTPS(SSL)対応
(主にこのサイトを参考:有難うございます)
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04-ja
・sudo do-release-upgrade にてメジャーVer.UP可能。事前に細かい更新は最新化しておく。
18.04LTS→20.04LTS→22.04LTSと順を追って上げる必要がある。
・途中の問いかけは基本Y(了解)。Display Managerを絞れ的に言われたらgdb3。
・sambaの問いかけはローカルバージョン保持で。apacheのmime.confの問いかけも既存活かしてN。
・ubuntu22.04.5LTSになるとVNCが動かくなくなってしまう代わりにRDPがデフォルト採用。
初回だけは実機上でGUI操作し、設定−共有−よりRDP有効&リモート操作有効&UserPass設定。
MSTSCで接続後に真っ黒化現象となる場合、Waylandを無効化してUbuntu on Xorgでログインしとけ説
もしくは実機ログインするな説があり、ウチは後者で解決。※特定ユーザの自動ログインはOFF化
・ClassicMenu Indicatorが22.04LTSで動かないので諦め。代わりに
GNOME Shell integrationを入れてDash to PanelとArcMenuをONとすると大分マシになる。
・sudo a2enmod ssl にてSSL有効化。
/etc/apache2/mods-enabled にssl.conf が出現する。特に編集は不要。
・sudo apache2ctl configtest にて文法エラーがない事を確認し、
sudo service apache2 reload にて1度再起動。
・/etc/apache2/sites-enabled/000-default.conf を修正(80側は修正、443側は丸々追記。
ServerName 自サバFQN
DocumentRoot /var/www/html
ServerAdmin (実際にメール受信可能なメアド)
ServerName 自サバFQN
DocumentRoot /var/www/html
ServerAdmin (実際にメール受信可能なメアド)
・certbotのインストール(前2行はおまじない?特に不要かも)
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
・Certbotによる apacheのコントロールと証明書の取得
sudo certbot --apache
Enter email address:(実際にメール受信可能なメアド)
規約に同意するか:Y
通知を受け取るか?:Y
対象サーバ選択:(表示を確認しつつ)ENTER
(ここでhttp接続をhttpsへリダイレクトするかの問いかけが来る予定だったが、問い掛けなく強制適用)
以下が作成される。
Certificate is saved at: /etc/letsencrypt/live/(自サバ)/fullchain.pem
Key is saved at: /etc/letsencrypt/live/(自サバ)/privkey.pem
−−−既にここまでの操作でHTTPS接続可能化−−−
・/etc/apache2/sites-enabled/000-default.conf を確認すると、
Virtualhost 80側にはhttpsへのリダイレクト、443側には適切なキーpathが設定されている。
・sudo certbot renew --dry-run を1度実行して更新テスト。
・sudo systemctl status certbot.timer にて自動更新化されているか確認。
が、何故かウチの環境ではUnit certbot.timer could not be foundとなってしまうため
/etc/cron.weekly 配下に以下のようなスクリプトを配置
#!/bin/sh
#
# certbot script
#
certbot renew
service apache2 reload
・/etc/apache2/site-enabled/000-default.conf の記述について、
当サイトではDDNSを切り替えた経緯があり、旧ドメインからのアクセスを単純にhttps化すると
証明書エラーとなる事より、以下のように記載。※最終行にSERVER_NAMEを使わず固定値化している
RewriteEngine on
RewriteCond %{SERVER_NAME} =abab.mydns.jp [OR]
RewriteCond %{SERVER_NAME} =abab.dip.jp [OR]
RewriteCond %{SERVER_NAME} =abfuku.asuscomm.com
RewriteRule ^ https://abab.mydns.jp%{REQUEST_URI} [END,NE,R=permanent]