Разворачиваем локальный сервер на windows

Инструкция по установке LAMP

Откройте терминал и введите команду:


sudo apt-get install lamp-server^

После ввода пароля администратора, пройдет проверка, какие пакету уже есть в операционной системе, а какие следует установить.

Появится вопрос: «Хотитие продолжить?». Вводите букву д и жмите Enter.

Начнется процесс инсталляции.

От вас потребуется только дважды ввести пароль администратора MySQL, остальное будет сделано автоматически.

Как только установка LAMP на Ubuntu будет закончена, откройте браузер и введите адрес локального сервера: http://localhost. Должна появится тестовая страница с надписью «It works!».

Если для запуска, остановки и перезагрузки Denwer’а используются три ярлыка на рабочем столе, то в LAMP для этих целей используются команды:

sudo etcinit.dapache2 start
sudo etcinit.dapache2 stop
sudo etcinit.dapache2 restart

Корневым каталогом локального сайта будет директория /var/www. По умолчанию добавлять или изменять в ней файлы может только администратор. При желании это можно изменить, задав для этой директории права доступа 777 такой командой:

sudo chmod -R 777 varwww

После этого любой пользователь может делать с этой папкой и файлами в ней все что угодно.

Проверим работоспособность PHP. Для этого скачайте файл test.php (распакуйте архив) и скопируйте его в каталог /var/www. Введите в браузере следующий URL адрес: http://localhost/www/test.php/. Должна появится страница с подробной информацией об используемой версии PHP.

MySite Web Hosting

  • MySite | Website Hosting — Find reliable website hosting and a variety of affordable personal and business hosting packages at MySite.com.

  • MySite | Blogs — Blogs create a face for your website — start your free or professional blog today at MySite.com.

  • MySite | Domains — Register a domain, find a hosting package, and be ready to launch your website immediately with MySite.com.

  • MySite | E-commerce — Add e-commerce to your website and watch your sales improve with an online store from MySite.com

  • MySite | VPS — With VPS hosting at MySite.com, you get the convenience of owning a server without any of the risks or hassle.

  • Registering, building, hosting, and launching a website on the web aren’t as tough and costly as you may think. In fact, it’s more affordable than ever thanks to MySite. MySite offers amazing web design tools and services that allow you to easily create an eye-catching website, have it hosted on the web for free, and do everything from run a shopping cart or blog to share emails with friends and family. Get on the web for less with MySite.

Конфигурация виртуального хоста

И, самое главное — конфигурация виртуального хоста

Здесь важно не накосячить, а, иначе, ничего не заработает. Переходите в директорию, где они находятся:

Существует несколько вариантов создания виртуальных хостов:

Можно под каждый конфиг создать отдельный файл

Важно только не забыть создать символьную ссылку в папке sites-enabled Занести все конфиги сайтов в один в файл default, и каждый виртуальных хост хранить в конструкции server {} server {} server {}

Мне нравится вариант 2. Все изменения делаем в файле default. Зайдя в этот файл, вы вероятнее всего уже увидите закомментированный кусок кода ниже, начинающийся со слова server … Вы можете либо создать новый хост ниже, либо заменить этот текст

Обязательно сделайте все по инструкции и обратите внимание на важные моменты, и я уверен, у вас все получится. Это оффициальная рекомендуемая конфигурация для настройки под фрэймворк yii2 (но я немного изменил под свои нужды), найти оригинал можно тут:

В данной настройке нужно обратить внимание на следующие поля:

  • server_name — это доменное имя, после ввода которого в адресную строку, пользователь сможет получить информацию из папки root, о ее настройке ниже
  • root — это директория, в которой хранится сайт
  • access_log и error_log — это логирование всех заходов и ошибок на сайте. Мы указываем путь до файлов
  • fastcgi_pass — Задаёт адрес FastCGI-сервера. Адрес может быть указан в виде доменного имени или IP-адреса, порта.

Чтобы проверить наличие файла, воспользуйтесь командой:

После того, как все заполнено, вам нужно перезагрузить сервер и fpm. Делается с помощью следующих команд:

 Если во время перезагрузки произошли какие-нибудь ошибки, то можно запустить команду проверки nginx:

