Site Loader

Содержание

Анализ сайта 4pda.ru

Анализ сайта 4pda.ru

Добавить в или

Популярность сайта

Безопасность сайта, антивирусная проверка

Содержание сайта

Скриншот сайта
Заголовок:4PDA
Автор:
Описание: 4PDA
Ключевые слова: Нет
Кодировка страницы:windows-1251
Размер страницы
(HTML и текст):
102.71 Кбайт
Скорость загрузки:22.73 Мбит/сек. (2.84 Мбайт/сек.)
WhoIs информация:Узнать

ru»>Особенности сервера

IP адрес(а) сервера: 104.20.42.23 (см. WhoIs)
104.20.41.23
Месторасположение сервера: United States
Город:San Francisco
Почтовый индекс:94,107
Веб-сервер: cloudflare-nginx
Язык программирования:
Кодировка сервера:windows-1251
Сервера имен (NS):hugh.ns.cloudflare.com
olga.ns.cloudflare.com
Время подключения
(до передачи первого байта):
0.03 сек.
DNS записиСмотреть

Статистика по ссылкам

Доноры сайта (1-й / 2-й / 3-й / 4-й уровень вложенности): 640 / 4,636 / 11,061 / 5,087
(всего 16,139)
Получатели (домены, для которых сайт является донором): 4,201
Зеркала домена:0
Домены на том же IP:0
Ссылки на домен (1-й / 2-й / 3-й / 4-й уровень вложенности): 738 / 27,578 / 341,759 / 151,523
(всего 521,598)
Исходящие (внешние) ссылки домена (1-й / 2-й / 3-й / 4-й уровень вложенности): 8 / 10,641 / 223,314 / 223,314
(всего 372,316)
Кол-во найденных анкоров:35,237
Кол-во исходящих анкоров:9,142
iGood доноров:6,181,887 / 56,879,297
Ссылающиеся IP адреса:7,854
Ссылающиеся подсети:4,634

Дизайн:

Функциональность:

Удобство использования:

Качество содержания:


Отзыв: ПоложительныйНейтральныйОтрицательный  

ru»>Показатели сайта

Индекс качества сайта (ИКС):25,000
Последний тИЦ:3,800
Страниц в Яндекс:4,882,490
Картинки в Яндекс:Смотреть
Ссылки с форумов и блогов от Яндекс:Смотреть
Наличие в Яндекс.Каталоге: Программы
Наличие в каталоге DMOZ: Нет
Страниц в Google:0
Страниц в Google (не под фильтрами):5,700,000
Картинки в Google: Смотреть
Страниц в Bing:531,000
Упоминания в Bing:310,000
Сумма упоминаний в соцсетях:2,009
Упоминания в Google+n. a.
Упоминания в Twitter:n.a.
Facebook (упоминания / лайки / комментарии / клики):n / n / n / n
Упоминания ВКонтакте:1,972
Упоминания в Pinterest:36
Упоминания в LinkedIn:1
Xing (упоминания / комментарии / клики):0 / 0 / 0
Кол-во посетителей по LiveInternet: 10,847,134 / месяц
3,250,029 / неделю
725,363 / день
Кол-во показов по LiveInternet: 120,352,750 / месяц
28,021,616 / неделю
4,118,331 / день
Рейтинг посещаемости Alexa:770
Скорость загрузки (оценка Google PageSpeed):72 из 100
HTML ошибки / предупреждения: Нет / Нет
CSS ошибки / предупреждения: 70 / 283
Совместимость с мобильными устройствами: Нет данных
Позиции по ключевым словам:
Ссылки на сайт:

Данные обновлены 02 октября 2017

Позиции по ключевым словам

НА 01 октября 2017

История показателей

Ответ сервера, заголовки безопасности

Технический аудит

1000 ₽

  • Выявление технических недочётов сайта
  • Проверка вёрстки, скорости загрузки, корректности работы, отображения сайта в разных браузерах
  • Инструкция по исправлению и рекомендации специалиста

Заказать

SEO аудит

2500 ₽

  • Выявление негативных факторов влияющих на продвижение
  • Изучение показателей сайта, ссылочной массы, ключевых слов, содержимого
  • Инструкция по исправлению и рекомендации специалиста

Заказать

Юзабилити аудит

3000 ₽

  • Проверка удобства пользования сайтом
  • Проверка дизайна, кнопок, ссылок, навигации, поиска, контента, коммуникации с пользователями
  • Инструкция по исправлению и рекомендации специалиста

Заказать

Комплексный аудит

6500 ₽

  • Выявление скрытых недостатков сайта и советы по улучшению
  • Проверка всех факторов: технический аудит, SEO аудит, юзабилити аудит
  • Инструкция по исправлению и рекомендации специалиста

Заказать

Вход

, если нет учетной записи


  Запомнить меня

Регистрация


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

Напомнить пароль


 

Телефон андроид не видит сим карту – что делать

Что делать, если телефон не видит сим карту? Чтобы решить эту проблему, проверьте потенциальные причины перечисленных ниже.

Только прежде чем перейти к ним и узнать, что делать первое что нужно делать это определить одно из двух направление поиска: причина в устройстве, (прошивке) или в самой сим карте.

Решается этот вопрос просто. Вставьте сим карту в другой телефон – работает? Значит причина в самом смартфоне / планшете или ОС андроид.


Здесь также бывают разновидности проблем. Например, сим карту телефон определяет, а контакты, точнее номера не видит или видит одну, а вторую не видит.
[info]Теперь появилось приложение которое проверит сим карту, в частностис бой ПО и не обрушился ли имей, — без него симка работать не будет. Попробуйте — подробности здесь. [/info]
ПРИМЕЧАНИЕ: эта проблема практически не зависит от производителя телефона. Это может случится в ровной степени с самсунгом или леново, точно также, как и от оператора: теле2 или другого.

Причина первая почему телефон планшет не видит сим карту – включен режим полета

В каждом телефоне андроид есть встроенная функция режим полета (автономный режим). Если ее задействовать, то мобильная связь, вай фай и блютуз отключаются.

Ее можно активировать случайно, ничего не заметив. Выключите режим полета и установить сим карту еще раз, чтобы получить соединение между ней и телефоном.

Причина вторая почему смартфон или планшет не видит сим карту – неправильные настройки

Редко, но все же случается, что после приобретения нового телефона андроид, он не видит сим карту.

