ChocolatyでちょこっとLaravelの実行環境を作成する


今北産業

Laravelで作成したプロジェクトを、Windows Server 2012R2にChocolatyを使用してデプロイした。
構成は Nginx, PHP, MySQL, プロセス管理はNSSMで、キューの使用もあるのでお楽しみに。
ちょこっと参考にしても構わないけど、間違ってても責任は取らないよ❤

作業内容

Chocolateyのインストール

管理者モードのPowerShellを使用したのでコマンドはこちら。
これ以降の各手順は、powershellは常に管理者モードの想定で。

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  • 最新のインストールコマンドは、Chocolateyの公式サイトを参照のこと。古いインストールコマンドに注意。

一旦コンソールを閉じると、PATHが適用される。

各種パッケージをインストール

1つずつやるのは面倒なので、一括でバージョン指定できるxmlを使用。
しかしインストールできるバージョンが限られていたため、バージョン指定はMySQLだけにしておいた。
現在どのバージョンがインストールされるかは、公式サイトのリポジトリで確認すると良い。

MySQLに必要なvisual studio runtime 2013が無くてエラーになるので、vcredist2013を手動で指定する必要がある模様。

package.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
        <package id="vcredist2013" />
        <package id="php" />
        <package id="php-service" />
        <package id="nodejs-lts" />
        <package id="composer" />
        <package id="nginx-service" />
        <package id="git" />
        <package id="mysql" version="5.7.18" />
</packages>

上記を適当なフォルダに保存し、そのフォルダへ移動。

choco install package.config -y

利便性を高めるため、あとからこれも入れた。

cinst nano # コンソールからテキスト編集したいので
cinst conemu # コンソールが使いづらいので
cinst sakuraeditor # テキストファイルの編集に
cinst googlechrome # モダンブラウザが必要だった

設定ファイルの編集

php.ini

今回のファイルの場所は、
"C:\tools\php73\php.ini"
になった。

extension= で検索し、下記のようにした。mbstringとopensslはデフォルトでONになっているので、ここでオンにしたらWARNINGが出たので消した。

php.ini
extension=bz2
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=interbase
;extension=ldap
;extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
extension=pdo_sqlite
;extension=pgsql
;extension=shmop

CURLを使用できるように、cacert.pemを入手し、下記のようにする。

php.ini
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo ="C:\tools\cacert.pem"

[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile="C:\tools\cacert.pem"

Nginxの設定ファイル

デフォルトで "C:\tools\nginx\conf.d\server.default.conf" にある。

root指定のパスの区切り文字に注意

server.default.conf
server {
    listen       80;
    server_name  example.com;

    root C:/YOUR/PROJECT/ROOT/public;

    charset utf-8;

    index  index.php;

    #access_log  logs/host.access.log  main;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    #error_page  404              /404.html;

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }


    location ~ /\.(?!well-known).* {
        deny all;
    }
}

サービス再起動

phpとnginxのサービスを再起動する。

MySQLの準備

コンソールでログインする

mysql -u root
/* DBを作成 */
CREATE DATABASE your_db DEFAULT CHARACTER SET utf8;
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
/* 権限を付与 */
GRANT ALL PRIVILEGES ON your_db.* TO 'your_user'@'%' IDENTIFIED BY 'your_password';

プロジェクトの設定

基本設定

GitのSSHまたはHTTPSの認証設定をしたら、適当なフォルダにプロジェクトを落としてくる。

.env.exampleをコピーして.env にし、修正する。
修正内容はプロジェクトによって適宜。

cd /your/project/root
cp .env.example .env
nano .env

終わったら、そのままプロジェクトルートで色々実行

# javascriptのコンパイル
npm i
npm run prod
# phpライブラリのインストール
composer install --optimize-autoloader --no-dev
# キーの作成
php artisan key:generate
# マイグレーションの実行
php artisan migrate --seed
# 設定のキャッシュ
php artisan config:cache

キューワーカーの設定

今回のプロジェクトにはキューの使用がある。。
nginx-service や php-service は nssm で管理されているようなので、
nssm でやっちゃうことにする。

(laravel-echo-serverも似たような要領でできるはず)

nssm install laravel-worker
# 名称は何でもいい。↑がサービス名になる。

アクセスが拒否された場合は、管理者モードで実行しているか確認。
対話式の画面が立ち上がるので、以下のようにする。
* H/Cは編集モードで立ち上げているのでボタン名称は異なる。
* Argumentの所、 起動オプションに、 --tries=5 等を付けないと、何度でも再試行するので注意

I/Oタブも編集

Installを押すとサービスが登録される。次回以降は自動起動する構成だが、最初の起動は手動の模様。

確認

ブラウザでアクセスし、表示されれば動作確認して完了。

おわり

足りないところや指摘は編集リクエストしてちょ。