外部环境中的 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 默认设置,并详细说明一些要避免的常见陷阱。

  1. 安装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 通行证。 (如果您还没有安装它。)

  2. 配置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;

  3. 配置Apache(server:run的生产版本)

    将您的项目克隆或上传到 /var/www/html

    编辑 /etc/apache2/sites-enabled/000-default.conf 并更改行:

    DocumentRoot /var/www/htmlDocumentRoot /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 {} \