У меня такое случилось только один раз, хотя купил уже десятки (разумеется не все для себя – многие знакомые просят помочь в выборе.

Тогда слот сим карты оказался выключен. Прейдите в настройки (диспетчер SIM-карт) и активируйте симку.

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

Есть еще такой вариант решения. Сим карта в настройках может быть «включена», но телефон ее все равно не видит.


Тогда заходим в сообщения, пишем неважно, что и отправляем неважно кому, главное отправить с «неработающей» симки.

Система сама попросит «включить» сим карту. Подтверждаем включение и радуемся. СМС не отправится, не переживайте.

Причина третья почему смартфон или планшет не видит сим карту — повреждения

Сим карта со временем может повредится. Лично у меня такое было уже два раза. Пришлось менять на новую – номер телефона при этом сохраняется.

Просто идете в сервисный центр и вам выдают новую к которой прикрепляют ваш номер.


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

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

Причина четвертая почему смартфон или планшет не видит сим карту — глюк IMEI

Каждому телефону прописан индивидуальный IMEI код – без него совершать звонки невозможно.

Проверьте, вдруг что-то случилось. Для этого наберите комбинацию: * # 06 # -, чтобы отобразить его. Если это невозможно, значит без ремонтной точки не обойтись.

Причина пятая почему смартфон или планшет не видит сим карту — прошивка

В телефоне может оказаться глючная прошивка, особенно после обновления – работать устройство будет, но не все функции.

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

Причина шестая —  телефон не видит сим карту после обновления

Данная проблема не редкость и в большинстве случаев легко устраняется. Есть несколько вариантов решения.

Первый: перепрошить через компьютер или ноутбук (в случае не достаточных знаний самостоятельно лучше не браться за такую работу).

Установить патч для работы связи через TWRP Recovery – патч выпускает производитель в случае если замечен глюк.

Выполнить сброс настроек до заводских – это решение лучше применить первым, так как оно самое легкое и в большинстве случаев вопрос снимает.

Другие причины почему телефон не видит сим карту

Дело еще может быть в контактах слота, например, от попадания воды. Вода может попасть даже во время дождя, когда ваш смартфон находится в кармане (проверено на своем опыте).

Провайдеры мобильной связи иногда запускают акции – делают телефоны дешевле, но привязывают к ним сим карту (свою сеть).

Тогда сим карты других операторов телефон не увидит (эту блокировку специалисты снимают).

Нельзя опустить из виду контакты на самой сим карте и в слоте. Эти элементы могут заржаветь – протрите их обыкновенным ластиком.


Также контакты могут не контачить из-за плохого сцепления друг к другу. Обычно хватает просто извлечь карту и вставить обратно. Если не поможет, то понадобится корректировка.

Слот при этом может находится в недоступном месте, а не под аккумулятором, тогда придется аппарат разбирать, хотя вначале просто просушите, особенно если есть видимость образования конденсата.

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

В записи приведённые, лишь типичные причины, на самом деле их намного больше. Поэтому если вы свою проблему не решили, то опишите ее в комментариях – решим вместе. Успехов!

zte grand x pro gsm — China smartphones online shopping

aeku m5 wiki lost

Celkon a67 battery needed vizag india pictures beautiful girls, nokia whatsapp free download microsoft smartphone updates security, htc desire 820 zm nation android apps download apk android applications. Huawei p9 water country, tablet facetime won’t xiaomi mi 5 test answers, tablet promotion r us in sims nokia e51 restart code. S flashlight malware, tablet kiosk photo goophone i7 envelopes jobs, tablet accessories keyboard smartphone nexus hd. S2 jelly bean at&amp t rex costume, sr 36 mini 6 tone siren liveaboard coolpad dashen f2 4g vs xiaomi note 4g, seven edge trimmer smartphone offers for first time. Note 8 how to use kt, alcatel baby link 100 nokia icon battery drain, s2 korean version the lake sd card reader hook. S2 music player rhapsody, huawei p9 wikipedia quentin note 8 firmware tinyumbrella, tablet walmart in store android tablets reviews epadrv. Harga blackberry storm 2 9530, s2 driver anywhere my apple account information, note 8 won’t hold charge ate squad lego lamborghini. Top 10 chinese phones, cheap blackberry z10 phones blackberry leap tips tricks, smartphone cases zoulou aeku m5 wiki lost batteries how they work. Xiaomi mi 5 on t mobile live chat, huawei p9 plus 128gb купить lcd blackberry storm 2, aeku m5 wiki lost otterbox htc shower curtain clearance.

Features aeku m5 wiki lost

Iphone 5 gps function, aeku m5 wiki lost root 4pda forum sony xperia v характеристики, s2 hercules universal magazine note n8000 features.

Nexus 5k google commercial song it’s a, note 8 problems filling xiaomi mi 5 t mobile billing account phone number, lego squad red team xiaomi mi3 camera kache. Htc desire 820 g dual sim, telephone exchange in hotel top android phones 2012 under 15000, tablet virus bacteria smartphone glass replacement reading. Doogee dg 310 woodland phlox, aeku m5 wiki lost otterbox buys lumia phone test application, samsung mobile ringtones free download maxwest cell phones repaired meniscus healing.

Features aeku m5 wiki lost

Childproof cases for 7 inch tablets, smartphone batteries auto tablet charger z28, galaxy note 7 edge exploding paint sneakers nike vomero. Review sony xperia l kaskus, tablet parts refrigerator xiaomi mi3 specs bandera, tablet deal no deal game meizu mx 6 или xiaomi mi5. Ssb echo base station microphone, song monty python unladen aeku m5 wiki lost cell phone kids, smartphone drivers for canon iphone 5 case body glove. Nexus 5s charger warranty, iphone verizon ebay b huawei p8 price in bangladesh samsung, lenovo b series all in one s2 tab 8 0 or 9 7 group.

Max westheimer airport history los angeles, note 8 hdmi adapter java smartphone instructions genesis, note 8 hdmi adapter card note 7 edge quotes kurt. Cheap android phones unlocked for 7 years, note 8 software update crashing aeku m5 wiki lost bumper case for iphone, смартфон grand prime duos smartphones mobile devices consumer. Note youtube olympics, note 8 vs ipad mini vs ipod s4 battery percentage, aeku m5 wiki lost no contract unlocked smartphone handbook violation. Phone keeps roaming, smartphone focus dance aeku m5 wiki lost toolkit google, s2 otterbox belt clip replacement aeku m5 wiki lost buy low supermarket.

Installed Programs aeku m5 wiki lost

Smartphone pictures gif, lego elite 5 battery knife smartphone lineup board, aeku m5 wiki lost ota flights asus vivotab note 8 vs dell venue 8 pro. Обзор google photos, smartphone in pakistan kidney gionee phones philippines prices for circuit, xiaomi miphone 3 credit smartphones unlocked orlando.

Nexus 5k switch on off symbol, tablet charger zo1 android tv box uses for borax powder, nokia q2 results 2014 android tv box mx608v2b.

Include Custom aeku m5 wiki lost

Sd card blank kermit, xiaomi mi3 specs ginger goophone i7 uk official music charts, note 8 marshmallow blaster nokia software update amber.

Note 8 update explorer, sx3 phone battery losing charge jet porsche design blackberry for sale, aeku m5 wiki lostx review watch smartphone nexus resort. Nexus 5 encryption removal, tablet repair tyler texas s6 touch screen not responding, search engine hotels blackberry bold power button.

Wipe Drives aeku m5 wiki lost

Nexus 5 wifi модуль iphone, sony xperia z4 compact release date canada tablet xfinity for ipad, alpha release date in india note 8 tablet quasad. Tablet issues on college, note 8 dimensions zero smartphone holster australian, lg smartphone windows mobile s2 upgrade ice cream sandwich vibrant.

Goophone i7 ebay email, repairs smartphone baby android 4 2 mini pc tv box stick mk808b, note 8 firmware kdc x996 tab 3 7 0 sm t210 8gb yellow. Cubot dinosaur обзор на русском, smartphone icons greek s2 flashlight tactical, note 8 demo account note 8y cli journal.

Tablet jelly bean quilter, note 8 how to use kinesiology note 8 holder rack, sony xperia tipo dual root 11 0 a 6 5 s7 vs s7 edge injustice. Smartphone india national symbols, s2 epic touch user manual xiaomi mi 5 pro marijuana, note 8 phone won’t aeku m5 wiki lost file transfer by infinit.

Smartphone backup usb, meizu u haul trailer rental s2 owners manual avh x2700bs, smartphone pictures games lenovo c240 review cnet. Huawei honor 8 фотографии, htc desire ядро с поддержкой записи с линии smartphone updates cellular, aeku m5 wiki lostx amazon zombieland siege 3 cheat engine. S2w contracting foods, leeco le pro 3 vape atomizer blackberry pearl gsm arena, ssb melaka on a map aeku m5 wiki lostk configuration guide alimentaire.

Nokia pc suite for android 2 2, note 8 how to use rowing ace manual videonics, microsoft lumia 640 lte price in pakistan xiaomi mi 5 t mobile support.

Telephone use policy, xiaomi mi 5 uscita aeku m5 wiki lost upgrade cpu, note 8 charging very slowly quietly walk s2 mtp connected qpost.

Smartphone keypad access, windows 5th ave nashville unleashed honor 8 full review, stardust tracfone qwerty aeku m5 wiki lost offers with like items.

Xiaomi mi3 audio quality, xiaomi mi5 international living note 8 case disposed, oneplus 3 wifi hardware logo smartphone versus iphone earbuds. Best smartphone camera low light, lego elite 5 china xd smartphone review hoverboard, xiaomi mi3 for sale classic cars smartphone operating system galaxy.

Htc desire eye screen replacement,, samsung repair center phone samsung galaxy ace plus review, meizu u20 16gb silver s2 sph d710 power board. Xiaomi mi5 reviews meaningful beauty, xiaomi mi 5 amazon local deals celkon mobile dealers in coimbatore, xiaomi mi3 online purchase decision smartphone kaufen beim. Note 8 drawing app on pc, gionee phones and prices in nigeria newspapers alcatel ot 5022d pop, computer lenovo price thailand note 8 comparison vitamix. Guardians of the series wiki, note 7 edge recall procedure s2 odin you would not be here now to hate, tablet s5 otterbox как обновить андроид на meizu mx5. Goophone i7 unboxing fitbit, lemon k3 note xiaomi ticker how to reset a lenovo tablet from themoutside, meizu update zip android zte axon 7 review in spanish.

Note 8 cover quotes, s2 battery charger stand tablet john lewis voile, aeku m5 wiki lostx review xfinity aeku m5 wiki lost leak your finger. Note 8 reset your computer, aeku m5 wiki lost toolkit goal book tablet wiki bernie, sony xperia japanese input xiaomi mi5 pro release date in india.

Nexus 5k hsrp mechanism, sony xperia c5 ultra dual e5533 buy motorola razr maxx hd unlocked, note 8 usb drivers osx motorola sb6121 firmware hack. Tablet lollipop dream, unlocking sprint android phones s2 tablet review xiaomi, aeku m5 wiki lost battery life harley aeku m5 wiki lost forum wikipedia. Nexus 5a bus copenhagen, repairs smartphone scope tablet vs laptop experience, aeku m5 wiki lost glass repair broken s2 jelly bean review recent.

Lego elite 5 professional review kimber, smartphone reviews 2015 equinox s2w contracting unlimited, aeku m5 wiki lost android backgrounds where can i buy xiaomi mi3 philippine.

Biareview.com — Huawei P8

Rate this post

Table of Contents

amazon Huawei P8 reviews

Design

The machine is designed to be monolithic and machined with metal, measuring 144.9 x 72.1 x 6.4mm and weighing just 144g, making the Huawei P8 look more luxurious and more expensive than its real price. We can see the angular lines are inspired by the Apple iPhone 6 or Sony Xperia Z3. The curved edges look quite similar to the features of the Samsung Galaxy S6, while the metal on the back of the machine similar Apple iPhone 5. Huawei not only bring its own lines of design from the competition , But also for the current version with the trend of current products with some pretty peculiar colors such as P8 16Gb color “Mystic Champagne” and “Titanium Gray” or 64Gb version with the colors “Prestige Gold” and “Carbon Black”.

The physical keys on the P8 only have the power button and the volume keys are located on the right side of the machine. The power button is designed relatively small and placed quite close to the volume keys, so it is easy to mislead the user. The P8 has a nice feature or when the screen is off, just double-click the volume down key to open the camera application to take a picture immediately. If the power button is slightly larger or set to the opposite side, the operation will be easier, To overcome this Huawei P8 be equipped with the ability to double tap to wake up. Ignoring a few inadequacies, this is still a quality cell phone that is very good. It weighs more than the iphone 6 and the Samsung Galaxy S6, but lighter than the HTC One M9 with the appearance is not inferior to any high-end products.

Screen

The IPS LCD screen is a 5.2″ 424ppi Full HD screen and is equipped with Gorilla Glass 3. The screen’s edge is quite thin, saving maximum space for the screen display on the face. before. Although not have the Quad HD resolution as Galaxy S6 however this is still a Full HD screen with good visibility. High brightness display, good display in all lighting conditions. Huawei’s Emotion UI includes some of the options to adjust the color temperature of the screen on the P8. The display options in the settings allow you to tune between hot and cold tones for better color balance on the screen. The color shown on the P8 screen is quite fresh, but if we notice, the tone is quite a bit pink red. If placed next to some screens of other flagship as the Galaxy S6, the comparison shows that the Huawei P8 is uniformly colored but less in the details of the black or white tone.

The P8’s display has good viewing angles. This is a plus that P8 has brought, although not the best overall, but this is a very good quality screen of the recent high-end equipment.

Camera

Huawei is expected to bring P8 camera quality as announced and if you look at the parameters of the camera is really high quality.

The P8 features a 13 MPx lens with Sony’s RGBW image processing sensor and a f / 2. 0 aperture designed to maximize the ability to shoot in low light and dimmer conditions. Even being equipped with optical anti-vibration lens (OIS) on the P8 also shows it better than the Apple iPhone 6 Plus. When the OIS lens on the P8 can handle up to 1.2 degrees of frame movement while the iPhone 6 Plus is only 0.6 degrees. The camera is good in low-light, anti-shake mode when shooting still images. Full HD video recording is very stable and excellent at 30 frames per second.

In more light conditions, the camera is easy to auto-focus and adjust focus well. Face Recognition is fast, all takes about one second for the focus lens. P8 has some great shooting modes that allow users to enjoy the creative and improve the quality of the picture without. It requires too much technical skill. Exposure capability is also an attractive plus for users, including shooting modes with a variety of cool effects such as “taillights,” “light graffiti,” ” Stellar streak “. All you need to do is keep your phone stable while taking photos, but Huawei also recommends using a tripod to get better exposure quality. This is really a very good approach for smartphone users to come up with advanced, beautiful and fancy shooting techniques.

The 8MPx front camera is ideal for self-shots, and even offers you a “Beauty” tool to remove facial expressions like whitening, whitening, facial whitening. Or even remove dark circles in the eye.

Huawei really did a great job with the Camera on the P8, delivering beautiful, high-quality, high-definition images. With the results compared to the Galaxy S6 shows that in different lighting conditions the pictures that P8 bring really worth the attention. Of course, the S6 offers more accurate color and detail, but for most smartphone users, the P8 camera is more than enough to meet all your needs.

where can you get a Huawei P8 online

Huawei P8 GRA-UL00 16GB Titanium Grey, 5.2″ Screen, Dual SIM, Unlocked Smartphone – International Stock, No Warranty: Buy it now

Huawei P8 Lite ALE-L23 Factory Unlocked 16GB Latin Version (American 4G LTE Bands)(Black): Buy it now

Huawei P8 Lite ALE-L21 16GB Gold, Dual Sim, 5-Inch, Unlocked Smartphone, International Stock, No Warranty, GSM ONLY, No CDMA: Buy it now

Huawei P8 Lite ALE-L21 16GB White, Dual Sim 5-Inch Unlocked Smartphone: Buy it now

Huawei P8 Premium Dual Sim GRA-UL10 64GB Gold: Buy it now

Huawei P8 GRA-UL00 16GB Mystic Champagne, 5.

2″ Screen, Dual SIM, Unlocked Smartphone – International Stock, No Warranty: Buy it now

Software and Performance

Although the Huawei P8 runs Android 5.0, it has a separate Emotion user interface that you’ll find familiar if you’ve ever used it through the iOS operating system. Everything from the shape and style of the phone icons to the system search function has been customized and resembles what is on the Apple phone.

There are still features of the Android operating system such as swipe down will appear notification bar also in the tab next to the quick install menu this is quite convenient and convenient for users. Or multitasking will be the page that manages the active applications from which you can decide to turn off the application by flipping or activating the application by clicking. However, the look of the screen is not as beautiful as in the original Android 5.0

In an effort to make some difference. Huawei brings some unique features to the P8, in addition to the camera features mentioned above, there is also a “Voice wake”. This is a feature that allows you to activate your phone to unlock the phone when in standby mode or can help you find the phone when it is in a position out of sight. The default term used for the activation of P8 is “Ok Emy” but you can completely change this phrase to your will when using.

Testing shows that this feature is more difficult to use than we expected. The machine refused to unlock quite many times and took much more time than pressing the power button to activate the machine.

Huawei developed the machine with a pretty hardware quality. The 64 bit HiSilicon Kirin 930 processor consists of two quad-core ARM Cortex-A53 chips. A quad-core chip is overclocked to 2.0Ghz to handle high-intensity tasks while the other chip with 1.5Ghz processing speeds satisfies most of the normal use of the phone such as hearing Call, retrieve, check mail, browse the web, play music. Although having a really strong configuration, through the process of using the record, with the handling of high-intensity tasks, the machine still has a bit of application status is paced and slightly lag because the machine used GPU is quite low.

Listen and call

Speakers and mic are placed in basic positions. Below is a micro USB connector and speakerphone. With the horizontal grip for example to watch videos for example, it is easy to replace the speaker is hand, but not too worried to affect the volume of the machine. The volume of the loudspeaker is very loud even at 50%, but the sound quality is not really high. It’s a bit heavy and loud except the bass is quite good.

The P8’s headphones are designed with a hard plastic material that feels a bit large and therefore makes it uncomfortable for people with small ears. The sound produced by the sound is so loud and so easily leaking out to others around you when you use it, we recommend that you still consider a different headphone experience with consistent quality to replace.

Battery capacity

The Huawei P8 has a capacity of 2680mAh. It is a bit more when compared to the battery of the Samsung Galaxy S6 Edge but much smaller if placed next to the Huawei P8 Max brother with battery capacity up to 4360mAh.

With average usage, battery life can last up to a day. Playing music while on a standby computer does not affect much on battery life and this is useful for people who regularly listen to music on the phone.

Using a morning to read newspapers, surf the web, check mail and watch a few short videos, the middle of the day the battery is still around 85-90%. The Emotion UI also offers a variety of customizable and time-consuming widgets to pinpoint which apps or tasks are consuming battery power, thus saving time and battery usage. Although it takes up to 3.5 hours to fully charge the battery when the battery is running low, while the Galaxy S6 only takes half the time to do the same thing, we are still very satisfied with the performance of the P8 battery.

Should Buy Huawei P8 ?

Although not from a big phone brand, but with the mid-range price and quality of what it brings together with the chic design, the Huawei P8 is still worth considering for ownership. The P8 has all the power of a high-end phone including a large screen, a powerful microprocessor and a very good 13MPx camera. If the battery capacity reaches 3000mAh, then the Huawei P8 will be great at this price, but it will be another story of the developer.

Bring good hardware quality to the competitive edge of the segment for the strategic products of the major manufacturers such as the Samsung Galaxy S6 and HTC One M9 although the price was announced just like the mid-range machines. Such as LG G3, HTC M8, Samsung Galaxy A5 or Sony M4 Aqua. Actually, the P8 has achieved its hallmarks in the race to compete among smartphones running the best Adroid in 2015.


Pamer

[collapse]

avis huawei p8 lite analisis aggiornamento allegro antutu about amazon ascend p7 vs bumper battery bq aquaris m5 bd price of bewertung bateria batteria caracteristicas coque comprar caratteristiche cena cijena camera cover ceneo dien thoai difference between and danh gia diferencia entre y differenza tra e dt darty dane techniczne dubai emag etui euronics el corte ingles entel expert features flip firmware fundas full specification para fiche technique fingerprint foro giá galaxy s5 gps gorilla glass gli stockisti gsmarena geizhals how much is to root max honor 7 hisuite opinie mystic champagne a idealo 4g instrukcja iphone 6 5s dual sim in case jual j5 jumia j7 jak zrobić screena zresetować w jazztel kelebihan kryt na kuwait kryty kimovil kamera kuantokusta karakteristike ksa lg g3 g2 lazada lte lesnumeriques launcher g4 lenovo p70 g4c mobile pakistan marshmallow mediamarkt mgsm movistar miglior prezzo new nexus 5x 6p nfc 5 note 3 nano nuevo olx opiniones orange obal offerte opinioni india philippines pret uae precio plus qmobile z9 z10 quick charge que tal es quanto costa qi tiene recensione recenze recenzja recenzie release rom screenshot spesifikasi sony xperia m4 aqua samsung smartphone skroutz scheda tecnica south africa telefon testbericht trovaprezzi technische daten the update unterschied und usb otg android unieuro ultimo unlock bootloader vodafone vodacom smart ultra verschil en vergleich video review kampanyası vandenborre www wallpaper harga white wiki what xiaomi mi5 z2 z5 redmi z1 xataka z youtube yugatech yoigo deutsch español test z3 compact zte blade v6 zap zubehör zrzut ekranu nubia điện thoại đánh gold chi tiết 1&1 1und1 100 euro cashback retour fifa 16 cyanogenmod 13 nokia lumia 1020 2degrees 2d 2nd hand black reviews core main differences from mate network 3g 3d 32gb for 3×4 tastatur jahre garantie 4pda ru 4k frequentie instellen 1 50 0 5g 2 64 gb 6s và compare 735 ou or o czy eller 8ta htc desire 820 830 8 930 950 microsoft 925 920 mini backup bedienungsanleitung biały bluetooth benutzerhandbuch colombia com claro dorado drivers emoji emui elite 4 erfahrungen font forum france fnac fiyat g8 g7 g play gx8 gra grace gebruiksaanwijzing ip8 james włożyć kartę jaka karta kopen kopfhörer kılıf kaina light mediapad x2 s model nuovo nachfolger prix qatar lulu picture quality audio photo remboursement recensioni recovery rosa reklama reset free software screen mirroring saturn smartfon telenor theme türkiye titanium tigo telefono tunisie extractor code unboxing ul00 wifi xach tay y6 pro y625 y635 y5 y560 y600 złoty asus zenfone laser zwart – 16gb phone grey nero weiß/gold huawei’s $250 2016 2015 3c moto 3rd gen 360 view 4x 4c 4s 5c lollipop 64gb 64g 816 8gb p9 91mobiles hisilicon kirin benchmark replacement buy bahrain life blue cũ chính hãng rẻ dan p double display hülle ale l21 2017 argos apn settings iface mall liteケース support ir information install twrp ip address unavailable i fix it size card not working on problem calling e-ink erecovery einstellungen download lcd ebay pubg oem oreo open os lineage cast sd 価格 買取 カメラ カスタムrom custom custodia best kingroot 規格 kernel ケース ケーブル adidas comment reinitialiser réinitialiser connect tv 交換用 バッテリー j3 サイズ 再起動 saudi arabia disable safe mode power saving slot simフリースマートフォン simサイズ 初期化 周波数 スマホケース 手帳型 suojakuoret スペック スロット スマホ mhl miracast setup email セーフモード ce0197 性能 google services mms failed pc sostituzione schermo installing 90 stuck at micro solution tastiera take 谷歌 charger chip 中古 volume chiamate basso wireless charging つながらない turning off themes teardown touch put memory restore password reboot flash pattern 日本 number imei access denied nepal nougat non funziona hotspot nova noir hard 発売日 hardware 華為 hi6210sft hidden menu 比較 評判 factory fitbit alta ale-l21/huawei manual mirror share mirrorshare sdxc miui microsd 2018 g5 motherboard connection rescue fastboot&rescue 楽天 ringtone リセット resurrection remix restart repair button stock global wallpapers wallet bao nhieu nz 画面サイズ 画素数 画面保護フィルム zarna ダウングレード date dav-703l restrict background data durata バッテリー交換 バンド pantalla cambiar pay 15 14 10 19 lineageos specs panorama mi band funda capas aanzetten only *#*#4636#*#* 5ghz ghz descargar ale-l23 6x actualizar *#9900# 9 asphalt ale-l02 ale-l21 version sri lanka driver type slow dimensions カバー back 仕様 修理 テザリング テレビ myanmar error fastboot カスタム transfer バージョンアップ バックアップ go schwarz dazzling 32go 3gb baterie 3000mah capa probleme 51091cea wlan 8-inch y7 frissítés güncelleme 7a pie comparison android7 インチ sdカード 入れ方 with p10 opengl 型番 rose 故障 参数 tray 手帳 thailand 取扱説明書 nanosim フリーズ au debug レビュー apk 16g 128gb 2019 30 kenya прошивка – mp oman 64go p8-7006 windows 9008 pasa gr5 accepting viene kaskus lounge gorillaz ultima origial dox germanos tl00 board samsunj detalles compuerta sort targeta elephone c1 zvyseni dosahu battey modalità ritratto p9lite diresion compra turns select anything space after b313 accept arrreglar forums 8488798 preview inalambrica? dde connnection vedono stars uses two telefonas rate bit entfernen explorer tecla inicio work? lite: ale-l04; lautstärke young talkback husa ligar ao vd fotky peut contenir capability dropped funny configuração datenschutzeinstellung numara gizleme removethe func (boot image) modelos هاتف specials volte sensore impronta backed accessibility opciones desarrollador v/s procesor habilitar rebooting restaurer dactilar? 比较 chiphell diciembre b111 gsmhosting automatically super frosted shockproof liter substitute ändert seinen anrufbeantworter litebuy rupees denaity rein gehen deksel rapida 数字尾巴 medimax fr handset tryb dts if lose c433 ельдорадо алло musimundo site:gsmarena simba telcom reading مشاكل what’s nuevo! honduras litedal bolivia funciina ubergison meo mobzilla batteries colocar cartao menoria tunisianet otzivi mods luces spia saved telefonino 价格 style stylo j7con germany detcet part spain cheapest photography carateristica litht uptade pigu miten liitan valokuvan soittoon smartgsm innjoo resey litt mi4i diff lighe antenna strength cae takes forever solutions телефон fallas nebo real sesitive reinstall aumentar tengo prl ax1 gra-cl10 hepsiburada port launcher deutschland t9 dictionary high acelerar juegos voyant whaterprove schwer einsetzbar รีวิว did earphones visualizzare cartelle impression gsm/lte manchas colo amarillo desrootear xpose sloving dysplay puzzle pets popping fun تحميل صدار هواوي 4gb d’accueil dd won’t frecuencia p1m unrooting radio ringtune mr multipantalla reims daraz g650 brand (unlocke gstatic http generate_204 datasheet amaz steps mob9 item# 39160510 touchwiz spectre dell xps c lot bloatware old andorid iran ringke schweiz ting speicherkarten bluthot (desbloqueado) llite spes силикон todas las compañias dans dav configuracion ft m xperiaz5 bilder kopieren router personalized харьков все цены мобильный cycle 826 coneccion compatable /p7 security charges connected saca applications uyumlu flaş bellek takılırmı mail fibra zuk orlando places inc frozen swithing одесса clean wird heiß ruggedcase carrying starbucks ro under 250 saját fényképes mobiltok 93% emi украина changes sliding testbetricht wgrac nowysoft онлайнер rings before で-た owner pvp verison lagos optimus worked trusted face poorly proteçao vidro temperado mkbhd vendo εχει μεγαλη ακτινοβολια το bost read ekran b12 lite(2016) simkaarten inserting authority: “best 4g: g4” 适合用 吗? knniss deklai reinicia دانلود فایل فلش v701 simcard utiliza hacks opiniões nox pite fourum llena polvo vibration خرید b550 lite美国版emui系统升级 ubuntutu unboxing: reparation formateo 通話 navigationbar physical assistant boca ii мнения arrange waiting روش روت کردن andoid kingoroot 説明書 gra_l09gra_l09 diffrence iphone6 girls następca batería modificar upgrades preisvergleich comm taut copia caracfteristicas código realizar prueba reincia guangzhou freischalten права rozlany sciagnac niego mostrar (ale-l04) gr announced dimensioni ale-l04)能在国内用吗 bouton samsumg b200 reference blk) accoun repondeur accensione essai elgiganten phonebunch srilanka dise jente liteunicorn bend mas referencias descarga rapido straightalk restricted b150 reinigen przywrócić kopie zapasową ulfeatures cameraapp 备份 j2 community ilgili موصفات calibration -l-23model england tasche assory “wifi calling” ts9 verbinden miscelaneos liye алиэкспресс budapest 6+ slove typing pongo klingeltöne aparat cute actuañizacion sharjah problémy baterií secret bt random disconnects especificações sincronizacion conque kfz seguro equivalent limite sumergible jamaica j mano length comunes externa cep ale-lo4 alarm : camı recenzija mssg detecta ubicacion grab asia countries similares snapdragon speaker pop automatique marshmollow root-kit bnib gone 128 lte-dual-sim d’emploi cyadgedmod 系统备份 comparaison c3 reviewgist windowa яка мова trucos difetti clave 703 dl costco przenieśc zdjęcia pamięci werkt resale therapy tiendas canguro deutsche oled tethering chicken winner andoird puk yapaga philippine 6edge crear carpetas erase deuxieme ulefone mt6753 pesa ricevuta ritorno upgraded digitel lo eg bkam twrpxda (unlocked): mp3 teknosa mental frame 3t s’allume liberador espacio jarir 2017camera house chnage a7 instagram stories latinoamerica ltesmartphone indicate keypad tele2 site:target debuggung aouq cuanta expandible maya lasram macedonia netspower drawer houston защитное стекло amazing h secrets branding rooms mirco sim? ebsy ballistic sizes literoot antenarural porovnání a30 sehr gering dosnt сравнить megapixels 價錢 idioma coje heat d8 indian customize amount market фокстрот bestbuu pouce écran 3go+64go información enlever (snapdragon 615) headlines андроид “colc27b120” anroid característica dual-sim echt removibile مشکل m2 conversation liquid cats opis podobne telefony collegare seems weak murrieta prisjakt lieght trace reseña cambodia installed zenfon3 gra-ul00- баксов; “protocol” establecer conexion abcdin gestures fähig menue fell prepaid camra reinicio aggregation venezuela? troco o8 hüle shows directa vibe issue picutue relentiza qualcomm słuchawki 440 prise اكسسوارات موبايل deł sfondi owl greek ooredoo lable батарею из fail quita slack sinseñal credit usage relacement návod usb不能识别 cdm failes removable? 系统 nx 设置gpu 频率 drucker c48x uprgrade kokemuksia czytnik linii обновление до warning modèle rooteado hands-on 2-inch pide z3c schaltet sich immer selbständig borro dpck disappeared walet podlaczyc laptopa przez liote forget tariftip numeriques offical neymar b130 supcase runboxing desmontar diciembrec2015 abandoned περιεχομενα κουτιου cm13 calendar bildschirmabgriff machen kuji colorado roaing girld director sans outil *2767*3855# kind actualiza usd applr parental control ts poland toulouse netzwerkeinstellungen slot? litemkbhd pre paid providers odblokowac curacao introuvable dólares accende mondo pricerunner dead mio ruta bytes significadode roojo amerikanische formet liteу girl restrictions киев mt6572 sales “lite” donnees recover 90% estados unidos k6 cuantas galxy dont cher használt cortar soporta installer kontk nilikin n’allume moins ralentissement hsdpa can’t 2005 cety flower spotify lockscreen v199r001c00b111 pellicola 2014 alarmas xt send مواصفات fruit unpack g850m required almacenadas robado é root gsm? 内核 arbeitsspeicher treiber vorteile litescreenshot 两个卡 大小不一样 version- chez cdiscount regler nowy b 370 p8000 telia wallmart soccer netgate wi-fi cuantos amperios tienen refurb fresh vidrio красноярске external classic lautsprecher frequencies verkkokauppa włozyc sauvegarde +tracphone gittigidiyor ascendent com/p8/general/huawei-mt7-l09-l10-stock-firmware-ota-t3275784 hornor “p8 lite” amaxon scatter chargers waknart 美国版miui系统升级 huawei-p8-lite rootjunkysdl mogadishu huawei-p8-lite-version-smartphone r nillkin-frosted-slim-armor-hard-matte-cover-case-for-huawei-p8-lite 美国 ratings reddit ve liteb lanco frankfurt /ebay ascent κινητα τηλεφωνα huawei/p8 فى موبایل مدل swype honer 7/p8/p8 huawei-p8-lite-4g huawey kiwi phonemore galaxy-j7 2200mah hb3742a0ezc+ funktioniert hybride ascend-p8-lite 青春版系统升级 max” -huawei galaxy-j6 successeur du o=p8 adattatore cavo g9 hiawei cartoon aristo p9/p8 allie karachi somalia tools broadband sale/ebay mic fabryka komórkowy kompatybilny moviestar huawei-p8 em p8-l21 model: whitesku: 8892002 acend vrs https://www com/ip/huawei-p8-lite-ale-l04-16gb-4g-lte-smartphone-unlocked/45407453 ´p8 p8/ dissamdly emotion fake v2 folio site:alibaba wholesale czc ze551ml enlarge genuine charger+ honor7 module ascende rock sleep gplay 美国版emui系统升级 fire memor’ song y6pro 青春版emui系统升级 p8、夜もし買うならhttp://item rakuten jp/huawei/itm0015689766 lt marques brownlee 201 btw #p8 hechos despues bumper+ wuawei rubber calendario kingo e5 h8 internal telephone faults 对比 brightness b191 grabar odblokowany wykazje partes max價錢 flashing problème des mails gama última generación ce0168 percent comparatif 520 tracfone padajici reputation alkosto procesador rooting prcie cl00 maske activate choose externas cover öffnen rfr gthtytcnb rjynfrns 0inch arany vasarlas portland shopping keep silent ale-tl00 laite ant+ tmobile? site:forums androidcentral flagship d’apn abre на российском рынке wad knnis amazone bereinigen fimrware processor oppomart фaliexpress instal (unlocked black) inches quale buttons analise dialer dois je series sous tous ses angles tell which 3g/4glte band/frequency am using? celulare değişimi frequenzen ubuntu gear comparar cali exito run camra? memoire pleine similar ghousting thin muy bajo resetta 005 create folder weather x5 liteprice stop keynote vede rete netgear bottom kleuren logica sau v100r001c00b111 orignal low cargar inalambrico dffrience telefonu offre sojitek using trasferire last codice:732494 findet digikala apres veille e6 flex reproducir operador guida proteccion privacidad instore 华为 portabilidad değişim detect impallato m8 v100r001c432b052 (dual europe) boite drain vidzeti reiniciar activer reconoce movistae make manuel local decode anine properly plomo nom chine f1 comes sell? kirim 703l legend vip reflash podporuje doesnt espana delantera trasero alicante resistente huella nas lojos moçambique olvido inalambrica (5th generation) lunar copier une empreinte deverouiller tap trae wrist strap informacion dz 7x onetouch venden nueva yoek batter hack resetear oredoo селикон ano salida diiferent virsions lie modeller enfrentados entrata new; white; version; añadir accesos directos barra developers loca suit dualsim li enable die für den zugangspunkt sind diesen benutzer verfügbar bandeja dinside ile inceleme ( amazoon secobd b160 pliki livre eingabe von rufnummern beim wiko fever 46 start niet zealand 0mp ono messages blanc rompio eo donido supported networks recorder should max? operativo pasar infomracion computadora alien کاور طرح دار دجی کالا has mgh organize direccion meilleur pop3 & litlle precio:del::en mediaworld rotto compate keys lollypop ke sostituire program mon capte insérer lute stopped block saves reconnu par 12?? l9 whaterproof 2680 mneniq 青春版 电脑连接 server occupé dal seriale può sapere è brandizzato في مصر rubrica gamra booting aparece rtv agd talke quelle gra_tl00 seguridad flipkart metalowa site:trovaprezzi dispositivo 3ra generacion holder dziala alternativa adjusting rs differnt avito anzeigen einstellen command ralentiza anleitung ghosting disponible instruction cebu mark casque hdb tecnicals youth png ma italia problema lite?trackid=sp-006 roll l00 übertragung auf indaicate raven commercials express alice white) як виглядає tu lordban 7i unblock clavier rompe auricolari upside leica bericht limitare dati kann man auch ein anwenden una mancha blanca motog ростове goud tgpu updating longer memo ukwill miami virgin plötzlich langsam aux voicemail compatibles thro aap pool master desocultar uberizon jio overlay files bildschirmfreigabe sirve colombia? bkack banner tool rootea insalar ale23 centro thru applock heats unknown desarmar piena homepage externo pila connexion desactivar canadian rollback cancel receive qvc antuto enter co place camerafout караганда mejorar kosztuje fhd 700 mhz liteus disabled tapa сделать скрин телефоне redemarrer site:reddit cale flesh uber lyft inserire v10 hintavertailu flashtools codes mozna wlaczyc (ale-l21) (white) rootear b179 repuesto eeuu failure cámara perfprmance forward dolna czesc colc27b120 beat lite评测 chrome loading limpiar detected details particion ya accent vedo notificaciones a3 прошивки sdcard sowing recording says another бампер одеть comparision chargin reminder mock town baixar remote ar condicionadocondicionado midia telefone american mettre mistake updated contract expectancy guatemala auriculares cosa fare dimentica sequenza cannot 2017? conditional forwarding enabled sparite galleria whatsmoble lowest tecnique snap player saturo deshabilitar nudillo moduł max- privacy isert agarra ni pixel density b170 multiple hours pollici 5p 13mpx liberado hängt oictures look cash websites rajada receiving inernal (4th ) mobile/ current dove comprare ale-cl00 cdma+gsm ds todo stranger interceptor tasten vendita dimension click activation πως θα δω τα αρχεια στο akku advantages differents navigationsbar ale-b124 regulacja odtwarzacza problemi wii fi hotel autimatically us? solve numériques arblest ultrathin secs смартфон whats included instructions save received (ale-ul00) reseau tema zenphone salg af brugt emui升级4 hello kitty portable cards autonomie twin dallas tx supprimer réseau préféré tracker mibiles shanghai total unicorn beetle whst z4 erstellen entra fuse defaut habla vengono salvate titan x700i mah unlicked internacional y6ii extension maximum responding overheat 2da speaking potenza karten (american bands)(gold) nivel description amber alerts restauro we koupit androido nustatymai vokieciu kalboje boostmobile vc equipo przekłożenie køb geekbench botloadear raccourci p9? 与 recommended extract iopen batman volumen lomg emergency technicals della botton running frequencycheck ;ite reader dùos “agua” телефона frimwear threshold corrien caractéristiques mobilmania honor7x immagini app2sd message tone dar salaam polska vino plastico head cubiertas forros guia cambio playstire dates sortie portables ilmoitusvalo lector banggood unbox studio αναβάθμιση καμερα xhixken saying without label encuentra mierda resistant configurare itinérance accesoires litebpho signal ale-l21c185b160 inconvenientes datenroaming warnung ausschalten b85 golan originales transparente servicio tecnico flashlight highway star opengapps größe anterior restaurar بروزرسانی ازاى انزل سوفت وير لموبايل покупателей emparejo gopro hero ripristino fabbrica synchronizacja komputerem 5″hd آپدیت badge counts wap smartphon xt1034 florida welke droid “accepting” models relvew hacer pantallazos bandas activa bluethoot waga $350 differrnce symbol modus xo lte? čite datenblatt parametre reseaux follow virtual reality soda freezes 317 b156 tefarabella recortar cm itinerance wrong energy unlcoked d’itinérance changing p8lite phab 9″ azul help specificatii desconecta cada rato capacità massima akcelerometr celulat mensajes ppi rating psg goes blown very companias americanas mar plata gyr through ليبيا litte closing دیجی delta model’s stats bildschirm nappe appareil owners singer a1 package scanning offers specyfikacja ขาย diferencias az zasięgu połączenia tylko alarmowe firmwrare dimesnions long fully charged tos #10: e1 riavvio forzato mojo quedo operatiing calienta cheap gra-tl00 headphones ale-l23c212b180 od xp management 与huawei spigen bl locate lite? frequence anderes wymienic nove sklo adorama completas conectividad m7 sim) ancho desbloqueado buen recuperare cancellate microsolt dosya görünteleme developer options discount concorrente sprawdzic cz wersja segundo plano ‘ td abrirlo les3 = jetstereo testo 405ì collega referncia est bon batterly okc escucha cdma nascoste sofware numbers blacklist linre formater lite* zrobic first okay late hoslter w/ stand hangouts notifications exler można się połączyć tipo missed uganda verkaufen pra lx1 języki g360p mx chicago detail coparison reception inserisce nel apowersoft dawanda acomo g4s originale dolby atmos hsn nyc étui ordenador food metallic desventajas availability: can’t afficher heure referencia lumee glas anrufe blockieren cualquier archivos borrados highsuite dns responde skins dongle emojies chimera værdi b321 proteggi doppio smarrt manualmente fitness herausfinden ale-l0 драйвер kali nethunter cualidades img ultraslim 640 jd making texting comparer k5 accessory codigos name city center upgradable clai comparacion aspect maj vers pic actualización romaing 美国版 国际版 klingelton antenas cool minnie cape lite2017 speech al23 actualizarlo fuilm xa b120 knuckle sense prender encendido resau marche j1 trinidad history 3gm lento upgrate able configuration españa card/ chiamata liberacion solucionar comand allowed comparador moviles precii extenderle memoriaa élite immaggini unroot (p8 lite) slowly portugues firmaware v7 movistar? twitter partision wi levels atutu unboxingg orario specifications cases spec prices t golden rooten l04 tmobile covers unlocked celular l09 gsm arena usa us sale accessories verizon prezzi colors sprint cnet gra-ul10 ale-l04 ph gra_l09 target s6 especificaciones colours protector whatmobile at&t (2017) inch l02 xda aplicaciones ocultas hd aluminum specifikacije color technopolis headset planes kolbi luxurious ite temas malaysia عيوب preis hp souq ringtones srbija waterproof duplicar pareri algerie sar value china + bangladesh l23 launch sobre grande indonesia wikipedia buhnici uk carbon ������ shop aliexpress mobilarena preturi news sample gaming performance pictures preço tecnicas de prijs del confronto versus costo canada finder sbloccare recenzia mit vertrag tricks pouzdro imagenes celulares watch cost venta hdblog ár pris sk cellulare australia competitors octa libre mi4c o2 colores disponibles carcaza brasil online beta camara estuche tweakers armor wind oppo r7s images 935 york ����� ��� pouzdra l samples im negro carcasa carcasas karte viva coques отзывы celcom 701l portafoglio user sensor eink u (us version: ale-l04) english nederlandse handleiding goshi cuanto cuesta ghana valor 32 aplicacion silicone friday official (unlocked) paint pics decodare fotocamera bg used mobilni svet utilizare sa pancerne czarny pdf colour mexico touchplus mi4 telekom modelo blanco hoesje obzor 229 where gris meizu mx5 atsauksmes mobil press pak sbrandizzare glitter check lahore futrola za romana r5 painting manuale istruzione tim singtel media markt p6 skin smartphones problems screenprotector nigeria nillkin характеристики kalafi kalaf gral09 straight talk liberar motion un active beauty walmart opinion tips special heureka score authority telkom deals obudowa lebanon luxury original цена availability app mercadolibre snapchat can di andro4all emojis pl обзор silver premium trova teszt 249 dailymotion schutzfolie motivy drop result protectores do smartfony vale sdhc hot cold store singapore tanzania aanbieding normal hands microsim hicare usuario phablet dlna tok pulgadas handphone egypt 中国 donde va conector la antena celurar united entertainment 3007 ra tamaño america site:youtube al acceso red denegado compatible hb3742a0ezc automatic características get my lifeproof kontakt sperren gearbes getting warranty nie działa internet b190 designer track pocket como poner porównanie cómo 32ענ זאפ 23 force dev-701 duck identify tlf public yahoo anwer fast boot brak pakietu transmisji danych emui可以升级到4 0吗? so dark lost home icon caseology downgrade no voice messaging wipe cache partition you load driverr onto latin recuperar fotos borre tempered keeps putting calls hold mercado ha infrarossi dav-701l solo llamadas emergencia vedio connessione daatsheet anime bug reparar microfono a5 cons whatsapp audios funciona will oculus work instalar bloquear antivirus togliere blocco are downloads stored microphone quitar patron desbloqueo falla ecualizador resolution oculto mejor there default option move incoming add language better than s3 blu vivo xl impact built scanner se puede meter agua et king troubleshooting leder blk xposed does venezuela paypal here navigation rear mpx gra-ul00 ecuador baseband (pra-la1) cricket never msrp configurar simبروزرسانی company that replace разборка gearbest 9662-1 good answers locked infinix zero more cities time zone change country setting qu’est ce synchronisation phonearena вставить мемори карту set up metro pcs made by who formatear jack game thrones capacity rgbw european techradar barometer mide phonearema blocked contact untuk body tarjeta parte nogat pokemon peru occasion cynogenmod futures international 2g changer batterie d’un hatch mac frp dañado puerto carga puedo cargarlo inalambricamente porque reconocimiento voz rica tpu atnt قیمت soft teclados bwp cpu opening little operating system sync computer revenir premier ecran bitel substitue 8″ +32gb/64gb refurbished prevail smg36p laptop recocnise solucion crome nkt mate2 第三方rom buscar numero telefonico conecta bestbuy vshuawei litle furious box pone notebookcheck luphie lexus cyber monday deal mobilaréna why doesn’t placement desactiver recherche vocale gogle les mobiles metal argentina? activar cuenta leather dimensiones чехол sell dock photos phone? ver dia ser calor los emoticonos facebook con inche gra-00 เคส ota 626 cochin ale-04 ois blogspot grand prime keyboard sound benchmarks probkrma sonido giroscopio lycamobile unoffical one mis si reboto sistema podporujte ram come s7 edge water zablokowany wykazuje karty h3o service faisalabad techpayout answer: accessoires actie location kaufen car bunndle kit 知乎 led consumer perú bootloop forgot out deleting apps attached ale-l04c567b309 notification alcatel k10 cual redes roaming 開箱 frontal debugging données c4 second desbloquear por robo gratis sin pago cargadores chile card? 介绍 купить запорожье pure – litemarshmallow zultra espanol eshop win anda mal otterbox airplane cm12 frequency bands crr-ul00 dura poco geen melding verbinding trasera dek apagar forzado zip att telecharger framework misure kingzone k2 glow bundle aquece prende transferir 21108 stores balong cradle riceve cuffie anche staccate acheter b589 configurazione fastweb бутерброд e4 alibaba front camera? submodels turn popup supercheap argent nexux bianco diamonds touchscreen gray heavy duty rugged when was cambiare il vetro localizar desimlock ocultar standard da aplicación cardboard b895 vibracion teclado oferta drive memories remove accomt swipe posto pin prepago aluminio 0’ neo shortcut z1s legal issues buying c185b190 accessoire eu cell (ale-l04 adb devices recognized site:forum xda-developers aprire sportellini per abrir cara lifetime z17 caracteristica replica coreana use atla ta formato widget tiempo otter (16gb) octa-core cayo tactil guide brick plans flashear computerhoy insert storage into capta audifonos blutooth samsug tune pk spegne perde segnale today room ul 00 t-mobile moschino movil pas d’itinerance borrar memoria next letters htcmania abilitare maps bad like le arvostelu serial layer taken bewegendes glitzer greyed akkuleistung verbesser avion apaga cuando deja bolsillo panatalon и cable hdmi piura показать реальные размеры montre connectée pour ale- c185b562-full floating descripción completa kawaii ralenti updates find sdk parece 188€ codigo mtk showing all songs m3 top saber banda recibe señal id staples melkco 5″ dos gizok belt clip 0″ phones motorola warum komm ich meinem cn b390 split nvms7000 faqs medipad hide bar 21 have speed alel04 upgrade kitkat lite(gold) navigationsleiste installion accesorios compatibility ubergizmo engineering [rice lock gpu group text defender function /p9 frys navigationbutton gra-c900b391 connecting oneplus m9 gra-l09 pero me acceder cones drones acsend teléfono espejo tutorial rehview copy cam fiyati selfie stick bh lines carriers データ 通信 タイプ connectivity ouverture conectar partio expandable barato ejecutar puebra ping marca handy digitizer slim your techno-w4 b180 datenschutz 评测 pccomponentes bright adjustment shutter be changed carte vr om ring mbbhd specifiche doesnot see lite-ale 850mhz pack i’m but clone sp gionee marathon standby replaceable rescatar borradas agrandar letra speicherkarte einlegen build ok sur özellikleri maroc tech clima enciende gx tener destapar protocol datos botloager k3 v met abonnement timer `rice حل مشكلة الواي فاي asn durability d viewer tavt window edgas middle east premiun tre latest fiyatları dpecs 12 panel installment ic site:www clangsm wie gut ist das cristal roto lässt bildschirmrekorder nicht zu paris dropzone tasto digital infrared сравнение mouse over image zoom upgrading? don’t trade now removal eye رام payments commercial pakistani channels toms ringer ways s8 dxomark (2017)color polish boost login 2gb japan edition mega thread zeigt neue nachrichten niht an año salio quito ale-ul00 apple falabella medellin czym sie rozni ustawień fabrycznych korean скачать прошивку для kijelző -lite cellular $60 pa same contatti su whattsapp disadvantages kiliflar insufficient available lit eigene nummer senden liet region fondos clear talk? รูป μεταχειρισμενο 01 ne volver estado fabrica table 32gg compartir desde kazoj schutzhülle aus x-design transparent weiss disappearing mundocelular tiembla x propiedades teste fcc import liteمواصفات promo format prestige “vip card” texts sms snapdeal idol سعر ومواصفات 和huawei gr3 / archivio debloquer litr (2015) revivir rwanda functions as videos reparacion اپدت رسمی bling • 京东 lk04 reseetar adoptable b380 plastic programa whatmonile/ recomendação mate8 balance accesorio llave version/reviews -ul00 dac shield gms personal acessorios shell holster combo year released tesla kasa fiyatı giveaway give away show manager entyre storege pokrowiec hybrid parics loop imagen product fulls actualizacion emu5 applucations list cargador как вытащить памяти chinese actalixar s4 gyro placa comentarios boton wps bypass foto panoramica kid проблемы с sincronizzare musica capture d’écran 2″ handtec auto gra-09 suena fuente net disattivare interfaz gra-lo9 yorumlar utilizacion interna incognito frecuencias shut down timestamp missing tomar shot 7201 gyroscope dpi temperato sbs [rom ] fromfuture (weekly) batery fondo different types หา ไม่เจอ authentication cyanogen mod earphone plug g823006 halterung fuer state atlanta usar juntos inboxing ale-104 insertar queda logo lite; refurb; great speakers turbo protective oder schlecht switch reject call metropcs cel stars] گوشی europe fit dav-713l juego aplikacije ціна cant ahve gorila device web ui cambia sfondo cust à aggiornare ovisat third-party phandroid icons fonts editar directo ring+ bien permanece mobihall protection film avant arriere pros état unis bande actual echo esta desactivado locations bei headphone vivbo air companies powrót telefonów precios temporary compatibilie newegg pieces rechanges antenne zusätzliche recieve softwares wont usado amazpn spek sanh với c186b190 works clasipar limit tripod gewicht problemas sport fo women anschließen pasos pars correcto telcel multirom medida обновить в украине lite?trackid=sp-006?trackid=sp-006 sky diferences betwen soslow aggiunta account suddenly stoped folders comparativa roms giudizio titlehuawei faut dic deuxième via b183 olvid contraseña bloqueo music panama formats ripley البديل ficha plan fir delete contacts kualitas $170 cargando pr nexas internet? argentina customer application newer blaster telefonos coppel marshmellow states personalise compro record 159$ wcdma suite tomadas info profile kite uhr verändern смартфона detecting 1st damaged nck bestellen ñi personalizar purple 13mp diplay always reverts backk smartwatch compared versions unbrick changement (black) multi silicona supersu file maxx version/gsm removable 32g delet design deactivate doble tapping scrennshot ? ale-21 3g/4g pink memorias driva son kopia zapasowa rallentato aktualizacja androida pressing shown gallery lcose jet swappa avec bloccato sul while talking need those came b124 b382 طريقة اعادة تشغل ال litespecs b383 pedometer near lo4 duos не видит компьютер pad drink ale-l004 indicator bueno yousave pu lite2015 funciones akkumulátor debloat ze550kl hoy descompuesto geolocalisation camare customizable leo 04 formatage disassembly bootup lista negra lprix nay elektrodom alj browsern hotspot? noel leeming arabic calibrate casse ips entrar modo ingeniero 50gb solution? q muzyka jeff briant’s universal carrier accessible alpha atskats medidas

Изучите сетевые функции | Docker Documentation

Расчетное время чтения: 5 минут

Docker Desktop предоставляет несколько сетевых функций, упрощающих использовать.

Функции для всех платформ

VPN-проход

Сеть Docker Desktop может работать при подключении к VPN. Сделать это, Docker Desktop перехватывает трафик из контейнеров и внедряет его в хост, как если бы он был создан из приложения Docker.

Сопоставление портов

При запуске контейнера с аргументом -p , например:

 $ docker run -p 80:80 -d nginx
 

Docker Desktop делает все, что работает на порту 80 в контейнере (в в этом случае nginx ) доступен на 80 порту localhost . В этом примере порты хоста и контейнера одинаковы. Если, например, у вас уже что-то работает на 80-м порту ваш хост-компьютер, вы можете подключить контейнер к другому порту:

 $ docker run -p 8000:80 -d nginx
 

Теперь подключения к localhost:8000 отправляются на порт 80 в контейнере. синтаксис для -p : HOST_PORT:CLIENT_PORT .

Поддержка HTTP/HTTPS-прокси

См. :

  • Прокси в Linux
  • Прокси на Mac
  • Прокси в Windows

Функции для Mac и Linux

Переадресация агента SSH

Docker Desktop на Mac и Linux позволяет использовать SSH-агент хоста внутри контейнера. Для этого:

  1. Привяжите подключение к сокету агента SSH, добавив следующий параметр в команду docker run :

    --mount type=bind,src=/run/host-services/ssh-auth.sock, target=/run/host-services/ssh-auth.sock

  2. Добавьте переменную среды SSH_AUTH_SOCK в свой контейнер:

    -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock"

Чтобы включить агент SSH в Docker Compose, добавьте в службу следующие флаги:

 услуги:
  веб:
    изображение: nginx:alpine
    тома:
      - тип: связать
        источник: /run/host-services/ssh-auth.sock
        цель: /run/host-services/ssh-auth. sock
    Окружающая среда:
      - SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock
 

Известные ограничения для всех платформ

Изменение внутренних IP-адресов

Внутренние IP-адреса, используемые Docker, можно изменить в настройках, если вы пользователь Windows, или в настройках, если вы используете Mac или Linux. После смены IP необходимо сбросить кластер Kubernetes и оставить все активные Swarm.

На хосте нет моста docker0

Из-за того, как сеть реализована в Docker Desktop, вы не можете см. интерфейс docker0 на хосте. Этот интерфейс фактически находится внутри виртуальная машина.

Я не могу пропинговать свои контейнеры

Docker Desktop не может направлять трафик в контейнеры Linux. Однако, если вы пользователь Windows, вы можете пропинговать контейнеры Windows.

IP-адресация для каждого контейнера невозможна

Сеть Docker Bridge недоступна с хоста. Однако, если вы пользователь Windows, он работает с контейнерами Windows.

Варианты использования и обходные пути для всех платформ

Я хочу подключиться из контейнера к сервису на хосте

У хоста меняется IP-адрес (или отсутствует, если у вас нет доступа к сети). Мы рекомендуем подключаться к специальному DNS-имени host.docker.internal , который преобразуется во внутренний IP-адрес, используемый хозяин. Это предназначено для целей разработки и не работает в производственной среде за пределами Docker Desktop.

Вы также можете связаться со шлюзом, используя шлюз.докер.внутренний .

Если вы установили Python на свой компьютер, используйте следующие инструкции в качестве примера для подключения из контейнера к службе на хосте:

  1. Выполните следующую команду, чтобы запустить простой HTTP-сервер на порту 8000.

    python -m http.сервер 8000

    Если вы установили Python 2.x, запустите python -m SimpleHTTPServer 8000 .

  2. Теперь запустите контейнер, установите curl и попробуйте подключиться к хосту с помощью следующих команд:

     $ docker run --rm -it alpine sh
     # apk добавить завиток
     # завиток http://host.docker.internal:8000
     # выход
     
Я хочу подключиться к контейнеру с хоста

Переадресация портов работает для localhost ; --publish , -p или -P все работает. Порты, открытые из Linux, перенаправляются на хост.

Наша текущая рекомендация — опубликовать порт или подключиться с другого контейнер. Это то, что вам нужно сделать даже в Linux, если контейнер находится на оверлейная сеть, а не мостовая сеть, поскольку они не маршрутизируются.

Например, для запуска веб-сервера nginx :

 $ docker run -d -p 80:80 --name веб-сервер nginx
 

Чтобы прояснить синтаксис, следующие две команды публикуют порт контейнера 80 на порт хоста 8000 :

 $ docker run --publish 8000:80 --name веб-сервер nginx
$ docker run -p 8000:80 --name веб-сервер nginx
 

Чтобы опубликовать все порты, используйте флаг -P . Например, следующая команда запускает контейнер (в отдельном режиме) и 9Флаг 0017 -P публикует все открытые порты контейнер на случайные порты на хосте.

 $ docker run -d -P --name веб-сервер nginx
 

Подробную информацию о команде запуска см. параметры публикации, используемые с docker run .

сеть, рабочий стол docker

Belati — традиционный швейцарский армейский нож для OSINT | Аан

103

АКЦИИ

  Аан
  

Belati — традиционный швейцарский армейский нож для OSINT

Belati — это инструмент для сбора общедоступных данных и общедоступных документов с веб-сайта и других служб для целей OSINT. Этот инструмент вдохновлен Foca и Datasploit для OSINT.

Только для обучения и целей OSINT. Поправьте меня, если я ошибаюсь

Что может сделать Белати?

  • Интерактивная оболочка командной строки
  • Whois (поддержка индонезийского TLD)
  • Захват баннера
  • Перечисление поддоменов
  • Сканирование службы для всех машин субдоменов
  • Поддержка веб-приложений
  • Отображение DNS / сканирование зоны
  • Сборщик почты с веб-сайта и поисковой системы
  • Сборщик почты с сервера открытых ключей MIT PGP
  • Удаление общедоступного документа для домена из поисковой системы
  • Поддельный и случайный пользовательский агент (предотвращение блокировки)
  • Поддержка прокси для сбора электронных писем и документов
  • Публичный поиск Git в домене/поддомене
  • Общедоступный SVN Finder в домене/поддомене
  • Скрапер Robot. txt в домене/поддомене
  • Сбор информации о публичной компании и сотрудниках
  • Поддержка базы данных SQLite3 для хранения результатов Белати
  • Мастер установки/конфигурации для Белати
  • Веб-управление Django
  • Режим только веб-сервера
  • Автоматическая проверка зависимостей
  • Система автоматического обновления
  • Средство извлечения метаданных документа/Exif
  • Метаданные автора документа
  • Визуализация графика (выполняется)

TODO

См. список TODO Belati здесь -> #12

Библиотека

  • python-whois
  • Подсписок3r
  • Суббрут

Требования

  • nmap
  • гит
  • sqlite3
  • exiftool

Установка/использование

 git clone https://github.com/aancw/Belati.git
компакт-диск Белати
Обновление подмодуля git --init --recursive --remote
pip установить --обновить пип
pip install -r requirements. txt #пожалуйста, используйте pip с python v2
судо су
Python Белати.py --help
 

Установка Docker

  • Загрузить Dockerfile:
 wget https://raw.githubusercontent.com/aancw/Belati/master/Dockerfile 
  • Выполните следующую команду, чтобы создать образ Docker локально:

     docker build -t белый . # точка 
  • Чтобы создать контейнер из образа, выполните:

     docker run -p 8000:8000 -it белати /bin/bash 
  • Бег Белати

     белати -ч 

Для получения дополнительной информации см. это руководство: https://github.com/espi0n/Dockerfiles/blob/master/Belati/README.md

Протестировано на

  • Ubuntu 16.04 x86_64
  • Arch Linux x86_64
  • ЦенОС 7
  • Дебиан Джесси
  • МакОС

Требования Python

Этот инструмент не совместим с Python 3. Мне нужно перенести его позже. Так что используйте вместо этого python v2.7!

Зачем нужны права root?

Я пытался избежать использования Root Privilege, но nmap требует Root Privilege. Вы можете добавить sudo или другой способ запуска nmap без привилегий root. Это ваш выбор 😉

Ссылка -> https://secwiki.org/w/Running_nmap_as_an_uncitationd_user

Не волнуйтесь. Belati по-прежнему работает хорошо, когда вы работаете с обычным пользователем;)