В случае успеха должно быть выдано следующее сообщение:


nginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful

Если же какие-то ошибки, то нужно внимательно почитать ее текст и разобраться… Вероятнее всего, с первого раза сервер запустить не удасться, но если же вам удалось, то вы везунчик 🙂

Step 6: Finish the Installation in your Web Browser

Now you can access the Nextcloud web install wizard using HTTPS connection.

https://nextcloud.example.com

To complete the installation, you need to create an admin account, enter the path of Nextcloud data folder, enter database details you created in step 2. You can use the default as host address, or you can enter , as MariaDB listens on port 3306.

The data folder is where users’ files are stored. For security, it’s best to place the data directory outside of Nextcloud webroot directory. So instead of storing users’ files under , we can change it to . which can be created with the following command:

sudo mkdir /var/www/nextcloud-data

Then make sure Apache user () has write permission to the data directory.

sudo chown www-data:www-data /var/www/nextcloud-data -R

Прежде чем начать настройку uWSGI

virtualenv

Убедитесь, что вы используете virtualenv, если нет его нужно установить (позже мы опишем, как установить общесистемный uwsgi):

virtualenv uwsgi-tutorial
cd uwsgi-tutorial
source bin/activate

Django

Установите Django в свой virtualenv, создайте новый проект и перейдите в проект:

pip install Django
django-admin.py startproject mysite
cd mysite

О домене и о порте

В этом статье мы назовем наш домен example.com. Замените это доменное имя на свое полное доменное имя или IP-адрес.

Повсеместно, мы будем использовать порт 8000 для публикации на веб-сервере, так же, как сервер запуска Django делает это по умолчанию. Конечно, вы можете использовать любой порт, который хотите, но я выбрал этот, чтобы он не конфликтовал с тем, что веб-сервер уже может делать.

Windows: Как разместить сайт, используя ваш компьютер в качестве сервера WAMP

Во-первых, давайте попробуем разместить у себя веб-сайт на своем персональном компьютере с операционной системой Windows.

Шаг 1: Установите программное обеспечение WAMP

Чтобы сделать это очень просто, мы будем использовать программу установки WAMP (из которых их несколько) под названием WampServer. Вы также можете установить каждый пакет вручную, но этот процесс требует гораздо больше работы и подвержен ошибкам.

Пакет WampServer поставляется с последними выпусками Apache, MySQL и PHP.

WampServer screenshotWampServer — одна из нескольких сред, доступных для создания приложений Apache, MySQL и PHP в Windows.

Сначала загрузите 32-битный или 64-битный WAMP-бинарный код и начните установку. Просто следуйте инструкциям на экране, и когда это будет сделано, запустите WampServer.

Примечание. Может быть конфликт порта 80 с вашим программным обеспечением Skype, но есть решение для этого.

Шаг 2: Использование WampServer

После установки каталог www будет создан автоматически. Скорее всего, вы найдете его здесь: c: \ wamp \ www

Из этого каталога вы можете создавать подкаталоги (называемые «проектами» в WampServer) и помещать любые файлы HTML или PHP в эти подкаталоги.

Главный экран WampServer Главный экран вашего локального хоста в WampServer должен выглядеть примерно так. Если вы нажмете на ссылку localhost в меню WampSever или откроете свой интернет-браузер с URL-адресом http: // localhost, вам должен отобразиться главный экран WampServer.

Шаг 3: Создание HTML-страницы

Чтобы протестировать наш WampServer, мы можем поместить файл примера с именем «info.php» в наш www-каталог.

Перейдите непосредственно в этот каталог, нажав «www каталог» в меню WampServer.


Оттуда создайте новый файл с содержимым ниже и сохраните его.

Теперь вы можете перейти по адресу http: //localhost/info.php, чтобы увидеть детали вашей установки PHP. Вы можете создать любую структуру файлов HTML и PHP в соответствии с вашими потребностями.

Шаг 4: Настройте MySQL

Если вы нажмете на пункт меню phpMyAdmin, вы можете начать настройку баз данных MySQL (которые могут понадобиться для CMS, такой как WordPress).

