サーバー設定


さくらVPSのphpにcomposerを導入

composer が導入されているか

 

composer が利用できないことを確認
----------------------------------------
composer --version
-bash: composer: コマンドが見つかりません
----------------------------------------

 

composer をどこのディレクトリにダウンロードしてどこにインストールするべきか確認した結果、特に決まりはなく任意のディレクトリでよさそうだ。ただ、プロジェクトだけで必要か、システム全体で使えるようにしたいのかでインストールの実行ディレクトリを決めればいいという意見も多くあった。

自分はさくらVPS の環境でグローバルで使えたほうが便利と考えたのでファイルのダウンロード先を ルートディレクトリ(/root)と決めた

 

root になってホームディレクトリ(/root)でコマンドを実行
-----------------------------------------------------------------------
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
-----------------------------------------------------------------------

すると /root に composer-setup.php がダウンロードされる

 

次のコマンドでファイルに問題がないか確認
-----------------------------------------------------------------------
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
-----------------------------------------------------------------------
Installer verified と出たらOK

セットアップを実行
-----------------------------------------------------------------------
php composer-setup.php
-----------------------------------------------------------------------

この状態でカレントディレクトリであるルートディレクトリ(/root)を確認すると composer 関連の二つのファイルが確認できる
-----------------------------------------------------------------------
composer-setup.php composer.phar
-----------------------------------------------------------------------

composer-setup.php はもういらないので削除
-----------------------------------------------------------------------
php -r "unlink('composer-setup.php');"
-----------------------------------------------------------------------

パスを通すために composer.phar を /usr/local/bin/composer に移動
-----------------------------------------------------------------------
mv composer.phar /usr/local/bin/composer
-----------------------------------------------------------------------

composer は root で実行しないように推奨されているのでユーザーを変更。
-----------------------------------------------------------------------
su - ユーザー名
-----------------------------------------------------------------------
参考:rootユーザでcomposerコマンドを実行してはダメな理由

https://akamist.com/blog/archives/261

 

composer が利用できることを確認
--------------------------------------------------------------------------------
composer
--------------------------------------------------------------------------------

 

実際に利用するには composer.json ファイルが必要

適当なディレクトに移動、もしくは作る。自分は /var 直下に作った。

カレントディレクトリに composer.json をつくる。
-q で対話形式の入力を行わない
--------------------------------------------------
composer init -q
--------------------------------------------------

インストール参考

https://technoledge.net/composer-install-and-use/

https://laboradian.com/php-composer/

https://qiita.com/inakadegaebal/items/d370bcb1627fce2b5cd1

https://weblabo.oscasierra.net/php-composer-centos-install/

composerディレクトリ構成

http://tadasy.hateblo.jp/entry/2013/10/09/193415

【さくらのVPS】mb_send_mail でメールが送れない

php の mb_send_mail 関数で一部のメールが送れない。
yahoo メール宛てには送れるのに、独自メールが送れない。

--------------------------------------------------
環境
送信元:さくらのVPS WEBサーバーより mb_send_mail を利用
--------------------------------------------------

mb_send_mail 関数自体はエラーを吐かず、正常に終了する。

ターミナルでメールエラーを確認
--------------------------------------------------
cd /var/log/maillog
--------------------------------------------------

エラーっぽい箇所の抜粋
--------------------------------------------------
May 29 12:14:51 localhost postfix/smtp[32237]: 70ED82C028C: to=, relay=○○.sakura.ne.jp[49.212.235.97]:25, delay=0.08, delays=0.02/0/0.04/0.02, dsn=5.1.8, status=bounced (host ○○.sakura.ne.jp[49.212.235.97] said: 553 5.1.8 ... Domain of sender address apache@localhost.localdomain does not exist (in reply to MAIL FROM command))
--------------------------------------------------

検索して見つけた対処法
設定してなかった mb_send_mail 第五引数に "-fプロバイダメールアドレス" を指定。
第五引数はエラーがあった場合にメールを送信するメールアドレス。
これで送信できるようになった。

ちなみに別で契約しているもう一つのさくらVPSでは 第五引数がなくても送信できている。サーバーの設定を変えることでも問題解決できそうだ。

参考

https://okwave.jp/qa/q4822148.html

https://b-risk.jp/blog/2013/01/php_mb_send_mail/

追記
ezweb を使っている方から仮登録メールが届かないという連絡が問い合わせフォームからあった。

SPF の設定が何のが原因か?

----------------------------------------
"v=spf1 +ip4:web公開サーバーのipアドレス +mx ~all"
----------------------------------------

参考

https://qiita.com/ryounagaoka/items/931081c74b5c7a9b2bff

spfの確認

http://mxtoolbox.com/spf.aspx

追記2
gmail 宛てに送ったら迷惑メールに振り分けられたら

