背景
本番環境レンタルサーバーでFTPで手動アップは面倒くさい。もっと楽したい。
なんとか一部だけでも自動化できないかと思って試した。
環境
- 本番環境レンタルサーバー
- ローカル環境macOS Mojave(Laravel-Mix4を使っている)
主に使うもの
- ftp-deploy(公式ドキュメント)
package.jsonの設定
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"test": "jest",
"predeploy": "npm install && npm run prod",
"deploy": "node ftp-deploy"
},
... 略
こんな感じでscriptを用意する
ルートディレクトリにftp-deploy.js
を用意する
ftp-deploy.jsの設定
ルートディレクトリに.env
はおいてある前提。
FTP_USER
FTP_PASSWORD
FTP_HOST
を定義しておく
var FtpDeploy = require("ftp-deploy");
var ftpDeploy = new FtpDeploy();
require('dotenv').config({path: __dirname + '/.env'})
var config = {
user: process.env.FTP_USER,
password: process.env.FTP_PASSWORD,
host: process.env.FTP_HOST,
localRoot: "/",
remoteRoot: "/html",
include: ["*.js"],
deleteRemote: false,
forcePasv: false
};
ftpDeploy.deploy(config)
.then(res => console.log('finished:', res))
.catch(err => console.log(err))
あとは
npm run deploy
を実行すれば、OK
念の為
inquirer-confirm
とか用意しておくと良いかも。