带有嵌套符号链接的 Nginx 根目录
Nginx root directory with nested symlinks
我们的网站(laravel)项目目录是这样的:
/home/user/project/{app,route,public_html,storage,...}
新版本放置在:
/home/user/releases/v1
出于某种原因,我们必须为每个版本 link 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 将遵循 symlinks,最终的根目录将是:
/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
是你的符号链接最新版本 - nginX location
块实际上会在 /home/user/releases/v1/public_html
.
内搜索
这是一个例子。假设我们有一个文件夹 /my_releases
。每次我 publish/deploy 一个新版本时,我都会在 /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
。它现在将服务于我的网站 site/application.v1
。
现在,每当我部署新版本时,我都会运行以下命令(将v2
替换为相关修订版)
ln -s -f -n /my_releases/current /my_releases/v2
不要忘记设置正确的文件系统权限和所有权。
我们的网站(laravel)项目目录是这样的:
/home/user/project/{app,route,public_html,storage,...}
新版本放置在:
/home/user/releases/v1
出于某种原因,我们必须为每个版本 link 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 将遵循 symlinks,最终的根目录将是:
/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
是你的符号链接最新版本 - nginX location
块实际上会在 /home/user/releases/v1/public_html
.
这是一个例子。假设我们有一个文件夹 /my_releases
。每次我 publish/deploy 一个新版本时,我都会在 /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
。它现在将服务于我的网站 site/application.v1
。
现在,每当我部署新版本时,我都会运行以下命令(将v2
替换为相关修订版)
ln -s -f -n /my_releases/current /my_releases/v2