gmail から メールヘッダーを確認。

Received-SPF の部分が softfail になっていたらそれが原因。
ip6 対応のサーバーから送信した場合、SPF の設定に ip6 を追加する必要がある。

参考

https://www.nalabo.net/blog/2013/06/18/148

Let'sEncryptの更新設定

let's encrypt の導入はこちら

Let'sEncrypt の有効期限は 90日。有効期限が切れる前に自動更新するように設定する必要がある。

certbot-auto の場所を確認
--------------------------------------
find -name certbot-auto
--------------------------------------

場所はここだった
--------------------------------------
./certbot-auto
--------------------------------------

更新コマンド
--------------------------------------
sudo ./certbot-auto renew --post-hook "sudo service httpd restart"
--------------------------------------

更新期間まえだと次のように出る。有効期限も確認できる
--------------------------------------
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem expires on 2018-10-23 (skipped)
No renewals were attempted.
No hooks were run.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--------------------------------------

強制的に更新するなら次のコマンド
--------------------------------------
sudo ./certbot-auto renew --force-renew --post-hook "sudo service httpd restart"
--------------------------------------

cronへの登録

certbot-auto の場所を調べる
--------------------------------------
find -name certbot-auto
--------------------------------------

シェルスクリプトを用意
--------------------------------------
#!/bin/sh

# #!で始まる一行目の記述はインタプリタの指定
# シェルスクリプトの最初に書くおまじない

# Let's Encrypt 証明書の更新
sudo /root/certbot-auto renew --post-hook "sudo service httpd restart"
--------------------------------------

毎週月曜日に実行
--------------------------------------
2 3 * * * /var/myshellscript/backupmysql.sh
--------------------------------------

有効期間の残りが30日未満の証明書のみ更新される。

サイトのssl化の手順

サイトのssl化の手順 覚書

let's encrypt の更新はこちら

さくらのレンタルサーバー かつ wordpress 利用の場合

-----------------------------------------------------------------------------------------

1.さくらのサーバーコントロールから無料SSL証明書を発行

2.Really Simple SSL をインストールして実行

さくらインターネット提供のプラグインも存在するが php のバージョンが違ったので Really Simple SSL をインストールした

参考サイト

https://zenlogic.jp/aossl/operation/wp-plugin/

3.google の Search Console と analytics の設定を変更する

https://candy.fun-net.biz/https-google-search-console-analytics/

-----------------------------------------------------------------------------------------

さくらのレンタルサーバー かつ wordpress でないの場合

-----------------------------------------------------------------------------------------
1さくらのレンタルサーバー wordpress でない場合

1.さくらのサーバーコントロールから無料SSL証明書を発行

2.CSS や 画像ファイル の URL を http → https に変更

SSL証明書を発行後に https のアドレスでページにアクセスすると表示はされるもののレイアウトが崩れる。このとき chrome のアドレスバーには鍵マークでなく「!」になっていた。原因は http CSS や画像ファイルを http で読み込んでいるのが原因なので https に書き換える。

3.htaccess で http → https の301リダイレクトを設定

htaccess に記述
---------------------------------------------------
RewriteEngine on
RewriteCond %{HTTPS} off //RewriteRuleが実行される条件。直後の RewriteRule のみが対象
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
---------------------------------------------------

4.google の Search Console と analytics の設定を変更する

https://candy.fun-net.biz/https-google-search-console-analytics/

-----------------------------------------------------------------------------------------

さくらのvpsの場合

基本的にここ↓を参考にする

https://knowledge.sakura.ad.jp/10534/

しかしリンク先の解説は CentOS7 を対象としているが、自分が利用しているのは CentOS6.9なのでちょいちょい違うので注意。

ファイアウォールのコマンドは CentOS6.9を利用しているので firewall-cmd ではなく iptables を使う。

iptables の起動状態を確認
-------------------------------------
/etc/init.d/iptables status
-------------------------------------

ssl で利用する 443 ポートが開いていることを確認
-------------------------------------
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
-------------------------------------

Let's Encrypt を利用するには Certbot を利用する必要があるのでインストール

コマンド
-------------------------------------
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto
-------------------------------------

その後指示に従う。

途中で、http でのアクセスを https にリダイレクトするか聞かれるが、手動(htaccess)でリダイレクトしたいので「1」を選択

-------------------------------------

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
-------------------------------------

インストールが完了したら httpd を再起動

-------------------------------------
service httpd start
-------------------------------------

https でアクセスできるか確認する

二つ契約しているさくらのVPSの片一方がうまく SSL化できなかった。

適用するドメインを選択するこの場面で現在利用してないドメインも選択したのが原因だと思われる。

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: one,example.com
1: two,example.com
1: three,example.com
1: four,example.com
1: five,example.com
1: six,example.com
1: seven,example.com
1: eight,example.com
-------------------------------------------------------------------------------