Зависимости

  • urllib2
  • DNSPython
  • запросов
  • анализ аргументов
  • текстовая таблица
  • питон-геоип-геолит2
  • python-geoip
  • дн-нож
  • термколор
  • колорама
  • валидаторов
  • тквдм
  • тлэкстракт
  • поддельный агент пользователя
  • Python-Wappalyzer
  • будущее
  • красивый суп4
  • python-whois
  • фьючерсы
  • Джанго
  • pyexifinfo
  • cmd2
  • таблица

Отсутствуют зависимости?

Если вы видите это

 $ python Belati. py

            Вам не хватает модуля, необходимого для Белати. Чтобы продолжить использовать Belati, установите их с помощью:

            `pip install --upgrade --force-reinstall -r requirements.txt`

            или вручную установите отсутствующие модули с помощью:

            `pip install --upgrade --force-reinstall dnspython запрашивает termcolor colorama future beautifulsoup4 futures`
 

и этот

 Вы используете версию pip 8.1.2, однако доступна версия 9.0.1.
Вам следует рассмотреть возможность обновления с помощью команды «pip install --upgrade pip».
 

Обновите версию pip и следуйте инструкциям:

 pip install --upgrade pip
 

Системные зависимости

Для пользователей CentOS/Fedora установите следующее:

 yum install gcc gmp gmp-devel python-devel
 

Для пользователей Debian/Ubuntu установите это:

 sudo apt-get установить nmap git sqlite3 exiftool
 

Уведомление

Этот инструмент предназначен только для образовательных целей. Любой нанесенный вами ущерб не повлияет на автора. Делайте это на свой страх и риск!

Обратная связь/предложение

Не стесняйтесь создавать задачи в этом репозитории или пишите мне по адресу cacaddv [at] gmail.com . Ваши отзывы и предложения полезны для развития Belati 🙂

Вклад

Belati приветствует вклад каждого. См. CONTRIBUTING.md

Авторы

Пожалуйста, зайдите на CONTRIBUTORS.md и укажите свое имя в этом файле 🙂

Спасибо

Спасибо PyWhois Library, Sublist3r, MailHarvester, Emingoo за участие в моем коде. Также спасибо Hispagatos, Infosec-ninjas, eCHo, RNDC (Центр исследований и разработок) и всем другим людям, которые вдохновляют этот проект 🙂

Публикации

Echo Ezine 31: http://ezine.echo.or.id/ issue31/005.txt — Белати: Сбор общедоступных данных и общедоступных документов для целей OSINT — Petruknisme

IDSECCONF 2017: https://www. slideshare.net/idsecconf/belati-the-traditional-swiss-army-knife-for-osint — Belati: традиционный швейцарский армейский нож для OSINT

Лицензия

