外部环境中的 Symfony 内置 Web 服务器
Symfony Built-in Web Server on an external environment
我使用 FOSRestBundle 在本地配置了一个 Web 服务,它运行良好。我唯一需要写的来开始我的服务是
php bin/console server:run xxx.xxx.x.xx:port
一切就绪。
但后来我阅读了一些关于 symfony 网络服务器的文档,这些信息让我感到困惑:
The built-in web server is meant to be run in a controlled
environment. It is not designed to be used on public networks.
我应该如何在我的云环境中使用它?如果我想做这个public,我应该如何在不使用这个内置服务器的情况下启动我的 REST 服务?
什么等同于 "server:run" 命令?如果我只是把代码放在那里,它不会工作。我需要为我的 REST API.
启动服务器
如前所述,内置网络服务器仅供开发使用。
它很慢并且容易受到各种攻击。
您可以 运行 您的服务,就像使用网络服务器的任何其他应用程序一样。
Symfony 站点上有一个指南向您展示了如何做到这一点。
http://symfony.com/doc/current/deployment.html
或者,如果您拥有云服务器的根访问权限,您可以配置您的网络服务器
https://symfony.com/doc/current/setup/web_server_configuration.html
server:run
命令在生产环境中的等价性有点复杂。 public 面向机器上的 Web 服务器比本地开发服务器承担更多责任,因此需要更多配置。
出于生产(甚至临时)目的,请使用生产就绪的 Web 服务器,例如 Apache or Nginx。
我将在此处分享基于 Debian (Ubuntu) 系统的 apache 默认设置,并详细说明一些要避免的常见陷阱。
安装LAMP组件
ssh
进入你的机器,然后运行这个命令来确保apache,php,mysql,等等,都安装好了!
首先,从存储库中获取最新数据:
sudo apt-get update
你需要 运行 symfony 的 LAMP 组件:
sudo apt-get install apache2 mysql-server libapache2-mod-auth-mysql php5-mysql php5 libapache2-mod-php5 php5-mcrypt
如果它向您索取,请务必保存根 MySQL 通行证。 (如果您还没有安装它。)
配置MySQL
sudo mysql_install_db
初始化 MySQL 的 system/help 表等
sudo /usr/bin/mysql_secure_installation
删除测试表,重新加载权限表。
跳转到 MySQL shell 并为您的应用创建用户和数据库。
mysql -u root -p
,并在出现提示时提供您的根密码。
mysql> CREATE USER 'otuyh'@'localhost' IDENTIFIED BY 'password';
将使用密码 password
.
创建您的 otuyh
用户
mysql> CREATE DATABASE otuyh_app;
将创建您的应用 运行 所需的数据库。
mysql> GRANT ALL PRIVILEGES ON otuyh_app.* TO 'otuyh'@'localhost';
mysql> FLUSH PRIVILEGES;
配置Apache(server:run
的生产版本)
将您的项目克隆或上传到 /var/www/html
。
编辑 /etc/apache2/sites-enabled/000-default.conf
并更改行:
DocumentRoot /var/www/html
到 DocumentRoot /var/www/html/web
这会告诉 apache 哪个目录为来自您应用程序的 web 文件夹的请求提供服务。
此外,将行 ServerName white-macbook
更改为 ServerName example.com
,其中 example.com 是指向您的服务器的域名。
最后,在其中也添加一个 AllowOverride All
行,以明确说明您的 .htaccess
文件也可以为 Web 服务器添加指令。
将 .htaccess 文件拖放到 web/
文件夹中,如下所示:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
# Explicitly disable rewriting for front controllers
RewriteRule ^app_dev.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
# Change below before deploying to production
RewriteRule ^(.*)$ app_dev.php [QSA,L]
</IfModule>
当您准备好将环境更改为生产环境时,将 app_dev
更改为 app
。
确保在更改配置后重新启动 apache2 服务:sudo service restart apache2
。
运行 您的常规 sf2 架构创建、composer 安装等
然后,确保提供文件的 apache 用户确实可以访问它们!
此外,在 运行 宁 composer *
或 cache:clear
作为一个用户而不是服务文件的用户之后,写入权限可能会混淆,并且 www-data
将需要写入日志和获取缓存文件的权限。快速解决方案:
chown -R your-unix-user:www-data ./app
find ./app/cache -type d -exec chmod 775 {} \;
find ./app/logs; -type d -exec chmod 775 {} \;
find ./app/cache -type f -exec chmod 664 {} \
find ./app/logs -type f -exec chmod 664 {} \
我使用 FOSRestBundle 在本地配置了一个 Web 服务,它运行良好。我唯一需要写的来开始我的服务是
php bin/console server:run xxx.xxx.x.xx:port
一切就绪。
但后来我阅读了一些关于 symfony 网络服务器的文档,这些信息让我感到困惑:
The built-in web server is meant to be run in a controlled environment. It is not designed to be used on public networks.
我应该如何在我的云环境中使用它?如果我想做这个public,我应该如何在不使用这个内置服务器的情况下启动我的 REST 服务?
什么等同于 "server:run" 命令?如果我只是把代码放在那里,它不会工作。我需要为我的 REST API.
启动服务器如前所述,内置网络服务器仅供开发使用。 它很慢并且容易受到各种攻击。 您可以 运行 您的服务,就像使用网络服务器的任何其他应用程序一样。 Symfony 站点上有一个指南向您展示了如何做到这一点。
http://symfony.com/doc/current/deployment.html
或者,如果您拥有云服务器的根访问权限,您可以配置您的网络服务器
https://symfony.com/doc/current/setup/web_server_configuration.html
server:run
命令在生产环境中的等价性有点复杂。 public 面向机器上的 Web 服务器比本地开发服务器承担更多责任,因此需要更多配置。
出于生产(甚至临时)目的,请使用生产就绪的 Web 服务器,例如 Apache or Nginx。
我将在此处分享基于 Debian (Ubuntu) 系统的 apache 默认设置,并详细说明一些要避免的常见陷阱。
安装LAMP组件
ssh
进入你的机器,然后运行这个命令来确保apache,php,mysql,等等,都安装好了!首先,从存储库中获取最新数据:
sudo apt-get update
你需要 运行 symfony 的 LAMP 组件:
sudo apt-get install apache2 mysql-server libapache2-mod-auth-mysql php5-mysql php5 libapache2-mod-php5 php5-mcrypt
如果它向您索取,请务必保存根 MySQL 通行证。 (如果您还没有安装它。)
配置MySQL
sudo mysql_install_db
初始化 MySQL 的 system/help 表等sudo /usr/bin/mysql_secure_installation
删除测试表,重新加载权限表。跳转到 MySQL shell 并为您的应用创建用户和数据库。
mysql -u root -p
,并在出现提示时提供您的根密码。
创建您的mysql> CREATE USER 'otuyh'@'localhost' IDENTIFIED BY 'password';
将使用密码password
.otuyh
用户mysql> CREATE DATABASE otuyh_app;
将创建您的应用 运行 所需的数据库。mysql> GRANT ALL PRIVILEGES ON otuyh_app.* TO 'otuyh'@'localhost';
mysql> FLUSH PRIVILEGES;
配置Apache(
server:run
的生产版本)将您的项目克隆或上传到
/var/www/html
。编辑
/etc/apache2/sites-enabled/000-default.conf
并更改行:DocumentRoot /var/www/html
到DocumentRoot /var/www/html/web
这会告诉 apache 哪个目录为来自您应用程序的 web 文件夹的请求提供服务。
此外,将行
ServerName white-macbook
更改为ServerName example.com
,其中 example.com 是指向您的服务器的域名。最后,在其中也添加一个
AllowOverride All
行,以明确说明您的.htaccess
文件也可以为 Web 服务器添加指令。将 .htaccess 文件拖放到
web/
文件夹中,如下所示:<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteBase / # Explicitly disable rewriting for front controllers RewriteRule ^app_dev.php - [L] RewriteCond %{REQUEST_FILENAME} !-f # Change below before deploying to production RewriteRule ^(.*)$ app_dev.php [QSA,L] </IfModule>
当您准备好将环境更改为生产环境时,将
app_dev
更改为app
。确保在更改配置后重新启动 apache2 服务:
sudo service restart apache2
。运行 您的常规 sf2 架构创建、composer 安装等
然后,确保提供文件的 apache 用户确实可以访问它们!
此外,在 运行 宁
composer *
或cache:clear
作为一个用户而不是服务文件的用户之后,写入权限可能会混淆,并且www-data
将需要写入日志和获取缓存文件的权限。快速解决方案:chown -R your-unix-user:www-data ./app
find ./app/cache -type d -exec chmod 775 {} \;
find ./app/logs; -type d -exec chmod 775 {} \;
find ./app/cache -type f -exec chmod 664 {} \
find ./app/logs -type f -exec chmod 664 {} \