在有些網路環境中,埠是一種比較稀缺的資源,而我們又恰好有多個前端專案需要釋出,我們可以採取將多個專案對映到同一個埠上面的方案加以解決。
本教程前端專案主要以react為主,部署在linux伺服器上。
1. 將專案資源的訪問地址修改為相對方式
在react專案package.json
中,新增或者修改homepage
屬性為.
。具體為:
{
"name": "app1",
"version": "0.1.0",
"private": true,
"homepage": ".", //資源地址改為相對當前的路由,預設是根目錄/
...
}
2. 新增nginx配置
假設我們有兩個專案,app1
和app2
。首先將build後的專案都複製到/usr/share/nginx/html
目錄下,其次在/etc/nginx/conf.d/
目錄下新增我們的配置檔案,nginx會自動載入該目錄下以.conf
結尾的配置檔案,這裡我們新建myapp.conf
,並新增以下內容:
server {
listen 80; # 監聽80埠
server_name _;
# 將根目錄對映到/usr/share/nginx/html,注意此處為root
location / {
root /usr/share/nginx/html;
index index.html; # 我們在根目錄放了一個簡單的主頁,用於介紹我們的服務,
}
# 將app1目錄對映到/usr/share/nginx/html/app1,注意此處為alias
location /app1 {
alias /usr/share/nginx/html/app1;
index index.html;
try_files $uri $uri/ =404;
}
location /app2 {
alias /usr/share/nginx/html/app2;
index index.html;
try_files $uri $uri/ =404;
}
}
3.重新載入nginx配置
將工作目錄切換至nginx的安裝目錄,並執行以下命令,實現熱過載配置檔案:
./nginx -s reload
至此,我們就完成了將多個專案使用一個nginx代理釋出的流程了。
可以透過地址http://localhost:80/
訪問主頁,透過http://localhost:80/app1/
訪問ap1。注意該配置的訪問地址必須以/
結尾,不然無法正常訪問。
...........................................
以下步驟為docker版的操作流程,為擴充教程,不使用docker的可以不看。
4.使用nginx的docker映象進行釋出
新增Dockerfile並新增以下內容:
FROM nginx
ENV TZ 'Asia/Shanghai'
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ADD myapp.conf /etc/nginx/conf.d/ #新增nginx配置檔案
ADD index.html /usr/share/nginx/html #新增簡單的介紹主頁
ADD ./app1/build /usr/share/nginx/html/app1 #新增專案app1
ADD ./app2/build /usr/share/nginx/html/app2 #新增專案app2
並使用以下命令執行自動映象構建:
# npm run build
docker build . -t react-nginx
docker stop react-nginx
docker rm react-nginx
# docker rmi react-nginx
docker run --name react-nginx -p 8036:80 -d react-nginx
docker logs -f react-nginx