我们的网站(laravel(项目目录如下:
/home/user/project/{app,route,public_html,storage,...}
新版本位于:
/home/user/releases/v1
出于某种原因,我们必须为每个版本链接public_html目录,因此:
/home/user/releases/v1/public_html > /home/user/project/public_html
Nginx根目录是:
/home/user/www/site/public_html
哪个:
/home/user/www/site > /home/user/releases/v1
由于NGINX将遵循符号链接,最终根目录将是:
/home/user/project/public_html
有办法解决这种情况吗?
由于虚拟主机的root
是/home/user/www/site/public_html
,/home/user/www/site/public_html
是/home/user/project/public_html
的符号链接,/home/user/project/public_html
是最新版本的符号链接-nginXlocation
块实际上会在/home/user/releases/v1/public_html
中搜索。
以下是一个示例。假设我们有一个文件夹/my_releases
。每次发布/部署新版本时,我都会在/my_releases
中创建一个新的子文件夹,其中包含该版本(/my_releases/v1
,然后是/my_releases/v2
,依此类推(。发布的所有资产都将在相应的子文件夹中,所以我会有
/my_releases
|
+---- /v1
| |
| +--- /css
| | |
| | +--- /home.a120cd8.css
| |
| +--- /img
| | |
| | +--- /logo.7f40c3a.svg
| |
| +--- /js
| | |
| | +--- /main.ba4de98.js
| |
| +--- /api
| | |
| | +--- /index.php
| | |
| | +--- /routes
| | |
| | +--- /login.php
| +--- /index.html
|
+---- /v2
| |
| +--- /css
| | |
| | +--- /home.7845c7.css
| |
| +--- /img
| | |
| | +--- /logo.23038ad.svg
| |
| +--- /js
| | |
| | +--- /main.acb33f1.js
| |
| +--- /api
| | |
| | +--- /index.php
| | |
| | +--- /routes
| | |
| | +--- /login.php
| +--- /index.html
........ next releases until the end of the world
我的nginX是这样配置的,我的虚拟主机有
server {
server_name my.personal.web.site;
root /var/www/public_html;
.....
}
在启动nginX之前,我已经运行了以下2个命令:
ln -s -f -n /my_releases/current /my_releases/v1
ln -s -f -n /var/www/public_html /my_releases/current
然后我启动了nginX-service nginx start
。它现在将为我的网站/应用程序的v1
提供服务。
现在,每当我部署新版本时,我都会运行以下命令(用相关修订版替换v2
(
ln -s -f -n /my_releases/current /my_releases/v2