我使用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的默认设置,并详细介绍一些要避免的常见陷阱。
-
安装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的系统/帮助表等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;
-
配置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服务器添加指令。在
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 {}
如前所述,内置的Webserver仅用于开发。它是缓慢的和开放的各种攻击。您可以像使用web服务器运行任何其他应用程序一样运行您的服务。Symfony网站上有一个指南,告诉你如何做到这一点。
http://symfony.com/doc/current/deployment.html或者如果你有云服务器的根访问权限,你可以配置你的web服务器
https://symfony.com/doc/current/setup/web_server_configuration.html