Экран входа в систему phpMyAdmin откроется в новом окне браузера. По умолчанию имя пользователя admin будет root, и вы можете оставить поле пароля пустым.

Оттуда вы можете создавать новые базы данных MySQL и изменять существующие. Однако большинство программ, таких как WordPress, автоматически создадут для вас новую базу данных.

Шаг 5: Сделайте сайт общедоступным

По умолчанию файл конфигурации Apache запрещает любые входящие HTTP-соединения, кроме случаев, когда кто-то приходит с локального хоста.

Чтобы сделать ваш сайт общедоступным, вам нужно изменить файл конфигурации Apache (httpd.conf). Вы можете найти и отредактировать этот файл, перейдя в меню WampServer, нажав «Apache» и выбрав «httpd.conf».

Замените две строки выше на следующие:

Перезапустите все сервисы WampServer, нажав «Перезапустить все сервисы» в меню.

Теперь сайт должен быть доступен за пределами вашего локального хоста. Убедитесь, что брандмауэр ПК не блокирует веб-запросы. Возможно, вам также потребуется настроить переадресацию портов на вашем интернет-маршрутизаторе.

Шаг 6: Использование доменного имени

Чтобы использовать доменное имя, например example.com, с вашей установкой WAMP, нам нужно сначала настроить некоторые файлы. Предположим, что у нашего домена example.com есть запись A в вашем DNS с IP-адресом 100.100.100.100.

Сначала нам нужно добавить следующую строку в файл C: \ Windows \ system32 \ drivers \ etc \ hosts:

Теперь нам нужно снова отредактировать httpd.conf (доступный через меню WampServer), чтобы добавить виртуальный хост. После открытия этого файла найдите «Виртуальные хосты» и раскомментируйте строку после него, например:

Теперь нам нужно добавить файл вручную в «C: \ wamp \ bin \ apache \ Apache-VERSION \ conf \ extra \» (VERSION — это ваша версия Apache).

Затем создайте файл в блокноте со следующим содержимым и сохраните его в этом каталоге Apache.

Нажмите «Перезапустить все сервисы» в меню WampServer, чтобы активировать эти изменения.

Теперь ваш сайт также должен быть доступен через его доменное имя.

Кстати, есть еще вариант арендовать хостинг или VPS сервер. К примеру, VPS Гонконг можно заказать за довольно отличными тарифами.

Настройка прав

Скорее всего, после создания папок у вашего сервера не будет доступа на запись в них данных. Очень часто различные CMS или фрэймворки используют системы кэширования и логирования, которые пишут данные в файлы. Если у сервера будут проблемы с правами, то он будет выдавать ошибки, что, согласитесь, не есть хорошо. Чтобы разрешить проблему с правами, нужно поменять пользователя папки, ведь ее мы создавали от пользователя root, а nginx работает от пользователя www-data, чтобы изменить пользователя папки выполним следующую команду:

Ключ «-R» означает, что мы выполняем команду рекурсивно на все вложенные папки, что в данном случае очень логично. Бывают еще ситуации, когда нужно дать права на чтение (при моем варианте это не пригодилось), но на всякий случай:

Вообще, тему с правами на папки я бы советовал почитать отдельно, так как от этого напрямую зависит безопасность сервера. Зачастую хватает просто смены пользователя на папку, а все права внутри приложения (если вы используете готовое коробочное решение) уже давно разрулены.

What’s NextCloud?


NextCloud is a free open-source self-hosted cloud storage solution. It’s functionally similar to Dropbox. Proprietary cloud storage solutions (Dropbox, Google Drive, etc) are convenient, but at a price: they can be used to collect personal data because your files are stored on their computers. If you worry about privacy, you can switch to NextCloud, which you can install on your private home server or on a virtual private server (VPS). You can upload your files to your server via NextCloud and then sync those files to your desktop computer, laptop or smartphone. This way you have full control of your data.

Получение справки в командной строке

Для получения справки о функциях PHP прямо в командной строке используется опция —rf.

php --rf readline
Function  {

  - Parameters  {
    Parameter #0 
  }
}

