Nginx+php-fpmで使っていた環境にgitアクセスを追加する方法(centos7編)

2020年5月7日

テクノロジー

興味は広く、こだわりは深く、遊び心は目一杯、がモットーの、下駄です。

本日もIT謎掛けやってみます

「php」とかけまして・・・ 「スーパーで買ってきたコロッケの食べ方」と、ときます。 そのココロは・・・ 洗練されたソースを、使うのが決め手です。

Nginx+php-fpm環境はスタンダード?

今となってはapacheを使う気にもなれず、nginxでwebサーバーを構築することがスタンダードになってきました。 シンプル且つ、スピード性能が高いNginxは、webサーバー管理者の非常に強い見方です。 そして、php-fpmをセットで仕込むことは、wordpressを使う人なら必須の組み合わせかと思いますが、 開発を行う会社などでは、これに対して、デプロイ効率化のために、gitアクセスできるようにしたいと考える人も増えてきているようです。 僕も、この現状環境に、同じドメインでgitアクセスできるように、サーバー構築したいと思い、ubuntuとcentosそれぞれに、gitサーバーの構築をすることに成功したので、 それぞれの手順と注意点、自分がハマったポイントなどをまとめておきたいと思います。 ubuntu設定は、以前にブログで書いたので、今回はCentOSを対象に書いておきます。 前回記事 : gitサーバーへの道 gitサーバー への道

CentOSのNginx + php-fpm + gitの構成

今回作業をしたCentOSサーバーは、バージョン7でした。 インストール手順を書いておきます。 // 必要なアプリケーションのインストール $ yum -y install spawn-fcgi fcgi-devel fcgiwrap // spawn-fcgiとfcgiwrapの設定 $ mkdir /var/run/fcgiwrap $ vi /etc/sysconfig/fcgiwrap ``` FCGI_USER=nginx FCGI_GROUP=nginx FCGI_PROGRAM=/usr/sbin/fcgiwrap FCGI_PID=/var/run/fcgiwrap/spawn-fcgi.pid FCGI_SOCKET=/var/run/fcgiwrap/fcgiwrap.sock FCGI_EXTRA_OPTIONS="-M 0700" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P $FCGI_PID -- $FCGI_PROGRAM" ``` $ vi /etc/init.d/swap-fcgi ``` # 23行目あたり ## exec="/usr/bin/spawn-fcgi" ## prog="spawn-fcgi" ## config="/etc/sysconfig/spawn-fcgi" exec="/usr/bin/spawn-fcgi" cgi="/sbin/fcgiwrap" prog=`basename $cgi` config="/etc/sysconfig/$prog" pid="/var/run/fcgiwrap/spawn-fcgi.pid" SOCKET="/var/run/fcgiwrap/fcgiwrap.socket" ``` // nginx設定 ``` location ~ ^/.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ { access_log /var/log/nginx/git_access.log; error_log /var/log/nginx/git_error.log; include /etc/nginx/fastcgi_params_git; fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend; fastcgi_param GIT_PROJECT_ROOT /var/www/git; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param PATH_INFO $uri; fastcgi_param REMOTE_USER $remote_user; fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.socket; } ``` // 付随する設定 $ vi /etc/nginx/fastcgi_params_git ``` fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; ``` // それぞれのアプリケーションを起動(再起動) $ systemctl restart spawn-fcgi $ systemctl restart nginx

ハマリポイントの解説

基本設定はこれで完了ですが、いくつかハマリングしてしまうポイントがあるので、自分のハマった箇所を列挙します。

1. /etc/nginx/fastcgi_paramsファイルのphp-fpmとの同居

php-fpmで、このファイルを若干変更している場合があります。 自分の環境は、以下のようになっていたので、それを、変更(デフォルトに戻す)することで、ファイルを分けて対応しました。 fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;

2. nginxパーミッションの設定

今回の環境で、fcgiwrapを使う場合、パーミッションは、nginxになっているのが望ましいので、 php-fpmのwww.conf設定を以下のようにしておく必要があります。 $ vi /etc/php-fpm.d/www.conf ``` user = nginx group = nginx listen.owner = nginx listen.group = nginx listen.mode = 0777 ``` 設定変更した際は、php-fpmの再起動もしてください。 $ systemctl restart php-fpm アプリケーションの名称にバージョンが入っている場合があるので、その際は適宜変更してコマンドを叩いてください。

3. git pushコマンドで403エラーが出る場合

この場合は、gitリポジトリで、以下のコマンドを実行することで、大抵は解消します。 $ git http.receivepack true

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。