序文
まず第一に、私はちょうどフロントエンドAndroidとスパイシーなチキンを開発し、関連するバックグラウンド・サーバー関連の知識は、私は、理解していない必ずしも以下、純粋に個人的な目的、実際に問題の確かに多くの同じ、軽いスプレー、最高から学ばない比較的小さいですスプレーしないでください
Linuxの一般的なコマンド、シェルスクリプト、gitの使用、ファイアウォール、ファイアウォール、nginxの、infotify、PM2、ノードおよびその他の関連知識:技術的なポイントを含みます
私は、全体のプロセスをオーバーに行きたいので、昨年以来、フロントエンドとしてシステムにノードを書くために時間を割いで忙しく、バックエンドサーバは、知識を理解していません。
ラインプロジェクトの> - 開発 - >アプリケーションドメイン/サーバーの展開
最初の下では、単にプロジェクトは、次の3つの倉庫を持って公開します:
あなたは、ローカルコードリポジトリとサーバーコードリポジトリが同じである見ることができ、既にネイティブコードの両方がサーバー上で実行するために、ローカル倉庫、倉庫・サーバ・コードで実行するため、倉庫のプッシュ/プル比較的裸可能ない裸の倉庫に直接プロジェクト走った理由が、裸の倉庫が暗号化されているので、我々は単純に、理解していない実行するために、通常のプログラムとしてはおろか、しかし、クローンは正常でアウトになり、コードのリポジトリを取得見るためになぜ行くのgit、gitのソースコードを依頼するとして示しています。
gitの初期化--bare:1.サーバーは、裸のリポジトリを作成します。
裸の倉庫クローンから、サーバーコードリポジトリを作成します。2.
ローカルコードリポジトリを作成します3。
次に、サーバ裸の倉庫にバインド:gitのは、リモートの起源を追加<ユーザー名> @ <サーバのパブリックIP>:/ <サーバー裸倉庫アドレス>。ユーザー名私はあなたが安全ではないと感じた場合などのgitなど、他のアカウントのセキュリティ操作の多くは唯一その権限を制限するために、アカウントを作成しますので、あなたはまた、他のユーザーを作成し、最高権威の口座間でルートとしての権限を制限することができ、ルートを使います制御コードを実行します。
アップを実行4.永遠/ PM2コードリポジトリサーバー
実行NPM開始nodejsアッププロジェクトと実行した後に、デフォルトのポート3000、HTTPで有効:// localhostを:3030、私たちは、NPMが起動した後、コントロール+ cが実行を停止しない限り、私たちはバックグラウンドで実行されていないので、我々は、他の操作を行うことができないことを知っていますそれがバックグラウンドで実行することができるようにするために、我々は特に関連情報を参照するために、永久にまたはPM2、ツールを使用することができ、制限され、私がプロジェクトで使用されるPM2で、次のように特定の用途を説明します
5. nginxのドメイン名が、このプロジェクトにバインドされ、拡張ファイアウォールファイアウォール
このような私たちのプロジェクトにshudongpo.comこのドメイン名によるアクセスとして、あなたは、これは成功したと見なされる解放、我々はnginxのを達成するために、この手順を使用する必要があり、それはサーバープロジェクトの外にアクセスできるように、ドメイン名とポート3030をバインドする必要があります以下のように、nginxのは、ポート3000へのドメイン転送を使用します。
YUM nginxのインストールの使用:YUM -y nginxのをインストールしてください。
インストール後:プロフィールの閲覧場所-t nginxの。
サーバーを追加するのvimエディタのnginxの設定ファイルを使用します。
server {
listen 80;
server_name xxx.xxx.cn;
location / {
proxy_pass http://localhost:3000;
}
}
あなたがxxx.xxx.cnを訪問するときですから、ノードプロジェクトを実行するためにアクセスすることができます。
注:開いているポート80ので、独自のサーバー内の金庫に着手してくださいは、アクセスすることはできません。あなたのLinuxサーバがインストールされている場合は、それを開くことができるので、それは、ポート80をシャットダウンする可能性がファイアウォールファイアウォールファイアウォールです:ファイアウォール-cmd --zone =公共--add-ポート= 80 / tcpの--permanent。
ファイアウォールの知識の拡大:
开放端口,firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
查看已开放端口,firewall-cmd --list-ports
重启,firewall-cmd --reload
查看默认防火墙状态,firewall-cmd --state
設定が完了したら、再起動nginxの:それは、再起動になってきた場合、nginxの起動systemctl。
次に、プロジェクトにアクセスできるコンピュータ上で結合ドメインを入力します。
6. inotifyを、シェルスクリプト、PM2自動的に更新申込[フォーカス]
今、プロジェクトがアップ実行されたこと、そして、問題は何ですか?、の裸の倉庫にコンピュータサーバプッシュでコードを変更した後が、コードが更新されないように、我々は、更新プログラムを再実行していない、またはアクセスが更新されていない場合にあっても、引っ張らないでくださいサーバーのコードリポジトリが、それは問題を解決する必要があります。
更新>裸ウェアハウス・サーバーが更新を受信した後、コードリポジトリ - プッシュコンピュータコード - 再び>コードリポジトリの更新を行きます
6.1。コードは、コンピュータプッシュ
実行するには、ローカルプッシュ
6.2。ベア倉庫サーバ更新コードリポジトリ更新を受信した後
このステップは、取るための2つの手順が必要:裸倉庫更新に1つのサーバ聴取を、2回の裸倉庫の更新後、自動更新コードリポジトリ
私は更新の裸の倉庫のために聞いてみましょう、我々はまた、gitのフック実装の詳細を使用することができ、私はinotifyケースの関連情報を参照してください、私は聞くために使用さinofity
inotifyのインストール:
yum install inotify-tools -y
直接書き込みを実行するシェルスクリプト、タッチupdate.shの実装を監視します。
#!/bin/bash
#监听裸仓库xxx.git改变完成后,执行xxx代码仓库进行pull
inotifywait -m -e modify -r /local/git_project/xxx.git/ |
while read events #读取事件
do
cd /local/node_workspace/xxx #cd到代码仓库目录
git pull #pull代码
echo 'xxx.git裸仓库有变动,已pull最新代码到代码仓库'
echo $events #打印事件
done
inofityは、知識関連のコマンドを展開します。
inotifywait -m -e修正-r /local/git_project/xxx.git
-mは維持リスニングを発現し、または一度だけ、聴取イベントは、(ファイルの内容が変更された)変更され表さモディファイ-e - Rは再帰モニターを表すだけでなく、子ファイルを監視します
我々はそれが実行権限を与える必要があり、スクリプトは終了しますが、それだけで通常のファイルです:chomd + X update.sh
./ xxx.shので、問題があるでしょう、これはバックグラウンド実行されません、私たちは、背景いったん撤回することはできません:スクリプト実行./ xxx.sh&バックグラウンド実行を、問題がまだある、シェルスクリプトのプロセスは、子シェルターミナルプロセスであり、このプロセスは、端末が閉殻であるときにスクリプトが停止しますので、その子はそう、オフになります:nohupを./xxx.sh&、バックグラウンドで実行するように、あること、バックグラウンドで中断のない実行を表し、それはシャットダウンしませんシェル端子が中断しました
このスクリプトは、我々は、ローカルコンピュータ上でコードを押すと変更し、サーバは、裸の倉庫をinotifyをするためのコードリポジトリの実行プルにし、CDを聞きますが、走った、コードはコードリポジトリを更新します
6.3。コードは自動的にリロード更新し、バックグラウンドでプログラムの実行を聞かせて、というNPM開始よりフォアグラウンドで実行されたされた後
このステップは、インストールする必要PM2ツールによって達成される:NPMがインストールPM2 -g
自動リロードは唯一、それはコードを更新する必要がなく、バックグラウンドで実行してみましょう場合は、次のことができます。PM2開始ビン/ WWW
まず、我々はファイルを設定する必要があるので、バックグラウンドで両方のコード更新を実行するために、もう一度聞いた後、自動リロード場合:PM2生態系を、コンフィギュレーション・ファイルconfig.jsをを生成し、変更します。
module.exports = {
apps : [{
name: 'shopsystem-server-pms',
script: './bin/www', #主要是这里,修改启动项
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
args: 'one two',
instances: 1,
autorestart: true,
watch: false,
watch_options: {
"usePolling": true
},
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
deploy : {
production : {
user : 'node',
host : '212.83.163.1',
ref : 'origin/master',
repo : '[email protected]:repo.git',
path : '/var/www/production',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
};
その後:PM2開始config.jsの
そこには、自動的にリロード更新された場合、これは自動的に、現在のディレクトリ内のすべてのフォルダやファイルを監視します
あなたはPM2知識を喜ばせるために知っておく必要があります。https://pm2.keymetrics.io/docs/usage/application-declaration/
プロジェクトの完了のこの時点で、全体のプロセス