2016-10-28 35 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

あなたのWebサーバーを構成することができます。パブリックに直面しているマシンのWebサーバーは、ローカル開発サーバーよりも多くの責任を負うため、もう少し構成が必要です。

プロダクション用(またはステージング用)には、ApacheまたはNginxのような実績のあるWebサーバーを使用します。

ここで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

    それがあなたに1つを求めるならば、ルートMySQLパスをダウンしてください。 (まだインストールされていない場合は、など)

  2. 設定MySQLの

    sudo mysql_install_db MySQLのシステム/ヘルプ表を初期化するために、

    sudo /usr/bin/mysql_secure_installation権限テーブルをリロードし、テストテーブルをドロップします。

    MySQLシェルにジャンプし、あなたのアプリケーションの&ユーザを作成します。

    mysql -u root -pと入力して、プロンプトが表示されたらrootのPWを入力します。

    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/html/web

    DocumentRoot /var/www/htmlをこのアプリのウェブフォルダからの要求にサービスを提供するディレクトリのapacheを伝えます。

    また、ServerName white-macbookServerName example.comに変更してください。ここでexample.comは、ご使用のサーバーで指定されているドメイン名です。

    最後に、AllowOverride All行も追加して、.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> 
    

    変更することだけappapp_dev

    は、次のようになりますあなたのweb/フォルダ内の.htaccessファイルをドロップします。

    apache2サービスの設定を変更した後、再起動してください:sudo service restart apache2

    は、作曲のインストールなど

    を定期的なSF2スキーマの作成を実行し、その後、実際にファイルをアップ機能Apacheユーザーがそれらにアクセス権を持っていることを確認してください!

    さらに、1つのサービスファイル以外のユーザーとして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アーキテクチャを使用するものは何もありません。 – Otuyh

+0

別のこと:サーバーを起動せずにローカルにプロジェクトにアクセスしようとすると、HTMLの応答ではなく404Jsonが返されます。 { エラー: { コード:404、 メッセージ:「見つからない」 } } – Otuyh

0

同様に、組み込みWebサーバーは開発専用です。 あらゆる種類の攻撃に対して遅く開いています。 Webサーバーで他のアプリケーションと同様にサービスを実行できます。 Symfonyサイトには、その方法を示すガイドがあります。

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

それとも、クラウドサーバーへのrootアクセス権を持っている場合は、本番環境でのserver:runコマンドのequivaluentはもう少し複雑です

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

+0

しかし、どのような "サーバー:実行" に相当するコマンド?なぜなら、私はちょうどそこにコードを入れて、それは動作しませんので。 REST API用にサーバーを起動する必要があります。 – Otuyh

関連する問題