2016-10-28 46 views
0

我使用FOSRestBundle在本地配置了一个Web服务,并且它工作的很完美。我需要写的唯一启动我的服务是Symfony在外部环境下的内置Web服务器

php bin/console server:run xxx.xxx.x.xx:port 

它的所有设置。

但后来我读到关于symfony的Web服务器的一些文件,并将此信息困惑我:

The built-in web server is meant to be run in a controlled environment. It is not designed to be used on public networks.

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

什么等同于“server:run”命令?如果我只是把代码放在那里,它将无法工作。我需要为我的REST API启动服务器。

回答

1

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

对于生产(或甚至分段)目的,请使用生产就绪的Web服务器,如ApacheNginx

我会在这里的基于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到跌落试验台,重载授权表。

    跳入MySQL shell并为您的应用程序创建一个用户& db。

    mysql -u root -p,并在出现提示时提供root权限。

    mysql> CREATE USER 'otuyh'@'localhost' IDENTIFIED BY 'password';将创建您的otuyh用户,密码为password

    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 ./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 {} \

+0

我做了几乎所有你说的,但有几件事:AllowOverride VirtualHost里面的所有内容都是不允许的,当我试图访问我的域时,给我HTTP错误500.我真的赞赏你的帮助,但它是还没工作=( – Otuyh

+0

其他信息:我的项目没有使用默认的symfony体系结构,它唯一的东西是FOSRestBundle,它只在我启动本地web服务时才起作用,没有它,我的项目没有任何东西,它是一个很大的web服务我需要启动,我不知道如何。 – Otuyh

+0

另一件事:当我试图在本地访问我的项目没有启动服务器,它返回一个404 json,而不是500的HTML响应。 { 错误: { 代码:404, 消息:“未找到” } } – Otuyh

0

像上面提到的内置的Web服务器仅用于开发。 对各种攻击都很缓慢而且开放。 您可以像使用Web服务器的任何其他应用程序一样运行您的服务。 Symfony网站上有一个指南,告诉你如何做到这一点。

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

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

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

+0

但是,什么是相当于 “服务器:运行” 命令?因为如果我只是把代码放在那里,它将不起作用。我需要为我的REST API启动服务器。 – Otuyh