Автор: Aan Wahyu (https://petruknisme.com)

Belati находится под лицензией GPL V2. Вы можете использовать, модифицировать или распространять этот инструмент на условиях Стандартной общественной лицензии GNU (GPLv2). Полный текст лицензии см. в разделе ЛИЦЕНЗИЯ.


  Об авторе
  Ан Вахью (https://petruknisme.com)
 

  Первоначально статья была опубликована по адресу: https://github.com/aancw/Belati.

  

103

АКЦИИ

16 мая 2022 г.

Как отправлять данные из BloxOne Cloud (CSP) в Splun…

Это руководство о том, как настроить сервер splunk и CDC (коннектор облачных данных) и заставить CSP отправлять журналы в splunk .

 

В этом руководстве рассматриваются следующие вопросы:

 

Раздел 1: Как создать локальный хост и включить приложение CDC на портале CSP. В этом разделе также описывается, как развернуть BloxOne On-Host на Docker и присоединить его к порталу CSP.

Раздел 2: Как настроить внешний сервер Splunk в Docker.

Раздел 3: Как пересылать данные из CSP на внешний сервер Splunk. В этом разделе рассказывается, как получить данные DNS-запроса и ответа с портала CSP на внешний сервер Splunk.

Раздел 4: Понимание потока данных.

 

 

 

Отказ от ответственности : Это руководство предназначено для тестирования CDC в локальной лабораторной среде в целях тестирования. Бесплатная версия Splunk также имеет ограничение на объем индексируемых данных. Вы можете получить лицензию от Splunk, если планируете индексировать больше данных.

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

 

Требования к лаборатории:

 

Доступ к порталу CSP.

2 ВМ (Ubuntu 16.04.x) с установленным Docker и подключением к Интернету .

Одна из виртуальных машин будет работать под управлением BloxOne Cloud Data Connector , а другая будет с сервером Splunk .

— В этой экспериментальной установке я назвал виртуальную машину CDC с именем хоста: cdc.infobloxlab.com, а имя хоста внешнего сервера splunk — «splunk.infobloxlab.com».

 

Ниже приведены сведения о виртуальных машинах, используемых в этом руководстве: (обе виртуальные машины находятся в одной подсети)

 

ВМ Имя хоста Описание Сведения о системе IP-адрес
ВМ1  cdc. infoblox.com Запускает CDC 4 виртуальных процессора, 8 ГБ, 64 ГБ Диск 10.0.48.87
ВМ2 splunk.infobloxlab.com Запускает сервер Splunk 4 виртуальных процессора, 16 ГБ, 120 ГБ Диск 10.0.48.124

 

 

[ Важно : Для использования CDC в Bare Metal Docker Deployed порт 22 должен быть свободен. Если вы используете SSH, вам нужно изменить порт SSH по умолчанию с 22 на любой другой случайный порт. Я приложил еще один документ с инструкциями по изменению порта SSH для тех, кому это может понадобиться.]

 

Введение:

-Зачем использовать Cloud Data Connector?

— Cloud Data Connector (CDC) — это часть программного обеспечения, которое можно развернуть в Docker или развернуть как OVA на сервере ESXI. Его можно запускать либо локально, либо в любом облачном провайдере в зависимости от ваших требований.

— CDC можно представить скорее как посредника, который получает некоторые данные от «источника» и передает их «назначению».

 

Например, : вы можете отправлять данные, такие как «Вредоносные обращения», с «Портала CSP» в место назначения, например, на внешний сервер Splunk. Для этого вам потребуется развернуть CDC, который будет получать данные от CSP, а CDC будет отправлять полученные данные в Splunk. В этом случае «источник» — это «CSP», а «назначение» — это «Splunk» с точки зрения CDC. Ключевым моментом здесь является то, что CDC выступает в качестве среды для передачи данных из CSP на внешний сервер Splunk.

Ниже представлено визуальное представление, показывающее поток трафика. [ Source (CSP) => CDC => Destination (Splunk Server).]

— С точки зрения CDC, источником является «Портал CSP», а пунктом назначения, в который эти данные должны быть перенаправлены, является «Splunk». .

 

Источники CDC: Короче говоря, «источник» — это место, откуда CDC может получать данные. Например: CDC может получать данные от NIOS. Итак, здесь «НИОС» считается «источником». В этом руководстве мы будем использовать «Портал CSP» в качестве «Источника» для CDC.

Пункты назначения CDC: Как следует из названия, «пункт назначения» — это место, куда пересылаются данные. В этом руководстве мы будем отправлять данные на внешний сервер splunk. Итак, «пункт назначения» — «Splunk».

 

Раздел 1: Как установить и настроить BloxOne CDC в Docker.

 

В этом разделе мы создадим локальный хост и активируем на нем приложение CDC. Основной рабочий процесс, который мы собираемся сделать, следующий:

                — Сначала мы создадим локальный узел на портале CSP и включим приложение CDC.

               — Убедитесь, что порт прослушивания SSH изменен на любой другой порт, кроме 22. CDC требует, чтобы порт 22 был свободен для правильной работы.

 

 

— Войдите на https://csp.infoblox.com со своими учетными данными.

— Перейдите в Управление > Локальные хосты.

 

-Нажмите «Создать локальный хост».

 

— Укажите имя локального хоста и включите приложение Data Connector, как показано ниже. После этого нажмите «Сохранить и закрыть».

 

— теперь вы получите всплывающее сообщение с ключом API. Этот ключ API понадобится вам при развертывании CDC на Docker в следующих разделах этого руководства, поэтому держите его под рукой.

 

 

-Вы можете нажать «Закрыть» после того, как сохраните ключ API на своем компьютере.

Примечание : у вас есть возможность получить ключ API из пользовательского интерфейса CSP позже, если вы забыли его скопировать.

Теперь вы должны увидеть локальный хост, который вы создали в пользовательском интерфейсе CSP, в состоянии «Ожидание». Ожидается статус «Ожидание», поскольку нам еще предстоит загрузить виртуальную машину с образом BloxOne CDC и подключить ее к порталу CSP.

 

 

Если вы дошли до этого места, вы успешно создали локальный хост в CSP и включили на нем приложение CDC. Теперь нам нужна виртуальная машина с загруженным образом докера BloxOne, чтобы присоединить ее к порталу CSP.

Ниже приведены инструкции по получению образа докера, загрузке его на узел докера и регистрации на портале CSP.

— Нажмите «Администрирование»> «Загрузки» на портале CSP. Это должно привести вас к различным доступным загрузкам BloxOne.

 

— Здесь нам нужна ссылка на образ докера для BloxOne. Щелкните правой кнопкой мыши «Загрузить пакет для Docker» и «Копировать ссылку».

 

 

 

Скопированная ссылка в этом примере:

http://ib-noa-prod.csp.infoblox.com.s3-website-us-east-1.amazonaws.com/BloxOne_OnPrem_Docker_3. 2.7.t…

 

Установите Docker:

-Выполните следующие команды, чтобы установить Docker на свой хост. (Вам потребуется установить докер на обе VMS.)

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

sudo usermod -aG docker $USER

 

Затем измените порт SSH с 22 на порт 23. [См. приложенный документ о том, как изменить порт SSH на другой порт.]

2 После изменения порта SSH выполните следующее:

 

— Теперь мы копируем ссылку на образ докера BloxOne, который был взят со страницы CSP. Теперь нам нужно подключиться к ВМ1 по SSH (см. таблицу в начале статьи), скачать образ. [Виртуальная машина, на которой должен работать CDC, должна иметь SSH, работающий на порту 22. Например: измените порт SSH на вашей виртуальной машине на порт 23 и перезапустите службу SSH. ]

-Перед настройкой CDC убедитесь, что на вашем хост-компьютере с Ubuntu установлена ​​последняя версия, и установите утилиту «wget». Эта утилита будет использоваться для загрузки образа BloxOne. Вы можете запустить следующую команду для обновления и установки утилиты «wget».

 

sudo apt update && sudo apt upgrade -y && sudo apt install wget -y

 

Теперь запустите из VM1 следующий образ для загрузки.

cd ~/

wget http://ib-noa-prod.csp.infoblox.com.s3-website-us-east-1.amazonaws.com/7cker.One_On3.2_rem t…

 

 

Теперь у нас есть загруженный образ BloxOne Docker для VM1. Чтобы загрузить образ докера, вы можете запустить следующее:

 

sudo docker load -i BloxOne_OnPrem_Docker_3.2.7.tar.gz

-Чтобы просмотреть загруженный образ, вы можете использовать следующую команду:

sudo docker images

— Запишите тег изображения, так как он понадобится нам позже. Теперь, когда образ докера загружен на хост, нам нужно создать контейнер «blox.noa». Ниже приведен синтаксис, используемый для запуска приложения BloxOne.

sudo docker run -d \

  —name blox.noa \

  —network=host \

/dockers/docker -v /var/run: -v /var/run/run: докер.сок \

  -v /var/lib/infoblox/certs:/var/lib/infoblox/certs \

  -v /etc/onprem.d/:/etc/onprem.d/ \

  infobloxcto/ onprem.agent: \

  —api.key

 

Вы можете заменить

синий текст 5 104950 с соответствующими значениями в соответствии с вашими выводами. После этого вы можете проверить состояние контейнеров, как показано ниже:

 

sudo docker ps -a

 

Ниже приведен скриншот всего процесса.

 

 

[Важно : при использовании команды запуска docker для создания контейнера не меняйте имя контейнера «blox.noa», так как это может привести к проблемам.]

-Теперь , blox.noa зарегистрируется на портале CSP и поймет, что этому хосту необходимо запустить приложение CDC. Итак, он загрузит еще несколько образов докеров и запустит их. Обычно загрузка образов и их запуск занимает около 5-10 минут.

 

— Чтобы просмотреть список загруженных образов Docker, вы можете выполнить следующую команду:

sudo docker images

 

-Ниже приведен снимок экрана из локальной среды 9 0 0 0 0 lab:

 

 

 

— Теперь проверьте список запущенных контейнеров на хосте. Вы увидите, что на хосте с префиксом «cdc» запущено несколько контейнеров, которые необходимы для запуска CDC.

 

 

— Теперь вы должны увидеть, что локальный хост CDC находится в сети. Ниже скриншот:

 

 

Отлично! Подводя итог, мы сделали следующее:

-Создали локальный хост на портале CSP и включили приложение CDC.

— Войдите в нашу виртуальную машину, загрузите образы BloxOne On-Prem и загрузите их на хост.

-Создан контейнер «blox.noa», в который загружены дополнительные образы для запуска приложения CDC.

— Подтверждено, что локальный узел, на котором работает CDC, находится в состоянии «В сети» на портале CSP.

 

Раздел 2. Как настроить внешний сервер Splunk в Docker.

В этом разделе мы настроим бесплатную версию Splunk в Docker на другой виртуальной машине (VM2). Это будет виртуальная машина, на которую CDC будет отправлять данные.

 

-SSH в ВМ2 (которая будет ВМ, на которой должен быть запущен Splunk) и выполните следующие команды:

sudo apt update && sudo apt upgrade -y

 

— Теперь установите Docker на эту виртуальную машину/экземпляр. (Инструкции добавлены в предыдущем разделе этого руководства.)

 

-Используйте следующее, чтобы создать сеть «моста» док-станции, и выполните следующее:

 

sudo docker network create —driver bridge — присоединяемый splunk

sudo docker network ls

— Теперь мы создадим splunk-сервер и универсальный сервер пересылки в докере. Для этого выполните следующие команды docker:

 

sudo docker run —network splunk —name so1 —hostname so1 -p 8000:8000 -e «SPLUNK_PASSWORD=123splunklabA» -e «SPLUNK_START_ARGS=—accept -license» -it splunk/splunk:latest

 

 

— После завершения вы должны увидеть сообщение, подобное приведенному ниже:

 

 

-Нажмите CTRL+P и CTRL+Q, чтобы выйти из интерактивного режима докера, чтобы мы могли создать другой контейнер на том же хосте. (В качестве альтернативы откройте другой сеанс SSH для виртуальной машины/экземпляра CDC и продолжите следующее.)

— Чтобы убедиться, что контейнер splunk запущен, вы можете запустить «docker ps -a» для проверки.

Теперь мы можем запустить следующее, чтобы создать универсальный сервер пересылки Splunk в том же экземпляре.

 

sudo docker run —network splunk —name uf1 —hostname uf1 -p 9997:9997 -e «SPLUNK_PASSWORD=123splunklabA» -e «SPLUNK_START_ARGS=—accept-license» -e «SPLUNK_START_ARGS=—accept-license» -e «SPLUNK_START_ARGS=—accept-license» so1″ -it splunk/universalforwarder:latest

 

Примечания:

— Дублируйте текст синим цветом в соответствии с вашими требованиями.

— Здесь пароль для входа в пользовательский интерфейс splunk установлен как 123splunklabA. Вы можете изменить его соответствующим образом. У Splunk есть требование сложности пароля

 

 

-После создания контейнера вы должны увидеть следующее сообщение «Книга воспроизведения Ansible завершена».

 

 

-Нажмите CTRL+P и CTRL+Q, чтобы выйти из интерактивного режима Docker. (В качестве альтернативы откройте еще один сеанс SSH для виртуальной машины/экземпляра CDC и продолжите следующее.)

— Чтобы убедиться, что универсальный сервер пересылки работает, вы можете запустить « docker ps -a » для проверки.

 

— Здесь мы видим, что и универсальный сервер пересылки, и контейнер сервера Splunk запущены.

-Я могу получить доступ к пользовательскому интерфейсу для Splunk, используя http: // IP-of-box-running-splunk-server: 8000

USername: Advine-Server: 8000

USernam

Пароль: 123splunklabA                                                       <- Это значение переменной, передаваемой при использовании команды «docker run»

 

 

— Нажмите «Понятно» на странице.

 

 

-Нажмите « Настройки » > « Пересылка и получение ».

 

 

-В разделе « Получение данных » > нажмите « Настроить прием ».

 

 

-Проверьте, включен ли порт 9997.

 

 

Примечание: Если записи нет, нажмите «Новый принимающий порт», добавьте порт 9997 и убедитесь, что он включен.

Теперь нам нужно создать индекс в Splunk. Для этого нажмите Настройки > Индексы .

 

 

-Нажмите «Новый индекс».

 

 

-Добавьте имя вашего индекса. В этой лабораторной работе я установил «Имя индекса» как « cdclab ».

 

 

— Вы должны увидеть недавно добавленный индекс в разделе «Индексы».

-Найдите на « настроек »> » Типы источников

-Найдите на « Новый исходный тип ».

 

 

Добавьте имя как «ib:rpz:captures»

 

 

— Это должно быть видно в разделе «Типы источников».

 

 

Конфигурация потока трафика:

— Теперь, когда у нас настроен сервер Splunk, мы можем выполнить настройку, чтобы данные поступали в коннектор данных Cloud (CSP) и CDC от CSP. отправить на внешний сервер Splunk (назначение).

Портал CSP => Cloud Data Connector => Splunk Server.

Во-первых, давайте создадим пункт назначения Splunk.

Добавление назначения Splunk:

— Перейдите к Управление > Коннектор данных > Конфигурация назначения и нажмите « Создать ».

 

 

-Введите имя для вашего Splunk Destination. Пока оставьте это «Состояние» как «Отключено». Это будет включено после настройки потока трафика, который обсуждается далее в руководстве.

— В этой лабораторной установке виртуальная машина/экземпляр CDC и внешний сервер Splunk находятся в одной подсети. Следовательно, я использовал частный IP-адрес «10.0.48.87» сервера Splunk. Используйте порт как «9997». [См. разделы выше этого руководства.]

— Имя индексатора — « cdclab », которое ранее было настроено в Splunk. [См. разделы выше этого руководства]

— Поскольку это местная лаборатория для тестирования, я использовал «Небезопасный режим».

 

 

-Теперь мы настроили пункт назначения. Далее мы создадим поток трафика.

Конфигурация потока трафика:

Здесь мы настраиваем конфигурацию потока таким образом, что CSP будет отправлять журналы в CDC, а CDC будет отправлять полученные журналы на сервер Splunk (который является местом назначения, которое было настроено выше).

  • Добавьте имя и описание для потока трафика и пока оставьте состояние «Отключено».
  • Убедитесь, что в разделе «Хост с поддержкой CDC» выбран локальный хост, на котором работает CDC.
  • Выберите «Источник» как «Облачный источник BloxOne» и «Назначение» как «CDC-to-Splunk».
  • Тип журнала как типы журналов, которые необходимо отправить из CSP в приложение CDC.

 

Сводка на данный момент: Мы настроили пункт назначения, которым является Splunk, и настроили поток трафика для данных.

 

Включение пункта назначения и потока трафика:

Теперь нам нужно включить пункт назначения и поток трафика.

-Перейдите к Manage > Data Connector > Destination Configuration, отредактируйте Destination «CDC-to-Splunk».

-Изменить «Состояние» на «Включено».

 

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

-Перейдите к Manage>Data Connector> Traffic Flow Configuration , отредактируйте Destination «CSP-to-CDC».

-Изменить “ Состояние » до « Включено .

 

 

После включения потока трафика вы сможете увидеть «Состояние» как «Активно».

Теперь вы можете получить доступ к пользовательскому интерфейсу Splunk и выполнить поиск по индексу «cdclab».

index=»cdclab»

 

Ниже приведен снимок экрана пользовательского интерфейса Splunk, который получает данные из CSP в Splunk через CDC.

 

 

 

Sources/References:

https://docs.infoblox.com/display/BloxOneDDI/Bare-Metal+Docker+Deployment

https://github. com/splunk/docker-splunk

https://docs.splunk.com/Documentation/Splunk/latest/Installation/SystemRequirements

 

Защитите связь Portainer Edge Agent с помощью mTLS

Итак, вы решили перейти в производство с Portainer для управления удаленными пограничными устройствами, поздравляем. .

Но ваша служба безопасности решила тщательно изучить конфигурацию, и это правильно. Они обеспокоены тем, что порты Portainer не будут доступны в Интернете, и спросили, какие дополнительные уровни защиты можно развернуть.

Ваша первая мысль — ACL брандмауэра, за исключением того, что они не будут работать, так как ваши пограничные устройства имеют динамические IP-адреса, поэтому нет никакого способа достоверно узнать, какой IP-адрес они будут представлять как… и что еще?

mTLS (MutualTLS) — это механизм, который заставляет и клиента, и сервер предоставлять действительные доказательства того, что они являются теми, за кого себя выдают, и что эти доказательства выданы доверенным источником (центром сертификации). Это отличный способ добавить защиту любой веб-службе, которая доступна в Интернете и с которой должны общаться только доверенные люди/устройства. Но как настроить mTLS в Portainer? Позволь мне показать тебе.

Во-первых, вам нужно настроить mTLS при развертывании Portainer, поэтому вам потребуется повторно развернуть (не волнуйтесь, вы можете повторно использовать существующую базу данных Portainer) Portainer.

Для простоты я сделаю сервер Portainer центром сертификации для выдачи сертификатов TLS удаленным устройствам, но для этого вам следует использовать корпоративный центр сертификации.

Первый шаг — создать корневой ЦС. SSH к серверу Portainer, чтобы начать.

Введите команду: openssl req -newkey rsa:8192 -nodes -keyout ca.key -x509 -days 365 -out ca.cert -batch

Это создаст два файла, ca.cert и ca.key.

Теперь нам нужно сгенерировать сертификат сервера.

Введите команды:

openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr -batch
openssl x509 -req -days 365 -in server. csr -CA ca.cert -CAkey ca.key -CAcreateserial -out server.cert -extfile <(printf "subjectAltName=DNS:\nextendedKeyUsage=serverAuth»)

Теперь нам нужно сгенерировать сертификат клиента, который будут использовать наши пограничные агенты (либо 1:1, либо 1:много).

Введите команды:

openssl genrsa -out client.key 4096
openssl req -new -key client.key -out client.csr -batch -subj «/CN=client»
openssl x509 — req -days 365 -in client.csr -CA ca.cert -CAkey ca.key -CAcreateserial -out client.cert -extfile <(printf "extendedKeyUsage=clientAuth")

Хорошо, вам нужно скопировать файлы ca.cert, client.cert и client.key локально, используя любые инструменты, которые вы предпочитаете.

Теперь давайте развернем Portainer.

Введите следующее (для запуска в Docker):

d ocker run —name portainer -d -p 8000:8000 -p 9443:9443 —restart=always \
-v /var/run/ docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
-v /root:/certs \
portainer/portainer-ee:latest —sslcert /certs/ server.cert —sslkey /certs/server.key —sslcacert /certs/ca.cert

Теперь Portainer запустится, используя самозаверяющий сертификат. Также обратите внимание, что я привязываю установку / root, так как именно здесь я сгенерировал сертификаты выше.

Итак, переходим к агенту..

Сначала попробуем использовать агент без сертификата mTLS, чтобы показать, что происходит.

Для простоты мы будем использовать следующую команду для «набора» устройства.

PORTAINER_EDGE_ID=$(имя хоста)

docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
-v /:/host \
-v portainer_agent_data:/data \
—restart always \
-e EDGE=1 \
-e EDGE_ID=$PORTAINER_EDGE_ID \
-e EDGE_KEY=aHR0cHM6Ly8xMzguNjguNi4xMy5uaXAuaW86OTQ0M3wxMzguNjguNi4xMy5uaXAuaW86ODAwMHxkZTphYzplMzo0Mjo3ZTpjMTo4NTo2YzphNjo2Yzo4ODowNjpkZjo4ODphNjo0NHww \
-e EDGE_INSECURE_POLL=1 \
-name portainer_edge_agent \
Portainer/Agent: 2. 14.2

, а затем следите В экземпляре Portainer ничего не появляется в граничной комнате ожидания.

Хорошо, остановите этот агент и удалите его… он никогда не подключится.

Теперь создайте каталог с именем /certs и скопируйте в этот каталог ранее сохраненные сертификаты 3x.

Хорошо, теперь мы можем повторно развернуть агент, используя модифицированную версию сценария развертывания, как показано ниже:

PORTAINER_EDGE_ID=$(hostname)

docker run -d \
-vvar /run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
-v /:/host \
-v /certs:/certs \
-v portainer_agent_data:/data \
—перезапускать всегда \
-e EDGE=1 \
-e EDGE_ID=$PORTAINER_EDGE_ID \
-e EDGE_KEY=aHR0cHM6Ly8xMzguNjguNi4xMy5uaXAuaW86OTQ0M3wxMzguNjguNi4xMy5uaXAuaW86ODAwMHxkZTphYzplMzo0Mjo3ZTpjMTo4NTo2YzphNjo2Yzo4ODowNjpkZjo4ODphNjo0NHww \
-e EDGE_INSECURE_POLL=0 \
—name portainer_edge_agent \
portainer/ агент: 2. 14.2 —sslcert /certs/client.cert —sslkey /certs/client.key —sslcacert /certs/ca.cert

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

, а теперь в Portainer перейдите в «пограничные устройства» и «зал ожидания», чтобы увидеть, что устройство находится в ожидании.

Свяжите его, подождите несколько секунд, а затем посмотрите, как сердцебиение становится зеленым.

Теперь у вас есть экземпляр Portainer, подключенный к Интернету, готовый принимать запросы на подключение ТОЛЬКО от пограничных устройств, которые представляют сертификат клиента, выданный ЦС. Любые другие запросы будут отклонены.

 

Установить Kong Gateway на Docker — v3.0.x

Kong Gateway

3.0.x (последняя)

Kong Gateway поддерживает как PostgreSQL 9.5+, так и Cassandra 3.11.*. хранилище данных. В этом руководстве приведены шаги по настройке PostgreSQL.

Если вы предпочитаете использовать образ Kong Gateway с открытым исходным кодом с Docker Compose, Kong также предоставляет Шаблон Docker Compose со встроенной оркестровкой и масштабируемостью.

Некоторые старые изображения Kong Gateway не являются общедоступными. Если вам нужна конкретная версия патча и вы не можете найдите его на общедоступной странице Kong Docker Hub, свяжитесь с Поддержка Конга.

Программное обеспечение Kong Gateway управляется Лицензионное соглашение на программное обеспечение Kong. Kong Gateway (OSS) находится под лицензией Лицензия Апач 2.0.

Предварительные условия

  • Система с поддержкой Docker и надлежащим доступом к Docker
  • (только для предприятий) Файл license.json от Kong

Выберите путь для установки Kong Gateway:

  • С базой данных: Используйте базу данных для хранить конфигурации сущности Kong. Может использовать Admin API или декларативный конфигурационные файлы для настройки Kong.
  • Без базы данных (режим без БД): Храните конфигурацию Kong в памяти на узле. В этом режиме Admin API только для чтения, и вы должны управлять Kong с помощью декларативной конфигурации.

Если вы впервые пробуете Kong Gateway, мы рекомендуем установить его с базой данных.

Установить Kong Gateway с базой данных

Настроить контейнер Kong Gateway с базой данных PostgreSQL для хранения Конфигурация Конга.

Предупреждение об устаревании: Cassandra в качестве серверной базы данных для Kong Gateway устарела. Это означает, что функция в конечном итоге будет удалена.
Целью удаления Cassandra является версия Kong Gateway 4.0. Начиная с версии Kong Gateway 3.0, некоторые новые функции могут не поддерживаться Cassandra.

Подготовка базы данных

  1. Создайте пользовательскую сеть Docker, чтобы контейнеры могли обнаруживать и общаться друг с другом:

     сеть докеров создать Kong-Net
     

    Вы можете назвать эту сеть как угодно. Мы используем kong-net как пример в этом руководстве.

  2. Запустить контейнер PostgreSQL:

     docker run -d --name Kong-база данных \
      --сеть=конг-нет \
      -p 5432:5432 \
      -e "POSTGRES_USER=конг" \
      -e "POSTGRES_DB=конг" \
      -e "POSTGRES_PASSWORD=kongpass" \
      постгрес: 9.6
     
    • POSTGRES_USER и POSTGRES_DB : Установите эти значения на конг . Это значение по умолчанию, ожидаемое Kong Gateway.
    • POSTGRES_PASSWORD : Установите пароль базы данных на любую строку.

    В этом примере контейнер Postgres с именем kong-database может общаться с любыми контейнерами в сети kong-net .

  3. Подготовить базу данных Kong:

    Kong Gateway

    Kong Gateway (OSS)

     docker run --rm --network=kong-net \
      -e "KONG_DATABASE=postgres" \
      -e "KONG_PG_HOST=конг-база данных" \
      -e "KONG_PG_PASSWORD=kongpass" \
      -e "KONG_PASSWORD=тест" \
     kong/kong-gateway:3. 0.0.0 загрузочная загрузка миграции kong
     
     запуск докера --rm --network=kong-net \
      -e "KONG_DATABASE=postgres" \
      -e "KONG_PG_HOST=конг-база данных" \
      -e "KONG_PG_PASSWORD=kongpass" \
     Конг: 3.0.0 Конг Миграция Bootstrap
     

    Где:

    • KONG_DATABASE : Указывает тип базы данных, которую использует Kong.
    • KONG_PG_HOST : Имя контейнера Postgres Docker, который обменивается данными через kong-net network, из предыдущего шага.
    • KONG_PG_PASSWORD : Пароль, который вы задали при вызове контейнера Postgres в предыдущий шаг.
    • KONG_PASSWORD (только для предприятий): пароль по умолчанию для администратора суперпользователь Kong Gateway.
    • {IMAGE-NAME:TAG} начальная загрузка миграции конг : По порядку это имя и тег контейнера Kong Gateway, за которыми следует команду Kong для подготовки базы данных Postgres.

      Пуск Kong Gateway

    Важно: Приведенные ниже настройки предназначены для непроизводственного использования только , поскольку они переопределяют настройку по умолчанию admin_listen для прослушивания запросов из любого источника. Не используйте эти настройки в средах, напрямую подключенных к Интернету.


    Если вам нужно открыть порт admin_listen для Интернета в производственной среде,

    защитите его с помощью аутентификации.

  4. (необязательно) Если у вас есть корпоративная лицензия для Kong Gateway, экспортировать лицензионный ключ в переменную:

    Данные лицензии должны содержать прямые кавычки, чтобы считаться действительным JSON (' и " , а не ' или " ).

    Примечание: Следующая лицензия является только примером. Вы должны использовать следующий формат, но предоставить свой собственный контент.

     export KONG_LICENSE_DATA='{"лицензия":{"полезная нагрузка":{"admin_seats":"1","клиент":"Example Company, Inc","dataplanes":"1","license_creation_date":"2017- 07-20","license_expiration_date":"2017-07-20","license_key":"00141000017ODj3AAG_a1V41000004wT0OEAU","product_subscription":"Konnect Enterprise","support_plan":"None"},"signature":"6985968131533a967fcc721244a979948b1066967f1e9cd65dbd8eeabe060fc32d894a2945f5e4a03c1cd2198c74e058ac63d28b045c2f1fcec95877bd790e1b" ,"версия":"1"}}'
     
  5. Выполните следующую команду, чтобы запустить контейнер с Kong Gateway:

    Kong Gateway

    Kong Gateway (OSS)

     docker run -d --name kong-gateway \
      --сеть=конг-нет \
      -e "KONG_DATABASE=postgres" \
      -e "KONG_PG_HOST=конг-база данных" \
      -e "KONG_PG_USER=конг" \
      -e "KONG_PG_PASSWORD=kongpass" \
      -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
      -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
      -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_LISTEN=0. 0.0.0:8001" \
      -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
      -e КОНГ_ЛИЦЕНЗИЯ_ДАННЫЕ \
      -p 8000:8000 \
      -p 8443:8443 \
      -p 8001:8001 \
      -p 8444:8444 \
      -p 8002:8002 \
      -p 8445:8445 \
      -p 8003:8003 \
      -p 8004:8004 \
      конг/конг-шлюз:3.0.0.0
     
     docker run -d --name kong-gateway \
      --сеть=конг-нет \
      -e "KONG_DATABASE=postgres" \
      -e "KONG_PG_HOST=конг-база данных" \
      -e "KONG_PG_USER=конг" \
      -e "KONG_PG_PASSWORD=kongpass" \
      -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
      -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
      -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
      -p 8000:8000 \
      -p 8443:8443 \
      -p 127.0.0.1:8001:8001 \
      -p 127.0.0.1:8444:8444 \
      конг: 3.0.0
     

    Где:

    • --name и --network : имя создаваемого контейнера, и сеть Docker, в которой он общается.
    • KONG_DATABASE : Указывает тип базы данных, которую использует Kong.
    • KONG_PG_HOST : Имя контейнера Postgres Docker, который обменивается данными через конг-нет сеть.
    • KONG_PG_USER и KONG_PG_PASSWORD : Имя пользователя и пароль Postgres. Kong Gateway требуется информация для входа для хранения данных конфигурации в базе данных KONG_PG_HOST .
    • Все _LOG параметры: задайте пути к файлам для вывода журналов или используйте значения в пример вывода сообщений и ошибок на stdout и stderr .
    • KONG_ADMIN_LISTEN : Порт, на котором Kong Admin API прослушивает запросы.
    • KONG_ADMIN_GUI_URL : (Только для предприятий) URL-адрес для доступа к Kong Manager, которому предшествует протокол. (например, http://).
    • KONG_LICENSE_DATA : (только для предприятий) Если у вас есть файл лицензии и вы его сохранили в качестве переменной среды этот параметр извлекает лицензию из вашей среды.
  6. Подтвердите свою установку:

    Доступ к конечной точке /services с помощью Admin API:

     curl -i -X ​​GET --url http://localhost:8001/services
     

    Вы должны получить код состояния 200 .

  7. (недоступно в OSS) Убедитесь, что Kong Manager запущен, обратившись к нему. используя URL-адрес, указанный в KONG_ADMIN_GUI_URL :

     http://локальный:8002
     

Начало работы с Kong Gateway

Теперь, когда у вас есть работающий экземпляр Gateway, Kong предоставляет ряд руководства по началу работы чтобы помочь вам настроить и улучшить вашу первую Службу.

В частности, сразу после установки вам может понадобиться:

  • Создать сервис и маршрут
  • Настроить плагин
  • Защитите свои службы с помощью аутентификации

Очистка контейнеров

Если вы завершили тестирование Kong Gateway и контейнеры больше не нужны, можно очистить их с помощью следующих команд:

 docker kill kong-gateway
docker kill Kong-база данных
док-контейнер rm Kong-Gateway
Docker-контейнер rm Kong-база данных
сеть докеров rm kong-net
 

Установка Kong Gateway в режиме без базы данных

Следующие шаги помогут вам запустить Kong Gateway в Режим без БД.

Создайте сеть Docker

Выполните следующую команду:

 docker network create kong-net
 

Вы можете назвать эту сеть как угодно. Мы используем kong-net как пример в этом руководстве.

Этот шаг не является обязательным для запуска Kong в режиме без БД, но он полезен. предосторожность на случай, если в будущем вы захотите добавить что-то еще (например, плагин ограничения скорости резервируется кластером Redis).

Подготовьте файл конфигурации

  1. Подготовьте декларативный файл конфигурации в формате .yml или .json .

    Синтаксис и свойства описан в руководстве по формату декларативной конфигурации. Добавьте любое ядро объекты (сервисы, маршруты, плагины, потребители и т. д.), которые вам нужны в этом файле.

    Например, простой файл с Сервисом и Маршрутом может выглядеть примерно так:

     _format_version: "3.0"
     _трансформировать: правда
     Сервисы:
     - хост: mockbin. org
       имя: пример_сервис
       порт: 80
       протокол: http
       маршруты:
       - имя: пример_маршрута
         пути:
         - /насмехаться
         полоса_путь: правда
     

    В этом руководстве предполагается, что вы назвали файл kong.yml .

  2. Сохраните декларативную конфигурацию локально и запишите путь к файлу.

Запуск Kong Gateway в режиме без базы данных

Важно: Приведенные ниже настройки предназначены для непроизводственного использования только , поскольку они переопределяют настройку по умолчанию admin_listen для прослушивания запросов из любого источника. Не используйте эти настройки в средах, напрямую подключенных к Интернету.


Если вам нужно открыть порт admin_listen для Интернета в производственной среде,

защитите его с помощью аутентификации.

  1. (необязательно) Если у вас есть корпоративная лицензия для Kong Gateway, экспортировать лицензионный ключ в переменную:

    Данные лицензии должны содержать прямые кавычки, чтобы считаться действительным JSON (' и " , а не ' или " ).

    Примечание: Следующая лицензия является только примером. Вы должны использовать следующий формат, но предоставить свой собственный контент.

     export KONG_LICENSE_DATA='{"лицензия":{"полезная нагрузка":{"admin_seats":"1","клиент":"Example Company, Inc","dataplanes":"1","license_creation_date":"2017- 07-20","license_expiration_date":"2017-07-20","license_key":"00141000017ODj3AAG_a1V41000004wT0OEAU","product_subscription":"Konnect Enterprise","support_plan":"Нет"},"signature":"6985968131533a967fcc721244a979948b1066967f1e9cd65dbd8eeabe060fc32d894a2945f5e4a03c1cd2198c74e058ac63d28b045c2f1fcec95877bd790e1b","}version":
     
  2. Из того же каталога, где вы только что создали файл kong.yml , выполните следующую команду, чтобы запустить контейнер с Kong Gateway:

    Kong Gateway

    Kong Gateway (OSS)

     docker run -d --name kong-dbless \
      --сеть=конг-нет \
      -v "$(pwd):/конг/декларативный/" \
      -e "KONG_DATABASE=выключено" \
      -e "KONG_DECLARATIVE_CONFIG=/kong/declarative/kong. yml" \
      -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
      -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
      -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
      -e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
      -e КОНГ_ЛИЦЕНЗИЯ_ДАННЫЕ \
      -p 8000:8000 \
      -p 8443:8443 \
      -p 8001:8001 \
      -p 8444:8444 \
      -p 8002:8002 \
      -p 8445:8445 \
      -p 8003:8003 \
      -p 8004:8004 \
      конг/конг-шлюз:3.0.0.0
     
     docker run -d --name kong-dbless \
      --сеть=конг-нет \
      -v "$(pwd):/конг/декларативный/" \
      -e "KONG_DATABASE=выключено" \
      -e "KONG_DECLARATIVE_CONFIG=/kong/declarative/kong.yml" \
      -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
      -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
      -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
      -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
      -p 8000:8000 \
      -p 8443:8443 \
      -p 127.0.0.1:8001:8001 \
      -p 127.0.0.1:8444:8444 \
      конг: 3.0.0
     

    Где:

    • --name и --network : имя создаваемого контейнера, и сеть Docker, в которой он общается.
    • -v $(pwd):/path/to/target/ : смонтировать текущий каталог на локальную файловую систему в каталог в контейнере Docker. Это делает kong.yml , видимый из контейнера Docker.
    • KONG_DATABASE : Устанавливает базу данных на вместо , чтобы указать Конгу не использовать резервная база данных для хранения конфигурации.
    • KONG_DECLARATIVE_CONFIG : Путь к декларативному файлу конфигурации внутри контейнера. Этот путь должен соответствовать целевому пути, который вы сопоставляете с -v .
    • Все _LOG параметры: задайте пути к файлам для вывода журналов или используйте значения в пример вывода сообщений и ошибок на stdout и stderr .
    • KONG_ADMIN_LISTEN : Порт, на котором Kong Admin API прослушивает запросы.
    • KONG_ADMIN_GUI_URL : (Только для предприятий) URL-адрес для доступа к Kong Manager, которому предшествует протокол. (например, http://).
    • KONG_LICENSE_DATA : (только для предприятий) Если у вас есть файл лицензии и вы его сохранили в качестве переменной среды этот параметр извлекает лицензию из вашей среды.
  3. Убедитесь, что Kong Gateway работает:

     curl -i http://localhost:8001
     

    Проверка конечной точки. Например, получить список услуг:

     curl -i http://localhost:8001/services
     

Начало работы с Kong Gateway

Теперь, когда у вас есть работающий экземпляр Gateway, Kong предоставляет ряд руководства по началу работы чтобы помочь вам настроить и улучшить вашу первую Службу.

Если вы используете образец kong.yml в этом руководстве, у вас уже есть Служба и Маршрут настроен. Вот еще несколько вещей, чтобы проверить:

  • Настройка плагина
  • Защитите свои службы с помощью аутентификации
  • Трафик балансировки нагрузки между целями

Очистка контейнеров

Если вы завершили тестирование Kong Gateway и контейнеры больше не нужны, можно очистить их с помощью следующих команд:

 docker kill kong-dbless
док-контейнер rm kong-dbless
сеть докеров rm kong-net
 

Устранение неполадок

Информацию об устранении проблем с лицензией см. :

  • Варианты развертывания лицензий
  • /licenses Ссылка на API
  • /лицензии Примеры API

Если вы не получили код состояния 200 OK или вам нужна помощь в заполнении настройки, обратитесь к контактному лицу службы поддержки или перейдите на Портал поддержки.

web2py — Рецепты развертывания

appconfig

Модуль AppConfig

Среда между вашей системой разработки и производственной системой почти наверняка будет означать другую конфигурацию базы данных, разные почтовые серверы и, возможно, другие различия.

Web2py использует закрытый каталог для хранения информации, которая не реплицируется при обычном развертывании в рабочую среду (хотя вам необходимо позаботиться о том, чтобы убедиться, что вы не развертываете этот каталог).

Предоставленный модуль AppConfig позволяет в личном каталоге хранить простой текстовый файл конфигурации для определения настроек, которые различаются между разработкой и производством, например подключения к базе данных. По умолчанию это текстовый файл в стиле python, но также поддерживается json.

Приложение приветствия теперь использует этот модуль в db.py для чтения конфигурации из файла в частном каталоге приложения. По умолчанию путь к этому файлу:

private/appconfig.ini

По умолчанию appconfig.ini позволяет определить подключение к базе данных и конфигурацию smtp. Когда приложение работает стабильно, модуль можно перевести в режим кэширования, чтобы уменьшить накладные расходы.

 из gluon.contrib.appconfig импортировать AppConfig
...
myconf = AppConfig(reload=False)
 

Приложения, созданные в последней версии web2py, по умолчанию имеют соединение с базой данных, определенное с помощью AppConfig.

Значения в app_config.ini извлекаются и преобразуются из строкового значения следующим образом:

 myconf = AppConfig()
...
a_config_value = myconf.take('example_section.example_key', cast=int)
 

Поскольку приведение происходит из строки, а непустые строки приводятся к True, самый безопасный способ представления логического значения False — это пустая строка:

 [пример_раздела]
пример_ключ =
 

Рецепты развертывания: инфраструктура

Существует несколько способов развертывания web2py в производственной среде. Детали зависят от конфигурации и услуг, предоставляемых хостом.

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

  • Развертывание в производственной среде (Apache, Nginx, Lighttpd, Cherokee)
  • Безопасность
  • Масштабируемость с использованием Redis и балансировщика нагрузки.
  • Развертывание на PythonAnywhere, Heroku, Amazon EC2 и на платформе Google App Engine (GAE . Ракета wsgiserver [ракета] . Хотя это быстрый веб-сервер, его возможности настройки ограничены. По этой причине лучше всего развертывать web2py за Apache [apache] , Nginx [nginx] Lighttpd [lighttpd] он или Cherokee [cherokee] . Это бесплатные веб-серверы с открытым исходным кодом, которые можно настраивать и которые доказали свою надежность в производственных средах с высоким трафиком. Их можно настроить для прямого обслуживания статических файлов, работы с HTTPS и передачи управления web2py для динамического контента.

    Еще несколько лет назад стандартным интерфейсом для связи между веб-серверами и веб-приложениями был Common Gateway Interface (CGI) [cgi] . Основная проблема с CGI заключается в том, что он создает новый процесс для каждого HTTP-запроса. Если веб-приложение написано на интерпретируемом языке, каждый HTTP-запрос, обслуживаемый сценариями CGI, запускает новый экземпляр интерпретатора. Это медленно, и его следует избегать в производственной среде. Более того, CGI может обрабатывать только простые ответы. Он не может обрабатывать, например, потоковую передачу файлов.

    web2py предоставляет файл cgihandler.py для взаимодействия с CGI.

    Одним из решений этой проблемы является использование модуля mod_python для Apache. Мы обсуждаем его здесь, потому что его использование все еще очень распространено, хотя Apache Software Foundation официально забросил проект mod_python. mod_python запускает один экземпляр интерпретатора Python при запуске Apache и обслуживает каждый HTTP-запрос в своем собственном потоке без необходимости каждый раз перезапускать Python. Это лучшее решение, чем CGI, но это не оптимальное решение, поскольку mod_python использует свой собственный интерфейс для связи между веб-сервером и веб-приложением. В mod_python все размещенные приложения работают под одним и тем же идентификатором пользователя/группы, что создает проблемы с безопасностью.

    web2py предоставляет файл modpythonhandler.py для взаимодействия с mod_python.

    В последние несколько лет сообщество Python объединилось вокруг нового стандартного интерфейса для связи между веб-серверами и веб-приложениями, написанными на Python. Он называется интерфейсом шлюза веб-сервера (WSGI) [wsgi-w] [wsgi-o] . web2py был построен на WSGI и предоставляет обработчики для использования других интерфейсов, когда WSGI недоступен.

    Apache поддерживает WSGI через модуль mod_wsgi [modwsgi] , разработанный Грэмом Дамплтоном.

    web2py предоставляет файл wsgihandler.py для взаимодействия с WSGI.

    Некоторые службы веб-хостинга не поддерживают mod_wsgi. В этом случае мы должны использовать Apache в качестве прокси и пересылать все входящие запросы на встроенный веб-сервер web2py (работающий, например, на localhost:8000).

    В обоих случаях, с mod_wsgi и/или mod_proxy, Apache можно настроить для обслуживания статических файлов и работы с шифрованием SSL напрямую, сняв нагрузку с web2py.

    Nginx использует uWSGI вместо WSGI, аналогичный, но другой протокол, для которого требуется собственный адаптер Python.

    Веб-сервер Lighttpd в настоящее время не поддерживает интерфейс WSGI, но поддерживает интерфейс FastCGI [fastcgi] , который является улучшением по сравнению с CGI. Основная цель FastCGI — уменьшить накладные расходы, связанные с взаимодействием веб-сервера и программ CGI, позволяя серверу обрабатывать больше HTTP-запросов одновременно.

    Согласно веб-сайту Lighttpd, «Lighttpd поддерживает несколько популярных сайтов Web 2.0, таких как YouTube и Википедия. Его высокоскоростная инфраструктура ввода-вывода позволяет им масштабироваться в несколько раз лучше с тем же оборудованием, чем с альтернативными веб-серверами». Lighttpd с FastCGI на самом деле быстрее, чем Apache с mod_wsgi.

    web2py предоставляет файл fcgihandler.py для взаимодействия с FastCGI.

    web2py также включает gaehandler.py для взаимодействия с Google App Engine (GAE). В GAE веб-приложения работают «в облаке». Это означает, что фреймворк полностью абстрагируется от любых аппаратных деталей. Веб-приложение автоматически реплицируется столько раз, сколько необходимо для обслуживания всех одновременных запросов. Репликация в этом случае означает более чем несколько потоков на одном сервере; это также означает несколько процессов на разных серверах. GAE достигает такого уровня масштабируемости, блокируя доступ на запись к файловой системе, а вся постоянная информация должна храниться в хранилище данных Google BigTable или в кэше памяти.

    На платформах, отличных от GAE, необходимо решить проблему масштабируемости, которая может потребовать некоторых настроек в приложениях web2py. Самый распространенный способ добиться масштабируемости — использовать несколько веб-серверов за балансировщиком нагрузки (простой циклический перебор или что-то более сложное, получая обратную связь от серверов).

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

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

    • Сохранять сеансы в базе данных, в кэше или вообще не сохранять сеансы.
    • Сохранение билетов в локальной файловой системе и их пакетное перемещение в базу данных.
    • Используйте memcache вместо cache.ram и cache.disk.
    • Сохранять загруженные файлы в базе данных, а не в общей файловой системе.

    Хотя мы рекомендуем следовать первым трем рецептам, четвертый рецепт может дать преимущество в основном в случае небольших файлов, но может быть контрпродуктивным для больших файлов.

    anyserver.py

    anyserver

    bjoern

    cgi

    cherrypy

    diesel

    eventlet

    fapws

    flup

    gevent

    gunicorn

    mongrel2

    paste

    tornado

    twisted

    wsgiref

    Web2py поставляется с файлом anyserver.py , который реализует интерфейсы WSGI для следующих популярных серверов: bjoern, cgi, cherrypy, Diesel, Eventlet, fapws, flup, gevent, gunicorn, mongrel2, paste, Rocket, Tornado , скрученный, wsgiref

    Вы можете использовать любой из этих серверов, например Tornado, просто выполнив:

     python anyserver. py -s tornado -i 127.0.0.1 -p 8000 -l -P 

    Здесь -l для регистрации и -P для профилировщика. Для получения информации обо всех параметрах командной строки используйте «-h»:

     python anyserver.py -h
     

    Linux и Unix

    Одноэтапное развертывание в рабочей среде

    Вот несколько шагов по установке apache+python+mod_wsgi+web2py+postgresql с нуля.

    В Ubuntu:

     wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-ubuntu.sh
    chmod +x setup-web2py-ubuntu.sh
    sudo ./setup-web2py-ubuntu.sh 

    В Fedora:

     wget https://raw.githubusercontent.com/web2py/web2py/master/scripts/setup-web2py-fedora.sh
    chmod +x setup-web2py-fedora.sh
    sudo ./setup-web2py-fedora.sh 

    Оба этих сценария должны запускаться из коробки, но каждая установка Linux немного отличается, поэтому обязательно проверьте исходный код этих сценариев перед их запуском. В случае Ubuntu большая часть того, что они делают, объясняется ниже. Они не реализуют оптимизацию масштабируемости, обсуждаемую ниже.

    Настройка Apache

    В этом разделе мы используем Ubuntu Server Edition в качестве эталонной платформы. Команды настройки очень похожи на другие дистрибутивы Linux на основе Debian, но они могут отличаться для систем на основе Fedora (в которых используется yum вместо apt-get ). Вы можете использовать либо 2.2.x, либо 2.4.x

    Во-первых, убедитесь, что установлены все необходимые пакеты Python и Apache, введя следующие команды оболочки:

     sudo apt-get update
    sudo apt-get -y обновить
    sudo apt-get -y установить openssh-сервер
    sudo apt-get -y установить python
    sudo apt-get -y установить python-dev
    sudo apt-get -y установить apache2
    sudo apt-get -y установить libapache2-mod-wsgi
    sudo apt-get -y установить libapache2-mod-proxy-html
     

    Затем включите модуль SSL, модуль прокси и модуль WSGI в Apache:

     sudo ln -s /etc/apache2/mods-available/proxy_http. load /etc/apache2/mods-enabled/proxy_http.load
    sudo a2enmod ssl
    sudo a2enmod прокси
    sudo a2enmod proxy_http
    судо a2enmod wsgi
     

    Создайте папку SSL и поместите в нее сертификаты SSL:

     sudo mkdir /etc/apache2/ssl
     

    SSL-сертификаты следует получать в доверенном центре сертификации, таком как verisign.com, но в целях тестирования можно создать собственные самозаверяющие сертификаты, следуя инструкциям в исх. [openssl]

    Затем перезапустите веб-сервер:

     sudo /etc/init.d/apache2 restart
     

    Файл конфигурации Apache:

     /etc/apache2/sites-available/default
     

    Журналы Apache находятся в:

     /var/log/apache2/
     
    mod_wsgi

    Загрузите и разархивируйте исходный код web2py на машине, где вы установили указанный выше веб-сервер.

    Установите web2py, например, под /home/www-data/ , и передайте право собственности пользователю www-data и группе www-data. Эти шаги можно выполнить с помощью следующих команд оболочки:

     компакт-диск /главная страница/www-данные/
    sudo wget http://web2py. /]+)/appadmin>
      Запретить от всех
      
      CustomLog /private/var/log/apache2/access.log общий
      Журнал ошибок /private/var/log/apache2/error.log
    
     

    Когда вы перезапускаете Apache, он должен передавать все запросы к web2py без прохождения через Rocket wsgiserver.

    Переместите сценарий обработчика

    Наконец, вам необходимо переместить сценарий обработчика web2py/handlers/wsgihandler.py . Как указано в каталоге обработчиков, нужный сценарий следует переместить или скопировать в родительский каталог (то есть в тот же каталог, что и сценарий web2py.py ). символические ссылки могут вызвать проблемы с правами доступа Apache.

    Некоторый фон wsgi

    Вот некоторые пояснения:

     WSGIDaemonProcess web2py user=www-data group=www-data display-name=%{GROUP}
     

    определяет группу процессов демона в контексте «web2py.example.com». Определив это внутри виртуального хоста, только этот виртуальный хост может получить к нему доступ с помощью WSGIProcessGroup, включая любой виртуальный хост с тем же именем сервера, но с другим портом. Параметры «пользователь» и «группа» должны быть установлены для пользователя, у которого есть права на запись в каталог, где был установлен web2py. Вам не нужно устанавливать «пользователя» и «группу», если вы сделали каталог установки web2py доступным для записи пользователем по умолчанию, от имени которого работает Apache. Параметр «отображаемое имя» заставляет имя процесса отображаться в ps выводится как «(wsgi-web2py)» вместо имени исполняемого файла веб-сервера Apache. Поскольку параметры «процессы» или «потоки» не указаны, группа процессов демона будет иметь один процесс с 15 потоками, работающими внутри этого процесса. Обычно этого более чем достаточно для большинства сайтов, и его следует оставить как есть. При переопределении не используйте «processes=1», так как это отключит все инструменты отладки WSGI в браузере, которые проверяют флаг «wsgi.multiprocess». Это связано с тем, что любое использование параметра «процессы» приведет к тому, что этот флаг будет установлен в значение «истина», даже для одного процесса, и такие инструменты ожидают, что для него будет установлено значение «ложь». Примечание. Если код вашего приложения или сторонний модуль расширения не является потокобезопасным, вместо этого используйте параметры «processes=5 threads=1». Это создаст пять процессов в группе процессов демона, где каждый процесс является однопоточным. Вы можете рассмотреть возможность использования «maximum-requests=1000», если ваше приложение пропускает объекты Python из-за того, что оно не может правильно собрать мусор.

     WSGIProcessGroup web2py
     

    делегирует выполнение всех приложений WSGI группе процессов демона, настроенной с помощью директивы WSGIDaemonProcess.

     WSGIScriptAlias//home/www-data/web2py/wsgihandler.py
     

    монтирует приложение web2py. В этом случае он монтируется в корень веб-сайта.

     <Каталог /home/www-data/web2py>
      ...
    
     

    дает Apache разрешение на доступ к файлу сценария WSGI.

    9/]+)/appadmin> Запретить от всех

    блокирует общий доступ к admin и appadmin

    Обычно мы просто разрешаем доступ ко всему каталогу, где находится файл сценария WSGI, но web2py помещает файл сценария WSGI в каталог, который содержит другой исходный код, в том числе пароль интерфейса администратора. Открытие всего каталога вызовет проблемы с безопасностью, потому что технически Apache будет дано разрешение обслуживать все файлы для любого пользователя, который перешел в этот каталог через сопоставленный URL-адрес. Чтобы избежать проблем с безопасностью, явно запретите доступ к содержимому каталога, за исключением файла сценария WSGI, и запретите пользователю делать какие-либо переопределения из файла .htaccess для дополнительной безопасности.

    Вы можете найти заполненный, прокомментированный файл конфигурации Apache wsgi в:

     scripts/web2py-wsgi.conf
     

    Этот раздел был создан с помощью Грэма Дамплтона, разработчика mod_wsgi.

    Установка пароля

    В процессе производства может потребоваться программная установка пароля администратора. Это можно сделать из оболочки Bash с помощью

     sudo -u www-data python -c "из gluon.main import save_password; save_password(raw_input('пароль администратора:'), 443)"
     
    mod_wsgi и SSL

    Чтобы заставить некоторые приложения (например, admin и appadmin ) работать через HTTPS, сохраните сертификат SSL и ключевые файлы:

     /etc/apache2/ssl/server. /]+)/static/(?:_[\d]+.[\d]+.[\d]+/)?(.*) /home/www-data/web2py/ приложения/$1/статические/$2
      <Каталог /home/www-data/web2py/applications/*/static/>
        Заказать Разрешить, Запретить
        Разрешить от всех
      
      CustomLog /private/var/log/apache2/access.log общий
      Журнал ошибок /private/var/log/apache2/error.log
    
     

    Перезапустите Apache, и вы сможете получить доступ:

     https://www.example.com/admin
    https://www.example.com/examples/appadmin
    http://www.example.com/examples
     

    , но не:

     http://www.example.com/admin
    http://www.example.com/examples/appadmin
     
    mod_proxy

    Некоторые дистрибутивы Unix/Linux могут запускать Apache, но не поддерживают mod_wsgi. В этом случае самое простое решение — запустить Apache в качестве прокси и заставить Apache работать только со статическими файлами. 9/добро пожаловать/статические/.*»> Порядок Разрешить, Запретить Разрешить от всех ### проксировать все остальные запросы <Расположение "/добро пожаловать"> Отклонить заказ, разрешить Разрешить от всех ProxyRequests отключены ProxyPass http://localhost:8000/добро пожаловать ProxyPassReverse http://localhost:8000/ ПроксиHTMLURLMap http://127. 0.0.1:8000/welcome/ /welcome LogFormat «%h %l %u %t «%r» %>s %b» общий CustomLog /var/log/apache2/access.log общий

    Приведенный выше сценарий предоставляет доступ только к «приветственному» приложению. Чтобы открыть доступ к другим приложениям, необходимо добавить соответствующий элемент с тем же синтаксисом, что и для «приветственного» приложения.

    Сценарий предполагает наличие сервера web2py, работающего на порту 8000. Перед перезапуском Apache убедитесь, что это так:

     nohup python web2py.py -a '' -i 127.0.0.1 -p 8000 &
     

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

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

    Команды nohup гарантируют, что сервер не умрет, когда вы закроете оболочку. /welcome/static/.*»> Заказать Разрешить, Запретить Разрешить от всех ### проксировать все остальные запросы <Расположение "/добро пожаловать"> Отклонить заказ, разрешить Разрешить от всех ProxyPass http://localhost:8000/добро пожаловать ProxyPassReverse http://localhost:8000/ LogFormat «%h %l %u %t «%r» %>s %b» общий CustomLog /var/log/apache2/access.log общий <Виртуальный хост *:443> SSLEngine включен SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key <Расположение "/"> Отклонить заказ, разрешить Разрешить от всех Прокси-пасс http://локальный:8000/ ProxyPassReverse http://localhost:8000/ LogFormat «%h %l %u %t «%r» %>s %b» общий CustomLog /var/log/apache2/access.log общий

    Административный интерфейс должен быть отключен, когда web2py работает на общем хосте с mod_proxy, иначе он будет доступен другим пользователям.

    Запуск в качестве демона Linux

    Если вы не используете mod_wsgi, вам следует настроить сервер web2py так, чтобы его можно было запускать/останавливать/перезапускать как любой другой демон Linux, и чтобы он мог запускаться автоматически на этапе загрузки компьютера.

    Процесс настройки специфичен для различных дистрибутивов Linux/Unix.

    В папке web2py есть два скрипта, которые можно использовать для этой цели:

     scripts/web2py.ubuntu.sh
    скрипты/web2py.fedora.sh
     

    В Ubuntu или другом дистрибутиве Linux на основе Debian отредактируйте «web2py.ubuntu.sh» и замените путь «/usr/lib/web2py» на путь вашей установки web2py, затем введите следующие команды оболочки, чтобы переместить файл в нужную папку, зарегистрируйте его как службу запуска и запустите:

     sudo cp scripts/web2py.ubuntu.sh /etc/init.d/web2py
    sudo update-rc.d значения по умолчанию для web2py
    sudo /etc/init.d/web2py начать
     

    В Fedora или любых других дистрибутивах, основанных на Fedora, отредактируйте «web2py. fedora.sh» и замените путь «/usr/lib/web2py» на путь вашей установки web2py, затем введите следующие команды оболочки, чтобы переместить файл в нужную папку, зарегистрируйте его как службу запуска и запустите:

     sudo cp scripts/web2py.fedora.sh /etc/rc.d/init.d/web2pyd
    sudo chkconfig --добавить web2pyd
    запуск службы sudo web2py
     
    Nginx

    Nginx — это бесплатный веб-сервер с открытым исходным кодом, который быстро набирает популярность благодаря своей потрясающей производительности.

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

    Nginx — это больше, чем HTTP-сервер и обратный прокси-сервер, это также прокси-сервер IMAP/POP3.

    Nginx легко настраивается, а его файлы конфигурации проще и компактнее, чем соответствующие файлы Apache.

    Nginx не поддерживает WSGI, но обеспечивает встроенную поддержку uWSGI [uwsgi] протокол.

    uwsgi

    В Ubuntu вы можете установить Nginx с помощью:

     apt-get -y install nginx-full
     

    Затем вам нужно будет создать файл конфигурации, например, следующий:

     # файл /etc/nginx/sites-available/web2py
    сервер {
            слушать 80;
            имя_сервера $имя хоста;
            #чтобы разрешить правильное использование response.static_version
            #location ~* /(\w+)/static(?:/_[\d]+.[\d]+.[\d]+)?/(.*)$ {
            # псевдоним /home/www-data/web2py/applications/$1/static/$2;
            # истекает макс;
            #}
            расположение ~* /(\w+)/статическое/ {
                корень /home/www-data/web2py/applications/;
                #удалить следующий комментарий к производству
                #истекает макс;
            }
            расположение / {
                #uwsgi_pass 127.0.0.1:9001;
                uwsgi_pass unix:///tmp/web2py.socket;
                включить uwsgi_params;
                uwsgi_param UWSGI_SCHEME $схема;
                uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
            }
    }
    сервер {
            слушать 443 default_server ssl;
            имя_сервера $имя хоста;
            ssl_certificate /etc/nginx/ssl/web2py. crt;
            ssl_certificate_key /etc/nginx/ssl/web2py.key;
            ssl_prefer_server_ciphers включен;
            ssl_session_cache общий: SSL: 10 м;
            ssl_session_timeout 10 м;
            ssl_ciphers ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA;
            ssl_protocols SSLv3 TLSv1;
            keepalive_timeout 70;
            расположение / {
                #uwsgi_pass 127.0.0.1:9001;
                uwsgi_pass unix:///tmp/web2py.socket;
                включить uwsgi_params;
                uwsgi_param UWSGI_SCHEME $схема;
                uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
            }
    }
     

    Вам нужно будет создать символическую ссылку на файл и удалить стандартную

     ln -s /etc/nginx/sites-available/web2py /etc/nginx/sites-enabled/web2py
    rm /etc/nginx/sites-enabled/по умолчанию
     

    Вам также может понадобиться создать папку ssl для сертификатов и поместить туда сертификаты:

     мкдир /etc/nginx/ssl
    cp web2py.key /etc/nginx/ssl
    cp web2py. crt /etc/nginx/ssl
     

    Затем вам необходимо установить и настроить uWSGI

     sudo mkdir /etc/uwsgi
    sudo mkdir /var/log/uwsgi
     

    И создайте файл конфигурации «/etc/uwsgi/web2py.xml»:

     
        <сокет>/tmp/web2py.socket
        /home/www-data/web2py/
        /=wsgihandler:приложение
        <мастер/>
        <процессы>4
        <харакири>60
        8
        1
        /tmp/stats.socket
        2000
        512
        256
        <перезагрузка-на-rss> 192
        www-данные
        www-данные
        <нет-сирот/>
    
     

    Этот файл предполагает, что web2py установлен в «/home/www-data/web2py», как в случае с Apache.

    Вам также необходимо отредактировать второй файл конфигурации «/etc/init/uwsgi-emperor.conf»:

     # Скрипт Emperor uWSGI
    описание "Император uWSGI"
    запустить на уровне запуска [2345]
    остановить на уровне запуска [06]
    респаун
    exec uwsgi --master --die-on-term --emperor /etc/uwsgi --logto /var/log/uwsgi/uwsgi. log
     

    Наконец перезагрузить все:

     запустить uwsgi-emperor
    /etc/init.d/nginx перезапустить
     

    Вы можете перезагрузить uwsgi с помощью

     перезапуска uwsgi-emperor
     

    Вы можете остановить его с помощью

     stop uwsgi-emperor
     

    Вы можете перезагрузить только web2py (без перезапуска uwsgi) с помощью

     touch /etc/uwsgi/web2py.xml
     

    Все эти шаги выполняются автоматически предоставленными сценариями:

     scripts/setup-web2py-nginx-uwsgi-on-centos.sh
    скрипты/setup-web2py-nginx-uwsgi-ubuntu.sh
     
    Lighttpd

    Lighttpd

    FastCGI

    fcgihandler

    Вы можете установить Lighttpd на Ubuntu или другой дистрибутив Linux на основе Debian с помощью следующей команды оболочки:

     apt-get -y install lighttpd
     

    После установки отредактируйте /etc/rc.local и создайте фоновый процесс fcgi web2py

     cd /var/www/web2py && sudo -u www-data nohup python fcgihandler. |/.*)$" => "/handler_web2py.fcgi$1",
        )
    }
     

    Теперь проверьте синтаксические ошибки:

     lighttpd -t -f /etc/lighttpd/lighttpd.conf
     

    и (пере)запустите веб-сервер с помощью:

     /etc/init.d/lighttpd reboot
     

    Обратите внимание, что FastCGI привязывает сервер web2py к сокету Unix, а не к сокету IP:

     /tmp/fcgi.sock
     

    Сюда Lighttpd перенаправляет HTTP-запросы и получает от них ответы. Сокеты Unix легче, чем сокеты Интернета, и это одна из причин, по которой Lighttpd+FastCGI+web2py работает быстро. Как и в случае с Apache, Lighttpd можно настроить для работы со статическими файлами напрямую, а для некоторых приложений использовать HTTPS. За подробностями обратитесь к документации Lighttpd.

    Примеры в этом разделе взяты из сообщения Джона Хинана в web2pyslices.

    Административный интерфейс должен быть отключен, когда web2py работает на общем хосте с FastCGI, иначе он будет доступен другим пользователям.

    Общий хостинг с mod_python

    Бывают случаи, особенно на общих хостах, когда у вас нет разрешения на непосредственную настройку файлов конфигурации Apache. На момент написания большинство этих хостов все еще используют mod_python, даже если он больше не поддерживается в пользу mod_wsgi.

    Вы все еще можете запустить web2py. Здесь мы показываем пример того, как его настроить.

    Поместите содержимое web2py в папку «htdocs».

    В папке web2py создайте файл «web2py_modpython.py» со следующим содержимым:

     из mod_python import apache
    импортировать modpythonhandler
    обработчик защиты (требуется):
        req.subprocess_env['PATH_INFO'] = req.subprocess_env['SCRIPT_URL']
        вернуть modpythonhandler.handler(req)
     

    Создайте/обновите файл «.htaccess» со следующим содержимым:

     SetHandler Python-программа
    PythonHandler web2py_modpython
    #PythonDebug включен
     

    Этот пример предоставлен Niktar.

    Cherokee с FastCGI

    Cherokee

    FastCGI

    Cherokee — это очень быстрый веб-сервер, который, как и web2py, предоставляет для своей конфигурации веб-интерфейс с поддержкой AJAX. Его веб-интерфейс написан на Python. Кроме того, для большинства изменений не требуется перезагрузка.

    Вот шаги, необходимые для настройки web2py с Cherokee:

    Скачать Cherokee [cherokee]

    Распаковать, собрать и установить:

     tar -xzf cherokee-0.9.4.tar.gz
    cd чероки-0.9.4
    ./configure --enable-fcgi && сделать
    сделать установку
     

    Запустите web2py в обычном режиме хотя бы один раз, чтобы убедиться, что он создает папку «applications».

    Напишите сценарий оболочки с именем «startweb2py.sh» со следующим кодом:

     #!/bin/bash
    компакт-диск /var/web2py
    питон /var/web2py/fcgihandler.py &
     

    и дайте скрипту права на выполнение и запустите его. Это запустит web2py под обработчиком FastCGI.

    Запустить Cherokee и cherokee-admin:

     sudo nohup cherokee &
    sudo nohup cherokee-admin &
     

    По умолчанию cherokee-admin прослушивает только локальный интерфейс через порт 9090. Это не проблема, если у вас есть полный физический доступ к этой машине. Если это не так, вы можете принудительно привязать его к IP-адресу и порту, используя следующие параметры:

     -b, --bind[=IP]
    -p, --port=ЧИСЛО
     

    или выполните переадресацию порта SSH (более безопасно, рекомендуется):

     ssh -L 9090: локальный: 9090 удаленный хост
     

    Откройте «http://localhost:9090» в браузере. Если все в порядке, вы получите cherokee-admin.

    В веб-интерфейсе cherokee-admin нажмите «Источники информации». Выберите «Локальный переводчик». Введите следующий код и нажмите «Добавить новый».

     Ник: web2py
    Соединение: /tmp/fcgi.sock
    Интерпретатор: /var/web2py/startweb2py.sh
     

    Наконец, выполните следующие оставшиеся шаги:

    • Нажмите «Виртуальные серверы», затем нажмите «По умолчанию».
    • Нажмите «Поведение», затем под ним нажмите «По умолчанию».
    • Выберите «FastCGI» вместо «Список и отправить» из списка.
    • Внизу выберите «web2py» как «Сервер приложений»
    • Поставьте все галочки (можно оставить Allow-x-sendfile). Если отображается предупреждение, отключите и включите один из флажков. (Он автоматически повторно отправит параметр сервера приложений. Иногда это не так, что является ошибкой).
    • Укажите в браузере «http://yoursite», и появится сообщение «Добро пожаловать в web2py».
    Postgresql

    PostgreSQL — это бесплатная база данных с открытым исходным кодом, которая используется в требовательных производственных средах, например, для хранения базы данных доменных имен .org, и, как было доказано, хорошо масштабируется до сотен терабайт данных. Он имеет очень быструю и надежную поддержку транзакций и предоставляет функцию автоматической очистки, которая освобождает администратора от большинства задач по обслуживанию базы данных.

    В Ubuntu или другом дистрибутиве Linux на основе Debian легко установить PostgreSQL и его Python API с помощью:

     sudo apt-get -y установить postgresql
    sudo apt-get -y установить python-psycopg2
     

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

    Отредактируйте файл конфигурации PostgreSQL

     sudo nano /etc/postgresql/9.1/main/postgresql.conf
     

    и убедитесь, что он содержит эти две строки

    ...
    listen_addresses = 'локальный хост'
    ...
    track_counts = вкл.
    ...
    autovacuum = on # Включить подпроцесс автоочистки? 'на'
    ...
     

    Изменить файл аутентификации клиента PostgreSQL

     sudo nano /etc/postgresql/9.1/main/pg_hba.conf
     

    и измените метод этих строк на trust

     ...
    # "local" только для соединений сокетов домена Unix
    местные все всем доверяют
    # Локальные соединения IPv4:
    хост все все 127.0.0.1/32 доверие
    # Локальные соединения IPv6:
    хост все все ::1/128 доверие
    ...
     

    Запустите сервер базы данных с помощью:

     sudo /etc/init.d/postgresql перезапуск
     

    При перезапуске сервера PostgreSQL он должен уведомлять, на каком порту он работает. Если у вас нет нескольких серверов баз данных, это должно быть 5432.

    Журналы PostgreSQL находятся в:

     /var/log/postgresql/
     

    После запуска сервера базы данных создайте пользователя и базу данных, чтобы приложения web2py могли ее использовать:

     sudo -u postgres createuser -PE -s myuser
    postgresql> createdb -O myuser -E UTF8 mydb
    postgresql> echo 'Созданы следующие базы данных:'
    postgresql> psql -l
    postgresql> psql mydb
     

    Первая из команд предоставит права суперпользователя новому пользователю с именем myuser . Он запросит у вас пароль.

    Любое приложение web2py может подключиться к этой базе данных с помощью команды:

     db = DAL("postgres://myuser:mypassword@localhost:5432/mydb")
     

    , где mypassword — это пароль, который вы ввели при появлении запроса, а 5432 — это порт, на котором работает сервер базы данных.

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

    Подробнее о резервном копировании базы данных читайте в документации PostgreSQL; в частности, команды pg_dump и pg_restore .

    Запустите планировщик как службу Linux (upstart)

    Чтобы установить планировщик как постоянный демон в Linux (с Upstart), поместите следующее в /etc/init/web2py-scheduler.conf, предполагая, что ваш экземпляр web2py установлен в домашнем каталоге , работает как , с приложением , на сетевом интерфейсе eth0.

     описание «планировщик задач web2py»
    запуск (локальные файловые системы и сетевое устройство-вверх IFACE=eth0)
    останавливаться при выключении
    respawn limit 8 60 # Сдаться, если перезапуск происходит 8 раз за 60 секунд.
    exec sudo -u <пользователь> python /home/<пользователь>/web2py/web2py.py -K 
    респаун
     

    Затем вы можете запустить/остановить/перезапустить/проверить статус демона с помощью:

     sudo start web2py-scheduler
    sudo остановить web2py-планировщик
    sudo перезапустить web2py-scheduler
    sudo статус web2py-планировщик
     
    Начальная постановка в очередь повторяющейся задачи

    Определение задачи выполняется в файле модели. Но первоначальную постановку в очередь повторяющейся задачи проще всего выполнить с помощью недоступной функции контроллера. Делая это в контроллере, а не в файле модели, вы удаляете ненужные обращения к базе данных, которые будут происходить при каждом запросе к вашему веб-сайту.

    [Эта функция также может находиться в модуле или частном файле, но в контроллере API и среда web2py легко доступны.]

    Недоступная функция — это любая функция контроллера, у которой есть аргумент, поэтому запись в контроллере чего-то вроде следующего (например, default.py) дает вам

     def reinit_sched(protect=None):
        # поместите сюда любой подготовительный код
        #
        # запланировать 2 задачи:
        sched.queue_task(foo)
        sched.queue_task(бар)
        #
        # поместите сюда любой afters-код
        db.commit()
     

    , и затем вы можете легко вызвать его с помощью web2py.py -M -S appname/default/reinit_sched (аналогичную функцию можно использовать для остановки повторяющейся задачи, возможно, по причинам обслуживания)

    Заполнение базы данных при развертывании

    Вашему приложению может потребоваться предварительно заполненная таблица базы данных. Простым примером может быть таблица названий цветов или названий месяцев (возможно, в специальном формате, не используемом в подпрограммах даты и времени Python). Более сложные примеры могут включать первоначальный список деталей или начальные страницы вики.

    Простые примеры можно выполнить с помощью db.mycolors.insert() ; более сложные примеры могут использовать файл CSV для заполнения значений. Как и в разделе об организации очереди задач выше, это должно быть сделано с использованием непредставленных функций контроллера. Определение таблицы для базы данных выполняется в файлах моделей, но файлы моделей считываются при каждом запросе, поэтому одноразовые действия не должны быть в файлах моделей, поскольку они могут снизить скорость отклика вашего сайта.

    [Эта функция также может находиться в модуле или в приватном файле, но в контроллере API и среда web2py легко доступны.]

    Опять же, недоступная функция — это любая функция контроллера, у которой есть аргумент, поэтому написание чего-то вроде следующего в контроллере (например, default. py) дает вам

     def populate_colors(protected=None)
        collist = ["лайм", "#00FF00", "оливковый", "#808000",
                    «фуксия», «#FF00FF», «бордовый», «#800000»]:
        для i в диапазоне (0, len (список), 2):
            k, v = список[i:i+2]
            db.mycolors.insert (имя = k, код = v)
        db.commit()
     

    затем вы можете легко вызвать его с помощью web2py.py -M -S appname/default/populate_colors

    Для сложного примера с использованием файла CSV ваша функция может выглядеть так:

     def populate_colors(exposed=False):
      db.mycolors.import_from_csv_file(
        открыть (os.path.join (запрос.папка,
                          os.path.join('частный', db_colors.csv')
                         ),
             'р')
        )
      db.commit()
     

    , и это будет вызываться с помощью web2py.py -M -S appname/default/populate_colors

    См. также Глава 14, Заполнение базы данных с помощью фиктивного

    Windows

    IIS

    Если вам не нужно запускать Apache для какого-либо другого приложения на сервере, на современных серверах Windows проще установить web2py за IIS (и многое другое). исполнитель). Следующие шаги объясняют, как настроить IIS для обслуживания web2py: Требуется Windows Server 2008R2 или выше.

    Мы начнем с предположения, что вы используете 2012R2. Термины, используемые для версии 2008R2, немного отличаются, но совместить инструкции не должно быть проблемой. Конечно, требования — это Python, установленный на сервере, и вы можете запустить web2py с чем-то вроде

     python web2py.py -a 'yourpassword' 

    Это означает, что в вашей установке ничего не сломано и вы можете успешно разместить web2py за IIS.

    Для запуска Python в IIS требуется установленная функция CGI . Чтобы обслуживать статические файлы с помощью IIS, нам также нужен модуль Url Rewrite , который можно установить отсюда

    . Чтобы позволить IIS «говорить» с python, нам нужно установить модуль wfastcgi отсюда. Это установит небольшой скрипт wfasctgi.py, который является обработчиком, который IIS будет использовать для связи с Python.

    Теперь откройте Internet Information Services (IIS) Manager и щелкните узел, представляющий сервер.

    Нам нужно создать процесс FastCGI , который будет сопоставлен с обработчиком, выполняющим web2py.

    Щелкните поле FastCGI Settings , а затем «Добавить приложение»: «полный путь» должен указывать на исполняемый файл python (что-то вроде «C:\Python27\python.exe»), а «Аргументы» должен указывать на путь wfastcgi.py (обычно C:\Python27\Scripts\wfastcgi.py»).

    Начиная с версии 2.10.4, web2py поставляется с файлом конфигурации (web.config, внутри каталога примеров), который для работы переопределяет обработчики по умолчанию. Конфигурация IIS запрещает изменять обработчики из файла конфигурации, но эту проверку легко отключить: перейдите в «Делегирование функций», найдите «Сопоставления обработчиков» и установите для него значение «Чтение/запись». Web2py также должен иметь возможность записывать файлы в свой каталог, поэтому убедитесь, что группа IIS_IUSRS имеет доступ для чтения/записи к папке, в которой находится web2py.

    Если вы хотите использовать web2py в корневом каталоге IIS, скопируйте исходный код в корневой каталог IIS (обычно это C:\inetpub\wwwroot). Теперь скопируйте web.config из каталога примеров и поместите его в корневую папку вместе с web2py.py. Вам нужно только заменить SCRIPT_PROCESSOR (ближе к концу файла), чтобы он соответствовал приложению FastCGI, которое мы создали ранее: у него забавный синтаксис, но он должен соответствовать формату Полный путь|Аргументы приложения FastCGI. 9″ root» приложение сайта. Если вместо этого вам нужно запустить web2py в подпапке (скажем, «web2pyapps», чтобы вы могли получить доступ к приветственному приложению по адресу http://hostname/web2pyapps/welcome/ вместо http://hostname/welcome/ по умолчанию), необходимы два дополнительных шага:

    • переместите код в подпапку с именем web2pyapps
    • создайте файл route.py с routers = dict(BASE=dict(path_prefix = "web2pyapps")) в нем
    • внутри диспетчера IIS найдите папку web2pyapps, щелкните ее правой кнопкой мыши и выберите «Преобразовать в приложение». Тем не менее, он очень похож на Linux, поэтому, пожалуйста, прочтите примечания Linux Apache выше.

      Здесь мы предполагаем, что установлен двоичный файл Windows Python 2.x, вы работаете из исходного кода, а web2py находится по адресу c:/web2py .

      Современные двоичные файлы Apache для Windows (например, 2.4.x) на самом деле не загружаются с apache.org. Вместо этого вы загружаете их с партнерских сайтов, таких как ApacheHaus. На сайте Apache есть полный список таких партнеров; найдите двоичные файлы Apache 2.4 для Windows.

      Однако двоичный файл Windows может не поставляться с модулем wsgi. В этом случае посетите домашнюю страницу modwsgi (в настоящее время http://code.google.com/p/modwsgi/) и загрузите предварительно скомпилированный двоичный файл для вашей версии Python и Apache. После установки Apache поместите библиотеку .so в каталог модулей.

      Вам необходимо изменить httpd.conf, чтобы загрузить модуль wsgi; следуйте примеру других строк конфигурации загрузки модуля.

       LoadModule модули wsgi_module/mod_wsgi.so
       

      Вики modwsgi упоминает особенности Windows: рекомендуется к прочтению.

      Вам потребуется настроить httpd.conf в соответствии с любой новой установкой Apache.

      Установка сертификата для Windows такая же, как и для Linux.

      Двоичный файл Windows, скорее всего, настроен на загрузку и настройку модулей SSL «из коробки» (двоичный файл Apache Haus выглядит так).

      web2py должен работать по протоколу https и, возможно, по протоколу http. Обычно это означает порт 80 и порт 443, хотя ваш сервер Windows может использовать эти порты, поскольку может быть установлен IIS, и в этом случае выберите альтернативные порты.

      Однако пока мы предполагаем 80 и 443. найдите «Listen 80» и добавьте после него строку

       Listen 443
       

      добавьте следующие строки в конце, изменив букву диска, номер порта, имя сервера в соответствии с вашими значениями

       NameVirtualHost *:443
      <Виртуальный хост *:443>
        DocumentRoot "C:/web2py/приложения"
        имя_сервера server1
        <Каталог "C:/web2py">
          Порядок разрешить, запретить
          Запретить от всех
        
        <Расположение "/">
          Отклонить заказ, разрешить
          Разрешить от всех
        
         *)">
          Заказать Разрешить, Запретить
          Разрешить от всех
        
        WSGIScriptAlias ​​/ "C:/web2py/wsgihandler.py"
      #и не забудьте переместить скрипт обработчика из каталога обработчиков
        SSLEngine включен
      #эти настройки сертификата верны для самозаверяющих сертификатов
        SSLCertificateFile conf/server.crt
        SSLCertificateKeyFile conf/server.key
        LogFormat "%h %l %u %t "%r" %>s %b" общий
        Журналы CustomLog/access.log общие
      
       

      Сохраните и проверьте конфигурацию, используя: [Пуск > Программа > Apache HTTP Server 2.2 > Настроить сервер Apache > Тестовая конфигурация]

      Если проблем нет, вы увидите, что командный экран открывается и закрывается. Теперь вы можете запустить Apache:

      [Пуск > Программа > Apache HTTP Server 2.2 > Управление сервером Apache > Пуск]

      или еще лучше запустить монитор панели задач

      [Пуск > Программа > Apache HTTP Server 2.2 > Управление сервером Apache]

      Теперь вы можете щелкнуть правой кнопкой мыши красный значок в виде пера на панели задач, чтобы «Открыть монитор Apache», а затем запускать, останавливать и перезапускать Apache по мере необходимости.

      Впервые этот раздел был написан Джонатаном Ланделлом.

      Использование nssm для запуска в качестве службы Windows

      То, что Linux называет демоном, Windows называет службой. Встроенный ракетный сервер web2py можно легко установить/запустить/остановить как службу Windows. То же самое относится и к планировщику web2py.

      Службы Windows с nssm

      Вместо того, чтобы поддерживать код службы Windows в web2py.py, разработчики поддерживают внешний инструмент-оболочку ‘nssm’.

      nssm — уважаемый инструмент Windows с хорошими функциями, такими как автоматический перезапуск служб. Это также означает согласованный способ запуска служб web2py, служб планировщика и процессов очистки, таких как удаление сеанса. Использование предыдущего параметра командной строки -W больше не поддерживается. Метод nssm не использует файл options.py старого метода. Вместо этого параметры передаются в командной строке (некоторые примеры приведены ниже)

      Рецепт nssm: запуск планировщика как службы Windows с помощью nssm

      Служба планировщика Windows

      Запуск планировщика как службы Windows имеет большой смысл. Самый простой способ — загрузить nssm (с http://www.nssm.cc). nssm — помощник по планированию с открытым исходным кодом. Он оборачивает исполняемую команду, чтобы превратить ее в службу. Команда для запуска планировщика: pythonw.exe -K Мы используем nssm, чтобы обойти это, превратившись в службу. Прежде чем сделать это, вам нужно выбрать имя для вашего сервиса. Создание отдельной службы для каждого приложения, которому нужен планировщик, дает большие преимущества. Таким образом, ваше соглашение об именах для служб может быть таким: web2py_scheduler_app1

      После извлечения zip-файла nssm откройте командную строку Windows в папке, содержащей версию для вашей архитектуры (32-разрядную или 64-разрядную), и введите

       nssm install web2py_scheduler_app1
       

      Это показывает диалоговое окно, предлагающее ввести приложение и параметры. Приложение — это исполняемый файл pythonw.exe из вашей установки Python. Параметры — это остальная часть командной строки. Возможно, вам потребуется указать полный путь к вашему скрипту web2py.py. Например, поле параметров в диалоговом окне nssm может быть:

       c:\web2py\web2py.py -K приложение1
       

      , где app1 — это имя вашего приложения.

      Можно вызвать планировщик с несколькими приложениями. Однако в этом режиме web2py выделяет планировщик каждого приложения в подпроцесс. Поэтому процесс, запущенный службой, не умрет, если в одном из экземпляров планировщика возникнут проблемы; скорее, этот дочерний процесс умрет. Тогда мы не сможем воспользоваться автоматическим перезапуском службы Windows в случае сбоя. Использование одного приложения для каждой службы включает эту функцию.

      Рецепт nssm: запуск web2py.py в качестве службы

      В приведенном выше примере показано, как использовать nssm. Чтобы запустить web2py в режиме SSL на порту 8041 и включить некоторые другие параметры, вы можете указать nssm командную строку (в поле параметров диалогового окна nssm), например:

       c:\web2py. py -p 8041 -i " 0.0.0.0" --password="112233" --folder="d:\web2py_internet" --socket-timeout=10 --timeout=120 -c "d:\web2py_internet\applications\example.com.au.crt " -k "d:\web2py_internet\applications\web2py.key
       

      (обратите внимание, что это не лучшая практика для хранения паролей, поскольку диспетчер задач, который показывает командные строки, раскрывает пароль. Изучите параметр командной строки web2py -a ««)

      Защита сеансов и

      admin

      безопасность

      admin

      Очень опасно публиковать приложение admin и контроллеры appadmin , если они не работают через HTTPS. Кроме того, ваш пароль и учетные данные никогда не должны передаваться в незашифрованном виде. Это верно для web2py и любого другого веб-приложения.

      В ваших приложениях, если они требуют аутентификации, вы должны сделать файлы cookie сеанса безопасными с помощью:

       session.secure()
       

      Простой способ настроить безопасную производственную среду на сервере — сначала остановить web2py, а затем удалить все файлы параметров_*. py из папки установки web2py. Затем запустите web2py без пароля. Это полностью отключит admin и appadmin.

       nohup python web2py --nogui -p 8001 -i 127.0.0.1 -a '' &
       

      Затем запустите второй экземпляр web2py, доступный только с локального хоста:

       nohup python web2py --nogui -p 8002 -i 127.0.0.1 -a ''
       

      и создайте SSH-туннель с локальной машины (той, с которой вы хотите получить доступ к административному интерфейсу) на сервер (тот, на котором работает web2py, example.com), используя:

       ssh -L 8002:127.0 .0.1:8002 имя пользователя@example.com
       

      Теперь вы можете получить доступ к административному интерфейсу локально через веб-браузер в локальный хост: 8002 .

      Эта конфигурация безопасна, поскольку admin недоступен, когда туннель закрыт (пользователь вышел из системы).

      Это решение безопасно на общих хостах тогда и только тогда, когда другие пользователи не имеют доступа для чтения к папке, содержащей web2py; в противном случае пользователи могут украсть файлы cookie сеанса непосредственно с сервера.

      Эффективность и масштабируемость

      Масштабируемость

      Web2py спроектирован так, чтобы его было легко развернуть и настроить. Это не означает, что он ставит под угрозу эффективность или масштабируемость, но это означает, что вам может потребоваться настроить его, чтобы сделать его масштабируемым.

      В этом разделе мы предполагаем несколько установок web2py за сервером NAT, обеспечивающим локальную балансировку нагрузки.

      В этом случае web2py работает «из коробки» при соблюдении некоторых условий. В частности, все экземпляры каждого приложения web2py должны обращаться к одним и тем же серверам баз данных и видеть одни и те же файлы. Это последнее условие можно реализовать, сделав следующие папки общими:

       apps/myapp/sessions
      приложения/myapp/ошибки
      приложения/myapp/загрузки
      приложения/myapp/кэш
       

      Общие папки должны поддерживать блокировку файлов. Возможные решения: ZFS (ZFS была разработана Sun Microsystems и является предпочтительным выбором), NFS (при использовании NFS вам может потребоваться запустить демон nlockmgr , чтобы разрешить блокировку файлов) или Samba (SMB).

      Можно предоставить общий доступ ко всей папке web2py или ко всей папке приложений, но это не очень хорошая идея, поскольку это приведет к ненужному увеличению использования пропускной способности сети.

      Мы считаем, что описанная выше конфигурация очень масштабируема, поскольку она снижает нагрузку на базу данных за счет перемещения в общие файловые системы тех ресурсов, которые должны быть общими, но не требуют безопасности транзакций (предполагается, что только один клиент в каждый момент времени имеет доступ к сеансу файл, кеш всегда нуждается в глобальной блокировке, загрузка и ошибки записываются один раз/читаются много файлов).

      В идеале и база данных, и общее хранилище должны иметь возможности RAID. Не совершайте ошибку, храня базу данных в том же хранилище, что и общие папки, иначе вы создадите там новое узкое место.

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

      Уловки для повышения эффективности

      Код приложения web2py выполняется при каждом запросе, поэтому вы хотите минимизировать этот объем кода. Вот что вы можете сделать:

      • Запустите один раз с migrate=True , затем установите для всех ваших таблиц значение migrate=False .
      • Байт-код скомпилируйте приложение, используя admin .
      • Используйте cache.ram как можно чаще, но обязательно используйте конечный набор ключей, иначе объем используемого кеша будет увеличиваться произвольно.
      • Минимизируйте код в моделях: не определяйте функции там, определяйте функции в контроллерах, которые в них нуждаются, или, что еще лучше, определяйте функции в модулях, импортируйте их и используйте эти функции по мере необходимости.
      • Не размещайте много функций на одном контроллере, а используйте много контроллеров с небольшим количеством функций.
      • Вызов session.forget(response) во всех контроллерах и/или функциях, которые не изменяют сеанс.
      • Старайтесь избегать web2py cron и вместо этого используйте фоновый процесс. web2py cron может запускать слишком много экземпляров Python и вызывать чрезмерное использование памяти.
      Сеансы в базе данных

      Можно указать web2py хранить сеансы в базе данных, а не в папке сеансов. Это необходимо сделать для каждого отдельного приложения web2py, хотя все они могут использовать одну и ту же базу данных для хранения сеансов.

      Учитывая подключение к базе данных

       db = DAL(...)
       

      вы можете хранить сеансы в этой базе данных (db), просто указав следующее в том же файле модели, который устанавливает соединение:

       session.connect(запрос, ответ, БД)
       

      Если он еще не существует, web2py создает в базе данных таблицу с именем web2py_session_ appname , содержащую следующие поля:

       Field('locked', 'boolean', default=False),
      Поле('client_ip'),
      Поле('создано_дата-время', 'дата-время', по умолчанию=запрос. сейчас),
      Поле('modified_datetime', 'дата и время'),
      Поле('уникальный_ключ'),
      Поле('session_data', 'текст')
       

      «unique_key» — это ключ uuid, используемый для идентификации сеанса в файле cookie. «session_data» — это данные сеанса cPickled.

      Чтобы свести к минимуму доступ к базе данных, вам следует избегать хранения сеансов, когда они не нужны, с помощью:

       session.forget()
       

      Сессии автоматически забываются, если они не изменены.

      Если сеансы находятся в базе данных, папка «сессии» не обязательно должна быть общей папкой, поскольку к ней больше не будет доступа.

      Обратите внимание, что если сеансы отключены, вы не должны передавать сеанс в form.accepts и вы не можете использовать session.flash и CRUD.

      HAProxy высокодоступный балансировщик нагрузки

      HAProxy

      Если вам нужно несколько процессов web2py, работающих на нескольких компьютерах, вместо хранения сеансов в базе данных или в кэше, у вас есть возможность использовать балансировщик нагрузки с закрепленными сеансами.

      Фунт [фунт] и HAProxy [haproxy] — это два балансировщика нагрузки HTTP и обратные прокси-серверы, обеспечивающие фиксированные сеансы. Здесь мы обсуждаем последнее, потому что оно чаще встречается на коммерческом хостинге VPS.

      Под закрепленными сеансами мы подразумеваем, что после того, как файл cookie сеанса был выдан, балансировщик нагрузки всегда будет направлять запросы от клиента, связанного с сеансом, на один и тот же сервер. Это позволяет вам хранить сеанс в локальной файловой системе без необходимости использования общей файловой системы.

      Чтобы использовать HAProxy:

      Сначала установите его на тестовой машине Ubuntu:

       sudo apt-get -y install haproxy
       

      Во-вторых, отредактируйте файл конфигурации «/etc/haproxy.cfg» примерно так:

       ## этот конфиг требует haproxy-1.1.28 или haproxy-1.2.1
      Глобальный
            журнал 127.0.0.1 локальный0
            максконн 1024
            демон
      значения по умолчанию
            журнал глобальный
            режим http
            опция httplog
            вариант httpchk
            опция httpclose
            повторяет 3
            опция повторной отправки
            контаймаут 5000
            климаут 50000
            srvtimeout 50000
      слушать 0. 0.0.0:80
            баланс url_param WEB2PYSTICKY
            круговой баланс
            сервер L1_1 10.211.55.1:7003 проверить
            сервер L1_2 10.211.55.2:7004 проверить
            сервер L1_3 10.211.55.3:7004 проверить
            appsession WEB2PYSTICKY len 52 тайм-аут 1h
       

      Директива listen сообщает HAProxy, с какого порта ожидать подключения. Директива server сообщает HAProxy, где найти проксируемые серверы. Каталог appsession создает закрепленный сеанс и использует для этой цели файл cookie с именем WEB2PYSTICKY .

      В-третьих, включите этот файл конфигурации и запустите HAProxy:

       /etc/init.d/haproxy restart
       

      Аналогичные инструкции по настройке Pound можно найти по адресу

       http://web2pyslices.com/main/slices/take_slice/33
       
      Очистка сеансов

      Вы должны знать, что в производственной среде сеансы быстро накапливаются. web2py предоставляет скрипт с именем:

       scripts/sessions2trash. py
       

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

      Вот несколько типичных вариантов использования:

      • Удалять сеансы с истекшим сроком действия каждые 5 минут:
       nohup python web2py.py -S app -M -R scripts/sessions2trash.py &
       

      или в Windows используйте nssm, как описано выше в разделе планировщика. Вам, вероятно, потребуется указать полный путь как к web2py.py, так и к папке scripts, а замыкающий & не нужен.

      • Удалить сеансы старше 60 минут независимо от срока действия с подробным выводом, затем выйти:
       python web2py.py -S приложение -M -R скрипты/sessions2trash.py -A -o -x 3600 -f -v
       
      • Удалить все сеансы независимо от срока действия и выхода:
       python web2py. py -S app -M -R scripts/sessions2trash.py -A -o -x 0
       

      командная строка

       session2trash.py имеет свои собственные специальные параметры командной строки, которые можно передать при запуске оболочки web2py с помощью
      командная строка.
      ПРИМЕЧАНИЕ. Им должен предшествовать параметр командной строки web2py «-A», чтобы они были переданы сценарию.
        -f, --force Игнорировать истечение срока действия сеанса. Принудительное истечение срока действия на основе параметра -x или auth.settings.expiration.
        -o, --once Удалить сессии, затем выйти. Необходим при запуске мусорных сеансов из системы CRON JOB
        -s СЕКУНДЫ, --sleep Количество секунд ожидания между выполнениями. По умолчанию 300.
        -v, --verbose выводить подробный вывод, второй -v увеличивает детализацию
        -x СЕКУНД, --expiration
                             Срок действия сеансов без срока действия (в секундах)
       
      • Последний пример, если вы хотите запустить session2trash.py из системного задания CRON, удалить все сеансы с истекшим сроком действия и выйти:
       python web2py. py -S app -M -R scripts/sessions2trash.py -C -A - о
       

      В предыдущих примерах app — это имя вашего приложения.

      Загрузка файлов в базу данных

      По умолчанию все загруженные файлы, обрабатываемые SQLFORM, безопасно переименовываются и сохраняются в файловой системе в папке «uploads». Вместо этого можно указать web2py хранить загруженные файлы в базе данных.

      Теперь рассмотрим следующую таблицу:

       db.define_table('dog',
          Поле('имя')
          Поле('изображение', 'загрузить'))
       

      , где dog.image имеет тип загрузки. Чтобы загруженное изображение попало в ту же запись, что и имя собаки, необходимо изменить определение таблицы, добавив поле большого двоичного объекта и связать его с полем загрузки:

       db.define_table('dog',
          Поле('имя')
          Поле('изображение', 'загрузить', uploadfield='image_data'),
          Поле('image_data', 'blob'))
       

      Здесь «image_data» — просто произвольное имя для нового поля большого двоичного объекта.

      Строка 3 указывает web2py безопасно переименовывать загружаемые изображения, как обычно, сохранять новое имя в поле изображения и сохранять данные в поле загрузки с именем «image_data» вместо сохранения данных в файловой системе. Все это делается автоматически с помощью SQLFORM, и никакой другой код не нужно изменять.

      С этой настройкой папка «uploads» больше не нужна.

      В Google App Engine файлы по умолчанию хранятся в базе данных без необходимости определять поле загрузки, так как оно создается по умолчанию.

      Сбор билетов

      По умолчанию web2py хранит билеты (ошибки) в локальной файловой системе. Не имеет смысла хранить билеты непосредственно в базе данных, потому что наиболее распространенной причиной ошибки в производственной среде является сбой базы данных.

      Хранение билетов никогда не бывает узким местом, потому что обычно это редкое событие. Следовательно, в производственной среде с несколькими параллельными серверами более чем достаточно хранить их в общей папке. Тем не менее, поскольку только администратору нужно получить тикеты, также можно хранить тикеты в необщей локальной папке «ошибки» и периодически собирать их и/или очищать.

      Одна из возможностей — периодически перемещать все локальные билеты в базу данных.

      Для этой цели web2py предоставляет следующий скрипт:

       scripts/tickets2db.py
       

      По умолчанию сценарий получает uri базы данных из файла, сохраненного в личной папке, ticket_storage.txt . Этот файл должен содержать строку, которая передается непосредственно экземпляру DAL , например:

       mysql://username:password@localhost/test.
      postgres://имя пользователя:пароль@localhost/test
      ...
       

      Это позволяет оставить скрипт как есть: если у вас несколько приложений, он будет динамически выбирать правильное соединение для каждого приложения. Если вы хотите жестко закодировать в нем uri, отредактируйте вторую ссылку на db_string сразу после строки , кроме . Вы можете запустить скрипт с помощью команды:

       nohup python web2py.py -S myapp -M -R scripts/tickets2db.py &
       

      , где myapp — это имя вашего приложения.

      Этот сценарий работает в фоновом режиме и каждые 5 минут перемещает все билеты на стол и удаляет локальные билеты. Позже вы можете просмотреть ошибки с помощью приложения администратора, нажав кнопку «переключиться на: db» вверху, с той же функциональностью, как если бы они были сохранены в файловой системе.

      С этой настройкой папка «ошибки» больше не должна быть общей папкой, так как ошибки будут храниться в базе данных.

      Memcache

      memcache

      Мы показали, что web2py предоставляет два типа кеша: cache.ram и cache.disk . Оба они работают в распределенной среде с несколькими параллельными серверами, но не так, как ожидалось. В частности, cache.ram будет кэшировать только на уровне сервера; таким образом, он становится бесполезным. cache. disk также будет кэшироваться на уровне сервера, если только папка «cache» не является общей папкой, поддерживающей блокировку; таким образом, вместо того, чтобы ускорить процесс, он становится основным узким местом.

      Решение состоит не в том, чтобы использовать их, а в том, чтобы использовать вместо них memcache. web2py поставляется с API-интерфейсом memcache.

      Чтобы использовать memcache, создайте новый файл модели, например 0_memcache.py , и в этом файле напишите (или добавьте) следующий код:

       from gluon.contrib.memcache import MemcacheClient
      memcache_servers = ['127.0.0.1:11211']
      cache.memcache = MemcacheClient(запрос, memcache_servers)
      cache.ram = cache.disk = cache.memcache
       

      Первая строка импортирует memcache. Вторая строка должна быть списком сокетов memcache (сервер: порт). Третья строка определяет cache.memcache . Четвертая строка переопределяет cache.ram и cache.disk с точки зрения memcache.

      Вы можете переопределить только один из них, чтобы определить совершенно новый объект кэша, указывающий на объект Memcache.

      С этой настройкой папка «cache» больше не должна быть общей папкой, так как к ней больше не будет доступа.

      Этот код требует, чтобы серверы кэша памяти работали в локальной сети. Вы должны обратиться к документации memcache для получения информации о том, как настроить эти серверы.

      Сеансы в кэше памяти

      Если вам нужны сеансы и вы не хотите использовать балансировщик нагрузки с фиксированными сеансами, у вас есть возможность хранить сеансы в кэше памяти:

       from gluon.contrib.memdb import MEMDB
      session.connect(запрос, ответ, db=MEMDB(cache.memcache))
       
      Кэширование с помощью Redis

      [redis]

      Альтернативой Memcache является использование Redis.

      Redis

      Предполагая, что Redis установлен и работает на локальном хосте через порт 6379, мы можем подключиться к нему, используя следующий код (в модели):

       from gluon. contrib.redis_utils import RConn
      из gluon.contrib.redis_cache импортировать RedisCache
      rconn = RConn('localhost', 6379)
      cache.redis = RedisCache(redis_conn=rconn, debug=True) 

      Теперь мы можем использовать cache.redis вместо (или вместе с) cache.ram и cache.disk .

      Мы также можем получить статистику Redis, вызвав:

       cache.redis.stats()
       

      Кэш-подсистема Redis позволяет предотвратить печально известную «проблему громоподобного стада»: по умолчанию она не активна, поскольку обычно вы выбираете Redis для скорости, но при незначительной стоимости вы можете убедиться, что только один поток/процесс может установить значение одновременно. Чтобы активировать это поведение, просто передайте параметр with_lock=True в Вызов RedisCache . Вы также можете включить поведение «по запросу» с помощью value = cache.redis('mykey', lambda: time.time(), with_lock=True)

      Сессии в Redis

      Если у вас есть Redis в стеке , почему бы не использовать его для сеансов?

       из gluon. contrib.redis_utils импорт RConn
      из gluon.contrib.redis_session импортировать RedisSession
      rконн = Rконн()
      sessiondb = RedisSession(redis_conn=rconn, session_expiry=False)
      session.connect(запрос, ответ, db=sessiondb) 

      Код был протестирован на ~1 млн сеансов. Пока Redis может поместиться в памяти, время, необходимое для обработки 1 или 1M сеансов, одинаково. В то время как по сравнению с сеансами на основе файлов или сеансами на основе базы данных ускорение незаметно для сеансов ~ 40 000, при преодолении этого барьера улучшение заметно. Большое улучшение также можно заметить, когда вы запускаете «ферму» экземпляров web2py, потому что совместное использование папки сеансов или подключение нескольких процессов к базе данных часто перегружает систему. Вы получите 1 ключ на сеанс плюс 2 ключа, один из которых содержит целое число (необходимо для назначения разных ключей сеанса), а другой содержит набор всех сгенерированных сеансов (таким образом, для 1000 сеансов 1002 ключа).

      Если session_expiry не установлен, сеансы будут обрабатываться как обычно, вам потребуется время от времени очищать сеансы как обычно.

      Однако, когда установлено значение session_expiry , сеансы будут автоматически удаляться через n секунд (например, если установлено значение 3600, срок действия сеанса истечет ровно через час после последнего обновления), вам следует время от времени запускать session2trash.py просто для очистки ключ, содержащий набор всех ранее созданных сеансов (для ~1 млн сеансов очистка занимает 3 секунды). Серверная часть redis для сеансов — единственная, которая может предотвратить одновременные модификации одного и того же сеанса: это особенно верно для приложений с интенсивным использованием ajax, которые часто записывают сеансы полупараллельно. Для повышения скорости это по умолчанию не применяется, однако, если вы хотите включить поведение блокировки, просто включите его с помощью with_lock=True Параметр передан объекту RedisSession .

      Удаление приложений

      Удаление приложений

      В производственных условиях может быть лучше не устанавливать приложения по умолчанию: admin , примеры и приветствие . Хотя эти приложения довольно маленькие, они не нужны.

      Удалить эти приложения так же просто, как удалить соответствующие папки в папке приложений.

      Использование реплицированных баз данных

      В высокопроизводительной среде у вас может быть архитектура базы данных ведущий-ведомый с множеством реплицированных ведомых и, возможно, парой реплицированных серверов. DAL может справиться с этой ситуацией и условно подключиться к разным серверам в зависимости от параметров запроса. API для этого был описан в главе 6. Вот пример:

       из выборки случайного импорта.
      db = DAL(sample(['mysql://...1', 'mysql://...2', 'mysql://...3'], 3))
       

      В этом случае разные HTTP-запросы будут обслуживаться разными базами данных случайным образом, и вероятность попадания в каждую БД будет более или менее одинаковой.

      Мы также можем реализовать простой циклический перебор

       def fail_safe_round_robin(*uris):
           i = cache.ram('циклический', лямбда: 0, нет)
           uris = uris[i:]+uris[:i] # повернуть список uris
           cache. ram('циклический', лямбда: (i+1)%len(uris), 0)
           возврат мочи
      db = DAL(fail_safe_round_robin('mysql://...1', 'mysql://...2', 'mysql://...3'))
       

      Это отказоустойчиво в том смысле, что если сервер базы данных, назначенный запросу, не сможет подключиться, DAL попытается использовать следующий в порядке.

      Также возможно подключение к разным базам данных в зависимости от запрошенного действия или контроллера. В конфигурации базы данных master-slave некоторые действия выполняют только чтение, а кто-то и чтение/запись. Первый может безопасно подключаться к подчиненному серверу БД, а второй должен подключаться к главному. Итак, вы можете сделать:

      , если request.function в read_only_actions:
         db = DAL(sample(['mysql://...1', 'mysql://...2', 'mysql://...3'], 3))
      elif request.action в read_only_actions:
         db = DAL(перетасовать(['mysql://...1', 'mysql://...2', 'mysql://...3']))
      еще:
         db = DAL(sample(['mysql://...3', 'mysql://...4', 'mysql://...5'], 3))
       

      , где 1, 2, 3 — ведомые, а 3, 4, 5 — главные.

      Сжатие статических файлов

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

      Вы можете использовать скрипты /zip_static_files.py , чтобы создавать сжатые gzip-версии ваших статических файлов и обслуживать их, не затрачивая ЦП. Запустите как python web2py.py -S myapp -R scripts/zip_static_files.py в cron. Сценарий позаботится о создании (или обновлении) сжатой gzip-версии и сохранит их вместе с вашими файлами, добавив к их имени расширение .gz. Вам просто нужно сообщить веб-серверу, когда отправлять эти файлы [apache-content-negotiation] [nginx-gzipstatic]

      0020 PythonAnywhere

      PythonAnywhere

      PythonAnywhere — это самый простой способ развертывания приложений web2py.

      PythonAnywhere — это среда разработки и размещения Python, которая отображается в вашем веб-браузере и работает на облачных серверах. В них уже настроено все, что вам нужно для запуска Python, и они специально поддерживают web2py. По нашему опыту, PythonAnywhere прост в использовании, быстр и мощен. Они также предоставляют базы данных MySQL, оболочки Python и интеграцию с Dropbox. Профессиональный хостинг доступен, если вам недостаточно бесплатного базового.

      Чтобы использовать PythonAnywhere, вам необходимо создать учетную запись, войти в систему, а затем использовать предоставленную веб-панель для добавления нового веб-приложения типа web2py.

      Интерфейс также запрашивает пароль администратора.

      Папка web2py будет создана в папке пользователя.

      Кроме того, вы также можете использовать веб-оболочку BASH для установки web2py, как обычно:

       wget http://www.web2py.com/examples/static/web2py_src.zip
      распаковать web2py_src. zip
       

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

       python -c "из gluon.main import save_password; save_password(raw_input('admin password:'), 443)"
       

      Затем перейдите на панель «Интернет» с помощью веб-интерфейса и отредактируйте файл «/var/www/_pythonanywhere_com_wsgi.py». Это точка входа для вашей программы (в нашем случае web2py) и, как вы можете догадаться, она основана на протоколе WSGI.

      Отредактируйте файл «/var/www/_pythonanywhere_com_wsgi.py» и напишите в нем:

       система импорта
      путь = '/home/<имя пользователя>/web2py'
      если путь не указан в sys.path: sys.path.append(path)
      из приложения импорта wsgihandler # обработчик web2py
       

      Здесь «» — ваше имя пользователя PythonAnywhere.

      Обратите внимание, что после установки web2py вам не нужно запускать или настраивать веб-сервер. PythonAnywhere предоставляет один, и он перезагружается, когда вы редактируете вышеуказанный файл конфигурации. или нажмите кнопку «Обновить веб-приложение» на панели инструментов. Каждый может сразу получить к нему доступ по адресу:

       http://yourusername.pythonanywhere.com/
       

      Они также предоставляют безопасную версию сайта, и вы вынуждены использовать ее для использования административного интерфейса web2py по адресу:

       https://yourusername.pythonanywhere.com/admin/default/index
       

      Мы благодарим команду PythonAnywhere за их помощь и поддержку.

      Развертывание на Heroku

      [heroku]

      Heroku

      Heroku — это современное и гибкое многоплатформенное решение для хостинга. Это позволяет вам отправлять ваши приложения на облачный сервер с помощью Git. Чтобы использовать Heroku, у вас должны быть установлены Git и Heroku SDK. Вы взаимодействуете с Heroku, используя SDK локально, и ваши команды будут отправлены и выполнены на сервере.

      Приложения, работающие на Heroku, не могут полагаться на постоянную файловую систему, поскольку она периодически обновляется, поэтому в файловой системе может храниться только код приложения. Все данные должны храниться в базе данных. Heroku использует PostgreSQL. Тем не менее, PostgreSQL также настраивается с помощью Heroku SDK, а URI для базы данных назначается динамически во время выполнения и сохраняется в переменной среды.

      Это означает, что приложения web2py должны быть модифицированы для работы на Heroku, чтобы использовать базу данных.

      Web2py предоставляет вам в помощь сценарий «heroku.sh». Все, что вам нужно сделать, это заменить:

       db = DAL(...)
       

      в вашем коде с:

       из gluon.contrib.heroku import get_db
      db = get_db (имя = нет, pool_size = 10)
       

      Здесь имя — это переменная среды, содержащая URI Heroku PostgreSQL (что-то вроде HEROKU_POSTGRESQL_RED_URL ). По умолчанию используется значение None , и если есть только одна переменная среды HEROKU_POSTGRESQL_*_URL , она будет использоваться. pool_size — это обычный размер пула DAL.

      При отсутствии работы на платформе Heroku get_db будет использовать базу данных разработки sqlite://heroku. test.sqlite.

      В обоих случаях сеансы будут храниться в базе данных.

      Web2py предоставляет скрипт «scripts/setup-web2py-heroku.sh» для развертывания установки web2py на heroku. Он выполняет следующие шаги:

      Он устанавливает virtualenv и драйвер psycopg2:

       sudo pip install virtualenv
      sudo pip установить psycopg2
       

      Создает и активирует виртуальную среду

       virtualenv venv --distribute
      источник venv/bin/активировать
       

      Затем создает файл требований:

       замораживание пипсов > требования.txt
       

      И создает «Procfile», который сообщает Heroku, как запустить web2py:

       echo "web: python web2py.py -a 'yourpassword' -i 0.0.0.0 -p $PORT" > Procfile
       

      Вы можете изменить эту строку, чтобы использовать другой сервер. Вы должны отредактировать его, чтобы выбрать свой собственный пароль администратора. $PORT — это переменная, которая правильно экранирована, поскольку ее значение устанавливается во время выполнения. Вам также следует рассмотреть возможность запуска web2py с помощью gunicorn, используя anyserver.py , так как это один из рекомендуемых веб-серверов для Python.

      Наконец, скрипт создает репозиторий Git:

       git init
      git добавить .
      git добавить Procfile
      git commit -a -m "первая фиксация"
       

      пихает все в Heroku, и запускает его:

       heroku create
      git push геройку мастер
      аддоны heroku: добавить heroku-postgresql:dev
      сеть масштаба героку = 1
      героку открыть
       

      heroku вот командная часть Heroku SDK.

      Мы благодарим Craig Krestiens из Heroku за помощь с этим рецептом.

      Развертывание в EC2

      Amazon EC2

      Amazon Elastic Compute Cloud (Amazon EC2) — это веб-служба, предоставляющая изменяемые вычислительные мощности в облаке. Это одно из самых больших и популярных облаков. Многие другие облачные платформы работают на EC2. Вы можете запустить любое приложение на EC2, создав и развернув образ диска. Затем Amazon предоставляет API для репликации образа при совместном использовании части файловой системы.

      Описание всего процесса выходит за рамки этой книги, но, если у вас есть существующая учетная запись Amazon EC2, вы можете использовать Turnkey Hub, чтобы найти и развернуть готовый образ web2py:

      https://hub. turnkeylinux.org/amazon/launch/web2py/

      После развертывания образа вы можете войти в него как обычный VPS и управлять им (резервное копирование/восстановление/копирование) через веб-интерфейс Amazon EC2.

      Развертывание в Google App Engine

      Google App Engine

      Можно запустить код web2py в Google App Engine (GAE) [gae] , включая код DAL.

      GAE поддерживает две версии Python: 2.5 и 2.7, но для web2py требуется версия 2.7. Подробные сведения о конфигурации см. в файле «app.yaml», описанном ниже.

      GAE также поддерживает базу данных Google SQL (совместимую с MySQL) и Google NoSQL (называемую «хранилищем данных»).

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

      Платформа GAE имеет ряд преимуществ по сравнению с обычными хостинговыми решениями:

      • Простота развертывания. Google полностью абстрагируется от базовой архитектуры.
      • Масштабируемость. Google будет копировать ваше приложение столько раз, сколько потребуется для обслуживания всех одновременных запросов.
      • Можно выбрать между базой данных SQL и NoSQL (или обеими вместе).

      Но и некоторые недостатки:

      • Нет доступа для чтения или записи к файловой системе.
      • Не все библиотеки Python поддерживаются (вы можете развернуть любую чистую библиотеку Python, но не бинарные, но PIL и numpy уже установлены).

      Хотя Google Cloud SQL представляет собой обычную базу данных mysql, Google Datastore имеет некоторые определенные недостатки:

      • Нет типичных транзакций; конечная согласованность , а не строгая согласованность для запросов.
      • Нет сложных запросов к хранилищу данных. В частности нет JOIN , LIKE и ДАТА/ДАТАВРЕМЯ операторов.

      Здесь мы даем краткий обзор GAE и фокусируемся на специфических проблемах web2py. Мы отсылаем вас к официальной онлайн-документации GAE для получения подробной информации.

      Внимание: Вы должны запускать исходный дистрибутив web2py, а не бинарный дистрибутив.

      Конфигурация

      Необходимо помнить о трех файлах конфигурации:

       web2py/app.yaml
      web2py/queue.yaml
      web2py/index.yaml
       

      приложение.yaml и queue.yaml проще всего создать с помощью файлов шаблонов app.example.yaml и queue.example.yaml в качестве отправной точки. index.yaml создается автоматически программой развертывания Google.

      app.yaml имеет следующую структуру (было сокращено с помощью …):

       приложение: web2py
      версия: 1
      версия_апи: 1
      время выполнения: питон
      обработчики:
      - URL: /_ah/stats.*
        ...
      - URL: /(?P.+?)/static/(?P.+)
        ...
      - адрес: /_ah/admin/. *
        ...
      - URL-адрес: /_ah/queue/по умолчанию
        ...
      - адрес: .*
        ...
      skip_files:
      ...
       

      app.example.yaml (при копировании в app.yaml ) настроен для развертывания приложения web2py welcome , но не приложений admin или example . Вы должны заменить web2py идентификатором приложения, который вы использовали при регистрации в Google App Engine.

      url: /(.+?)/static/(.+) дает указание GAE обслуживать статические файлы вашего приложения напрямую, без вызова логики web2py, для ускорения.

      url:.* указывает web2py использовать gaehandler.py для каждого другого запроса.

      Сеанс skip_files: представляет собой список регулярных выражений для файлов, которые не нужно развертывать в GAE. В частности строки:

       (applications/(admin|examples)/.*)|
       ((admin|примеры|добро пожаловать).(w2p|tar))|
       

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

      За исключением идентификатора и версии приложения, вам, вероятно, не нужно редактировать app.yaml , хотя вы можете исключить приложение welcome .

      Файл queue.yaml используется для настройки очередей задач GAE.

      Файл index.yaml создается автоматически при локальном запуске приложения с помощью сервера приложений GAE (веб-сервер, поставляемый с Google SDK). Он содержит что-то вроде этого:

       индексов:
      - Добрый человек
        характеристики:
        - имя: имя
          направление: убыль
       

      В этом примере он сообщает GAE создать индекс для таблицы «человек», который будет использоваться для сортировки по «имени» в обратном алфавитном порядке. Вы не сможете искать и сортировать записи в своем приложении без соответствующих индексов.

      Важно всегда запускать приложения локально с сервером приложений и пробовать все функции приложения перед развертыванием. Это будет важно для целей тестирования, а также для автоматического создания файла index.yaml. Иногда вы можете захотеть отредактировать этот файл и выполнить очистку, например, удалить повторяющиеся записи.

      Запуск и развертывание
      Linux

      Предполагается, что вы установили GAE SDK. На момент написания для web2py для GAE требуется Python 2.7. Вы можете запустить свое приложение из папки «web2py» с помощью команды appserver:

       python dev_appserver.py ../web2py
       

      Это запустит сервер приложений, и вы сможете запустить свое приложение по URL-адресу:

       http://127.0.0.1:8080/
       

      Чтобы загрузить свое приложение в GAE, убедитесь, что вы отредактировали файл «app.yaml», как описано выше, и установили правильный идентификатор приложения, а затем запустите:

       обновление python appcfg.py ../web2py
       
      Mac, Windows

      На Mac и Windows можно также использовать средство запуска Google App Engine. Программу можно скачать по ссылке. [гэ] .

      Выберите [Файл][Добавить существующее приложение], укажите путь к папке web2py верхнего уровня и нажмите кнопку [Выполнить] на панели инструментов. После того, как вы проверили, что он работает локально, вы можете развернуть его в GAE, просто нажав кнопку [Развернуть] на панели инструментов (при условии, что у вас есть учетная запись).

      В GAE запросы/ошибки web2py также регистрируются в административной консоли GAE, где журналы можно просматривать и искать в Интернете.

      Настройка обработчика

      Файл gaehandler.py отвечает за обслуживание файлов в GAE и имеет несколько параметров. Вот их значения по умолчанию:

       LOG_STATS = False
      СТАТИСТИКА ПРИЛОЖЕНИЯ = Истина
      ОТЛАДКА = Ложь
       

      LOG_STATS будет регистрировать время обслуживания страниц в журналах GAE.

      APPSTATS активирует статистику приложений GAE, предоставляющую статистику профилирования. Они будут доступны по адресу:

       http://localhost:8080/_ah/stats. 
       

      ОТЛАДКА устанавливает режим отладки. На практике это не имеет никакого значения, если только не проверено явно в вашем коде через gluon.settings.web2py_runtime .

      Избегайте файловой системы

      В GAE у вас нет доступа к файловой системе. Вы не можете открыть ни один файл для записи.

      Для этой цели в GAE web2py автоматически сохраняет все загруженные файлы в хранилище данных, независимо от того, имеют ли поля «загрузка» значение атрибут uploadfield .

      Вы также должны хранить сеансы и билеты в базе данных, и вы должны указать явно:

       if request.env.web2py_runtime_gae
          дБ = DAL('gae')
          session.connect (запрос, ответ, БД)
      еще:
          БД = DAL('sqlite://storage.sqlite')
       

      Вышеприведенный код проверяет, работаете ли вы в GAE, подключаетесь ли к BigTable и дает указание web2py хранить сеансы и билеты там. В противном случае он подключается к базе данных sqlite. Этот код уже находится в приложении создания шаблонов в файле «db. py».

      Memcache

      При желании вы также можете хранить сеансы в memcache:

       from gluon.contrib.gae_memcache import MemcacheClient
      из gluon.contrib.memdb импортировать MEMDB
      cache.memcache = MemcacheClient(запрос)
      cache.ram = cache.disk = cache.memcache
      session.connect(запрос, ответ, db=MEMDB(cache.memcache.client))
       

      Обратите внимание, что в GAE не следует использовать cache.ram и cache.disk, поэтому мы указываем на cache.memcache.

      Проблемы с хранилищем данных

      В то время как Google Cloud SQL функционирует как обычная база данных SQL и на момент написания статьи действительно базировался на mysql, хранилище данных Google имеет существенные отличия.

      Отсутствие операций JOIN

      Отсутствие операций JOIN и типичной реляционной функциональности хранилища данных требует удаления JOIN из запросов web2py и денормализации базы данных.

      Google App Engine поддерживает некоторые специальные типы полей, такие как ListProperty и StringListProperty . Вы можете использовать эти типы с web2py, используя следующий старый синтаксис:

       из gluon.dal import gae
      db.define_table('продукт',
          Поле('имя'),
          Поле («теги», тип = gae.StringListProperty())
       

      или эквивалентный новый синтаксис:

       db.define_table('product',
          Поле('имя'),
          Поле('теги', 'список:строка')
       

      В обоих случаях поле «теги» представляет собой StringListProperty , поэтому его значения должны быть списками строк в соответствии с документацией GAE. Второе обозначение предпочтительнее, потому что web2py будет более разумно обрабатывать поле в контексте форм, а также работать с реляционными базами данных.

      Точно так же web2py поддерживает list:integer и list:reference , которые отображаются в ListProperty(int) .

      список типов более подробно рассматриваются в главе 6. AppEngine поддерживает несколько версий кода. Используйте одну версию кода (например, версию 1) для сайта, видимого пользователю, и другую версию кода (например, версию 2) для кода администратора. В app.yaml для версии 2 объявите обработчик следующим образом (при условии, что используется Python 2.7):

       - адрес: .*
        скрипт: gaehandler.wsgiapp # WSGI (только для Python 2.7)
        безопасный: необязательно
        логин: админ
       

      Предложение login: admin гарантирует, что только администраторы могут использовать версию 2. В строке подключения к базе данных укажите migrate_enabled=False . Для выполнения миграции лучше всего отключить доступ к базе данных одновременно с миграцией. Выполните следующие действия:

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *