今北産業
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を手動で指定する必要がある模様。
<?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が出たので消した。
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を入手し、下記のようにする。
[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 {
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を押すとサービスが登録される。次回以降は自動起動する構成だが、最初の起動は手動の模様。
確認
ブラウザでアクセスし、表示されれば動作確認して完了。
おわり
足りないところや指摘は編集リクエストしてちょ。