Ну как-то так… а чего вы хотели — это же консоль.

 php --rf readfile
Function  {

  - Parameters  {
    Parameter #0 
    Parameter #1 
    Parameter #2 
  }
}

Насколько я понял, в строке Parameters в фигурных скобках пишется количество аргументов функции, строка required означает, что аргумент обязательный, а строка optional — что аргумент опциональный. О функции аргументов иногда можно догадаться по их имени, например, $filename. Информации о том, какое действие выполняет функция, видимо, нет.

Настройка файла hosts

Теперь остался последний момент. Если вы сейчас введете в адресной строке mysite.ru, то, вероятно, получите ошибку. Но, если настроить файл hosts и указать, что по этому домену он должен отправляться на наш сервер, то сайт заработает. Для этого откроем файл:

В этом файле вы увидите примерно следующее:

127.0.0.1       localhost127.0.0.1       site.loc

Нам сюда нужно добавить еще одну строчку:

Обязательно обратите внимание, что между IP адресом и Доменным именем должна быть табуляция, а не пробел

Теперь можете попробовать зайти на ваш сайт по новому адресному имени http://mysite.ru и получите такую долгожданную фразу — «Ура! Вы смогли настроить Virtual Host в nginx!» 

Step 5: Enable HTTPS

Now you can access the Nextcloud web install wizard in your web browser by entering the domain name for your Nextcloud installation.

nextcloud.example.com

If the web page can’t load, you probably need to open port 80 in firewall.

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

And port 443 as well.

sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT

Before entering any sensitive information, we should enable secure HTTPS connection on Nextcloud. We can obtain a free TLS certificate from Let’s Encrypt. Install Let’s Encrypt client (certbot) from Ubuntu 20.04 repository.

sudo apt install certbot python3-certbot-apache

is the Apache plugin. Next, run the following command to obtain a free TLS certificate using the Apache plugin.

sudo certbot --apache --agree-tos --redirect --staple-ocsp --email  -d nextcloud.example.com

Where:

  • –apache2: Use the Apache authenticator and installer
  • –agree-tos: Agree to Let’s Encrypt terms of service
  • –redirect: Enforce HTTPS by adding 301 redirect.
  • –staple-ocsp: Enable OCSP Stapling.
  • –email: Email used for registration and recovery contact.
  • -d flag is followed by a list of domain names, separated by comma. You can add up to 100 domain names.

I found that Certbot can’t automatically add HSTS header in the Apache config file for Nextcloud. If you would like to enable HSTS (HTTP Strict Transport Security), then edit the file.

sudo nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf

We can then add the following line in the SSL server block to enable HSTS header.

Header always set Strict-Transport-Security "max-age=31536000"

Like below.

Save and close the file. Then text Apache configurations.

sudo apache2ctl -t

If the test is successful, reload Apache for the change to take effect.

sudo systemctl reload apache2

The above configuration will get A+ score on SSL test.

PHP не может сохранить файл даже если достаточно прав на запись

На самом деле это может случиться не только при запуске PHP скриптов из командной строки, но и при работе скрипта на веб-сервере. Но при запуске в консоли больше условий для получения этой проблемы: PHP скрипт не сохраняет файл в папку, на которую установлены права на запись для кого угодно (777).

Такое поведение может выглядеть необъяснимым, если вы не знаете о директиве open_basedir в главном конфигурационном файле php.ini. Данная директива ограничивает все файловые операции теми папками, которые указаны с ней. Пример:

open_basedir = /srv/http/:/etc/webapps/:/usr/share/webapps/:/tmp/:

Данная запись означает, что PHP скрипт может записывать файлы в папку /srv/http/, а также в папки /etc/webapps/, /usr/share/webapps/ и /tmp/.

Причём если директива open_basedir вообще не настроена (строка с ней, например, закомментирована), то PHP может записывать в любую папку, если у текущего пользователя достаточно прав на запись.

При работе в консоли PHP скрипт может пытаться сохранить файлы, например, в текущую папку — если эта папка не указана в open_basedir, но при этом сама директива open_basedir настроена, то возникнет описанная проблема: PHP не сможет записывать файлы даже в папку открытую для всех.

