Задать вопрос
  • Перезд разных сайтов к одному провайдеру. Организация инфраструктуры?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Алгоритм примерно следующий:
    1. Изучить возможности создания бэкапов, предоставляемые хостерами на всех сайтах
    2. Сделать бэкапы сайтов и БД как возможностями хостеров, так и отдельно таким образом, чтобы в случае чего можно было все восстановить
    3. Изучить настройки DNS и SSL для каждого сайта, а так же настройки регистраторов доменов этих сайтов
    4. Изучить структуру, механизмы работы и настройки каждого сайта, а так же какие там используются утилиты, средства, зависимости, веб-серверы и их настройки, БД и всё прочее
    5. Сформировать требования к серверам или серверу для размещения сайтов (диски, памяти, процессоры, порты, ОС, ПО и прочее)
    6. Для каждого сайта подготовить список необходимого ему ПО и настроить образ для докера (просто потому что у разных сайтов могут быть требования к разным версиям одного и того же или могут быть конфликты, в случае размещения на одном сервере)
    7. Подготовить систему развертывания сайтов из их репозиториев (напоминаю, что весь исходный код сайтов должен быть размещен в соответствующих репозиториях и минимально задокментирован, а так же настроена система автоматического тестирования)
    8. На основе требований подготовить оборудование - сервер, ОС, ПО, административные инструменты типа мониторинга (заббикс - топ), систему бэкапов и прочее
    9. Провести развертывание сайтов с нуля на новом сервере/серверах и проверить, что все работает как надо
    10. Провести дополнительные работы над ошибками и недостатками, а так же исправить обнаруженные недоработки
    11. Добавить сайты, БД и всё остальное в систему мониторинга
    12. Подготовить и протестировать скрипты синхронизации БД и дополнительных данных на новые серверы
    13. Подготовить перенос доменов сайтов с разных регистраторов к одному регистратору
    14. Провести перенос доменов к одному регистратору и убедиться, что всё работает как надо
    15. Для каждого сайта:
      1. В нерабочее время перевести сайт в режим обслуживания либо полностью остановить веб-сервер и вывести заглушку, что сервер в обслуживании
      2. Провести синхронизацию БД и всего остального нужного
      3. Проверить, что на новом сервере сайт полностью работающий и провести все требуемые тесты
      4. Привязать новый сервер к домену
      5. Настроить letsencrypt сертификат


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

    Или как эти сайты вообще размещать чтобы в случае чего они не упали все вместе?

    Автоматизацией развёртывания и всего остального по максимуму, а так же дублирование серверов в другом ЦОД, хостинге, городе, регионе, континенте - по бюджету и требованиям.
    Ответ написан
    2 комментария
  • Что делать с пайтоном на телефоне?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что делать с пайтоном на телефоне?

    Ничего.
    Ответ написан
    Комментировать
  • Как по api получать поля Carbon Fileds?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Все верно, CF по умолчанию не возвращает данные из своих полей (только имена полей). Чтобы CF возвращал данные, необходимо явно разрешить это для каждого созданного поля, например так:
    use Carbon_Fields\Field;
    
    Field::make('text', $key, $this->meta_labels[$key])
        ->set_visible_in_rest_api(true);
    Ответ написан
    1 комментарий
  • Как создать и вывести текстовое поле в Carbon Fileds?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    как создать поле с обычным текстовым редактором

    Rich Text:
    use Carbon_Fields\Container;
    
    Container::make('post_meta', 'Наименование группы полей')
        ->where('post_type', '=', 'page') // условие, только для страниц
        ->add_fields([Field::make('rich_text', 'rich_text_field', '');

    и потом его вывести в шаблоне?

    Как вариант:
    $fields = apply_filters('fields_name', [], get_the_ID());
    echo esc_html($fields['rich_text_field'] ?? '') ?>
    Ответ написан
    1 комментарий
  • Как запаролить сайт?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Пароль найдите самостоятельно (хранение пароля на клиенте не самая безопасная идея):
    Ответ написан
    4 комментария
  • Почему не работает callback второй раз?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    - Зачем светить своим токеном?
    - Зачем 2 раза объявлять одну и туже функцию callback_message?
    - Внутри функции callback_message Вы использовали callback.message.chat.id для отправки сообщений, но callback.message является ссылкой на сообщение, которое инициировало callback, а не на сообщение, которое нужно отправить.
    - А как же обработка callback_data cadastral?
    - message.message_id минус 0?
    import telebot
    from telebot import types
    
    bot = telebot.TeleBot('token')
    file = open('./start1.jpg', 'rb')
    
    @bot.message_handler(commands=['start'])
    def start(message):
        markup = types.InlineKeyboardMarkup()
        markup.add(types.InlineKeyboardButton('Оценка', url='https://google.com'))
        markup.add(types.InlineKeyboardButton('Кадастровые работы', callback_data='cadastral'))
        markup.add(types.InlineKeyboardButton('Строительные экспертизы', callback_data='expertise'))
        bot.send_photo(message.chat.id, file, 
                       caption='Здравствуйте, это Бот-помощник группы компаний "Стандарт Оценка", я помогу Вам определиться с нужной услугой, оформить заявку и связаться с администратором. Выберете желаемую услугу', 
                       reply_markup=markup)
    
    @bot.callback_query_handler(func=lambda call: True)
    def callback_message(call):
        if call.data == 'cadastral':
            bot.delete_message(call.message.chat.id, call.message.message_id)
            bot.send_message(call.message.chat.id, 'Введите свое ФИО')
            bot.register_next_step_handler(call.message, message_input_step)
        elif call.data == 'expertise':
            bot.send_message(call.message.chat.id, 'Вы выбрали Строительные экспертизы')
        elif call.data == 'all':
            bot.send_message(call.message.chat.id, 'Все данные верны')
    
    def message_input_step(message):
        global name
        name = message.text
        bot.send_message(message.chat.id, 'Введите свой номер телефона')
        bot.register_next_step_handler(message, phone)
    
    def phone(message):
        global phone
        phone = message.text
        markup = types.InlineKeyboardMarkup()
        markup.add(types.InlineKeyboardButton('Все верно✅', callback_data='all'))
        markup.add(types.InlineKeyboardButton('Начать сначало❌', callback_data='cadastral'))
        bot.send_message(message.chat.id, f'Ваше ФИО: {name}\nВаш номер телефона: {phone}', reply_markup=markup)
    
    if __name__ == "__main__":
        bot.polling(none_stop=True)
    Ответ написан
    3 комментария
  • Какой сервис выбрать для структуризации идей?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Дополню вариантом, который не зависит от облаков: https://thebrain.com/products/thebrain - отличное десктопное приложение без всяких тяжелых браузеров. Впрочем, мобильные приложения тоже есть, как и поддержка облачной синхронизации. И плюс еще и открытый формат для файлов (экспорт/импорт).
    Ответ написан
    Комментировать
  • Какой сервис выбрать для структуризации идей?

    vabka
    @vabka Куратор тега Веб-разработка
    Obsidian или LogSeq - там ты делаешь записи и определяешь связи между ними при помощи ссылок и тегов (потом можно посмотреть получившийся граф)

    Мне видится некое, бесконечное полотно - на которое можно закреплять ссылки, изображения, видео, текст и прочий контент. Естественно все это можно связывать нитями (стрелками).

    Оно просто превратится в нечитабельную кашу.
    Ответ написан
    Комментировать
  • Почему selenium не видит элеманта captcha?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Капча расположена в iframe, это другой контекст, на который вначале необходимо переключиться, выполнить действия внутри этого контекста, затем переключиться (вернуться) на дефолтный контекст:
    import time
    from fake_useragent import UserAgent
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    option = webdriver.ChromeOptions()
    ua = UserAgent()
    option.add_argument(f'user-agent={ua.random}')
    option.add_argument("--disable-infobars")
    
    s = Service(executable_path=r"C:\Python Scripts\валид\Steam Number\chromedriver.exe")
    
    driver = webdriver.Chrome(options=option, service=s)
    driver.maximize_window()
    driver.get('https://help.steampowered.com/en/wizard/HelpWithLoginInfo?issueid=406')
    
    # iframe
    iframe = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[7]/div[2]/div[2]/div/div[2]/div[1]/div[3]/form/div[3]/div[1]/div/div/div/iframe'))
    )
    
    # switch to iframe context
    driver.switch_to.frame(iframe)
    
    element_to_click = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div[3]'))
    )
    
    element_to_click.click()
    
    # switch to default context
    driver.switch_to.default_content()
    
    time.sleep(10)
    driver.quit()

    6672812eb9ca8801428501.png

    66728135eeb06375772906.png
    Ответ написан
    7 комментариев
  • Как передать переменную из flask в js?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Комментировать
  • На каком движке создать такой сайт?

    iDx
    @iDx
    DataLife Engine
    Ответ написан
    Комментировать
  • В чем может быть причина аномального всплеска посещений на сайт?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Похоже на 1 из трех вариантов:
    - Кто то случайно ошибся, и добавил ссылку на Ваш сайт в мобильном приложение.
    - Кто то решил протестировать свой ультра-парсер, выбор пал на переходы из этого мобильного приложения на Ваш сайт.
    - Кто то начал крутить в негатив поведенческие факторы на Вашем сайте.

    Если Ваш сайт сильно полагается на SEO, то все случаи выше - необходимо фиксить.
    Ответ написан
    Комментировать
  • Не работают ссылки на страницы сайта на WordPress в хромиум браузерах, в FireFox все отрабатывается корректно. Что сделать?

    r3n0
    @r3n0
    // _ AppSec // Bug Bounty / Legal Hacking
    Привет.

    Вёрстка странная - это раз. Два - у тебя одна ссылка перекрывает собой вторую ссылку, смотри:

    <div class="s6_box">
    	<div class="product_bg _1">
    		<a href="https://put-k-rodam.ru/catalog/podgotovka-k-zachatiyu/" class="product_link product w-inline-block"><div class="btn add">узнать подробнее</div></a>
    		<h3 class="h3 prduct"><a href="#" class="h3_link">Подготовка к зачатию</a></h3>
    	</div>
    </div>


    Вот это чудо
    <h3 class="h3 prduct"><a href="#" class="h3_link">Подготовка к зачатию</a></h3>
    и перекрывает нормальную ссылку. Учитывая это месиво с разметкой, было бы уместно сначала спросить, что ты пытаешься реализовать таким странным образом.
    Ответ написан
    3 комментария
  • При передаче информации в sqlite3 из бота в телеге ошибка near ",": syntax error, в чем причина?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    # cursor.execute(f'INSERT INTO sausages (user_name, product_type, product_type_amount) VALUES ({user_name}, {product_type}, {product_type_amount})')
    cursor.execute('INSERT INTO sausages (user_name, product_type, product_type_amount) VALUES (?, ?, ?)', (user_name, product_type, product_type_amount))

    Почему не стоит использовать f строки в SQL Python запросах?
    Ответ написан
    1 комментарий
  • Как работать с GitHub средствами python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ответ написан
    Комментировать
  • Что не так с favicon?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Это просто рекомендация или это означает, что с фавиконом все еще есть проблемы?

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

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Nginx, например, позволяет использовать в качестве параметра разделения не только ip-port, а что уогдно - хоть клиентскую куку, хоть юзерагента.

    Если я правильно понял, вам нужна не балансировка, а решение по равномерной утилизации каналов. Такое умеет, например, MPTCP.
    Ответ написан
    1 комментарий
  • Почему при нажатии на кнопку слайдера картинка пропадает js?

    Elaryks
    @Elaryks
    Картинки переключаются (это видно, если убрать overflow: hidden у .card-list). Просто они расположены в столбик, который ограничен по высоте, при этом неактивные карточки занимают своё положение в документе даже при opacity: 0. Вероятно, вы где-то пропустили часть логики или стилей, чтобы первая картинка заменялась на активную картинку. Поскольку у карточек в вашем примере размеры одинаковые, достаточно заменить position: relative на position: absolute у .card.
    Ответ написан
    1 комментарий