最近便利だと思ってよく使うコマンドとか
すぐ忘れるので備忘録
コマンドの実行結果を一時ファイルを作成せずにdiffる
[root@v8794 nginx]# diff -u nginx.conf <(sed 's/kame/hoge/g' nginx.conf) --- nginx.conf 2016-01-17 18:04:41.000000000 +0900 +++ /dev/fd/63 2016-01-23 00:43:56.601767533 +0900 @@ -9,17 +9,17 @@ keepalive_timeout 65; server { listen 80; - server_name kame.photos; + server_name hoge.photos; location / { - root /var/www/kame; + root /var/www/hoge; index index.php; } location ~ \.php$ { - root /var/www/kame; + root /var/www/hoge; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /var/www/kame$fastcgi_script_name; + fastcgi_param SCRIPT_FILENAME /var/www/hoge$fastcgi_script_name; include fastcgi_params; } @@ -31,19 +31,19 @@ ssl_protocols TLSv1.2; #ssl_session_timeout 5m; - ssl_certificate /etc/letsencrypt/live/kame.photos/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/kame.photos/privkey.pem; + ssl_certificate /etc/letsencrypt/live/hoge.photos/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/hoge.photos/privkey.pem; location / { - root /var/www/kame; + root /var/www/hoge; index index.php; } location ~ \.php$ { - root /var/www/kame; + root /var/www/hoge; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /var/www/kame$fastcgi_script_name; + fastcgi_param SCRIPT_FILENAME /var/www/hoge$fastcgi_script_name; include fastcgi_params; }
<( command )
の結果に /dev/fd/63
とファイルディスクリプタが割り当てられている
↑を応用して、find&replaceの確認
たとえば、あるディレクトリ以下のphpでおわるファイルの中身を wp
-> KAME
に変更する際に、想定のファイルが想定の部分だけ変更されるか、をチェックする。
[root@v8794 widgets]# for x in `find . -type f`; do diff -u $x <(sed 's/wp/KAME/g' $x); done --- ./class-wp-widget-calendar.php 2015-09-27 10:07:25.000000000 +0900 +++ /dev/fd/63 2016-01-23 01:24:20.132003630 +0900 @@ -48,7 +48,7 @@ * @param array $instance The settings for the particular instance of the widget. */ public function widget( $args, $instance ) { - /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ + /** This filter is documented in KAME-includes/widgets/class-KAME-widget-pages.php */ $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); echo $args['before_widget']; @@ -94,7 +94,7 @@ * @param array $instance Current settings. */ public function form( $instance ) { - $instance = wp_parse_args( (array) $instance, array( 'title' => '' ) ); + $instance = KAME_parse_args( (array) $instance, array( 'title' => '' ) ); $title = sanitize_text_field( $instance['title'] ); ?> <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> --- ./class-wp-nav-menu-widget.php 2015-09-29 00:31:25.000000000 +0900 +++ /dev/fd/63 2016-01-23 01:24:20.134003626 +0900 @@ -39,12 +39,12 @@ */ public function widget( $args, $instance ) { // Get menu - $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false; + $nav_menu = ! empty( $instance['nav_menu'] ) ? KAME_get_nav_menu_object( $instance['nav_menu'] ) : false; if ( !$nav_menu ) return; - /** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */ + /** This filter is documented in KAME-includes/widgets/class-KAME-widget-pages.php */ $instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base ); echo $args['before_widget']; @@ -64,7 +64,7 @@ * @since 4.4.0 Added the `$instance` parameter. * * @param array $nav_menu_args { - * An array of arguments passed to wp_nav_menu() to retrieve a custom menu. + * An array of arguments passed to KAME_nav_menu() to retrieve a custom menu. * * @type callable|bool $fallback_cb Callback to fire if the menu doesn't exist. Default empty. * @type mixed $menu Menu ID, slug, or name. @@ -73,7 +73,7 @@ * @param array $args Display arguments for the current widget. * @param array $instance Array of settings for the current widget. */ - wp_nav_menu( apply_filters( 'widget_nav_menu_args', $nav_menu_args, $nav_menu, $args, $instance ) ); + KAME_nav_menu( apply_filters( 'widget_nav_menu_args', $nav_menu_args, $nav_menu, $args, $instance ) ); echo $args['after_widget'];
同じパターンのファイルを大量に生成する
cat << EOF > xxx.txt
や cat << EOF | command1 | command2
が、一時ファイルを用意せず色々やれてすき
[root@v8794 sample]# for x in `seq 1 100`; do cat << EOF | sed "s/_PLACEHOLDER_/for_${x}_replace/g" > work/${x}.txt <html> <head>_PLACEHOLDER_</head> <body> _PLACEHOLDER_XXXXXXXXXXXXXXXXXXXXX </body> </html> EOF ; done [root@v8794 sample]# ls -lt work/ 合計 400 -rw-r--r-- 1 root root 109 1月 23 01:02 2016 1.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 10.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 100.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 11.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 12.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 13.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 14.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 15.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 16.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 17.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 18.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 19.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 2.txt -rw-r--r-- 1 root root 109 1月 23 01:02 2016 20.txt [root@v8794 sample]# cat work/1.txt <html> <head>for_1_replace</head> <body> for_1_replaceXXXXXXXXXXXXXXXXXXXXX </body> </html>
予め定められたリストにマッチした場合に、規定値を使用して処理する
#! /bin/sh DATA=" 01 AAAAAAAAAAAAAAAAA tanaka 02 BBBBBBBBBBBBBBBBB ikeda 03 CCCCCCCCCCCCCCCCC yamada " d=$(echo "${DATA}" | grep $1) read no txt user <<< "${d}" echo $no echo $txt echo $user
量が多くなるのであればDBなど使用するほうがよいが、小さなプログラムに便利。
read x y z <<< $val
もすき。
nginx実践入門を読みながらnginx.confを書いてみた
ひとまず5章まで
カメノシャシン(http://kame.photos)をhttp2対応して、証明書自動更新のとこまでやった
URL
情報
- apache2.4 -> nginx1.9.9
- php5.6 -> php7.0.2
- http -> https(Let's Encryptでとってみた)
参考にしたURL
Let's Encrypt サーバー証明書の取得と自動更新設定メモblog.apar.jp
証明書取得
/usr/local/src/letsencrypt/letsencrypt-auto certonly --webroot -w /etc/nginx/html -d kame.photos -m yasuaki.tahira@gmail.com --agree-tos --debug
**ちなみに、以下のように作成される
証明書 /etc/letsencrypt/live/kame.photos/cert.pem 証明書+中間CA証明書 /etc/letsencrypt/live/kame.photos/fullchain.pem 秘密鍵 /etc/letsencrypt/live/kame.photos/privkey.pem 中間CA証明書 /etc/letsencrypt/live/kame.photos/chain.pem
nginx.confで使用するのは fullchain.pem
と privkey.pem
なので
ssl_certificate /etc/letsencrypt/live/kame.photos/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kame.photos/privkey.pem;
のように設定する。
自動更新
00 05 01 * * /usr/local/src/letsencrypt/letsencrypt-auto certonly --webroot -w /hoge/fuga/nginx/html/kame -d kame.photos --renew-by-default --agree-tos && /etc/sbin/nginx -s reload
(追記)ちなみに、認証方法
ドメインのメールアドレスに対して、認証メールがくる従来の方法ではなく、以下の流れのようです
- -w で指定したドキュメントルートに対して、letsencryptクライアントが一時ファイルを生成
- 以下のように認証サーバから
FQDN/.well-known/acme-challenge/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
へアクセスし、所有者であることを確認
66.133.XXX.XXX - - [11/Jan/2016:18:34:31 +0900] "GET /.well-known/acme-challenge/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HTTP/1.1" 200 118 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
GoogleAnalyticsなんかと一緒なのかな
感想
簡単すぎてビビった
CentOS6.5 + nginx1.9.9 + http2 + php7.0.0でwordpress
以下の続き
さっそくやる
ヒストリーから追ったので、漏れてるかも
cd /usr/local/src/ git clone git://github.com:php-build/php-build.git cd php-build ./install.sh php-build --definitions #7.0.0がある # 依存パッケージをいれておく 怒られたらとりあえずXXX-develをyumるといういい加減なやつなので、プロダクション環境作るときは考える yum install -y mysql-server libxml2-devel libjpeg-devel libpng-devel libmcrypt-devel libtidy-devel libxslt-devel # build php-build 7.0.0 /usr/local/php7.0 /usr/local/php7.0/bin/php -v # mysqlの最低限設定 service mysqld start /usr/bin/mysql_secure_installation # php-fpm入れる yum install php-fpm # 最小限設定 vi /usr/local/php7.0/etc/php-fpm.conf > daemonize = yes > pid = run/php-fpm.pid vi /usr/local/php7.0/etc/php-fpm.d/www.conf > user = nginx > group = nginx # php-fpmの起動スクリプトを修正し、php7が使われるようにする vi /etc/init.d/php-fpm > php_fpm_BIN=/usr/local/php7.0/sbin/php-fpm > php_fpm_CONF=/usr/local/php7.0/etc/php-fpm.conf > php_fpm_PID=/usr/local/php7.0/var/run/php-fpm.pid # php-fpm起動 /etc/init.d/php-fpm start # nginx設定編集 # httpディレクティブ内に追加 location ~ \.php$ { root /var/www; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } # mysqlにwp用db準備 mysql -uroot -p CREATE DATABASE wp1 CHARACTER SET utf8; GRANT ALL ON wp1.* to sampleuser@localhost; SET PASSWORD FOR sampleuser@localhost=password('パスワード'); FLUSH PRIVILEGES; # wordpress設置 cd /usr/local/src wget https://ja.wordpress.org/wordpress-4.4-ja.zip unzip wordpress-4.4-ja.zip cp -r wordpres /var/www/wp # wp-config.php作成 cd /var/www/wp cp wp-config-sample.php wp-config.php vi wp-config.php define('DB_NAME', 'wp1'); define('DB_USER', 'sampleuser'); define('DB_PASSWORD', 'パスワード'); define('DB_HOST', '127.0.0.1'); define('DB_CHARSET', 'utf8');
ここまでできたらブラウザで
https://hogefuga.info/wp/wp-admin/install.php
へアクセス。
書かれてるまま入力し、インストールすれば成功するはず。
サンプルページ https://fukutsu.info/kame/
nginx1.9.9にngx_mrubyを組み込む
以下の環境に組み込みました。
そもそも ngx_mruby
とは?
ngx_mruby is A Fast and Memory-Efficient TCP Load Balancing and Web Server Extension Mechanism Using Scripting Language mruby for nginx.
とりあえずやりたいのは後者、nginxの制御にmrubyを使うところ。
手順
(1) ruby2.2.3を導入 - ruby-buildをつかいます。
cd /usr/local/src git clone https://github.com/sstephenson/ruby-build.git cd ruby-build # 途中怒られるから入れとく yum install -y readline-devel ./install.sh ruby-build 2.2.3 /usr/local/ruby2.2 export PATH=/usr/local/ruby2.2/bin:$PATH [root@v7885 nginx-1.9.9]# ruby -v ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
※ ちなみに、最初面倒くさくて yum install ruby
で 1.8.xを入れたのですが、腐ってたのでやめました
(2) ngx_mruby導入 ref: Install · matsumoto-r/ngx_mruby Wiki · GitHub
$ cd /usr/local/src $ git clone git://github.com/matsumoto-r/ngx_mruby.git $ cd ngx_mruby $ ./configure --with-ngx-src-root=/usr/local/src/nginx-1.9.9 $ make build_mruby $ make generate_gems_config $ cd /usr/local/src/nginx-1.9.9 $ ./configure --user=nginx --group=nginx --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --with-http_ssl_module --with-mail --with-http_stub_status_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --without-http_userid_module --add-module=/usr/local/src/ngx_mruby --add-module=/usr/local/src/ngx_mruby/dependence/ngx_devel_kit $ make $ make install
(3) nginx.confにmrubyのコードを書いてみる
# Locationディレクティブ内に適当に mruby_content_handler_code ' Nginx::rputs "Hello world!" ';
(4) nginx reload & 確認
nginx -s reload
https://hogefuga.inf/へアクセスし、
と表示されれば、よさそう!