Чтобы избавиться от этой ошибки есть несколько вариантов:

  • добавить папку, в которую вы хотите сохранить файл, в перечень open_basedir
  • выбрать для сохранения папку уже указанную в open_basedir
  • запустить интерпретатор PHP без чтения настроек из конфигурационных файлов (в этом случае не будет учтена директива open_basedir, а также вообще все другие конфигурации

Чтобы запустить PHP скрипт без учёта настроек файла php.ini используйте опцию -n, например:

php -n скрипт.php

Кстати, чтобы узнать, какие именно файлы настроек учитываются при работе PHP, выполните следующую команду:

php --ini

Пример вывода:

Configuration File (php.ini) Path: /etc/php
Loaded Configuration File:         /etc/php/php.ini
Scan for additional .ini files in: /etc/php/conf.d
Additional .ini files parsed:      (none)

Как в PHP получить данные от пользователя в консоли

Благодаря передаваемым аргументам, скрипт может выполнять действия не только с прописанными в нём данными, но и с другими значениями, указанными при запуске скрипта.

Кстати, при работе в окружении веб-сервера, то есть когда PHP скрипт выполняет задачи для веб-сайта, возможность передать ему аргументы реализована с помощью HTTP методов GET и POST. Эти аргументы передаются перед запуском скрипта, и уже после запуска PHP скрипта новые данные отправить нельзя — нужно ждать завершения работы программы, и при необходимости запустить её ещё раз с новыми данными.

Во время работы скрипта может потребоваться ввод новых данных, в консоли это достигается с помощью строки запроса, в которую пользователь может ввести значение и нажать Enter для передачи его скрипту. В контексте веб-сайта такой возможности — передать данные уже во время выполнения скрипта — нет. То есть консольный запуск PHP скриптов с аргументами не только проще (не нужно возиться с HTML формой), но и даже более гибкий.

В PHP для запроса пользователю используется функция readline.

Эта функция одинаково работает и на Windows и на Linux. Причём на Linux она имеет интерактивные возможности Bash, например, сохраняет историю ввода, к которой можно вернуться с помощью стрелок. На Windows эта возможность появилась начиная с PHP 7.1.

Пример консольного PHP скрипта, которые запрашивает у пользователя данные в приглашении командной строки:

<?php

$len_min = readline("Минимальное количество символов в пароле: ");
$len_max = readline("Максимальное количество символов в пароле: ");
$base = readline("Основа пароля (0 - цифры; 1 - маленькие буквы; 2 - большие буквы): ");

echo "Полученные исходные данные: \r\nДлина пароля от $len_min до $len_max символов ";
switch ($base) {
    case 0:
        echo "и основой пароля являются цифры.";
        break;
    case 1:
        echo "и основой пароля являются маленькие буквы.";
        break;
    case 2:
        echo "и основой пароля являются большие буквы.";
        break;
}

Заключение

  • OAuth 2.0 — используется для регистрации и входа пользователей на сайты с помощью соцсетей. А также для получения данных пользователей из соцсетей.
  • OpenID Connect — используется для аутентификации пользователей и позволят предоставить им доступ к своим закрытым данным на сайтах. Также OpenID Connect служит для реализации сложных сценариев взаимодействия в корпоративных SSO системах.
  • WebAuthn — используется для добавления на сайт возможности аутентификации с помощью внешнего физического ключа или отпечатка пальца.

Выводы

  • Очевидно, что современный сайт должен реализовать все возможные способы регистрации и авторизации, чтобы у пользователя был осознанный выбор.
  • Появилась возможность никогда не хранить пароль пользователя, чтобы не компрометировать свою репутацию, а хранить только логины и зашифрованные личные данные.
  • Имеет смысл отдать аутентификацию пользователей облачным платформам, таким как Facebook или Google, т.к. в них работают лучшие специалисты по безопасности, которые могут предусмотреть все нюансы безопасности.
  • Предлагаю с оптимизмом смотреть в будущее, т.к. протокол WebAuthn — реальный шанс избавится от парольного ада нашего времени!

It’s only the beginning!


С этим читают