Когда-то давно я писал как использовать домашний маршрутизатор в качестве системы хранения данных и копировать на него по FTP резервные копии вашего сайта. Описанное в той публикации решение отлично работает при условии, что у вас на роутере «белый» IP адрес. Читать
Архив автора: admin
Как использовать модуль PYTZ в Python
Значения даты и времени зависят от зоны. Эти значения необходимо изменить для тех приложений Python, которые требуют работы с международными пользователями. Согласно зоне, модуль dateTime Python не может преобразовывать значения даты и времени. Эту проблему можно решить, используя модуль pytz Python. Этот модуль не установлен в Python. Итак, вам необходимо установить этот модуль, прежде чем использовать его в скрипте. В этой статье показано, как модуль pyzt можно установить и использовать в Python.
Установите модуль PYZT:
Выполните следующую команду, чтобы установить модуль pyzt, прежде чем практиковаться в примерах этой статьи.
$ pip install pytz
Пример 1: Распечатать все поддерживаемые и часто используемые часовые пояса
Следующий скрипт распечатает все поддерживаемые часовые пояса и широко используемые часовые пояса с помощью модуля pyzy . Модуль pyzt импортируется в начале скрипта. Атрибут pytz.all_timezones возвращает список всех поддерживаемых часовых поясов в виде объекта списка. Атрибут pytz.common_timezones возвращает список всех часто используемых часовых поясов в виде объекта списка. После выполнения этого скрипта будут напечатаны два списка.
# Импортировать модуль pytz
import pytz
# Распечатать все поддерживаемые часовые пояса
print('Часовые пояса, поддерживаемые модулем pytz: n', pytz.All_timezones, 'n ')
# Распечатать часто используемые часовые пояса
print('Обычно используемые часовые пояса: n', pytz.common_timezones, 'n ')
Пример 2: напечатать названия стран
Следующий скрипт распечатает список названий стран с кодами стран и название страны с конкретным кодом страны. Метод pytz.country_names.items() возвращает объект словаря названий стран с кодом страны. Коды стран назначаются в ключах объекта словаря, а названия стран назначаются в значениях объекта словаря. Цикл for используется в сценарии для печати названий стран с кодом страны в каждой строке путем повторения объекта словаря, возвращаемого функцией pytz.country_names.items(). Затем будет напечатано название страны с кодом страны «RU».
# Импортировать модуль pytz
import pytz
'' '
Вывести название страны с кодом страны в каждой строке,
используя цикл for
' ''
print('country_names:')
for key, val in pytz.country_names.items():
print(val, '(', key, ')')
# Распечатать название страны с конкретным кодом страны
print('n Название страны на основе кода страны (RU):', pytz.country_names ['RU'])
Пример-3: Распечатать дату и время в зависимости от часового пояса
Значения даты и времени зависят от часового пояса. Следующий скрипт сначала напечатает дату и время текущего часового пояса. Затем часовой пояс будет изменен на US/Eastern с помощью метода pytz.timezone(), а дата и время будут напечатаны на основе US/Eastern часового пояса. Затем часовой пояс будет изменен на часовой пояс Europe/Moscow, а дата и время будут напечатаны в соответствии с часовым поясом Europe/Moscow. Дата и время часовых поясов UTC и IST будут напечатаны позже.
# Импортировать модуль datetime
import datetime as dt
# Импортировать модуль pyzt
import pytz
# Получить текущую дату
source_date = dt.datetime.now()
# Распечатать текущие данные и время
print('Текущая дата и время: n', source_date)
# Установить часовой пояс на US/Eastern
currentTimeZone = pytz.timezone('US/Eastern')
# Вывести текущий часовой пояс Europe/Moscow
print('nЧасовой пояс установлен на: n', currentTimeZone)
# Прочитать и распечатать текущую дату и время часового пояса
currentDateWithTimeZone = currentTimeZone.localize(source_date)
print('Дата и время этого часового пояса: n', currentDateWithTimeZone)
# Установите целевой часовой пояс
newTimeZone = pytz.timezone('Europe/Moscow')
print('n Часовой пояс установлен на: n',newTimeZone)
# Прочитать и распечатать текущую дату и время нового часового пояса
newDateWithTimezone = currentDateWithTimeZone.astimezone(newTimeZone)
print('Дата и время этого часового пояса: n', newDateWithTimezone)
# Прочитать дату и время указанного часового пояса
print('n Datetime of UTC Time-zone:', dt.datetime.now(tz = currentTimeZone))
print('Datetime часового пояса IST:', dt.datetime.now(tz = newTimeZone))
Пример-4: Распечатать отформатированные дату и время
В предыдущих примерах значения даты и времени печатаются в формате по умолчанию. Следующий скрипт распечатает отформатированные данные и время в соответствии с выбранным часовым поясом. Формат даты и времени определен в начале скрипта. В соответствии с форматом дата будет напечатана в формате дд-мм-гггг, а время будет напечатано в формате чч: мм: сс. Затем часовой пояс будет назначен Europe/Moscow, а дата и время будут напечатаны с использованием функции strftime() в указанном выше формате. Затем часовой пояс будет присвоен Азии/Дакке и напечатан, как и раньше.
# Импортировать модуль DateTime
from datetime import datetime
# Импортировать модуль часового пояса
from pytz import timezone
# Установить формат даты и времени
dt_format = "%d-%m-%Y %H:%M:%S"
# Установить текущее время в зоне Europe/Moscow
moscowZone = datetime.now(timezone('Europe/Moscow'))
print('Дата и время зоны Moscow: n', moscowZone.strftime(dt_format))
# Измените часовой пояс на Asia/Dhaka
dhakaZone = moscowZone.astimezone(timezone('Asia/Dhaka'))
print('Дата и время зоны Дакки: n', dhakaZone.strftime(dt_format))
Заключение:
Модуль pyzt имеет множество встроенных функций для работы со значениями даты и времени различных часовых поясов. С помощью этого модуля значения даты и времени веб-сайта можно изменить в соответствии с часовым поясом посетителя. Основное использование этого модуля было объяснено в этой статье с использованием различных примеров, чтобы помочь читателям понять цель этого модуля.
5 причин, по которым вашей ветеринарной клинике необходимо внедрить мобильное приложение lifestyle
Ветеринарная бригада тратит много времени и сил на удовлетворение запросов на медицинские карты пациентов. Клиенты постоянно звонят в клинику, чтобы спросить, когда их питомцу нужно прийти для получения таких услуг, как вакцины, однолетние вакцины и анализ крови. Или клиенты просят отправить записи о своем питомце грумеру или специалисту. Не говоря уже о запросах, которые ваши сотрудники получают от страховых компаний для домашних животных с просьбой о получении медицинских документов в вашем офисе. Когда дело касается истории пациентов и владельцев домашних животных, ваша команда уделяет много времени. Автоматизация с обменом цифровыми записями может стать спасательным кругом, который отчаянно нужен вашей практике, чтобы освободить передышку на стойке регистрации. Вот несколько способов, которыми обмен цифровыми записями может помочь вашей практике.
1. Повышайте доверие и лояльность клиентов
Сегодня потребители ценят прозрачный бизнес, и ветеринарные практики не исключение. Владельцы домашних животных сейчас связаны со своими питомцами крепче, чем когда-либо, и хотят обеспечить наилучший уход за своими товарищами. Утаивание медицинских карт пациентов от ваших клиентов может оставить негативное впечатление и вывести ваших клиентов из себя. Благодаря обмену цифровыми записями ваша практика может предложить вашим клиентам душевное спокойствие, тем самым создавая доверие между вами и вашими клиентами. С помощью мобильного приложения lifestyle, подробнее по ссылке: https://agilie.com/en/services/lifestyle-mobile-apps, вы контролируете, какая часть записи будет доступна для совместного использования, все или часть записей, таких как история болезни, рецепты, лабораторные работы и вакцины.
2. Экономьте время и энергию своей команды
Учитывая большое количество звонков, которые получает ваша клиника, скорее всего, значительная часть этих звонков — это клиенты, спрашивающие об истории болезни своего питомца. Обмен цифровыми записями может сэкономить ваше время и энергию за счет сокращения телефонного трафика и устранения необходимости отправлять записи, необходимые для других ветеринарных клиник, интернатов или магазинов по уходу. Не говоря уже о том, что обмен цифровыми записями может упростить утомительную и избыточную отправку документов по факсу, которая может обременить вашу команду. Согласно проведенному исследованию, клиники в общей практике тратят 30-40% своего времени на отправку, отправку и повторную отправку записей по факсу. Если вы знаете математику, это составит тысячи в месяц потраченного впустую рабочего времени команды, не говоря уже о затратах на выгорание и, как следствие, сокращение обслуживания клиентов.
3. Помогите клиентам справиться с незапланированными событиями
Клиенты ценят возможность лично ознакомиться с историей болезни своего питомца.
Обмен записями позволяет вашим клиентам мгновенно узнать, какие вакцины и методы лечения получали их питомцы, и предвидеть возможные плановые услуги. Кроме того, клиенты могут легко подготовиться к чрезвычайным ситуациям или отправиться в путешествие с медицинскими записями своего питомца в любой момент. Например, если произойдет стихийное бедствие, у ваших клиентов будет информация, необходимая им для предоставления загородных интернатов с важной информацией о вакцинах.
4. Предоставьте клиентам возможность легко подавать страховые претензии
Все больше владельцев домашних животных используют полисы страхования домашних животных, чтобы покрыть медицинские расходы своих питомцев. Вместо того, чтобы брать на себя ответственность за отправку медицинских записей для пациентов, дайте клиентам возможность взять на себя ответственность. Пользователи мобильного приложения lifestyle могут легко отправлять медицинские записи со страховыми возмещениями домашних животных прямо в приложении. Эта функция избавляет вас от необходимости отправлять по факсу или электронной почте претензии по страхованию домашних животных с частями медицинской документации. Таким образом, у ваших сотрудников остается больше времени для ухода за пациентами, а клиенты получают возможность быстро возмещать свои претензии.
5. Клиенты службы поддержки должны делиться записями с доверенными лицами
У большинства владельцев домашних животных есть несколько контактов, с которыми они консультируются по поводу потребностей своих питомцев, например, ветеринары, собачники, грумеры и няни. Предоставьте своим клиентам возможность делиться медицинскими записями своего питомца с кем угодно, включив обмен цифровыми записями. Клиенты могут лично делиться медицинскими записями своего питомца с членами семьи, грумерами, собачниками, друзьями, сиделками и другими людьми.
Как получить доступ к SQLite из Python
Python — это популярный и надежный язык программирования, богатый функциями, которые делают его пригодным для использования в широком спектре случаев, таких как анализ данных, создание сетей, автоматизация ИТ, тестирование на проникновение и многие другие. Он также имеет простой синтаксис, который позволяет разработчикам, знающим другие языки программирования, легко адаптироваться к использованию Python.
Данные повсюду, и широкий спектр программных приложений взаимодействует с данными с помощью системы управления базами данных. SQLite — одна из самых популярных систем управления базами данных в Python.
SQLite — это простой, мощный механизм реляционной базы данных с открытым исходным кодом, который поддерживает большие программные приложения и встроенные системы. SQLite является автономным и требует минимальной настройки, что упрощает настройку и запуск с минимальными затратами времени. По умолчанию в Python встроен модуль SQLite(sqlite3), очень интуитивно понятный модуль для работы с базами данных SQLite в Python.
В этой статье мы рассмотрим, как использовать Python для работы с базами данных SQLite. От установления соединения до создания баз данных, чтения баз данных, обновления и удаления баз данных.
Начнем с установки SQLite:
Установка SQLite и Python
В зависимости от вашего дистрибутива Linux вы можете загрузить архив SQLite с https://www.sqlite.org/download.html или использовать диспетчер пакетов.
Чтобы установить его в Debian:
sudo apt-get update sudo apt-get install sqlite -y
Затем у вас должна быть установлена последняя версия Python3. По умолчанию Python должен быть предварительно установлен в вашем дистрибутиве.
Оболочка SQLite
Методом по умолчанию для взаимодействия с базами данных SQLite является использование оболочки. Оболочка позволяет выполнять встроенные команды SQL или набор для выполнения функций в базах данных.
Для запуска оболочки SQLite используйте команду:
$ sqlite
SQLite версии 2.8.17 Введите «.help» для получения инструкций.
sqlite >
Это должно запустить оболочку SQLite с подсказкой, позволяющей вводить команды. Начните с ввода команды .help, чтобы просмотреть справку оболочки.
sqlite> .help .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in a text format .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ON|OFF Turn output mode suitable for EXPLAIN on or off. .header(s) ON|OFF Turn display of headers on or off .help Show this message .indices TABLE Show names of all indices on TABLE .mode MODE Set mode to one of "line(s)", "column(s)", "insert", "list", or "html" ----------------------------------------------------------------------
Для выхода из оболочки SQLite используйте команду .quit.
sqlite > .quit
Внутри оболочки SQLite можно использовать и другие функции и операции. Например, чтобы просмотреть все базы данных, вы можете использовать команду database.
Мы настоятельно рекомендуем вам поэкспериментировать с оболочкой SQLite и ознакомиться с ней, поскольку она позволит вам понять, как использовать модуль SQLite3 в Python.
Подключение к базе данных
Давайте теперь будем использовать модули Python и SQLite3 для взаимодействия с базами данных SQLite. Стоит отметить, что есть и другие модули Python, которые вы можете использовать для взаимодействия с SQLite. Однако SQLite3 прост и поставляется в комплекте с Python.
Рассмотрим приведенный ниже сценарий для подключения к базе данных SQLite.
import sqlite3 from sqlite3 import Error
def connect_db(db_path):
connection = None try:
connection = sqlite3.connect(db_path)
print("База данных успешно подключена")
except Error as e:
print(f"Произошла ошибка: {e}")
return connection
connect_db("/home/user/Desktop/demo.sqlite")
Начнем с импорта модулей SQLite и Error.
В строке 3 мы создаем функцию connect_db(), которая принимает в качестве аргумента путь к базе данных.
Следующая часть включает блок попытки/ошибки. Первая часть принимает в качестве аргумента путь к базе данных и устанавливает соединение. Обратите внимание: в SQLite, если указанная база данных не существует, она создается автоматически.
Блок ошибок пытается перехватить исключения и распечатать их пользователю.
В последней строке мы вызываем функцию connect_db и передаем путь к базе данных, которую хотим использовать или создать.
sqlite3.connect(“:memory”)
SQLite создать таблицу
В SQLite мы можем использовать оболочку SQL для создания таблиц с помощью запроса CREATE TABLE. Общий синтаксис такой:
CREATE TABLE database_name.table_name ( column_name datatype PRIMARY KEY(column(s), column2_name datatype, … columnN_name datatype, );
Мы не будем углубляться в создание таблиц с использованием оболочки SQLite, поскольку наша основная задача — Python. Чтобы узнать больше, ознакомьтесь с документацией по SQL из приведенного ниже ресурса:
https://docs.microsoft.com/en-us/sql/?view=sql-server-ver15
Сейчас :
Чтобы использовать модули Python и sqlite3 для создания таблиц базы данных, нам нужно использовать объект курсора и выполнять функции SQL-запросов.
Рассмотрим код ниже:
import sqlite3 from sqlite3 import Error
def connect_db(db_path):
connection = None
try:
connection = sqlite3.connect(db_path)
print("База данных успешно подключена")
except Error as e:
print(f"Произошла ошибка: {e}")
return connection def run_query(connection, sql_query):
cursor = connection.cursor()
try:
cursor.execute(sql_query)
connection.commit()
print("SQL - Запрос успешно выполнился………………[OK]")
except Error as e:
print(f" Ошибка запроса……{e}")
query = """
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
year INTGER,
genre TEXT,
country TEXT
);
"""
run_query(connection=connect_db("/home/user/Desktop/sql.sqlite"), sql_query=query)
Давайте теперь обсудим, что делает приведенный выше код — найдите первую функцию, описанную выше (см.).
Во второй функции create мы передаем соединение и запрос для выполнения в качестве параметров.
Следующие строки создают объект курсора, который мы будем использовать для вызова метода execute.
Как упоминалось выше, следующие строки вызывают объект курсора для выполнения метода и вызывают передачу запроса в качестве параметра. Блок также выводит сообщение об успешном выполнении запроса.
После успешного выполнения запроса мы говорим SQLite использовать метод фиксации для сохранения изменений в базе данных.
Блок except перехватывает исключения и выводит пользователю сообщение об ошибке.
Наконец, мы создаем запрос для выполнения с использованием простого синтаксиса SQLite.
Вставка записей в SQLite
Чтобы добавить данные в базу данных SQLite, мы можем погрузиться в функцию run_query(), которую мы использовали для создания, поскольку она может выполнять любой запрос SQLite, который мы ей передаем. Однако мы используем запрос INSERT INTO для добавления данных в таблицу.
Рассмотрим блок ниже:
add_users = """
INSERT INTO
users (id, name, year, genre, country)
VALUES
("101", "AndreyEx", "2021", "IT", "Russia"),
("201", "Destroyer", "2017", "IT", "Russia"),
("301", "Annihilator", "2016", "IT", "Russia");
""" run_query(connection=connect_db("/home/user/Desktop/sql.sqlite"), sql_query=add_users)
Теперь нам нужно вызвать функцию run_query и добавить передачу запроса add_users для вставки данных в таблицу users. Убедитесь, что таблица, в которую вы вставляете данные, существует, чтобы избежать ошибки.
SQLite Удалить записи
Вы также можете использовать функцию run_query() для удаления записей из указанной таблицы. Все, что вам нужно, это установить запрос как DELETE FROM.
Рассмотрим следующий подзапрос:
remove = "DELETE FROM users WHERE name = 'AndreyEx'" run_query(connection=connect_db("/home/user/Deskop/sql.sqlite"), sql_query=remove)
Вышеупомянутый запрос удаляет «AndreyEx» из таблицы users.
Заключение
В этой статье вы научились использовать Python для доступа к базам данных SQLite и взаимодействия с ними.
Из того, что вы узнали из этой статьи, теперь вы можете создавать функции, подключаться к базам данных SQLite, создавать таблицы, вставлять данные и удалять их. Хотя это руководство для начинающих по работе с SQLite в Python, оно должно помочь вам начать изучение других технологий, таких как SQLAlchemy и т. д.
Как создать папку в Google Docs
Google Docs — отличный бесплатный инструмент для обработки текстов. Считается очень удобным для сотрудничества. В среднем, для того, кто использует Документы Google для профессионального использования, создается не менее 200 документов. Вы можете отсортировать их по именам, последним созданным или последним измененным строкам и т.д. Даже при всем этом поиск того, что вам нужно, является монументальной задачей.
Из сотен созданных вами документов сортировка занимает много времени. Это не так, если вы создаете папки и добавляете в них документы на выбранной вами основе, например, месяц, тема и т.д. Предположим, вы создаете папки для месяца и добавляете в эту папку все документы, которые вы создали за этот месяц, это экономит ваше время при прохождении через них. Давайте посмотрим, как мы можем создавать папки в Google Docs и добавлять в них документы.
Создать папку в Google Документах
Вы должны помнить одну вещь: хотя вы создаете папки в Google Docs, они сохраняются на вашем Google Диске. Вы видите эти папки среди множества папок на Google Диске. Вы можете напрямую создавать папки на Google Диске и файлы фильмов. Но здесь мы создаем папку из Google Docs на Google Диске и добавляем в нее документы в самой Google Docs.
Чтобы создать папку в Google Docs и добавить файл:
- Откройте документ и щелкните значок папки.
- Затем щелкните значок «Новая папка».
- Назовите папку
- Переместите документ в созданную вами папку.
Посмотрим инструкцию подробно.
Откройте документ, который вы уже создали в Google Docs, и щелкните значок папки рядом с именем файла. Затем щелкните значок «Новая папка» в нижней части поля «Мой диск».

Теперь введите имя папки в текстовое поле и щелкните значок галочки, чтобы сохранить его.

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

Как получить доступ к папкам из Google Docs
Чтобы получить доступ ко всем папкам, которые вы создали в Документах Google, не переходя на Google Диск, перейдите на главную страницу Документов Google и щелкните значок папки, чтобы открыть диалоговое окно выбора файлов.

Вы увидите диалоговое окно «Открыть файл», которое в Документах Google называется средством выбора файлов. В этом диалоговом окне вы увидите документы и список папок, которые вы создали для документов.

Это простой метод, который сэкономит вам много времени.
Мы надеемся, что это руководство поможет вам создавать папки в Документах Google и получать к ним доступ из Документов Google. Если у вас есть какие-либо сомнения или предложения, оставьте комментарий ниже в разделе комментариев.
Устраняем предупреждения в админ панели NextCloud
В предыдущей статье я писал как можно установить и настроить nextcloud на операционной системе Ubuntu Server 20.04 с web-сервером nginx+php-fpm и базой данных postgresql. Почитать можно тут.
После успешного запуска nextcloud в панели администратора Вы можете в пункте общие сведения, увидеть следующие предупреждения:
Индексирование файлов
Для устранения запустим команды для ускорения индексирования файлов. В терминале набираем:
cd /var/www/nextcloud/
Включаем режим обслуживания:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
И вводим данные строки:
sudo -u www-data php occ db:add-missing-indices
sudo -u www-data php occ db:convert-filecache-bigint
Выключаем режим обслуживания
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
После данной манипуляции ошибка должна исчезнуть.
Предупреждения о текущей конфигурации /.well-known/.
- Веб-сервер не настроен должным образом для разрешения «/.well-known/webfinger».
- Веб-сервер не настроен должным образом для разрешения «/.well-known/nodeinfo».
- Веб-сервер не настроен должным образом для разрешения «/.well-known/caldav».
- Веб-сервер не настроен должным образом для разрешения «/.well-known/carddav».
Чтобы исправить данные предупреждения в конфигурационный файл nginx вашего облака внесем следующую location:
location /.well-known {
location = /.well-known/carddav { return 301 https://$host/remote.php/dav/; }
location = /.well-known/caldav { return 301 https://$host/remote.php/dav/; }
location ~ /.well-known/acme-challenge { allow all; }
rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location ^~ /.well-known { return 301 https://host/index.php$uri; }
try_files $uri $uri/ =404;
}
Адрес https://mynextcloud.ru измените на свой.
Также внесём следующие строки в файл .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} DavClnt
RewriteRule ^$ https://%{SERVER_NAME}/remote.php/webdav/ [L,R=302]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^.well-known/host-meta https://%{SERVER_NAME}/public.php?service=host-meta [QSA,L]
RewriteRule ^.well-known/host-meta.json https://%{SERVER_NAME}/public.php?service=host-meta-json [QSA,L]
RewriteRule ^.well-known/webfinger https://%{SERVER_NAME}/public.php?service=webfinger [QSA,L]
RewriteRule ^.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
RewriteRule ^.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
RewriteRule ^remote/(.*) https://%{SERVER_NAME}/remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/.well-known/(acme-challenge|pki-validation)/.*
RewriteRule ^(?:.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
Зависание входа в панель NextCloud
Включил https на web сервере для nextclou и появился неприятный глюк: в google chrome, opera и яндекс браузере, а также в firefox, IE и edge при входе в аккаунт и выходе из него браузер “зависает” на странице входа, но при этом авторизуется. Если нажать F5, то окажемся в своем аккаунте.
Как же победить данную проблему?
Лечится добавлением в конфигурационный файл NexCloud:
sudo nano /var/www/nextcloud/config/config.php
следующего содержимого:
'overwriteprotocol' => 'https',
Не настроена система кэширования.
Не настроена система кэширования. Для увеличения производительности сервера, по возможности, настройте memcache.
Хочу использовать Memcached. Для этого надо установите модуль для PHP и сам memcached.
Как оказалось есть два похожих пакета:
- php-memcache – модуль Memcache для PHP,
- php-memcached – расширение PHP для взаимодействия с memcached.
Нужен с буквой d в конце.
Установливаем:
sudo apt install memcached php8.0-memcached
настройки в /etc/php/8.0/mods-available/memcached.ini оставляю все без изменений.
В выводе phpinfo(); появился блок с описанием memcached.
Настройки запуска сервиса в /etc/systemd/system/multi-user.target.wants/memcached.service и конфигурационный файл /etc/memcached.conf тоже не менял.
Запускаем memcached:
sudo systemctl start memcached
Проверяем запустился ли сервис
sudo ps ax | grep memcached
Должно выдать что-то вроде этого
725 ? Ssl 0:11 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid
Теперь в конфиге NextCloud добавим строки:
sudo nano /var/www/nextcloud/config/config.php
'memcache.local' => 'OCMemcacheMemcached',
'memcache.distributed' => 'OCMemcacheMemcached',
'memcached_servers' => [
[ '127.0.0.1', 11211 ],
],
Модуль php-imagick не поддерживает SVG
Для устранения данного предупреждения необходимо установить модуль imagick:
sudo apt install imagemagick
Не указан регион размещения этого сервера Nextcloud
Не указан регион размещения этого сервера Nextcloud, что требуется для возможности проверки номеров телефонов без указания кода страны.
Чтобы разрешить пользователям сервера указывать номера телефонов без указания кода страны, добавьте параметр «default_phone_region» с соответствующим кодом страны в соответствии с ISO 3166-1↗.
Для устранения данного предупреждения откроем конфигурационный файл NextCloud :
sudo nano /var/www/nextcloud/config/config.php
и добавим следующие строки:
'default_phone_region' => 'RU',
Предупреждение headers
Для устранения данных ошибок в терминале набираем следующее:
sudo nano /etc/nginx/conf.d/headers.conf
И заполняем данным текстом:
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Cache-Control "public, max-age=7200";
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
Сохраняем файл (ctrl+o, ctrl+x). И перезагружаем nginx
sudo service nginx restart
Заголовок HTTP «Strict-Transport-Security»
Для устранения данного предупреждения отредактируем файл Nginx headers.conf:
sudo nano /etc/nginx/conf.d/headers.conf
Добавим следующие строки:
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
Перезапустим nginx:
sudo service nginx restart
PHP не настроен для системного окружения.
PHP не настроен правильно для получения переменных системного окружения.
Запрос getenv(«PATH») возвращает пустые результаты.
Обратитесь к разделу о конфигурации PHP и примечаниям к конфигурации PHP из руководства по установке. Обратите внимание на настройку параметров PHP, особенно при использовании механизма php-fpm.
Когда вы используете php-fpm, системные переменные среды, такие как PATH, TMP или другие, не заполняются автоматически так же, как при использовании php-cli. Вызов функции PHP, такой как getenv(‘PATH’); может возвращать пустой результат. Поэтому вам может потребоваться вручную настроить переменные среды в файле конфигурации php-fpm.
Редактируем файл:
sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Находим строки:
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
И сними с них комментарий (;).
Далее перезапустим php8.0-fpm
sudo service php8.0-fpm restart
Значение PHP ниже рекомендуемого значения .
Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ.
В терминале набираем:
sudo nano /etc/php/8.0/fpm/php.ini
Находим и редактируем следующие строки:
max_execution_time = 300
max_input_time = 600
memory_limit = 512M
post_max_size = 20M
upload_max_filesize = 40M
Не скачиваются файлы больше 1Гб
При попытках скачать из облака файлы объемом более 1гб скачивание прерывается при достижении 1гб. Такое происходит при условии использования Nginx как реверс-прокси. Решается очень просто, нужно добавить в конфигурационный файл сайта опцию «proxy_buffering off». Открываем и добавляем эту опцию:
server {
…
proxy_buffering off;
…
}
[endtxt]
. . . .
- Тест скорости дисков в Linux
- Как запустить команду в фоне в Linux
- Ошибка несоответствие размеров GPT PMBR
- nginx: [warn] protocol options redefined
- Как включить поддержку linux в windows 11