部署

October CMS Documentation Docs

部署

# 概念

# 使用 Composer 进行身份验证

使用 Composer 部署应用程序时,系统可能会提示您提供 October CMS 网站的登录凭据。这些凭据将验证您的 Composer 会话是否有权下载 October CMS 源代码。

为避免手动输入这些凭据,您应该确保 Composer auth.json 文件 (opens new window) 与您的应用程序一起部署。

或者,您可以使用 project:set artisan 命令 重新创建此文件。

php artisan project:set <license key>

如果上述命令不可用,您可以使用 composer 创建文件。

​composer config --auth http-basic.gateway.octobercms.com <email address> <license key>

# 没有 Composer 的部署

如果您的服务器不具备运行 Composer 或命令行工具的能力,例如微实例和共享环境,您可以使用官方部署插件 (opens new window)作为部署您的网站的解决方案。

# 安全性和性能

# 公共文件夹

为了在生产环境中获得最高安全性,您可以将 Web 服务器配置为使用 public/ 文件夹,以确保只能访问公共文件。首先,您需要使用 october:mirror 命令生成一个公共文件夹。

php artisan october:mirror

这将在项目的基本目录中创建一个名为 public/ 的新目录,您应该从这里修改网络服务器配置以使用此新路径作为主目录,也称为 wwwroot

该命令应在每次系统更新或安装新插件后执行。您可以使用 system.auto_mirror_public 配置项指示 October CMS 自动执行此操作。

AUTO_MIRROR_PUBLIC=true

注意:对于 Windows 操作系统,october:mirror 命令必须在以管理员身份运行的控制台中执行。因此,它更适合作为部署过程的一部分运行。

# 提高性能

October CMS 已针对性能进行了微调,您可以采取一些额外的步骤来进一步提高此性能,尤其是对于大型应用程序。

禁用 调试模式 并启用 环境配置 中的缓存设置。

APP_DEBUG=false
CMS_ROUTE_CACHE=true
CMS_ASSET_CACHE=true
CMS_TWIG_CACHE=true

使用这些 artisan 命令缓存配置和路由。

php artisan config:cache
php artisan route:cache

# 共享主机

如果您与其他用户共享一台服务器,您应该防止邻居站点遭到入侵。确保所有带有密码的文件(例如像 config/database.php 这样的 CMS 配置文件)无法从其他用户帐户中读取,即使他们找出了您文件的绝对路径。将此类重要文件的权限设置为 600(仅对所有者进行读写,对其他任何人都没有)是一个好主意。

您可以在文件位置 config/system.php 中或通过下面的环境变量设置默认权限掩码部分的保护。

DEFAULT_FILE_MASK=644
DEFAULT_FOLDER_MASK=755

注意:不要忘记手动检查文件是否已设置为 644,因为您可能需要进入控制面板进行设置。

# Web 服务器配置

October CMS 具有应用于您的网络服务器的基本配置。常见的网络服务器及其配置可以在下面找到。

# Apache 配置

如果您的网络服务器正在运行 Apache,则有一些额外的系统要求:

  1. 应安装mod_rewrite
  2. AllowOverride 选项应该打开

在某些情况下,您可能需要在 .htaccess 文件中取消注释这一行:

##
## You may need to uncomment the following line for some hosting environments,
## if you have installed to a subdirectory, enter the name here also.
##
# RewriteBase /

如果您已安装到子目录,则还应添加子目录的名称:

RewriteBase /mysubdirectory/

# Nginx 配置

在 Nginx 中配置您的站点需要进行一些小的更改。

nano /etc/nginx/sites-available/default

server 部分使用以下代码。如果您已将October安装到子目录中,请将位置指令中的第一个 / 替换为October的安装目录:

location / {
    # Let October CMS handle everything by default.
    # The path not resolved by October CMS router will return October CMS's 404 page.
    # Everything that does not match with the allowlist below will fall into this.
    rewrite ^/.*$ /index.php last;
}

# Pass the PHP scripts to FastCGI server
location ~ ^/index.php {
    # Write your FPM configuration here

}

# Allowlist
location ~ ^/favicon\.ico { try_files $uri /index.php; }
location ~ ^/sitemap\.xml { try_files $uri /index.php; }
location ~ ^/robots\.txt { try_files $uri /index.php; }
location ~ ^/humans\.txt { try_files $uri /index.php; }

# Block all .dotfiles except well-known
location ~ /\.(?!well-known).* { deny all; }

## Let nginx return 404 if static file not exists
location ~ ^/storage/app/uploads/public { try_files $uri 404; }
location ~ ^/storage/app/media { try_files $uri 404; }
location ~ ^/storage/app/resources { try_files $uri 404; }
location ~ ^/storage/temp/public { try_files $uri 404; }

location ~ ^/modules/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/widgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/modules/.*/reportwidgets/.*/resources { try_files $uri 404; }

location ~ ^/plugins/.*/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/behaviors/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/reportwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/formwidgets/.*/resources { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/assets { try_files $uri 404; }
location ~ ^/plugins/.*/.*/widgets/.*/resources { try_files $uri 404; }

location ~ ^/themes/.*/assets { try_files $uri 404; }
location ~ ^/themes/.*/resources { try_files $uri 404; }

# Lighttpd 配置

如果您的网络服务器正在运行 Lighttpd,您可以使用以下配置来运行 October CMS。使用您喜欢的编辑器打开您的站点配置文件。

nano /etc/lighttpd/conf-enabled/sites.conf

在编辑器中粘贴以下代码并更改 host addressserver.document-root 以匹配您的项目。

$HTTP["host"] =~ "domain.example.com" {
    server.document-root = "/var/www/example/"

    url.rewrite-once = (
        "^/(plugins|modules/(system|backend|cms))/(([\w-]+/)+|/|)assets/([\w-]+/)+[-\w^&'@{}[\],$=!#().%+~/ ]+\.(jpg|jpeg|gif|png|svg|swf|avi|mpg|mpeg|mp3|flv|ico|css|js|woff|ttf)(\?.*|)$" => "$0",
        "^/(system|themes/[\w-]+)/assets/([\w-]+/)+[-\w^&'@{}[\],$=!#().%+~/ ]+\.(jpg|jpeg|gif|png|svg|swf|avi|mpg|mpeg|mp3|flv|ico|css|js|woff|ttf)(\?.*|)$" => "$0",
        "^/storage/app/uploads/public/[\w-]+/.*$" => "$0",
        "^/storage/app/media/.*$" => "$0",
        "^/storage/app/resources/.*$" => "$0",
        "^/storage/temp/public/[\w-]+/.*$" => "$0",
        "^/(favicon\.ico)$" => "$0",
        "(.*)" => "/index.php$1"
    )
}

# IIS 配置

如果您的网络服务器正在运行 Internet 信息服务 (IIS),您可以在 web.config 配置文件中使用以下内容来运行 October CMS。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="October CMS to handle all non-allowlisted URLs" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/.well-known/*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/storage/app/uploads/public/.*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/storage/app/media/.*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/storage/app/resources/.*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/storage/temp/public/.*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/themes/.*/(assets|resources)/.*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/plugins/.*/(assets|resources)/.*" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="^/modules/.*/(assets|resources)/.*" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>