Php 打包和部署Symfony网站

Php 打包和部署Symfony网站,php,symfony,package,Php,Symfony,Package,我是Symfony的新手,来自.NET世界。使用Symfony(4)文档,我成功地创建了一个简单的网站。现在我想把它付诸实践,但我正在努力寻找任何有用的信息,我应该怎么做才能“打包”所有必要的东西并部署它。确实,有一个页面描述了部署(),但我发现它缺少以下信息: 要包括/排除的内容(显然我不想打包dev依赖项,部署composer文件似乎也没有任何意义) 要更改的内容(有.env文件-包含APP_env和APP_SECRET-在哪里使用这些值?) 我的主机使用文件夹www进行公共演示,我是否必

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

  • 要包括/排除的内容(显然我不想打包
    dev
    依赖项,部署
    composer
    文件似乎也没有任何意义)
  • 要更改的内容(有
    .env
    文件-包含
    APP_env
    APP_SECRET
    -在哪里使用这些值?)
  • 我的主机使用文件夹
    www
    进行公共演示,我是否必须在将
    public
    目录重命名为
    www
    之前更改/配置某些内容
  • 我是否必须配置
    .htaccess
    以不通过PHP发送图像/css/js
我目前的项目结构是:

+ bin
+ config
+ public
  + css
  - index.php
+ src
  + Controller
  - Kernel.php
+ templates
+ var
+ vendor
- .env
- .gitignore
- composer.json
- composer.lock
- symfony.lock

编辑(2018-07-17):

  • 我在用git
  • 托管能够从名为
    production
    的git分支进行部署(每当我推到此分支时,它都会调用
    composer install--no dev
  • composer.json
composer.json
中的额外配置示例:

"extra": {
    "symfony": {
        "allow-contrib": false
    },
    "public-dir": "www"
}

关于我最初的问题,我现在正在使用git部署的托管功能。在这种情况下,我也需要编写器文件。我最初的想法是构建和打包最少的东西,然后将这个包部署到服务器上。(现在我仍然部署了
bin
、composer文件或
.gitignore
(可能还有更多奇怪的东西)。

好吧,我来试一试

要包括/排除的内容(显然我不想打包dev 依赖项,并且部署composer文件似乎也不起作用 (任何感觉)

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

你说得对,不需要供应商。Composer的锁文件包含您正在使用的确切版本。将文件复制到服务器后,只需安装
composer
。“部署”最简单的方法是使用git(hub),在服务器上设置ssh密钥,并授予它对git repo的读访问权。(部署密钥)

要更改的内容(有.env文件-包含APP_env和APP_SECRET) -我在哪里使用这些值?)

默认情况下,.env文件仅在开发模式下工作。(请注意composer.json中的require dev部分)

Symfony建议在生产中使用“真实”环境变量,但您可以使用
.env
文件。为此,您必须在composer.json中将
中的“symfony/dotenv”
require dev
移动到
require
。(之后进行更新)

您还需要在服务器上将APP_ENV设置为prod,并配置db access和mailer

我的主机使用文件夹www作为公共演示文稿,在将公共目录重命名为www之前,我是否必须更改/配置某些内容

我不会完全回答这个问题,那会花太长时间。将apache配置为使用VirtualHost指向公共目录。详情如下:

我是否必须配置.htaccess以不发送图像/css/js PHP

如果您安装了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]
这样,请求的文件就不会命中PHP代码。 但是,如果文件不存在,Symfony将处理该请求。 我建议忽略常见的文件扩展名,例如:

# Do not allow image requests to hit symfony
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png|ico|map)$ [NC]
RewriteRule .* - [L]
TL;博士 由于PHP不是一种编译语言,因此将代码编译成可执行文件的“构建”过程与此无关

构建无状态容器 然而,如果您正在开发一个web应用程序,并且想要部署它,那么最好的方法(也就是说,行业标准)是用它“构建”一个无状态容器。在该容器中,您将典型地拥有Apache+PHP或Ngnix+PHP-FPM(甚至只是PHP和PHP-PM)。这将是您的应用程序进程,由端口80公开:一个漂亮、无状态和可扩展的docker容器

在构建容器的过程中,您的想法是安装您选择的PHP版本(带有相关扩展)和将通过HTTP端口运行的web服务器或进程。然后,使用git在容器中提取代码并设置环境变量,然后进行composer安装。结果将是一个docker映像,其中包含应用程序的版本,可通过端口80访问

更多关于这个

嗯,不,我不做集装箱 当然,这可能不是适合您的方式,这取决于您的应用程序遵循了多少以及您将在哪里托管它

如果要部署到共享主机,则需要更改主机提供商文档根目录的
public
文件夹。由于您无法在共享主机中访问PHP运行时,因此需要复制.env文件并将其发送到web主机(这是一种非常不安全的做法)

要设置自动部署,您应该选择
ssh
。如果您没有控制台访问您的web主机,那么
git ftp
可能是您最好的朋友。通过在post receive事件上使用webhooks(例如在Github上),您将部署运行脚本的代码,该脚本将安装一个composer(具有锁定的依赖项),并向www数据用户(或web服务器用户)提供所有内容

现在,让我们来看看正确的答案 话虽如此,我将尝试回答您的一些问题:

  • 你说得对<代码>供应商/应该置身事外。但是,不是
    编写器.lock
    。基本上,你没有