打包和部署Symfony网站

Zde*_*něk 12 php package symfony

我是Symfony的新手,来自.NET世界.使用Symfony(4)文档,我设法创建了简单的网站.现在我想把它付诸实践,但我正在努力寻找任何有用的信息我应该怎么做才能"打包"所有必要的东西并进行部署.确实,有一个描述部署的页面(如何部署Symfony应用程序),但我发现它缺乏以下信息:

  • 包含/排除的内容(显然我不想打包dev依赖项,部署composer文件似乎也没有任何意义)
  • 要改变什么(有.env文件 - 包含APP_ENVAPP_SECRET- 我在哪里使用这些值?)
  • 我的托管使用文件夹www进行公开演示,我是否必须在重命名public目录之前更改/配置一些内容www
  • 我是否必须配置.htaccess为不通过PHP路由images/css/js?

我目前的项目结构是:

+ bin
+ config
+ public
  + css
  - index.php
+ src
  + Controller
  - Kernel.php
+ templates
+ var
+ vendor
- .env
- .gitignore
- composer.json
- composer.lock
- symfony.lock
Run Code Online (Sandbox Code Playgroud)

编辑(2018-07-17):

  • 我正在使用git
  • 托管能够从调用的git分支部署production(每当我推送到这个分支,它调用composer install --no-dev)
  • 配置公共目录名称是在 composer.json

额外配置示例composer.json:

"extra": {
    "symfony": {
        "allow-contrib": false
    },
    "public-dir": "www"
}
Run Code Online (Sandbox Code Playgroud)

关于我原来的问题 - 我现在正在使用git部署托管功能.在这种情况下,我也需要编曲文件.我最初的想法是构建和打包最少的东西,然后将此包部署到服务器.(现在我仍然有bin,作曲家文件或.gitignore(可能甚至更奇怪的东西)部署).

Pad*_*m87 7

好吧,我会试一试.

包含/排除的内容(显然我不想打包dev依赖项,部署composer文件似乎也没有任何意义)

我注意到你没有.gitignore.如果你没有使用GIT(你应该)看一下默认的gitignore,它会告诉你哪些文件夹你不需要.

你是对的,供应商不是必需的.Composer的锁定文件包含您正在使用的确切版本.只需composer install将文件复制到服务器即可.最简单的"部署"方法是使用git(hub),并在服务器上设置一个ssh密钥,并授予它对git仓库的读取权限.(部署密钥)

要改变什么(有.env文件 - 包含APP_ENV和APP_SECRET - 我在哪里使用这些值?)

.env文件默认只在dev模式下工作.(注意你的composer.json中的require-dev部分).

Symfony建议在生产中使用"真实"环境变量,但您可以使用该.env文件.要做到这一点,你必须"symfony/dotenv"从composer.json中移动require-devrequire.(之后做更新)

您还需要在服务器上将APP_ENV设置为prod,同时配置db acccess和mailer.

我的托管使用文件夹www进行公开演示,我是否必须在将公共目录重命名为www之前更改/配置一些内容?

我不会完全回答这个问题,这需要太长时间.使用VirtualHost将apache配置为指向您的公共目录.更多信息:https://symfony.com/doc/current/setup/web_server_configuration.html

我是否必须配置.htaccess才能通过PHP路由images/css/js?

如果您已经安装了apache包,您将获得一个.htaccess文件,并忽略文件.

# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
Run Code Online (Sandbox Code Playgroud)

这种方式请求的文件不会命中你的PHP代码.但是,如果文件不存在,Symfony将处理该请求.我建议忽略常见的文件扩展名,例如:

# Do not allow image requests to hit symfony
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png|ico|map)$ [NC]
RewriteRule .* - [L]
Run Code Online (Sandbox Code Playgroud)