From 240ef9df36665c0a80b194fe133b6f535519b6e7 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 22 Jun 2014 19:16:29 -0400 Subject: [PATCH 1/3] Proofreading the new Azure deployment article Many minor changes to make things shorter and just a little more lively :) --- cookbook/deployment/azure-website.rst | 261 ++++++++++++-------------- 1 file changed, 125 insertions(+), 136 deletions(-) diff --git a/cookbook/deployment/azure-website.rst b/cookbook/deployment/azure-website.rst index fc3b2d8b15e..c3d49b9c68e 100644 --- a/cookbook/deployment/azure-website.rst +++ b/cookbook/deployment/azure-website.rst @@ -4,71 +4,75 @@ Deploying to Microsoft Azure Website Cloud ========================================== -Simply put, this cookbook illustrates how to deploy a very simple **Symfony2 -Standard Edition** web application. You can easily download a copy of the -Symfony Standard Edition on the `downloads`_ page. Also, this cookbook assumes -you're already familiar with the basic worfklows of managing code with Git. - This step by step cookbook describes how to deploy a small Symfony2 web application to the Microsoft Azure Website cloud platform. It will explain how to setup a new Azure website including configuring the right PHP version and -global environment variables. Finally, the document will demonstrate how to -leverage the Git source code management system and Composer dependencies manager -to deploy your Symfony application to the cloud. +global environment variables. The document also shows how to you can leverage +Git and Composer to deploy your Symfony application to the cloud. Setting up the Azure Website ---------------------------- -To setup a new Microsoft Azure Website, first `signup to Azure`_ or signin with -your credentials. Once connected to your `Azure Portal`_ interface, scroll down -to the bottom and select the **New** panel. In this panel, click on **Web Site** -and choose **Custom Create** as shown in the following screenshot. +To setup a new Microsoft Azure Website, first `signup with Azure`_ or sign in +with your credentials. Once you're connected to your `Azure Portal`_ interface, +scroll down to the bottom and select the **New** panel. On this panel, click +**Web Site** and choose **Custom Create**: .. image:: /images/cookbook/deployment/azure-website/step-01.png :alt: Create a new custom Azure Website -You will be prompted to fill in some required information like the website url, -the hosting plan, the datacenter region, the database storage engine and the -version control publishing method. +Step 1: Create Web Site +~~~~~~~~~~~~~~~~~~~~~~~ + +Here, you will be prompted to fill in some basic information. .. image:: /images/cookbook/deployment/azure-website/step-02.png :alt: Setup the Azure Website -Fill the Azure Website url you would like to use for your Symfony application, +For the URL, enter the URL that you would like to use for your Symfony application, then pick **Create new web hosting plan** in the region you want. By default, a *free 20 MB SQL database* is selected in the database dropdown list. In this -tutorial, the Symfony application will be connected to a MySQL database. Pick -the **Create a new MySQL database** option in the dropdown list. You can keep -the **DefaultConnection** string name. Finally, check the box **Publish from -source control** to enable a Git repository and go to the next step. +tutorial, the Symfony app will connect to a MySQL database. Pick the +**Create a new MySQL database** option in the dropdown list. You can keep +the **DefaultConnection** string name. Finally, check the box +**Publish from source control** to enable a Git repository and go to the +next step. + +Step 2: New MySQL Database +~~~~~~~~~~~~~~~~~~~~~~~~~~ -In this step, you will be prompted to setup your MySQL database storage with a +On this step, you will be prompted to setup your MySQL database storage with a database name and a region. The MySQL database storage is provided by Microsoft -in partnership with ClearDB. Designate the name of the database you want to -create and pick the same region you've selected for the hosting plan -configuration in the previous step. +in partnership with ClearDB. Choose the same region you selected for the hosting +plan configuration in the previous step. .. image:: /images/cookbook/deployment/azure-website/step-03.png :alt: Setup the MySQL database -Afterwards, agree to the terms and conditions, and click on the right arrow to -go to the next step to configure your Git repository. In this third step, select -a **local Git repository** item and click on the right arrow to configure your -Azure Website credentials. +Agree to the terms and conditions and click on the right arrow to continue. + +Step 3: Where is your source code +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Now, on the third step, select a **Local Git repository** item and click +on the right arrow to configure your Azure Website credentials. .. image:: /images/cookbook/deployment/azure-website/step-04.png :alt: Setup a local Git repository -This is the final step to setup the Azure Website. Select a username and a -secured password, they will become essential identifiers to connect to the FTP -server and also to push your application code to the Git repository. +Step 4: New user name and password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Great! You're now on the final step. Create a username and a secure password: +theese will become essential identifiers to connect to the FTP server and +also to push your application code to the Git repository. .. image:: /images/cookbook/deployment/azure-website/step-05.png :alt: Configure Azure Website credentials -Your Azure Website is now up and running. You can check it by browsing the Azure -Website url configured in the first step. You should see the following display -in your web browser: +Congratulations! Your Azure Website is now up and running. You can check +it by browsing to the Website url you configured in the first step. You should +see the following display in your web browser: .. image:: /images/cookbook/deployment/azure-website/step-06.png :alt: Azure Website is running @@ -79,49 +83,46 @@ Website. .. image:: /images/cookbook/deployment/azure-website/step-07.png :alt: Azure Website Control Panel -Though your Azure Website is now technically ready to receive the Symfony -application code, Symfony requests some additional technical requirements to be -fullfilled in order to make it run on the cloud platform. The next section of -this cookbook describes how to properly configure PHP on Azure to meet the -Symfony requirements. +Your Azure Website is now ready, but to run a Symfony site, you need to configure +just a few additional things. -Meeting the Symfony Technical Requirements ------------------------------------------- +Configuring the Azure Website for Symfony +----------------------------------------- This section of the tutorial details how to configure the correct version of PHP -to run Symfony. It also includes how to enable some mandatory PHP extensions and -how to properly configure PHP for a production environment. +to run Symfony. It also shows you how to enable some mandatory PHP extensions +and how to properly configure PHP for a production environment. Configuring the Latest PHP Runtime ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Even though Symfony requires at least PHP 5.3.3 to run, it's always recommended -to rely on the most recent PHP runtime version whenever possible. The PHP 5.3 -version is no longer supported by the PHP core team. To update your PHP version -on Azure, go to the **Configure** tab of the control panel. +Even though Symfony only requires PHP 5.3.3 to run, it's always recommended +to use the most recent PHP version whenever possible. PHP 5.3 is no longer +supported by the PHP core team, but you can update it easily in Azure. + +To update your PHP version on Azure, go to the **Configure** tab of the control +panel and select the version you want. .. image:: /images/cookbook/deployment/azure-website/step-08.png :alt: Enabling the most recent PHP runtime from Azure Website Control Panel -Click on the **Save** button in the bottom bar to save your changes and restart -the web server to run the new version of PHP. +Click the **Save** button in the bottom bar to save your changes and restart +the web server. .. note:: Choosing a more recent PHP version can greatly improve runtime performance. PHP 5.5 ships with a new built-in PHP accelerator called ZendOptimizer+ that - replaces the APC tool. On an Azure Website, ZendOptimizer+ is already - enabled and there is no need to install and setup any APC server. + replaces APC. On an Azure Website, ZendOptimizer+ is already enabled + and there is no need to install and setup APC. The following screenshot shows the output of a :phpfunction:`phpinfo` script - run from the Azure Website to verify that PHP 5.5 is running with + run from an Azure Website to verify that PHP 5.5 is running with ZendOptimizer+ enabled. .. image:: /images/cookbook/deployment/azure-website/step-09.png :alt: ZendOptimizer+ Configuration -The next section describes how to change some PHP internal settings. - Tweaking php.ini Configuration Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -136,10 +137,9 @@ directory (``site/wwwroot``). memory_limit = 256M upload_max_filesize = 10M -None of these settings is required to be overriden on Azure Website. The default -PHP configuration is already pretty good, so this is just an example to show -that you can easily tweak PHP internal settings by uploading your custom -``.ini`` file. +None of these settings *needs* to be overridden. The default PHP configuration +is already pretty good, so this is just an example to show how you can easily +tweak PHP internal settings by uploading your custom ``.ini`` file. You can either manually create this file on your Azure Website FTP server under the ``site/wwwroot`` directory or deploy it with Git. You can get your FTP @@ -152,47 +152,42 @@ Website repository. This cookbook has a section dedicated to explaining how to configure your Azure Website Git repository and how to push the commits to be deployed. See - `Deploying from Git`_ section. You can also learn more about configuring PHP + `Deploying from Git`_. You can also learn more about configuring PHP internal settings on the official page `PHP MSDN documentation`_. -The next section explains how to enable the PHP ``intl`` extension that Symfony -requires to run correctly. - -Enabling the PHP Intl Extension +Enabling the PHP intl Extension ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is the tricky part of the guide! At the time of writing this cookbook, -Microsoft Azure Website provided the ``intl`` extension, but it's not enabled in -the main PHP configuration. However, Azure Website allows you to upload and -enable custom PHP extensions. To enable the ``intl`` extension, there is no need -to upload any DLL files as the ``php_intl.dll`` file already exists on Azure. In -fact, this file just has to be moved into the custom website extension -directory. +Microsoft Azure Website provided the ``intl`` extension, but it's not enabled +by default. To enable the ``intl`` extension, there is no need to upload +any DLL files as the ``php_intl.dll`` file already exists on Azure. In fact, +this file just needs to be moved into the custom website extension directory. .. note:: The Microsoft Azure team is currently working on enabling the ``intl`` PHP - extension by default. In the near future, the following steps will become - obsolete to enable the ``intl`` extension. + extension by default. In the near future, the following steps will no + longer be necessary. To get the ``php_intl.dll`` file under your ``site/wwwroot`` directory, simply -access the online **Kudu** tool by browsing the following url: +access the online **Kudu** tool by browsing to the following url: .. code-block:: text https://[your-website-name].scm.azurewebsites.net **Kudu** is a set of tools to manage your application. It comes with a file -explorer, a command line prompt, a log stream and configuration settings summary -page. Of course, this section is forbidden if you're not authorized entry with +explorer, a command line prompt, a log stream and a configuration settings summary +page. Of course, this section can only be accessed if you're logged in to your main Azure Website account. .. image:: /images/cookbook/deployment/azure-website/step-10.png :alt: The Kudu Panel From the Kudu front page, click on the **Debug Console** navigation item in the -main menu and choose **CMD**. You should access the **Debug Console** page that -shows a file explorer and a console prompt below. +main menu and choose **CMD**. This should open the **Debug Console** page +that shows a file explorer and a console prompt below. In the console prompt, type the following three commands to copy the original ``php_intl.dll`` extension file into a custom website ``ext/`` directory. This @@ -204,14 +199,14 @@ new directory must be created under the main directory ``site/wwwroot``. $ mkdir ext $ copy "D:\Program Files (x86)\PHP\v5.5\ext\php_intl.dll" ext -You should get the same output as the following screenshot: +The whole process and output should look like this: .. image:: /images/cookbook/deployment/azure-website/step-11.png :alt: Executing commands in the online Kudu Console prompt To complete the activation of the ``php_intl.dll`` extension, you must tell Azure Website to load it from the newly created ``ext`` directory. This can be -easily done by registering a global ``PHP_EXTENSIONS`` environment variable from +done by registering a global ``PHP_EXTENSIONS`` environment variable from the **Configure** tab of the main Azure Website Control panel. In the **app settings** section, register the ``PHP_EXTENSIONS`` environment @@ -228,10 +223,9 @@ properly enabled: .. image:: /images/cookbook/deployment/azure-website/step-13.png :alt: Intl extension is enabled -The PHP environment setup is now complete. The two remaining sections of this -tutorial explain how to configure the Git repository to push the code to -production and how to install and configure the Symfony application after it's -deployed. +Great! The PHP environment setup is now complete. Next, you'll learn how +to configure the Git repository and push code to production. You'll also +learn how to install and configure the Symfony app after it's deployed. Deploying from Git ~~~~~~~~~~~~~~~~~~ @@ -249,19 +243,19 @@ following command in your terminal: to install and configure it on your local machine. In the Azure Website Control panel, browse the **Deployment** tab to get the -Git repository url where to push the code. +Git repository URL where you should push your code: .. image:: /images/cookbook/deployment/azure-website/step-14.png :alt: Git deployment panel -Then, go to your local Symfony application root directory and connect your local -Git repository to the Azure Website upstream. If your Symfony application is not -yet under Git, you must first create a Git repository in your Symfony -application directory with the ``git init`` command and commit to it with the -``git commit`` command. +Now, you'll want to connect your local Symfony application with this remote +Git repository on Azure Website. If your Symfony application is not yet stored +with Git, you must first create a Git repository in your Symfony application +directory with the ``git init`` command and commit to it with the ``git commit`` +command. -Also, make sure your Symfony repository owns a ``.gitignore`` file at its root -directory with at least the following content: +Also, make sure your Symfony repository has a ``.gitignore`` file at its root +directory with at least the following contents: .. code-block:: text @@ -281,12 +275,11 @@ directory with at least the following content: /web/config.php The ``.gitignore`` file asks Git not to track any of the files and directories -that match the patterns. This means these files won't be deployed to the Azure +that match these patterns. This means these files won't be deployed to the Azure Website. -To deploy the code to the Azure Website Git repository, create a remote -dependency of the local Git repository by running the following commands into -your local terminal: +Now, from the command line on your local machine, type the following at the +root of your Symfony project: .. code-block:: bash @@ -314,10 +307,10 @@ directory on the Azure Website filesystem. Configure the Symfony Application ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The last step to make the Symfony application work online is to setup its -configuration and install the third party dependencies it requires that aren't -tracked by Git. Switch back to the online **Console** of the Kudu application -and execute the following commands in it: +PHP has been configured and your code has been pushed with Git. The last +step is to configure the application and install the third party dependencies +it requires that aren't tracked by Git. Switch back to the online **Console** +of the Kudu application and execute the following commands in it: .. code-block:: bash @@ -326,20 +319,20 @@ and execute the following commands in it: $ php -d extension=php_intl.dll composer.phar install The ``curl`` command retrieves and downloads the Composer command line tool and -installs it at the root of the ``site/wwwroot`` directory. Then, run the -``install`` command of Composer with the ``php`` executable to make it download -and install all necessary third-party libraries. +installs it at the root of the ``site/wwwroot`` directory. Then, running +the Composer ``install`` command downloads and installs all necessary third-party +libraries. -Execution may take a while depending on the number of third-party dependencies +This may take a while depending on the number of third-party dependencies you've configured into your ``composer.json`` file. .. note:: - The ``-d`` switch allows to quickly override/add any ``php.ini`` settings - to the PHP runtime. So in this command, we are forcing PHP to use the - ``intl`` extension as it is not enabled by default in Azure Website at the - moment. Soon, this ``-d`` option will no longer be needed since - Microsoft will enable the ``intl`` extension by default. + The ``-d`` switch allows you to quickly override/add any ``php.ini`` settings. + In this command, we are forcing PHP to use the ``intl`` extension, because + it is not enabled by default in Azure Website at the moment. Soon, this + ``-d`` option will no longer be needed since Microsoft will enable the + ``intl`` extension by default. At the end of the ``composer install`` command, you will be prompted to fill in the values of some Symfony settings like database credentials, locale, mailer @@ -379,9 +372,9 @@ from the MySQL connection string. // ... Don't forget to answer all the questions. It's important to set a unique random -string to the ``secret`` variable. Also, for the mailer configuration, Azure -Website doesn't provide a built-in mailer service. You should consider -configuring the host-name and credentials of your third-party mailing service if +string for the ``secret`` variable. For the mailer configuration, Azure Website +doesn't provide a built-in mailer service. You should consider configuring +the host-name and credentials of some other third-party mailing service if your application needs to send emails. .. image:: /images/cookbook/deployment/azure-website/step-18.png @@ -397,9 +390,9 @@ MySQL database. $ php app/console doctrine:schema:update --force -This command builds the tables and indexes in your MySQL database. If your +This command builds the tables and indexes for your MySQL database. If your Symfony application is more complex than a basic Symfony Standard Edition, you -may have additional commands to execute for setup. +may have additional commands to execute for setup (see :doc:`/cookbook/depoyment/tools`). Make sure that your application is running by browsing the ``app.php`` front controller with your web browser and the following url: @@ -416,17 +409,15 @@ Configure the Web Server At this point, the Symfony application has been deployed and works perfectly on the Azure Website. However the ``web`` folder is still part of the url, which -does not conform to good practice and is not recommended. The final step in this -tutorial is to configure the web server to make the url point to the ``web`` -folder, and avoid others browsing or tampering with your application code. To do -so, you need to create and deploy (see previous manipulation with Git) the -following ``web.config`` file: - -The ``web.config`` file must be located at the root of your project next to the -``composer.json`` file, ``web/`` directory and other directories. This file is -the Microsoft IIS Server equivalent of the well-known ``.htaccess`` file from -Apache. For a Symfony application, configure this file with the following -content: +you definitely don't want. But don't worry! We can easily configure the web +server to point to the ``web`` folder and remove the ``web`` in the URL (and +guarantee that nobody can access files outside of the ``web`` directory.) + +To do this, create and deploy (see previous section about Git) the following +``web.config`` file. This file must be located at the root of your project +next to the ``composer.json`` file. This file is the Microsoft IIS Server +equivalent of the well-known ``.htaccess`` file from Apache. For a Symfony +application, configure it with the following content: .. code-block:: xml @@ -463,26 +454,24 @@ content: As you can see, the latest rule ``RewriteRequestsToPublic`` is responsible for rewriting any urls to the ``web/app.php`` front controller which allows you to -skip the ``web/`` folder from the url pattern. The first rule called -``BlockAccessToPublic`` matches all url patterns that contain the ``web/`` -folder and serve a ``403 Forbidden`` HTTP response instead. This example is -based on Benjamin Eberlei's sample you can find on Github in the -`SymfonyAzureEdition`_ bundle. +skip the ``web/`` folder in the URL. The first rule called ``BlockAccessToPublic`` +matches all url patterns that contain the ``web/`` folder and serves a +``403 Forbidden`` HTTP response instead. This example is based on Benjamin +Eberlei's sample you can find on Github in the `SymfonyAzureEdition`_ bundle. Deploy this file under the ``site/wwwroot`` directory of the Azure Website and -browse your application urls without the ``web/app.php`` segment in the urls. +browse to your application without the ``web/app.php`` segment in the URL. Conclusion ---------- -This cookbook explained how to deploy a Symfony application to the Microsoft -Azure Website Cloud platform. It also showed that Symfony can be easily -configured and executed on a Microsoft IIS web server. The process remains -simple and easy to implement. Microsoft continues working to reduce the number -of necessary steps so that deployment becomes even easier. +Nice work! You've now deployed your Symfony application to the Microsoft +Azure Website Cloud platform. You also saw that Symfony can be easily configured +and executed on a Microsoft IIS web server. The process is simple and easy +to implement. And as a bonus, Microsoft is continuing to reduce the number +of steps needed so that deployment becomes even easier. -.. _`downloads`: http://symfony.com/download/ -.. _`signup to Azure`: https://signup.live.com/signup.aspx +.. _`signup with Azure`: https://signup.live.com/signup.aspx .. _`Azure Portal`: https://manage.windowsazure.com .. _`PHP MSDN documentation`: http://blogs.msdn.com/b/silverlining/archive/2012/07/10/configuring-php-in-windows-azure-websites-with-user-ini-files.aspx .. _`git-scm.com`: http://git-scm.com/download From efb80895c0ee50061bd271d64411d1d0d36e112f Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 22 Jun 2014 19:34:19 -0400 Subject: [PATCH 2/3] Fixing typo --- cookbook/deployment/azure-website.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cookbook/deployment/azure-website.rst b/cookbook/deployment/azure-website.rst index c3d49b9c68e..f69dbda02ed 100644 --- a/cookbook/deployment/azure-website.rst +++ b/cookbook/deployment/azure-website.rst @@ -392,7 +392,7 @@ MySQL database. This command builds the tables and indexes for your MySQL database. If your Symfony application is more complex than a basic Symfony Standard Edition, you -may have additional commands to execute for setup (see :doc:`/cookbook/depoyment/tools`). +may have additional commands to execute for setup (see :doc:`/cookbook/deployment/tools`). Make sure that your application is running by browsing the ``app.php`` front controller with your web browser and the following url: From 511518344930a048f278420104d9407709e8c27e Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Tue, 1 Jul 2014 14:41:56 -0500 Subject: [PATCH 3/3] Lots of fixes thanks to @xabbuh and @stof! --- cookbook/deployment/azure-website.rst | 30 +++++++++++++-------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/cookbook/deployment/azure-website.rst b/cookbook/deployment/azure-website.rst index f69dbda02ed..4c324d9a76e 100644 --- a/cookbook/deployment/azure-website.rst +++ b/cookbook/deployment/azure-website.rst @@ -51,7 +51,7 @@ plan configuration in the previous step. Agree to the terms and conditions and click on the right arrow to continue. -Step 3: Where is your source code +Step 3: Where Is your source code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Now, on the third step, select a **Local Git repository** item and click @@ -60,11 +60,11 @@ on the right arrow to configure your Azure Website credentials. .. image:: /images/cookbook/deployment/azure-website/step-04.png :alt: Setup a local Git repository -Step 4: New user name and password -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Step 4: New Username and Password +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Great! You're now on the final step. Create a username and a secure password: -theese will become essential identifiers to connect to the FTP server and +these will become essential identifiers to connect to the FTP server and also to push your application code to the Git repository. .. image:: /images/cookbook/deployment/azure-website/step-05.png @@ -83,7 +83,7 @@ Website. .. image:: /images/cookbook/deployment/azure-website/step-07.png :alt: Azure Website Control Panel -Your Azure Website is now ready, but to run a Symfony site, you need to configure +Your Azure Website is ready! But to run a Symfony site, you need to configure just a few additional things. Configuring the Azure Website for Symfony @@ -112,16 +112,16 @@ the web server. .. note:: Choosing a more recent PHP version can greatly improve runtime performance. - PHP 5.5 ships with a new built-in PHP accelerator called ZendOptimizer+ that - replaces APC. On an Azure Website, ZendOptimizer+ is already enabled - and there is no need to install and setup APC. + PHP 5.5 ships with a new built-in PHP accelerator called OPCache that + replaces APC. On an Azure Website, OPCache is already enabled and there + is no need to install and setup APC. The following screenshot shows the output of a :phpfunction:`phpinfo` script run from an Azure Website to verify that PHP 5.5 is running with - ZendOptimizer+ enabled. + OPCache enabled. .. image:: /images/cookbook/deployment/azure-website/step-09.png - :alt: ZendOptimizer+ Configuration + :alt: OPCache Configuration Tweaking php.ini Configuration Settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -153,7 +153,7 @@ Website repository. This cookbook has a section dedicated to explaining how to configure your Azure Website Git repository and how to push the commits to be deployed. See `Deploying from Git`_. You can also learn more about configuring PHP - internal settings on the official page `PHP MSDN documentation`_. + internal settings on the official `PHP MSDN documentation`_ page. Enabling the PHP intl Extension ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -324,7 +324,7 @@ the Composer ``install`` command downloads and installs all necessary third-part libraries. This may take a while depending on the number of third-party dependencies -you've configured into your ``composer.json`` file. +you've configured in your ``composer.json`` file. .. note:: @@ -408,15 +408,15 @@ Configure the Web Server ~~~~~~~~~~~~~~~~~~~~~~~~ At this point, the Symfony application has been deployed and works perfectly on -the Azure Website. However the ``web`` folder is still part of the url, which -you definitely don't want. But don't worry! We can easily configure the web +the Azure Website. However, the ``web`` folder is still part of the url, which +you definitely don't want. But don't worry! You can easily configure the web server to point to the ``web`` folder and remove the ``web`` in the URL (and guarantee that nobody can access files outside of the ``web`` directory.) To do this, create and deploy (see previous section about Git) the following ``web.config`` file. This file must be located at the root of your project next to the ``composer.json`` file. This file is the Microsoft IIS Server -equivalent of the well-known ``.htaccess`` file from Apache. For a Symfony +equivalent to the well-known ``.htaccess`` file from Apache. For a Symfony application, configure it with the following content: .. code-block:: xml