Symfony内置Web服务器在外部环境



我使用FOSRestBundle在本地配置了一个web服务,它工作得很好。我只需要写

来启动我的服务
php bin/console server:run xxx.xxx.x.xx:port 

一切都准备好了

但是后来我读了一些关于symfony web服务器的文档,这些信息让我感到困惑:

内置web服务器意味着在受控的环境。它不是为公共网络而设计的。

我应该如何在我的云环境中使用它?如果我想让它公开,我应该如何启动我的REST服务而不使用这个内置服务器?

什么相当于"server:run"命令?如果我只是把代码放在那里,它不会工作。我需要为我的REST API启动服务器。

在生产环境中等价的server:run命令更复杂一些。面向公众的机器上的web服务器比本地开发服务器承担更多的责任,因此它需要更多的配置。

对于生产(甚至是登台)目的,使用生产就绪的web服务器,如Apache或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的系统/帮助表等

    sudo /usr/bin/mysql_secure_installation drop test table, reload特权表

    进入MySQL shell,创建一个用户&

    mysql -u root -p,并在提示时提供您的根pw。

    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服务器添加指令。

    web/文件夹中放入一个.htaccess文件,看起来像这样:

    <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模式创建、编译器安装等。

    然后,确保提供文件的apache用户确实可以访问它们!

    另外,在以用户身份运行composer *cache:clear后,写权限可能会混淆,www-data将需要这个权限来写日志和获取缓存文件。快速解决方案:

    chown -R your-unix-user:www-data ./appfind ./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 {}

如前所述,内置的Webserver仅用于开发。它是缓慢的和开放的各种攻击。您可以像使用web服务器运行任何其他应用程序一样运行您的服务。Symfony网站上有一个指南,告诉你如何做到这一点。

http://symfony.com/doc/current/deployment.html

或者如果你有云服务器的根访问权限,你可以配置你的web服务器

https://symfony.com/doc/current/setup/web_server_configuration.html

最新更新