■UNIXとLinuxの違い
参考:3分間で人に説明できるようになるUnixとLinuxの違い https://eng-entrance.com/unix_linux
■Linuxのディレクトリ構成
bin ... 一般向けコマンド。ブートするときに必要な、システムの基本コマンド。binaries sbin ... 管理者向けコマンド。ブートするときに必要な、管理者用コマンド etc ... 設定ファイル。Editable Text Configuration(後付の意味) lib ... ライブラリ lib64 ... 64bitライブラリ opt ... 実行時に書き換えられないアプリケーション dev ... デバイスファイル(ハードウェアもファイルとして扱うという、Linuxの設計思想のため) sys ... ドライバ関連のプロセス srv ... システムに提供された固有のデータ proc ... プロセスファイルシステム。カーネルの情報 boot ... Linuxの起動に必要なファイル lost+found ... システムのバックアップや復元用 mnt ... 外部記憶装置を配置するディレクトリ(スワップなど) media ... 外部記憶装置を自動的に配置するディレクトリ(CD-ROMなど) root ... 管理者のホームディレクトリ tmp ... 一時的なファイル。リブートすると消える var ... システム用の頻繁に書き換えられるデータファイル。variable log ... ログファイル spool ... メールやプリンタジョブ蓄積場所 run ... 起動中サーバのプロセスID tmp ... 一時的なファイル。リブートしても消えない www ... Webサーバ用のデータ usr ... 読み出しが可能で共有できるファイル bin ... 一般向けコマンド。平常時用の基本コマンド sbin ... 管理者向けコマンド。平常時用のシステム管理コマンド lib ... ライブラリ share ... 筋腫に依存しないファイル local ... ユーザごとにインストールした、bin, sbin, lib などにあたるコマンド home ... 一般ユーザのホームディレクトリ 参考:Filesystem Hierarchy Standard - Wikipedia https://ja.wikipedia.org/wiki/Filesystem_Hierarchy_Standard 参考:Linuxの基本の基本。Linuxの基本的なディレクトリ構成 http://oxynotes.com/?p=5987 参考:Linuxのディレクトリ構造(一覧)を理解する http://www.linuxmaster.jp/linux_skill/2010/02/06linux.html 参考:なぜ,/var や /etc が /etc や /cfg というディレクトリ名ではないのか? http://d.hatena.ne.jp/ytakano/20100715/1279219401 参考:WindowsのあのフォルダはUNIX/Linuxで言えばあそこだ http://qiita.com/yuba/items/669f718fe6e62dbaab19
■yumリポジトリ
「yum」は「ヤム」と読む 参考:Yellowdog Updater Modified https://ja.wikipedia.org/wiki/Yellowdog_Updater_Modified 参考:IT業界で横行する恥ずかしい英語発音 http://qiita.com/ryounagaoka/items/290885ee3291b393fe1f 参考:yum 名前の由来 http://poormemory.seesaa.net/article/356576330.html 参考:yumリポジトリ一追加リスト 完全版 http://qiita.com/bezeklik/items/9766003c19f9664602fe
■ソースコードからインストール
基本的に以下の流れでインストールする ただし yum や apt-get など、できるだけコマンドでインストールする方がバージョンアップなど管理が楽 $ cd /usr/local/src … 作業ディレクトリに移動 $ wget https://example.com/example-2.1.tar.gz … ソースコードの圧縮ファイルを取得 $ tar -xvf example-2.1.tar.gz … 圧縮ファイルを解凍 $ cd example-2.1 … 解凍して作成されたディレクトリ内に移動 $ ./configure … インストール環境を調査し、その状況を記述したMakefileファイルを作成 $ make … configureで作成されたMakefileをもとにして、ソースコードをコンパイル $ make install … makeで生成されたバイナリファイルなどを、規定のディレクトリにコピー(インストール) 参考:./configure;make;make installにはどんな意味がある? http://www.itmedia.co.jp/help/tips/linux/l0302.html
■アクセス権メモ
参考:SUIDとは http://www.itmedia.co.jp/enterprise/articles/0804/08/news014.html ■SUID(Set User ID) # ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 2月 22 20:48 2012 /usr/bin/passwd ↑sになっている。どのユーザがプログラムを実行した場合でも、ファイルの所有者の権限で実行される これにより、root権限の無い一般ユーザが /etc/shadow を編集できる ■SGID(Set Group ID) どのユーザがプログラムを実行した場合でも、グループの所有者の権限で実行される ■SUIDとSGIDの確認 # find / -perm -4000 -o -perm -2000 参考:ざっくり概要!Linuxセキュリティに関する基礎知識まとめ https://eng-entrance.com/linux-security-basic ■スティッキービット # ls -ld /tmp drwxrwxrwt. 5 root root 4096 5月 7 17:53 2016 /tmp ↑tになっている。実際のパーミッションに関係なく、ファイルもしくはディレクトリの所有者と、rootユーザーのみが名前の変更と削除を行える すべてのユーザーがファイルやディレクトリを作成できるようにしたいが、作成したファイルやディレクトリを他人が消せないようにしたい という場合に使用される
■ユーザの停止
参考:逆引きUNIXコマンド/ユーザアカウントをロック・アンロックする方法・usermodコマンド http://linux.just4fun.biz/?%E9%80%86%E5%BC%95%E3%81%8DUNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E3%83%AD%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A2%E3%83%B3%E3%83%AD%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%83%BBusermod%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89 # passwd -l xxxxx … ユーザ xxxxx をロック(パスワードで認証できなくなる) # passwd -u xxxxx … ユーザ xxxxx のロックを解除 以下の方法でもロック&解除できる # usermod -L xxxxx # usermod -U xxxxx 上記の方法は、どちらもパスワード認証のロック 鍵認証の場合は一例だが、以下の方法でロック&解除できる(鍵ファイルを読めないようにしてロック) アカウントロック # chmod 000 /home/xxxxx/.ssh/authorized_keys アカウントロック解除 # chmod 600 /home/xxxxx/.ssh/authorized_keys
■ユーザのログイン制御
# usermod -s /sbin/nologin xxxxx … ユーザ xxxxx のログインを禁止する # usermod -s /bin/bash xxxxx … ユーザ xxxxx のログインを許可する
■SFTP用ユーザの追加(鍵認証なし)
※SFTPは実質SSHなので、ユーザ追加の手順はSSHと同じ # vi /etc/ssh/sshd_config
PasswordAuthentication yes
# useradd webmaster # passwd webmaster # usermod -a -G apache webmaster
■FTP用ユーザの追加(グループで管理)
※公開ディレクトリ上位の権限をapacheに変更、 グループに読み書き実行権限を付与、 FTPユーザにapacheグループを追加、 という手順でアップロードを許可している。以下参考。 # adduser --shell /sbin/nologin --home /var/www/vhosts/main/ refirio-main # passwd refirio-main # adduser --shell /sbin/nologin --home /var/www/vhosts/pre/ refirio-pre # passwd refirio-pre # usermod -a -G apache refirio-main # usermod -a -G apache refirio-pre # chown apache. /var/www/vhosts/main/ # chown apache. /var/www/vhosts/pre/ # chmod 775 /var/www/vhosts/main/ # chmod 775 /var/www/vhosts/pre/
■Apacheのレスポンスタイムを記録
ログフォーマットに %D を追加するとマイクロ秒単位で、%T を追加すると秒単位でレスポンスタイムが記録される 以下は設定例 LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined これで、各行の最後に「16255」のような数値が記録されるようになる この場合、処理に16255マイクロ秒、つまり0.016255秒かかったことになる ※1秒 = 1,000ミリ秒 = 1,000,000マイクロ秒 参考:Apacheのレスポンスタイムをログ記録する http://d.hatena.ne.jp/stfuawsc/20090608/1244438262 参考:Apacheのリクエスト処理時間(%T or %D)は正確には何の時間か http://dev.ariel-networks.com/Members/inoue/response-time/ 参考:Apacheのレスポンス分析に必要なスクリプトまとめ http://koduki.hatenablog.com/entry/2012/11/24/171534 参考:Apacheのログから応答速度分布やエラー状況を分析する(原始的な方法) http://www.teradas.net/archives/5298/
■Apache・Nginxのエラーログフォーマットを変更
error_log に記録するIPアドレスを、Proxyを考慮したものにしたい…という場合に調べたもの 公式の解説によると、「情報を追加したり削除したりしてエラーログをカスタマイズすることは できません。」とのこと。 Nginxも同様 参考:ログファイル - Apache HTTP サーバ http://httpd.apache.org/docs/2.0/ja/logs.html#errorlog 参考:nginxのerror_logはformat指定できない. - としたにあんの左脳 http://toshitanian.hatenablog.com/entry/2013/10/25/023838 上記Apacheのドキュメントには 「情報を追加したり削除したりしてエラーログをカスタマイズすることはできません。 しかし、リクエストに対するエラーログのエントリは、 対応するエントリがアクセスログにあります。 例えば、上の例のエントリはアクセスログのステータスコード 403 のエントリに対応します。 アクセスログはカスタマイズ可能ですので、 そちらを使うことによりエラーの状況に関する情報をより多く手に入れることができます。」 と書かれているので、アクセスログを併用する前提みたい。恐らくNginxも同じ思想
■バーチャルホスト
※SSL用の設定は丸ごと移行させないと、デフォルト値が上書きできずに反映される?(要検証) ※バーチャルホストの作成場所は /var/www/vhosts/example.com/ /var/www/vhosts/pre.example.com/ のようにするのが一般的?ドメインに関連付けるとドメインの変更に対応しづらいけど、そう変更されるものではないからいい? ドメインが未決定の場合に設定できない? /var/www/vhosts/example/ /var/www/vhosts/pre_example/ のようにする方がいいかも? 複数サイトを管理しないのなら product や staging や develop でいいかも その中に cgi-bin や html を作る? ※IPアドレスでアクセスしたときはIPアドレスもしくはサーバ名だけが表示されるページにアクセス、 ドメインを指定してアクセスしたら対応するページにアクセス。 とすると管理しやすいかも ※バーチャルホストが不要な案件でも、後々検収環境が追加されたりを想定して、常にバーチャルホストにしておくといいかも 参考:名前ベースの仮想ホスト http://www.adminweb.jp/apache/virtual/index2.html 参考:バーチャルホスト設定(Apache) http://centossrv.com/apache-virtualhost.shtml # mkdir -p /var/www/vhosts/main/html … バーチャルホスト用ドキュメントルートディレクトリ作成 # vi /etc/httpd/conf/httpd.conf … Apache設定ファイル編集
# # Use name-based virtual hosting. # NameVirtualHost *:80 … コメント解除(バーチャルホスト有効化) # # NOTE: NameVirtualHost cannot be used without a port specifier # (e.g. :80) if mod_ssl is being used, due to the nature of the # SSL protocol. #
# vi /etc/httpd/conf.d/virtualhost.conf … バーチャルホスト設定ファイル作成
<VirtualHost *:80> … httpアクセス ServerName refirio.net … refirio.net でアクセスされた場合 DocumentRoot /var/www/vhosts/main/html … /var/www/vhosts/main/html をドキュメントルートとする <Directory "/var/www/vhosts/main/html"> Options Includes ExecCGI FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
※最低限、以下の記述だけで動作する。Directoryの指定は一箇所にまとめておくとメンテナンスしやすそう
<VirtualHost *:80> ServerName refirio.net DocumentRoot /var/www/vhosts/main/html </VirtualHost>
■SSL(必要に応じて) 続いて、SSL用の設定を行う 参考:apacheで複数のSSL設定を行う http://y-stream.blogspot.jp/2011/09/apachessl.html 参考:Apache2.2 の VirtualHost を SSL を使うサイトにも適用 http://qiita.com/da0shi/items/70572e1da228795e0d4b 参考:vi http://ext.omo3.com/vi/index.html 参考:ApacheでSSL(https)で複数のバーチャルホストの設定 http://istks.net/2322 # vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 NameVirtualHost *:443 … 追加する
# vi /etc/httpd/conf.d/ssl.conf … ApacheSSL設定ファイル編集 <VirtualHost _default_:443> の項目をすべてコメントアウトする (「<VirtualHost _default_:443>」と「</VirtualHost>」の行も含めてコメントアウトする) たとえ内容がカラでも、後で設定する「<VirtualHost *:443> 〜 </VirtualHost>」が反映されないため # vi /etc/httpd/conf.d/virtualhost.conf … バーチャルホスト設定ファイル編集
<VirtualHost *:443> … httpsアクセス ServerName refirio.net … refirio.net でアクセスされた場合 DocumentRoot /var/www/vhosts/main/html … /var/www/vhosts/main/html をドキュメントルートとする ErrorLog logs/ssl_error_log … 以降はSSL用の設定 TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/httpd/conf/ssl.crt/refirio.net.20170410.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/refirio.net.20170410.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/ica.refirio.net.20170410.crt </VirtualHost>
もともと ssl.conf の VirtualHost 内にあった設定を記載し、 さらに ServerName や SSLCertificateFile の設定を追加している ■動作確認 # chown refirio. /var/www/vhosts/main/html/ … ドキュメントルートの所有者を「refirio」に変更 # ll /var/www/ … ドキュメントルートの所有者を確認 合計 24 drwxr-xr-x 2 root root 4096 10月 5 11:45 cgi-bin drwxr-xr-x 3 root root 4096 10月 9 00:19 error drwxr-xr-x 5 refirio refirio 4096 9月 27 17:43 html drwxr-xr-x 3 root root 4096 9月 27 09:29 icons # service httpd restart … httpdを再起動 httpd を起動中: [ OK ] # vi /var/www/vhosts/main/html/index.html … テストページ作成
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>テスト / main</title> </head> <body> <p>テスト / main</p> </body> </html>
■サブドメインなしでのアクセス refirio.net で /var/www/html を表示し、 test.refirio.net で /var/www/vhosts/test/html を表示するような場合、 上の設定を行うと /var/www/html へアクセスできなくなる可能性がある。 その場合、以下のように /var/www/html へのアクセスを明示的に設定する。 <VirtualHost *:80> ServerName refirio.net DocumentRoot /var/www/html </VirtualHost> IPアドレス経由でのアクセスなら、以下のように設定できる。 <VirtualHost *:80> ServerName 203.0.113.1 DocumentRoot /var/www/html </VirtualHost> ■ログでバーチャルホストを区別 参考:バーチャルホスト https://httpd.apache.org/docs/2.0/ja/logs.html#virtualhosts バーチャルホストごとにApacheログを分けない場合、どのアクセスがどのバーチャルホストに対してのアクセスなのか区別できなくなる LogFormatに「%v」と書いておくと test.refirio.net のような値として記録されるので、必要なら調整する 以下は設定例 LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{X-Forwarded-For}i %{X-Forwarded-Proto}i %v" combined test.refirio.net のような値ではなく、例えばサブドメイン「test」でアクセスした際に「test」と記録したい場合、以下のように設定する 「combined_test」の部分は、他のログ設定と重複しない値にする 以下は設定例 <VirtualHost *:80> ServerName test.refirio.net DocumentRoot /var/www/test LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{X-Forwarded-For}i %{X-Forwarded-Proto}i test" combined_test CustomLog logs/access_log combined_terraport env=!no_log </VirtualHost> ただしバーチャルホストが増えると管理しづらいので、前に挙げた方法を推奨
■ユーザディレクトリ
http://example.com/~refirio/ のようなURLを使えるようにする # vi /etc/httpd/conf/httpd.conf … httpdの設定ファイルを編集
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disabled UserDir enabled … enabledに変更 (Apache再起動時に「UserDir "enable" keyword requires」のエラーなるようなら、コメントアウトする) # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disabled" line above, and uncomment # the following line instead: # #UserDir public_html UserDir "/home/*/public_html" … ユーザディレクトリの場所を設定 </IfModule>
# service httpd restart … Apacheを再起動 httpd を停止中: [ OK ] httpd を起動中: [ OK ] 上の場合、/home/refirio/public_html/index.html には /~refirio/ でアクセスできるようになる 参考:ApacheでUserDir公開の、メモ書き http://qiita.com/ms2sato/items/299278b2492c96cb80ae
■favicon.icoの404エラーを記録させない
favicon.icoを設置しない場合でaccess_logにfavicon.icoの404エラーを記録させたくない場合、 /etc/httpd/conf/httpd.conf に以下の設定を追加する SetEnvIf Request_URI "favicon\.ico" no_log error_log にも記録させたくない場合、以下の設定も追加する (404エラーを記録させないだけなら、ErrorDocumentなしでも十分かも?要確認) Redirect 404 /favicon.ico ErrorDocument 404 "File Not Found" 参考:【Apache】favicon.icoをログに出さない! http://dblog3024.blog.fc2.com/blog-entry-2.html 参考:Apache > favicon.icoをエラーログに残さず、ファイルIOも発生させない方法 http://d.hatena.ne.jp/tama0905/20110820/1313824404
■rsync(一方向同期)
※web1サーバの /var/www/html/rsync の内容を、web2サーバの /var/www/html/rsync に同期 参考:rsyncとlsyncdでEC2サーバーを同期する http://qiita.com/katsukii/items/5c2cbd8f69ffd7cb213f 参考:ポートや鍵のファイルを指定 http://ikm.hatenablog.jp/entry/2013/05/27/140336 ■同期元サーバ:キーを作成 ※rootユーザ、保存先はデフォルトのまま、パスワードなしで作成する場合 # ssh-keygen -t rsa # cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA 〜略〜 93ciNXZFZSlzXfqfZwD/7809G7 root@web1.refirio.net ■同期先サーバ:ユーザを作成 ※rsyncが配置したファイルだと分かるように、同期用にrsyncユーザを作成する場合 # useradd rsync # usermod -G wheel rsync # usermod -a -G apache rsync # visudo
# %wheel ALL=(ALL) ALL %wheel ALL=(ALL) ALL … コメント解除していなければ解除
■同期先サーバ:キーの設定 ※同期用ユーザが接続できるようにする # mkdir -p /home/rsync/.ssh … 公開鍵格納用ディレクトリを作成 # chmod 700 /home/rsync/.ssh … 公開鍵格納用ディレクトリのパーミッションを変更 # vi /home/rsync/.ssh/authorized_keys … 公開鍵をauthorized_keysに保存
ssh-rsa xxxxxxxxxx … 作成した公開鍵の内容を全てコピーして貼り付ける
# chmod 600 /home/rsync/.ssh/authorized_keys … authorized_keysのパーミッションを変更 # chown -R rsync:rsync /home/rsync … ユーザディレクトリの所有者を変更 ■同期元サーバ:接続確認 同期元サーバから同期先サーバへSSH接続を確認 接続できなければ、鍵ファイルやや上位ディレクトリの所有者とパーミッションを確認する (rsyncユーザから読み込めるようにする) # ssh -p 10022 rsync@10.0.1.17 ■同期元サーバ:lsyncdインストール # yum install --enablerepo=epel lsyncd 以下でrsyncコマンドの動作を確認できる # rsync -e "ssh -p 10022" -avz --delete /var/www/html/rsync rsync@10.0.1.17:/var/www/html ■同期元サーバ:自動同期設定 # vi /etc/lsyncd.conf
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.stat", maxProcesses = 2, statusInterval = 1, insist = 1 } sync { default.rsync, source = "/var/www/html/rsync", target = "rsync@10.0.1.17:/var/www/html/rsync", delay = 2, exclude = { "*.swp" }, rsync = { archive = true, compress = false, rsh = "ssh -p 10022" } }
# service lsyncd start … lsyncdを起動 # chkconfig --add lsyncd # chkconfig lsyncd on … lsyncdの自動起動を設定 ■同期元サーバ:動作確認 # tail /var/log/lsyncd/lsyncd.log … 同期されるたびにログが記録される 何も記録されていない場合、以下で設定ファイルの文法チェックをするといい # lsyncd -nodaemon -log scarce /etc/lsyncd.conf 以下で指定したファイルは、環境によってはあらかじめ作成しておく必要があるかも? logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.stat", 参考:lsyncdでサーバ間のファイルを双方向に同期させる https://2017.l2tp.org/archives/314 以下のようなエラーが表示される場合、ディレクトリやファイルのパーミッションを確認する 直上のディレクトリのパーミッションが大丈夫でも、さらに上位のディレクトリのパーミッションも影響する rsync: ERROR: cannot stat destination "/home/centos/html": Permission denied (13) rsync error: errors selecting input/output files, dirs (code 3) at main.c(565) [Receiver=3.0.9] rsync: connection unexpectedly closed (9 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9] 今回の場合、以下のように「centos」のパーミッションが原因で同期できなかった 「chmod 0775 centos」とすれば同期できるようになった(アクセスをグループで制御しているものとする) パーミッション最後のピリオドは、SELinuxに由来するもので関係ない # cd /home # ll 合計 0 drwx------. 3 centos centos 133 12月 5 15:34 centos drwx------ 3 rsync rsync 95 12月 2 21:46 rsync
■rsync(双方向同期)
※web1サーバとweb2サーバの /var/www/html/rsync が双方向に同期したい場合、 「rsync(一方向同期)」の設定を、同期元と同期先を逆にして追加設定する ※ただしそれだけだと、意図しないファイルの削除や復元が発生する場合がある 以下の設定を追加することで対応する ※ロードバランサー経由でアクセスしている際に、同期されるまでのタイムラグが問題になる場合、 スティッキーセッションを使うなどしてアクセスされるサーバを固定するといい 参考:lsyncdで双方向同期するなら、delete='running' がいい http://iga-ninja.hatenablog.com/entry/2015/02/28/230014 参考:rsyncとlsyncdを使ったディレクトリの双方向同期 http://qiita.com/kaihei777/items/5bb4f381c6b4c31be055 参考:lsyncdでサーバ間ファイルを同期をさせてみた https://www.didgedil.li/2016/07/17/lsyncd/ # vi /etc/lsyncd.conf
sync { default.rsync, source = "/var/www/html/rsync", target = "rsync@10.0.1.17:/var/www/html/rsync", delay = 2, delete = "running", … 追加(意図しないファイルの削除を避ける) init = false, … 追加(意図しないファイルの復元を避ける) exclude = { "*.swp" }, rsync = { archive = true, compress = false, rsh = "ssh -p 10022" } }
# service lsyncd restart … lsyncdを再起動 ※rsyncに「owner = true」「group = true」を設定すると所有者を含めて複製されるらしいが、反映されなかった 「同じグループのユーザからはファイルの読み書きを許可する」のような指定ができないことになり、これだと問題がある 仮に「web-userでアップロード&web-userで同期」としても PHPが作成したファイルやディレクトリは所有者apacheとなり、同期によってやはり所有者が変わることになる 同期はrsyncユーザで行い、「FTPでアップロードするのはweb1のみで、web2には原則としてアップロードしない」なら運用できるかも ※上の解決策。前提として所有者は含めない方が、アップロードされたファイルなのか同期されたファイルなのかが明確になって良さそう 代わりに chmod g+s /var/www/html/rsync として、rsyncディレクトリ内で作成されたファイル・ディレクトリのグループを親ディレクトリのグループに合わせると良さそう そうすればファイルの読み書きに支障はなくなるし、アップロードされたのか同期されたのかも明確になる
■cronの結果を任意のログファイルに記録
*/1 * * * * apache /usr/bin/php /var/www/html/cron/test.php >> /var/www/html/cron/cron.log 2>&1 参考:[Server & Network] Crontab: スクリプトを定期的に実行しログを残す http://www.d-wood.com/blog/2013/09/16_4644.html 参考:cron で > /dev/null して椅子を投げられないための3つの方法 http://sfujiwara.hatenablog.com/entry/20120613/1339547638 ※cronのログを/dev/nullに捨てるのは、バッドノウハウなので原則として行わない
■cronを15秒ごとに実行する
* * * * * /var/www/html/cron/test.php & sleep 15; /var/www/html/cron/test.php & sleep 15; /var/www/html/cron/test.php & sleep 15; /var/www/html/cron/test.php ※よほどのことがなければ、1分ごとで問題ないはず
■メールのキューを削除する
メールを正しく送信できなかった場合、 /var/spool/clientmqueue/ ... MSPモード(MTAを使わないメール送信)の場合 /var/spool/mqueue/ ... MTAの場合 に一時的に貯められる ここに大量のメールが溜まってしまった場合、送信してしまうかファイルを削除してしまうかになる 削除する場合、以下のコマンドを実行する rm -f /var/spool/clientmqueue/* rm -f /var/spool/mqueue/* 参考:clientmqueueディレクトリ以下に吐き出される大量ファイルの対処法 http://ameblo.jp/itboy/entry-10024985559.html 参考:MSP(メール配信プログラム)モードで実行する http://seesaawiki.jp/w/engineernochiebukuro/d/MSP%A1%CA%A5%E1%A1%BC%A5%EB%C7%DB%BF%AE%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%A1%CB%A5%E2%A1%BC%A5%C9%A4%C7%BC%C2%B9%D4%A4%B9%A4%EB
■root宛のメールを削除する
cat /dev/null > /var/spool/mail/root 参考:新しいメールが /var/spool/mail/root にありますを停止する方法 https://genchan.net/server/9970 参考:気付いたらrootメールが溢れてる http://multix.jp/rootmail-overflow/ 参考:/var/spool/mail/rootを削除する https://cloudpack.media/1024
■MySQLのデータベース文字コード
utf8_unicode_ciではなく、utf8_general_ciにしておくのが無難 参考:MySQLのutf8_general_ciとutf8_unicode_ciの違い http://program.sagasite.info/wiki/index.php?MySQL%E3%81%AEutf8_general_ci%E3%81%A8utf8_unicode_ci%E3%81%AE%E9%81%95%E3%81%84 参考:utf8_unicode_ci に対する日本の開発者の見解 http://blog.kamipo.net/entry/2015/03/08/145045 参考:MySQLの照合順序 http://qiita.com/Vit-Symty/items/159c27d7d62c78ee9ce7 ※今はutf8だけでなく、utf8mb4についても検討する
■PostgreSQLでEUC_JPのデータベースを作成
psql -l … データベースの文字コードを確認 dropdb test … 一旦testデータベースを削除する場合 createdb -E EUC_JP --locale=ja_JP.EUC_JP test --template=template0 … 文字コードを指定してtestデータベースを作成 参考:PostgreSQLのinitdbと違うロケールでDB作成 http://wsjp.blogspot.jp/2012/04/postgresqlinitdbdb.html 参考:PostgreSQLエラー「createdb: データベースの生成に失敗しました: ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません」の原因と解決方法 http://nobuneko.com/blog/archives/2011/10/postgresqlcreatedb_error_euc_j.html 以下、「他にこのデータベースを使っている 1 個のセッションがあります。」のように表示された場合の対象方法 アクセスしているユーザを調べて強制的に追い出す psql test … testデータベースに接続 SELECT * FROM pg_stat_activity; … アクセスしているユーザを調べる SELECT pg_terminate_backend(567) FROM pg_stat_activity WHERE usename = 'usename'; … procidとusernameを指定して追い出す \q … ログアウト 具体例 SELECT pg_terminate_backend(7960) FROM pg_stat_activity WHERE usename = 'postgres'; SELECT pg_terminate_backend(5484) FROM pg_stat_activity WHERE usename = 'postgres'; SELECT pg_terminate_backend(7404) FROM pg_stat_activity WHERE usename = 'postgres'; 「WHERE usename = 'postgres'」は無くても大丈夫かも? 参考 http://blog.kter.jp/?cat=80
■SSIを使用する
拡張子 .shtml でSSIを有効にする場合、httpd.conf か .htaccess に以下の内容を追加 Options +Includes AddType text/html shtml AddHandler server-parsed shtml 拡張子 .html でもSSIを有効にする場合、AddHandler の行を以下のように変更 AddHandler server-parsed html shtml
■処理の進捗を表示
Linux環境なら、pvをインストールしておくと便利そう 参考:MySQL インポートの進捗表示 - Qiita http://qiita.com/hiroq/items/efd8c3580c9c9457c869 参考:Linuxメモ : パイプ処理の進捗を表示するpv(Pipe Viewer)の使い方 - もた日記 http://wonderwall.hatenablog.com/entry/2017/08/03/072500
■接続元引越時のTODO
アクセス制限用のIPアドレスを調整する。以下などは要確認 ・/etc/sysconfig/iptables ・/etc/hosts.deny ・/etc/hosts.allow ・その他 httpd.conf や .htaccess など
■システム障害対策
障害対策の資料では、以下のような略語が使われることがある S/W ... SoftWare ソフトウェア H/W ... HardWare ハードウェア N/W ... NetWork ネットワーク I/F ... InterFace インターフェース I/O ... Input/Output 入出力 C/S ... Client/Server クライアントサーバシステム
■独自ドメインを設定する(ムームードメイン)
■WHOIS情報 情報公開 … 弊社情報代理公開 ■ネームサーバ設定変更 サービス … ムームーDNS ムームーDNSセットアップ ネームサーバ1 … dns01.muumuu-domain.com ネームサーバ2 … dns02.muumuu-domain.com ■ムームーDNSのセットアップ情報(カスタム設定) No サブドメイン 種別 内容 優先度 1 A 153.121.33.84 2 www A 153.121.33.84
■コントロールパネルからリモートコンソールを使う(さくらの専用サーバ)
リモートコンソールを実行できない場合Javaのセキュリティが影響している可能性がある Windowsのコントロールパネルから「Java」を選択し、 「セキュリティ」タブの「例外サイト・リスト」に以下のURLを追加する (契約者によってURLが違う可能性があるので要確認。) http://ds-proxy30-u.sakura.ne.jp
■OS再インストール(さくらのVPS)
参考:OS再インストール https://help.sakura.ad.jp/app/answers/detail/a_id/2408