エラーが出てきちんと完了しない場合は、関連ファイルを全部消して再度実行するといい。
削除したファイル1
----------------------------------------------------
rm -rf /opt/eff.org/certbot
rm -rf /etc/letsencrypt
----------------------------------------------------

削除したファイル2
certbot-auto というファイルがいくつかのディレクトリ内にできているのですべて削除
探す場所
----------------------------------------------------
cd /opt/eff.org/
cd /etc/
cd /etc/httpd/conf.d/
----------------------------------------------------

不要ファイルをすべて削除したら再度実行。

コマンド
-------------------------------------
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto
-------------------------------------

自宅サーバーのインターネットがつながらなかった

自宅サーバーのインターネットがつながらなかった。

デフォルトゲートウェイに ping を打つと Destination Host Unreachable と返ってくる。

ルーターの電源を入れた直したらつながった。

自宅作業環境の覚書

現在の構成

作業PCのほか、固定IPを持った自宅サーバー

自宅サーバー

プロバイダー インターリンク(固定IP)
使用ルーター(192.168.11.1)IOデータ

その他作業PC

プロバイダー ニフティ
使用ルーター(192.168.11.1) BUFFALO

multis_1

画像元

【さくらVPS】php.ini の設定変更の覚書

さくらVPSでphpをインストールした際、別のサーバーでは出なかったエラーが出るようになった。
エラーを表示にした時の設定の覚書

初期設定でphpのエラー出力が非表示になっていたので表示するに変える
-------------------------------------------------
display_errors = Off
-------------------------------------------------
↓↓↓
-------------------------------------------------
display_errors = On
-------------------------------------------------

初期設定が↓のようになっていて「Notice: Undefined index」エラーが出るので変更
-------------------------------------------------
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
-------------------------------------------------

-------------------------------------------------
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
-------------------------------------------------

さくらのサブドメインを別のサーバーで使いたい

やりたいこと

現在、さくらレンタルサーバーAでドメインとサブドメイン一個を運用中。ドメイン自体はお名前.comで取得したもの。

これにサブドメインをもう一個追加したい。追加先は新しく契約したさくらレンタルサーバーB。

現在
-------------------------
ドメイン ← さくらレンサバAで運用中
サブドメイン ← さくらレンサバAで運用中
-------------------------

こうしたい
-------------------------
ドメイン ← さくらレンサバAで運用中
サブドメイン ← さくらレンサバAで運用中
新サブドメイン ← さくらレンサバBに追加
-------------------------

さくらレンサバBにサブドメインの設定をして、ドメイン取得元のお名前.comでDNS設定をする。

参考:サブドメインの設定方法メモ

しかし、設定が完了し時間をおいても一向にサブドメインにアクセスできない。IEでアクセスしても「見つかりません」エラーが返ってくる。Chormeでアクセスするとエラー内容の詳細が分かった。

エラー内容
----------------------------------------------------------
The requested URL /php.cgi/index.html was not found on this server.
----------------------------------------------------------

ようは、新しいサブドメインのルートフォルダにphp.cgiがなかったからで、コピーしたら動いた。

参考:さくらインターネットでPHPを.htmlで動かす.htaccessの設定方法

さくらのmysqlサーバーのサブドメインを指定した別サーバーからもログイン可能。(レンサバAのmysqlサーバーにレンサバBからログインができる)

RewriteRuleで同じ名前のフォルダから同じファイルへのリダイレクトができない

top.html というファイルに http://example.com/top/ というurlでアクセスするために、.htaccess に以下の記述をした。

---------------------------
RewriteEngine on
RewriteRule top/$ /top.php
---------------------------

しかしリダイレクトがされない。なぜか?
おそらく RewriteRule の「top/$」の部分は、そういう名前のファイルがないことを条件に指定したパスへリダイレクトを行うからだと思う。だから、top.php という名前のファイルが存在している状態で「RewriteRule top/$」と指定すると top.php というファイルがあるからリダイレクトにならない。(本当なら「top/」のパターンに top.php はマッチしないはずだが)

ひとつわかったこと
転送先のURLのディレクトリに .htaccess ファイルがあると転送後にさらにリダイレクトが実行されるのではまる!!

top.php ファイルがルートディレクトリにない状態だとリダイレクトできる。
ただ、ファイルがないので404エラーになる。
↓↓
---------------------------
RewriteEngine on
RewriteRule top/$ /top.php
---------------------------

top.php ファイルがルートディレクトリにある状態でも以下の書き方ならリダイレクトする。

---------------------------
RewriteEngine on
RewriteRule top/$ /toppage.php
---------------------------

OR

---------------------------
RewriteEngine on
RewriteRule tap/$ /top.php
---------------------------

RewriteRule はいまいちよく分からない。