Php 打包和部署Symfony网站
我是Symfony的新手,来自.NET世界。使用Symfony(4)文档,我成功地创建了一个简单的网站。现在我想把它付诸实践,但我正在努力寻找任何有用的信息,我应该怎么做才能“打包”所有必要的东西并部署它。确实,有一个页面描述了部署(),但我发现它缺少以下信息:Php 打包和部署Symfony网站,php,symfony,package,Php,Symfony,Package,我是Symfony的新手,来自.NET世界。使用Symfony(4)文档,我成功地创建了一个简单的网站。现在我想把它付诸实践,但我正在努力寻找任何有用的信息,我应该怎么做才能“打包”所有必要的东西并部署它。确实,有一个页面描述了部署(),但我发现它缺少以下信息: 要包括/排除的内容(显然我不想打包dev依赖项,部署composer文件似乎也没有任何意义) 要更改的内容(有.env文件-包含APP_env和APP_SECRET-在哪里使用这些值?) 我的主机使用文件夹www进行公共演示,我是否必
- 要包括/排除的内容(显然我不想打包
依赖项,部署dev
文件似乎也没有任何意义)composer
- 要更改的内容(有
文件-包含.env
和APP_env
-在哪里使用这些值?)APP_SECRET
- 我的主机使用文件夹
进行公共演示,我是否必须在将www
目录重命名为public
之前更改/配置某些内容www
- 我是否必须配置
以不通过PHP发送图像/css/js.htaccess
+ 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
- 托管能够从名为
的git分支进行部署(每当我推到此分支时,它都会调用production
)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
。基本上,你没有