さくらのクラウドでCentOS7を導入したメモ - その2
IPアドレスの設定(ローカルスイッチ)
ip addr vi /etc/sysconfig/network-scripts/ifcfg-eth1
eth1の設定がなかったので追加
DEVICE=eth1 BOOTPROTO=static DEVICE=eth1 BOOTPROTO=static ONBOOT=yes GATEWAY=192.168.0.1 PREFIX=24 IPADDR=192.168.0.<*>
設定の反映と確認
systemctl restart NetworkManager systemctl restart network nmcli d
phpのインストールと設定
yum install -y epel-release rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum install -y --enablerepo=remi-php74 php php-fpm php-mysql php-pgsql httpd-tools php-curl php-dom php-gd php-pecl-imagick php-zip php-mbstring php-openssl php-xml unzip ipa-gothic-fonts ipa-pgothic-fonts fontconfig systemctl enable php-fpm systemctl start php-fpm mkdir /run/php vi /etc/php-fpm.d/www.conf
以下変更
user = nginx group = nginx listen = /run/php/php7.4-fpm.sock listen.owner = www listen.group = www
ソースコンパイルのnginxだとlistenが違ってるが、yumで構築した環境からの移行なので、パスを揃える。起動時に /run/php
が作られるように設定。
vi /etc/tmpfiles.d/php-fpm.conf
以下を記述。
d /run/php 0755 www www
yumの設定をそのままコピー
mkdir /etc/nginx/conf/snippets vi /etc/nginx/conf/snippets/fastcgi-php.conf
phpの設定をコピペ
# regex to split $uri to $fastcgi_script_name and $fastcgi_path fastcgi_split_path_info ^(.+?\.php)(/.*)$; # Check that the PHP script exists before passing it try_files $fastcgi_script_name =404; # Bypass the fact that try_files resets $fastcgi_path_info # see: http://trac.nginx.org/nginx/ticket/321 set $path_info $fastcgi_path_info; fastcgi_param PATH_INFO $path_info; fastcgi_index index.php; include fastcgi.conf;
Let's Encryptのインストールと設定
yum -y install certbot
旧サーバーから /etc/letsencrypt
ディレクトリ以下一式持ってくる。
*自動更新のcronはサイト移転終わってからやる。
nginxの設定
ユーザーの追加
useradd -s /sbin/nologin www passwd www mkdir /var/www chown -R www:www /var/www mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled cd /etc/nginx cp conf/nginx.conf conf/nginx.conf.org vi conf/nginx.conf
追記、変更
user www; worker_processes auto; http { server_tokens off; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
htpasswd -c /etc/nginx/.htpasswd username
nginxとphp-fpm再起動
systemctl restart nginx systemctl restart php-fpm
composerインストール
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" mv composer.phar /usr/local/bin/composer
さくらのクラウドでCentOS7を導入したメモ - その1
ログインユーザーの追加とSSHの設定
ユーザーの追加
useradd <username> passwd <username> usermod -G wheel <username>
SSHの設定
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org vi /etc/ssh/sshd_config
以下の部分をnoに変更
PermitRootLogin no PasswordAuthentication no
保存したら
systemctl restart sshd su - <username>
ここからログインユーザー側
mkdir .ssh chmod 700 .ssh vi ~/.ssh/authorized_keys
認証キー追加したら
chmod 600 ~/.ssh/authorized_keys
SiteGuardの導入
さくらのVPS、さくらのクラウドではSiteGuardが無償提供されています。スタートアップスクリプトが残念ながらApacheバージョンでしたので手動で導入。
cd /usr/local/src curl -OL <SiteGuard Server Edition のインストールファイル> tar -zxvf siteguard-server-edition-*****.tar.gz cd siteguard-server-edition-**** make install
SiteGuardのプラグインを導入するため、nginxはソースからコンパイルする必要があります。 ここ注意。あと、、、めんどくさい。
必要なライブラリを入れてきます。詳しく調べてないけど、OpenSSLは1.1.1を入れた方がよさそうだったのでソースからコンパイル。
yum install -y zlib-devel pcre-devel apr-devel apr-util-devel java-1.8.0-openjdk cd /usr/local/src curl -OL https://www.openssl.org/source/openssl-1.1.1j.tar.gz tar -zxvf openssl-1.1.1j.tar.gz ./config --prefix=/usr/local/openssl-1.1.1 shared zlib make depend make make install vi /etc/ld.so.conf.d/openssl-1.1.1.conf
以下を追加
/usr/local/openssl-1.1.1/lib
保存して反映。
ldconfig
ようやくnginxをインストール
cd /usr/local/src curl -OL http://nginx.org/download/nginx-1.18.0.tar.gz tar -zxvf nginx-1.18.0.tar.gz cd nginx-1.18.0 ./configure --add-module=/opt/jp-secure/siteguardlite/nginx --with-http_ssl_module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --with-openssl=/usr/local/src/openssl-1.1.1j make make install
systemdの設定
vi /usr/lib/systemd/system/nginx.service
以下を記述。
[Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/etc/nginx/logs/nginx.pid ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/conf/nginx.conf ExecStart=/usr/sbin/nginx -c /etc/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target
登録、自動起動
systemctl start nginx systemctl enable nginx
これで最後、SiteGuardのセットアップ。
cd /opt/jp-secure/siteguardlite/ ./setup.sh
ファイヤーウォールの設定をすれば終了。
firewall-cmd --list-all firewall-cmd --add-service=http --zone=public --permanent firewall-cmd --add-service=https --zone=public --permanent firewall-cmd --add-port=9443/tcp --zone=public --permanent firewall-cmd --reload
僕が考えた最強の文字コード設定
エンコードと関係ない設定もあるけどこれ。pnp.iniで設定したいんですが、サーバー側の設定でできなかったりするのでとりあえずこれを持っとくと安心。
gist7f513df2a9e05b98ce992abc468618d1
ⅰ
とか ①
とか機種依存文字が超辛かった(eucJP-win -> UTF-8)けど、これでなんとか乗り越えられそう。5年以上のつらみがこれで乗り越えられたら良いのだけど。。。
楽天Goldの常時SSL化対応が面倒なのでスクリプト書いた
突然お客様から電話。楽天から電話があって、どうしていいのかわからないのでお願い、とのこと。内容はこう。
「2017年の6月末だかいつだかわかんないですけど、ともかく 常時SSL化 します、対応しないと 表示できなくなりますよ って脅されました。」
脅されてるかどうかは別として超めんどくさいな、ってのは想像がつく。商品ページの方は、楽天から紹介されたWEBサービスで対応できたみたいだけど、楽天GOLDへアップしたhtmlファイルのリンクを変更しないといけないらしい。ただ、ラッキーなことに楽天GOLDにアップしてるhtmlファイル内のリンクはほとんど楽天ドメインばかり。じゃあもう単純に http://
を https://
でよいのでは?ってことで済ませちゃった。なので、もしかすると需要は少ないかもしれませんが、誰かの役に立てば。
使い方
composer使える前提です。なので普段楽天の商品ページいじったりしてるだけの人には少々ハードル高いかも。
git clone https://github.com/comeonly/rakuten_gold_ssl compose install
でインストール。
あとは、スクリプトを実行するだけ。
php run.php <ftp_username> <ftp_password>
ってな感じで引数にftpのユーザー名とパスワードを入れてください。直接FTPで接続してhtmlファイルを再帰的に検索しながら文字列置き換えして、ファイルを上書き保存してくれます。
で、実際どのリンクが置き換えられるかわからないことが起こりそうなので、ドライランのオプションも付けました。
php run.php <ftp_username> <ftp_password> dry
これで対象リンクとそのファイルの有るパスが一覧で表示されます。これを元に手動でやるっててもなくもないです。
中身どうなってんの?
touki/ftpってライブラリをpackagistで見つけたので使わせて頂きました。昔にこんな記事を書いて自力でFTPを操作しようとしたことがありましたが、ライブラリ使ったほうが安心できます。この頃はライブラリという言葉すらよくわかってなかったんで、若気の至りです。
で、実際の処理ですがこんな感じ。
- FTP接続する
- ディレクトリ内のファイルを検索する
- ファイル名を
/(.html|.htm)$/
って感じで正規表現で調べる - 見つかったら
str_replace
で単純にhttp://
をhttps://
に置き換え - ファイルをその内容で上書きする
- カレントディレクトリのディレクトリ一覧を取得する
- 2.に戻って再帰的にじゃんじゃんやっつけていく
とまあ超単純なスクリプトです。FTPって再帰的な処理ができないのでこういうライブラリつかって一覧を簡単に取得できると楽で良いですね。
アディオス!
ComposerとPagoda Boxで今どきなDeployしたらモテ期到来で彼女が出来ました
うそです。
JAWS FESTA Kansai 2013へ行って来たんですが、関西PHP勉強会でAWSと関係のないものを習得してきましたよwという話。 大きくは2点で、@omoonさんのSaaSの話。HerokuなどのSaaS全盛期の中、PHPのSasSであるPagoda Boxなるものがあるらしい。ってのと@slywalkerさんのComposerの話。これも今流行のパッケージ管理の話でJSなどのフロントエンドパッケージ管理ツールのBOWERなんかがありますが、PHPならComposerでしょ!?ってことで。
当日のスライド一覧
- Dive into the Cloud with our buddy, lovely PHP! @omoon
- AWS SDK for PHPをインストールするならComposerでしょ!@slywalker
- いまどきのPHP@shin1x1
用意するもの
必須
- Git
あると便利
今回は手元のGitをdeployするだけなので、Clientからの操作で説明します。Webからの処理が意外と不便だったってのもありますが。。。
Demo
自分と言えばヤフオク、ヤフオクといえば俺、みたいなところがあるので、ヤフオクネタで作ってみました。開くとYConnect(Yahoo! Japan oauth2.0)で認証取りに行って、出品中一覧を表示します。
読み込みにやたらと時間がかかるのだけど、YConnectにいきなり接続しに行くからかな?この辺課題だなぁ。
作業手順
1) てきとーにプロジェクトを作る
Demoそのまま使うのであればgithubにpagodabox
branchで置いたのでそれをクローン。
➜ ~ git clone -b pagodabox https://github.com/comeonly/YConnectDemo.git
2) Pagoda BoxのSSH設定をする(初回のみ)
ここ参照 Pagoda Box Portal | Deploy and Scale PHP Apps Setting Up Git - Mac
3) Pagoda BoxでNew Appする
➜ ~ cd YConnectDemo ➜ YConnectDemo git:(pagodabox) pagoda create
*Webの管理画面からの場合は別途git
のremote
を設定する必要あり
ここ参照
➜ YConnectDemo git:(pagodabox) git remote add pagoda git@git.pagodabox.com:yconnect-demo.git
4) Deployする
➜ YConnectDemo git:(pagodabox) pagoda deploy
Helpの記事にはpagoda deploy -b [brandch neme]
的なことを書いていますが、そんなオプションないよと言われますし、pagoda deploy -h
でもこんなのしかでません。
➜ ~ pagoda deploy -h Usage: pagoda [options] -a, --app VAL
deployしたいbranchにいれば、そのbranchでdeployされる仕様みたいです。
勘所
「そんなBoxfileで大丈夫か?」
Boxfileの設定がさっぱりわかんなくてかなりハマった。
web1: name: yconnect-demo #app名(無くても良いっぽい) shared_writable_dirs: #書き込み可能なディレクトリ - tmp php_extensions: #PHPの設定 - curl #composerインストールするのとOauthに必要 - zip #composerでパッケージを開くのに必要 - intl #composerに必要っぽい after_build: #サーバーのビルドが終わったあと実行する(bash) #composerのダウンロード - "curl -sS https://getcomposer.org/installer | php" #composerのインストール - "php composer.phar install" #opauthのyconnect用pluginのファイル名修正 - "mv vendor/opauth/yahoojp/YahoojpStrategy.php vendor/opauth/yahoojp/yahoojpStrategy.php"
enjoy it !!!!
MovableType 4.27からWordpressへ移行したメモ
なんでこんなこと書くかというと、ツール -> インポート
にある標準のプラグインだと動かなかったから。
あと、リダイレクト これが意外と大変でした。
使ったプラグイン
こいつらです。
- Movable Type Backup Importer
- Automatic Post Thumbnail at SANIsoft
- Redirection – Manage 301 redirections without modifying Apache
上記のプラグイン入れれば手順書いてあるので以下は読み飛ばし可です
1. MTのバックアップ
該当のブログから ツール -> バックアップ
でバックアップ
2. WPへプラグインのインストール
こいつ。 Movable Type Backup Importer
3. 指定のフォルダへアップロード
プラグインを適用したら指定されるんでそれの通りにすればおk。
4. あとはプラグインの指示通りでおk
あー、書くのめんどくさくなってしまったよ。
サムネイルが適用されない。。。
100%では無いけど、このプラグインで何とかなりました。
Automatic Post Thumbnail at SANIsoft
記事内の画像を消すなら、SQLで一括消したらいいんじゃないかな?やってないのでわからんけど。まあ最悪スクリプト組んじゃえ。
需要あれば重い腰をあげるかも。そんときゃコメント下さい。
リダイレクト
Redirection – Manage 301 redirections without modifying Apache
このプラグイン、無茶苦茶使える!!301リダイレクトとかしてくれるから超助かる。
例えば /hoge.html
を /hoge
へ飛ばすには
正規表現にチェック
ソースURL /(.*).html?$
ターゲットURL /$1/
といった感じ。
あと、Movable Type Backup Importer使うと、post-3
が post_3
とかになることがあるので、これも設定する。
正規表現にチェック
ソースURL /-(.*)$
ターゲットURL /_$1/
みたいな。
あとはよしなに。。。
PHPカンファレンス関西2013へ行ってきた
でまあそこで Debugging and Profiling PHP てタイトルで 楽天のGraham Weldon氏がセッションされてたわけです。 すごい良い話だったのでまとめたいなぁ、と思ったんですが、どうも時間が取れないし、温度が下がってきちゃうので、備忘録だけ。あと、プロファイリングについても話されたたのですが、それはパスしてデバッグの話だけ。
デバッグについて
X-debug
使ってるよね?
はい。phpcs
で入れろと言われたので入れました。
んじゃ、デバッグに
var_dump
とか使うな。
え?マジですか?それしか無いと思ってましたよ。
MacならCodebugがGUIで出来るからオススメ
(もうひとつアプリをおっしゃったんですが失念。。。)
設定方法
で、このあと設定方法なんかを解説されてたんですが、
- X-debug入れる
- Chrome Xdebug helper入れる
これが超楽だったのでこれにしました。
一応Codebug入れてみたんすけど、どうもvimmerな自分にはしっくり来ないので、探してみると、、、
Vim + Vdebug + Xdebug でPHPのリモートデバッグ | Code Life
こんな記事を見つけたので、もうあとはこっち見てもらえばいいやってんで終わります。
なにが良いの?
上記のブログでも書かれてますが、「なんでデバッグするのにコード書くんだ?」に尽きます。消し忘れるし、コード見にくいし。
僕なんかよくあるパターンですが、var_dump($hoge)
したけど原因はそこじゃなくてvar_dump($fuga)
だった場合。時間の無駄だなぁと。
ほかにも利点はたくさんだと思います。
おまけ
CakePHPでもおなじみの(多分このアイコン見たことあるはず)markstory (Mark Story)氏もブログに書かれてました。 Remote debugging with vim and xdebug | Mark Story
ってことで、これだけでも行った価値がかなりあったぞPHPカンファレンス関西2013、と。
あ、あと Graham Weldon 氏はかなり温和な感じの話し方の人だったので、上記のような強い語調ではないです。すげーやさしそうな人でした。