Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Игра представляет собой полноценную головоломку и дает возможность расслабиться после дня в тихой и уютной обстановке недалеко от горы Фудзи под деревом сакуры с полноценной игрой Маджонг!

Маджонг: Лепестки Сакуры

Маджонг, Головоломки, Милая

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Redis

6 постов сначала свежее
398
mimokrokodilchik
mimokrokodilchik
2 года назад

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

В прошлой статье я рассказал о таком понятии как VPS (Virtual Private Station).

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

Не буду рекомендовать какой то конкретный курс. Можно зайти на ютуб и вбить "Linux для начинающих" или найти книги просто загуглив "линукс начинающим pdf".

Для начала работы с линуксом нужно знать:

  • В какой папке вы находитесь и как сменить папку (pwd, cd)

  • Как создавать папки, файлы и как их читать и писать в них, как искать нужные файлы (mkdir, touch, vim, find)

  • Понимать самые основы прав и пользователей, как их создавать и пользоваться ими (chown, chmod, id, su)

  • Как устанавливать и запускать приложения (apt-get update/install/remove)

  • Как писать простейшие скрипты и запускать (bash scripts)

  • Уметь проверять состояние сервера - загрузка CPU/RAM/HDD (top, free, df)

  • Уметь проверять процессы и останавливать их (ps, kill)

  • Уметь проверить, закрыть порт (netstat и еще парочка)

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

Устанавливаем на сервер необходимую для разработки инфраструктуру.

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Раньше большинство инфраструктуры ставили прямо на сам сервер.

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

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

Минимум, который нужно знать про Docker:

  • Понимать разницу между образом и контейнером (контейнер по сути экземпляр образа)

  • Уметь запускать и останавливать контейнер (docker run, stop, start)

  • Уметь подключаться к контейнеру (docker attach / docker exec)

  • Уметь проверять работу контейнера (docker ps, docker logs)

Для чего это нужно?

Изучение основ Linux и Docker - процесс не из самых легких. Все это стоит того, чтобы научиться поднимать инфраструктуру в несколько минут.

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

Классический минимум

Рассмотрим пример архитектуры классического промышленного Java приложения:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Подобная инфраструктура вряд ли вместится в самую дешевую VPSку. Ниже я расскажу какие есть недорогие варианты.

Этот вариант архитектуры является классическим решением большинства веб проектов. Я привел его в качестве примера, который подойдет для новичка.

Используем докер для поднятия данной архитектуры.

Redis (один из многих вариантов кэшей)

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

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

docker run -d -p 6379:6379 --name myredis redis redis-server --requirepass <password>

Для удобства (необязательно) можно внутри докера стартовать веб интерфейс для просмотра redis сервера вот такой командой:

docker run -d --name myrediscommander -p 8081:8081 --link myredis:redis rediscommander/redis-commander

После старта админки можно зайти в браузер по адресу ВАШ_IP:8081 и затем подключиться к вашему серверу, чтобы просматривать/удалять/добавлять данные:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

RabbitMQ (Очередь, которая получает сообщения и оповещает подписчиков).

Rabbit позволяет получать и оповещать клиентов, подписавшихся на сообщения.

Для запуска очереди достаточно запустить:

docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=myuser -e RABBITMQ_DEFAULT_PASS=mypassword rabbitmq:3-management

Через пару минут можете зайти в админку очереди, вбив в браузере IP_вашего_сервера:15672 и увидеть что то вроде:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Реляционная база данных MYSQL.

Реляционные базы данных являются неотъемлемой частью большинства решений. В нашем примере мы запустим одну из самых популярных MySQL:

docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:latest --default-authentication-plugin=mysql_native_password

Через пару минут сервер стартанет. К нему можно будет подключиться через какой - нибудь MySQL клиент, например Heidi SQL.

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

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Минимальные требования к подобной инфраструктуре.

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

Какие есть недорогие варианты поднятия инфраструктуры без больших затрат?

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

  • Почасовая аренда VPS. Если вы хотите проверить какие - нибудь решения и вы знаете, что это займет несколько часов, есть смысл аренды VPS с почасовой оплатой. В среднем 8 ядерный VPS с 8gb RAM будет стоить порядка 5-12 рублей в час. Конкретного провайдера рекламировать не буду, я пользовался тремя и в такой диапазон цен укладывался.

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

Как еще можно использовать арендованный сервер?

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

Запускаем чат сервер MatterMost

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

Запустить сервер можно командой ниже:

docker run --name matt -d --publish 8065:8065 --add-host dockeermost/mattermost-preview

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

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Хостим MineCraft

Для старта сервера MineCraft понадобится:

Cкачать или скопировать вручную вот такой docker-compose.yml файл: https://pastebin.com/raw/uEP58DRB сделать это можно командой

curl -o docker-compose.yml https://pastebin.com/raw/uEP58DRB

Затем, находясь в той же директории, надо запустить

docker compose up

После старта сервера нужно подождать какое то время. Затем, можно подключиться к миру, используя Minicraft клиент, указав IP вашего сервера:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Вот как выглядел мир в моем примере:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Я перечислил часть возможных решений в качестве примера.

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

Сама разработка на Java.

В следующей части я покажу как писать простейшие приложения и использовать созданную инфраструктуру.

Больше о Java и смежных технологиях можете узнать тут.

Показать полностью 8
[моё] IT Программирование Linux Программист Разработка Docker Mysql Redis Minecraft Длиннопост
147
38
YouZ63
3 года назад

Как я решил сделать Telegram Bot для знакомств⁠⁠

Началось все года два назад, во Вконтакте я напоролся на один бот для знакомств (не буду говорить какой) и подумал, что почему бы не сделать такой же но в Телеграм, благо на тот момент мне хотелось попрактиковаться в написании ботов для телеги ну и на тот момент мне понравилась идея для бота в стиле "Знакомства"


В качестве языка программирования я выбрал Python, и сходу начал "творить"

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


1 - Bot pulling работал так себе, стабильности было маловато
2 - Библиотека telebot которую я использовал оказалась не так проста как кажется на первый взгляд
3 -  Я  был удивлен когда понял ,  что кода там будет больше чем в привычных мне скриптах на 200 строк, пришлось изучать много информации для разработчиков
4 - Инфраструктура,  поднятие бота локально на ПК это хорошо, но лучше было бы что бы появился какой-то сервер

Решением проблем было такое:


Переделал бот на web hooks, теперь не мой бот опрашивал Telegram на наличие изменений

а Telegram отправлял сообщения про изменения в мой бот, но для этого пришлось научить мой код принимать то что посылает мне Телеграм, в этом мне помог flask, та же пришлось купить доменное имя (купил подешевле на Go Daddy, там за копейки можно взять доменное имя на год, ну а потом цена будет выше, ибо скидки не на всегда) + Нужен SSL, по этому "перед" ботом появился nginx в роли reverse proxy, и Lets Encrypt сертификат, дешево и сердито. Это все я начал деплоить по всем канонам Continuous Delivery на купленный мной за 5$ самый дешевый сервер (дроплет) на DigitalOcean (кстати там можно на первые 3 мес получить этот дроплет бесплатно, но это не точно) ну а в качестве хранилища кода был выбран GitHub, после того как его выкупили Майки в нем можно бесплатно создавать закрытые репы)


Но это еще не все, ибо во время работы бота нужно хранить информацию, временную и постоянную, для этого пришлось подключить БД, в качестве бд в которой хранится временная информация, был выбран redis, ну а для хранения постоянных данных моя любимая mongodb , в целом их можно было развернуть прям на сервере, но я решил сделать все красиво и купил DigitalOcean Managed базу, то есть они сами ей "управляют" а я только конфигурирую ее кнопочками 😁 но штука не дешевая, 12$ в мес за одну базу.


Но так как я это все делал один, это заняло много времени, так же в Телеграм уже появились боты такого характера и это все привело к потери у моего бота уникальности + баги + пока делал появились библиотеки для работы с API Telegram поддерживающие асинхронность.


По этому хотелось бы дать совет тем кто тоже хочет разработать какой-то свой продукт😁

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


1 - Разработать документацию, да, это долго, возможно олдскульно, но это важно!

в ней обязательно должна быть схема работы, и все будущие функциональные возможности продукта (Да, опытные скажут что даже если и так , рано или поздно захочется добавить то чего изначально не было описано,  но это будет намного проще чем без нормальных доков, так как вы будете понимать что и зачем идет, почему этот Сlass наследуется от этого Class - а, это позволит модифицировать код не парясь о том что щас все навернется)


2 - Детально изучить актуальные технологии,  если вышла 3 версия python, не нужно кодить на 2 ой =)


3 - Желательно автоматизировать обновление версий продукта, так вы потратив может день, с экономите пару месяцев на ручном обновлении и возможных фиксах во время этого в будущем


(в этом поможет terraform для управления инфраструктурой, ansible как система управления конфигурацией, ну и попробуйте контейнерезацию в виде docker - это позволит более удобно управлять версиями)


Многие скажут, да зачем все это? этим же никто не будет пользоваться ?

а если будет?) представьте что у вас привалило 10 к пользователей, а у вас один сервер на 2 ядра в полку еле работает, а код обновляется посредством scp 😁


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


Собственно вот и бот:

https://t.me/Meets_For_Bot


Функциональных возможностей немного, но хоть что-то но есть:

1 - Лайки/Дизлайки, естественно если лайкнуть кого-то ему придет сообщение что вы его

лайкнули и он сможет посмотреть ваш профиль


2 - Мультиязычность, язык интерфейса бота подстраивается под язык Telegram клиента


3 - Можно отправлять друг другу анонимные сообщения внутри бота, их видите только вы и получатель


4 - Можно получить рандомный профиль ну или просто по очереди перебирать профили


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

Как я решил сделать Telegram Bot для знакомств Telegram, Знакомства, Docker, Python, Redis, Mongodb, Длиннопост, Бот
Как я решил сделать Telegram Bot для знакомств Telegram, Знакомства, Docker, Python, Redis, Mongodb, Длиннопост, Бот
Показать полностью 2
[моё] Telegram Знакомства Docker Python Redis Mongodb Длиннопост Бот
12
40
DELETED
4 года назад
Лига Сисадминов

Отказы ИС 0.Twilio и Redis⁠⁠

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

В серии постов (если, конечно, она получится) планируется краткое изложение некоторых из подобных отчетов.

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

В качестве первого отчета выбран отчет компании Twilio (занимается предоставлением различных программных сервисов, в т.ч. автоматизированной отправки sms-сообщений и телефонных звонков). Отчет представлен на сайте компании и датируется 23 июля 2013 года.

Сам инцидент возник 18 июля 2013 и затронул 1,4; пользователей компании и заключался в следующем:

- во время инцидента при оплате с банковских карт в пользу Twilio пользователи не видели соответствующих изменений на своем балансовом счете;

- автоплатежи выполнялись несколько раз (так как баланс клиента в Twilio не обновлялся после оплаты);

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

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

Развитие событий.

18.07.2013 08:35 UTC: из-за обрыва сетевого соединения с ведущим (master) узлом ведомые узлы выполнили переподключение и запустили процесс полной синхронизации одновременно.

18.07.2013 09:39 UTC: сервисы, использующие ведущий узел, начали отказывать из-за повышенной нагрузки на него.

18.07.2013 09:42 UTC: redis-master был перезапущен для того, чтобы справиться с нагрузкой.

18.07.2013 10:28 UTC: системы мониторинга Twilio зафиксировали аномалию в системе выставления счетов (ошибки платежей по картам и блокировки учетных записей пользователей). Затронуто было 1.1% пользователей. Проблемой начала заниматься дежурная команда инженеров.

18.07.2013 11:10 UTC: биллинговая система была отключена для избежания дальнейших ошибок обработки банковских карт.

18.07.2013 13:24 UTC: были разблокированы все затронутые учетные записи. Система выставления счетов оставалась в режиме оффлайн пока специалисты занимались поиском основной причины ошибки.

18.07.2013 18:58 UTC: биллинговая система была включена.

18.07.2013 19:36 UTC: системы мониторинга снова зафиксировали ошибочную обработку счетов, затронувшую еще 0.3% пользователей системы.Система выставления счетов была вновь остановлена, а заблокированные учетные записи - разблокированы.

18.07.2013 21:57 UTC: Twilio начал возврат денежных средств. Работа по возврату заняла следующие 24 часа.

19.07.2013 22:00 UTC: возврат ден. средств был завершен.

19.07.2013 22:30 UTC: всем затронутым учетным записям на счет было зачислена сумма в размере 10% от их трат за последние 30 работы в сервисе.

20.07.2013 02:30 UTC: система выставления счетов запускалась постепенно для учетных записей, разделенных на группы.

20.07.2013 03:14 UTC: биллинговая система была запущена для всех групп пользователей (процесс запуска был завершен).

20.07.2013 04:15 UTC: работоспособность всех систем была восстановлена.

Основная причина. Twilio использует СУБД Redis для хранения баланса учетных записей. Кластер реализован на одном ведущем (master) и нескольким ведомым (slave) узлам, распределенным по разным ЦОД. Обрыв соединения 18.07.2013 08:35 UTC привел к значительному падению производительности Redis и возникновению тайм-аутов взаимодействия между ведомыми и ведущими узлами. Деградация была настолько значительной, что связанные сервисы начали отказывать.

Дежурная группа из-за высокой нагрузки на кластер Redis приняла ошибочное решение о необходимости его перезагрузки, так как она привела к чтению ошибочного файла конфигурации. Из-за ошибки конфигурационного файла Redis принял решение выполнить восстановление из AOL файла (файл, содержащий лог всех операций), которого не существовало, вместо использования бинарного снимка файловой системы (snapshot). В связи с этим Redis удалил все сведения о балансе учетных записей. Кроме того некорректная конфигурация привела к тому, что Redis сам запустился в режиме ведомого (slave) узла, что привело к его работе в режиме "только на чтение" и не давало биллинговой системе изменять сведения о балансе учетных записей.

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

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

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

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

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

Показать полностью
[моё] IT Redis Системное администрирование Ошибка Исправление ошибок Длиннопост Текст
3
7
straus123
4 года назад
Программирование на python

Хочу стать программистом ч.3⁠⁠

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


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



Итак мы будем делать клиент-серверное приложение. Сперва мой выбор пал на стандартную библиотеку питона socketserver, но он разрывает связь после первого обмена данными, поэтому реализация  будет на socket


Начнем с сервера (код):

Большинство кода являет собой копипасту из документации по модулю selectors.

Cуть в том, что мы слушаем сокет и в бесконечном цикле слушаем события от модуля selectors, заранее вешая туда обработчик accept. Таким образом мы можем подключаться одновременно с нескольких клиентов.


Из интересного можно отметить код split_input_data, где мы регуляркой разбиваем входящие данные на кортеж.


Код клиента вообще прост как 2 копейки(код):

-просто подключается

- ждем ввод

- пишем ответ



Сама структура для хранения сейчас представлена в виде словаря, напомню главная цель данной активности - чтоб работало, о скорости подумаем потом = )

Записывать свое состояние пока не умеет, просто хранит словари в памяти и отдает данные по ключу.

Реализация опять же проста на данный момент. Код



На данный момент основная проблема это то как это все можно протестировать, автоматизировать?

Как замерить скорость и сравнить с реальным redis?

Полное непонимание того как пишутся распределенные приложения.



Ссылка на гит - https://github.com/straus123/strais


Как обычно рад адекватной и не очень критике.

Спасибо!

Показать полностью
[моё] Python Redis Обучение Текст
4
10
straus123
4 года назад
Программирование на python

Хочу стать программистом ч. 2⁠⁠

Всем привет.

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


Я считаю, что лучшее обучение - обучение через практику, поэтому я буду пилить свою реализацию redis на python.

Главная цель - чтоб работало(на скорость пока не обращаем внимание), было отказоустойчиво(то есть будет кластер), легко разворачивалось и интегрировалось через pip.


Где-то раз в недельку буду публиковать отчетики и код в репозитории, где можно потроллить меня за криворукость = )


Всегда буду рад конструктивной критике.

[моё] Python Redis Обучение Текст
28
376
megavolt0
megavolt0
7 лет назад

Делаем собственное облако. OwnCloud+Let's Encrypt⁠⁠

Наверняка вы пользуетесь какими-либо хранилищами данных в интернете. Если у вас есть почта в Gmail, значит автоматически у вас есть аккаунт в Drive.Google и именно там хранится ваша почта. Если почта от Yandex, то, точно также, вы используете Yandex.Диск. Есть еще множество вариантов облачных хранилищ. Есть платные и бесплатные, с разными характеристиками. Вы можете выбирать исходя из имеющейся задачи сохранения тех или иных данных. Но у всех этих хранилищ есть существенный недостаток — вы их абсолютно не контролируете. Кроме того, и это не секрет, те же Google и Yandex читаю вашу почту, просматривают ваши файлы для таргетирования рекламы. Менее именитые хранилища порой становились фигурантами утечек данных об аккаунтах пользователей, а значит хранимая в них информация подвергалась разной степени компрометации.


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

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

В этой статье будет рассказано, как установить и настроить собственное хранилище на базе решения ownCloud. Нам подойдет любой VPS с количеством оперативной памяти от 512МБ. Вычислительные способности не очень важны, если пользоваться хранилищем будет малое число клиентов. А вот места на жестком желательно побольше. Сколько именно — решать вам. Применение SSD, опять же, при малом числе клиентов, не обязательно. Трафик тоже прикидывайте сами. Если у вас хранилище в районе 100ГБ, то и 512ГБ исходящего трафика в месяц будет достаточно. Важнее, чтобы реальная скорость канала была большая. Не стоит гнаться за тарифами с безлимитным трафиком, но с плохими каналами.


Небольшое отступление: Есть ответвление от ownCloud под названием Nextcloud. Он новее и прогрессивнее, но пока не блещет стабильностью и поддержкой. Ветки не сильно разошлись и Nexcloud настривается точно также. Для ознакомления и пробы сил я всё-таки рекомендую ownCloud. Он лучше документирован, по нему море статей, все баги и особенности давно разобраны.


Под ownCloud нам потребуется установить и настроить LEMP сервер. Устанавливать его мы будем на CentOS 7 x64. Желательно использовать дистрибутив с минимальным набором пакетов. Такой есть у любого хостера, называться будет примерно так: centos-7-x86_64-minimal. Все необходимые пакеты мы поставим в процессе настройки. Минимальный дистрибутив позволит избежать конфликтов пакетов и занятых портов.


Ещё нам понадобиться доменное имя. Второго или третьего уровня. Возможно у вас уже есть какой-нибудь домен. Тогда вы можете сделать поддомен вида, например, mycloud.example.com


Или же вы давно хотели заиметь свой домен (например для почты), но всё не решались. Тогда самое время перейти на сайт регистратора (godaddy.com, reg.ru и тысячи их. Не реклама!) и зарегистрировать доменное имя. Естественно, это будет стоить денег. Причем ежегодно. Можно получить доменное имя бесплатно. Например, перейдём на dot-tk (вместо - поставьте точку) и поищем свободное имя в зонах tk .ml .ga .cf .gq

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Если у вас уже есть домен, то просто добавьте А запись, вида (вместо 123.123.123.123 вставить IP-адрес вашего VPS):

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

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


Если ваш маленький еврей бунтует, то продолжим получать бесплатный домен у dot-tk

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Как видите, я выбрал для домена такое немного колхозное, но понятное имя mydomen.ml (я знаю, что правильно mydomain, но все простые имена уже были заняты или платные). На его примере я и буду рассказывать дальше.

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Так как у вас еще нет своего сайта/блога/etc, то вместо 123.123.123.123 вписываете IP-адрес вашего VPS.


Дальше вам предложат зарегистрироваться и домен за вами. Попадаем в clientarea

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

В принципе, мой домен уже смотрит на мой VPS и на этом можно было бы остановиться. Но это не правильно. ownCloud это сервис, один из многих, которые можно привязать к домену. Поэтому мы не будем тратить домен второго уровня на ownCloud, а сделаем как написано выше, домен третьего уровня.


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

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Откроем управление DNS-записями

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

И добавим запись. Нужно заполнить новую запись в разделе Add Record (выделено красным). Вместо 123.123.123.123 вписываете IP-адрес своего VPS

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Не забудьте нажать кнопку «Save Changes» под новой записью.


Так мы создадим домен третьего уровня, ведущий на наш VPS с ownCloud.


В дальнейшем, в том месте, где обведено зелёным, вы сможете написать другой IP. Например IP сервера с вашим сайтом.


Тогда домен mydomen.ml будет вести на сайт, а домен mycloud.mydomen.ml на VPS с ownCloud. Сейчас и тот и другой ведут на ваш VPS.


Мы будем использовать mycloud.mydomen.ml


Настройте SSH и подключитесь к серверу с помощью Pytty и WinSCP. Как это сделать, ищите здесь.


Выполним стандартные телодвижения по подготовке CentOS к работе:

yum -y install epel-release
yum -y update

Установим web-сервер Nginx:

yum -y install nginx

Добавим репозиторий webtatic (предоставляет для CentOS пакеты, относящиеся к PHP):

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Теперь установим PHP7-FPM и еще несколько дополнительных пакетов (в числе прочего будет установлен Redis), которые понадобятся в рамках этой статьи:

yum -y install php70w-fpm php70w-cli php70w-gd php70w-mcrypt
yum -y install php70w-pear php70w-xml php70w-mbstring php70w-pdo
yum -y install php70w-json php70w-pecl-redis php70w-mysql
yum -y install dialog crontabs wget unzip redis git bc

Проверим версию PHP, чтобы убедится, что всё хорошо встало

php -v

Должно быть примерно так:

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Настроим PHP7-FPM


С помощью WinSCP откроем файл /etc/php-fpm.d/www.conf и найдем строчки:

; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

Исправим на:

; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

Найдем:

listen = 127.0.0.1:9000

Проверяем, чтобы был именно порт 9000.

Находим:

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

и превращаем в

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Сохраняем и закрываем файл.

Теперь сделаем рабочий каталог для PHP:

mkdir -p /var/lib/php/session

Назначим его владельцем пользователя nginx

chown nginx:nginx -R /var/lib/php/session/

Запустим php-fpm, redis и nginx

systemctl start redis
systemctl start php-fpm
systemctl start nginx

Убедимся, что с ними всё хорошо

systemctl status php-fpm
systemctl status nginx
systemctl status redis
Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост
Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

И добавим в атозагрузку

systemctl enable php-fpm
systemctl enable nginx
systemctl enable redis
Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Теперь на нужна СУБД MariaDB. Установим:

yum -y install mariadb mariadb-server

Запустим:

systemctl start mariadb

Проверим:

systemctl status mariadb

И добавим в автозагрузку

systemctl enable mariadb

Теперь выполним первоначальную настройку MariaDB:

mysql_secure_installation

На вопрос

Enter current password for root (enter for none):

просто жмём Enter. На вопрос:

Set root password? [Y/n]

отвечаем Y и жмём Enter, придумываем и два раза вводим стойкий пароль.

Навсе последующие вопросы отвечаем Y и жмём Enter.

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Создадим новую базу данных с названием ‘owncloud_db’ с пользователем ‘ownclouduser’.

mysql -u root -p

СУБД спросит пароль, вводим пароль придуманный выше.

Вводим команду (не забывайте «;» )

create database owncloud_db;

В следующей команде вместо ownclouduser_pass придумайте, запомните и впишите стойкий пароль (да, ещё один).

create user ownclouduser@localhost identified by 'ownclouduser_pass';

Дадим пользователю права на новую базу (вместо ownclouduser_pass впишите пароль из предыдущей команды)

grant all privileges on owncloud_db.* to ownclouduser@localhost identified by 'ownclouduser_pass';

И отменим все другие права:

flush privileges;

Чтобы выйти из консоли СУБД введите

quit;

Теперь настроим бесплатный сертификат Let’s Encrypt для нашего Nginx и автоматизируем его обновление.

Клонируем репозиторий проекта letsencrypt из GitH

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Теперь создадим сертификат

ВНИМАНИЕ: к этому моменту ваш домен (в моём случае mycloud.mydomen.ml) уже должен пинговаться.

Чтобы это проверить, на компьютере с Windows нажимаем сочетание клавиш Win+R и вписываем

ping mycloud.mydomen.ml

в ответ мы должны получить четыре строчки вида «Ответ от 123.123.123.123: число байт=32 время=79мс TTL=51». Если в ответ мы получаем «При проверке связи не удалось обнаружить узел…», то нужно просто подождать. После регистрации домена и добавление строчки с доменом третьего уровня может пройти до 24 часов, прежде чем они начнут пинговаться.

Выполним последовательно команды:

cd /opt/letsencrypt
./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html/ -d mycloud.mydomen.ml

В процессе нас попросят ввести e-mail для уведомлений (вводим реально существующий):

Enter email address (used for urgent renewal and security notices) (Enter ‘c’ tocancel)

принять лицензионное соглашение (ввести A)

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.... You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
——————————————————————————-
(A)gree/(C)ancel:

и ответить на вопрос об информационной рассылке (ввести Y или N, тут уж как сами хотите.)

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
——————————————————————————-
(Y)es/(N)o:

В конце получим сообщение вида:

Congratulations! Your certificate and chain have been saved at…

Теперь сделаем ключ для алгоритма Диффи-Хелмана.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Процесс долгий. Занимает несколько минут.


Теперь научим наш Nginx применять полученные сертификаты, а также добавим некоторые настройки для ownCloud. Открываем конфиг Nginx по пути /etc/nginx/nginx.conf и находим в нем секцию, которая выглядит примерно так:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

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


Удаляем эту секцию и вместо неё вставляем секции следующего содержания:

upstream php-handler {
server 127.0.0.1:9000;
}
server {
# перенаправление с 80 порта, а также с www
server_name mycloud.mydomen.ml www.mycloud.mydomen.ml
listen 80;
return 301 https://mycloud.mydomen.ml$request_uri;
}

server {
listen 443 ssl;
server_name mycloud.mydomen.ml;
# Указываем пути к сертификатам
ssl_certificate /etc/letsencrypt/live/mycloud.mydomen.ml/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mycloud.mydomen.ml/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
# позволяем серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
location ~ /.well-known {
allow all;
log_not_found off;
access_log off;
}
# The rest of your server block
root /usr/share/nginx/html;
index index.php index.html index.htm;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/acme-challenge { }
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location / {
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
return 404;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
return 404;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended to have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into this topic first.
#add_header Strict-Transport-Security "max-age=15552000; includeSubDomains";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}

Смотрим внимательно в приведённый выше конфиг. Все mycloud.mydomen.ml заменяем на название своего домена.

Проверим, что всё хорошо

nginx -t

Должны получить в ответ:

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

Применим новые настройки

systemctl reload nginx

letsencrypt выдаёт сертификаты со сроком действия 90 дней. Их нужно заблаговременно продлевать. Процесс этот можно и нужно автоматизировать. Само обновление запускается командой

/opt/letsencrypt/letsencrypt-auto renew

Если вы выполните эту команду прямо сейчас, то она проверит все ваши сертификаты и уведомит, что их продление не требуется.

——————————————————————————-
Processing /etc/letsencrypt/renewal/mycloud.mydomen.ml.conf
——————————————————————————-
Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/mycloud.mydomen.ml/fullchain.pem (skipped)
No renewals were attempted.

Для автопродления воспользуемся встроенным в Linux планировщиком cron. Для этого командой

crontab -e

откроем crontab для редактирования. Появится пустое чёрное поле.

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Нажмите кнопку Insert на клавиатуре, снизу появится уведомление —ISERT —. Теперь впишите/вставьте следующие две строчки

00 3 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
10 3 * * 1 /usr/bin/systemctl reload nginx
Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Нажмите на клавиатуре кнопку Esc, режим —INSERT — пропадёт. Теперь введите (просто вводите, в нижней строчке оно появится само)

:wq

и нажмите Enter

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Мы вернемся в консоль с сообщением

crontab: installing new crontab

Теперь каждый понедельник ночью в 3:00 будет обновляться сертификат, а в 3:10 перезапускаться Nginx. Вы можете контролировать выполнение задания в логе /var/log/le-renew.log.


Это всё была присказка, т.е. только подготовка к установке ownCloud. Промежуточным итогом мы имеем Web-сервер, который умеет в правильный https, имеет все необходимые библиотеки и СУБД. Т.е. мы установили и настроили (ну почти) обещанный LEMP сервер.


Остановим пока Nginx

systemctl stop nginx

Узнать последнюю версию ownCloud и получить ссылку на скачивание можно здесь.

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост
Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост
Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Скачаем архив

cd /tmp
wget https://download.owncloud.org/community/owncloud-10.0.2.zip

Распаковываем его

unzip owncloud-10.0.2.zip

С помощью WinSCP удалим из папки /usr/share/nginx/html/ все папки и файлы кроме папки .well-known


И скопируем туда файлы ownCloud

cp /tmp/owncloud/. /usr/share/nginx/html/ -r

Теперь, с помощью WinSCP, в папке /root/ создадим файл oc-set со следующим содержимым:

#!/bin/bash
ocpath='/usr/share/nginx/html'
htuser='nginx'
htgroup='nginx'
rootuser='root'
printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets
mkdir -p $ocpath/updater
printf "chmod Files and Directories\n"
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/updater/
chmod +x ${ocpath}/occ
printf "chmod/chown .htaccess\n"
if [ -f ${ocpath}/.htaccess ]
then
chmod 0644 ${ocpath}/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
fi
if [ -f ${ocpath}/data/.htaccess ]
then
chmod 0644 ${ocpath}/data/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
fi

И выставим ему права 0755.

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

/root/oc-set

Скрипт отработает. Создаст все необходимые каталоги для ownCloud и выставит правильные права. В результате работы скрипта будут выведены строчки:

Creating possible missing Directories
chmod Files and Directories
chown Directories
chmod/chown .htaccess

Запустим Nginx

systemctl start nginx

Теперь можно в браузере переходить по адресу cloud.mydomen.ml


Нас встречает окно создания учётной записи администратора

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Придумываем логин-пароль администратора и нажимаем «Завершить установку». Пароль должен быть стойким.


Если вы сейчас зайдёте в наше вновьсозданное облако, то увидите, что ownCloud ругается на отсутствие кэширования, что может замедлять работу. Настроим кэширования с помощью Redis.


В WinSCP откроем файл /usr/share/nginx/html/config/config.php. Смотрим на последнюю строчку, она выглядит так:

);

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

'filelocking.enabled' => true,
'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
),

запятые в конце строчек не забудьте.


Должно получиться так

‘filelocking.enabled’ => true,
‘memcache.local’ => ‘\OC\Memcache\Redis’,
‘redis’ => array(
‘host’ => ‘localhost’,
‘port’ => 6379,
‘timeout’ => 0.0,
),
);

Сохранить и закрыть.

С помощью WinSCP откроем файл /etc/sysctl.conf и добавим строчку:

vm.overcommit_memory=1

Сохраним и закроем файл.


Перезапустим службы:

systemctl restart redis
systemctl restart php-fpm
systemctl restart nginx

Теперь можно в браузере заходим в наше облако cloud.mydomen.ml. Он будет ругаться на СУБД и пр. — не обращайте внимания, это для данной задачи не критично.


Обязательно зайдите в основные настройки и установите настройку планировщика задач на Cron

Делаем собственное облако. OwnCloud+Let's Encrypt Owncloud, Linux, Centos, Настройка, Nginx, Redis, Инструкция, Длиннопост

Облако настроено, можно пользоваться. Теперь настроим немного безопасности.


Установим и запустим файрволл

yum -y install firewalld
systemctl start firewalld

И откроем порты для необходимых сервисов

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload

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


Добавим файрволл в автозагрузку

systemctl enable firewalld

На этом настрока ownCloud завершена. Консоль putty и менеджер WinSCP нам больше не нужны.


В качестве последнего штриха включим шифрование наших файлов в хранилище. Заходим в настройки (Ищите свой логин в правом верхнем углу окна браузера. Там, в выпадающем меню «Настройки»). В разделе Администрирование открываем пункт «Приложения». Жмём кнопку «Показать отключённые приложения». Находим приложение «Default encryption module» и нажмём рядом с ним кнопку «включить».


Теперь Настройки->Администрирование->Шифрование. Ставим галочку «Включить шифрование на стороне сервера», читаем предупреждение и жмём в конце него «Включить шифрование». Ниже, в появившихся настройках модуля шиврования выбираем «Мастер-ключ» и применяем настройку. Нас попросят перелогинится, сделаем это. Опять идём Настройки->Администрирование->Шифрование и видим надпись

Encryption type: Master Key

Шифрование работает.


Для работы с облаком вам нужен клиент на вашем устройстве. Не рекомендую использовать для повседневного подключения к ownCloud созданную выше (при первом входе) учетную запись администратора. Оставьте её для администрирования. Щелкните по логину администратора в правом верхнем углу и выбирете «Пользователи» в выпадающем списке. В открывшемся окне, слева, добавьте группу для обычных пользователей. Например, назовите её Users. После создания группы в правой части окна, вверху, заполните данные на нового пользователя: логин, пароль (стойкий), группу (выбираем Users). Нажмите «Создать». В таблице добавиться строчка с новым пользователем. Установите ему квоту. Максимум, что вы можете выделить, это общий размер диска вашего VPS минус 3ГБ. Т.е. если у вас диск 100ГБ, в квоту вы можете вписать не более чем 97 GB. Всё, пользуйтесь новой учётной записью.


Клиентские приложения практически под все распространенные операционные системы можно найти здесь.


К сожалению, клиенты для мобильных устройств платные (копейки конечно, но тем не менее). Для Android бесплатный клиент здесь. Но нужно понимать, что он от стороннего разработчика. Для подключения вам понадобятся адрес сервера (в моём случае это https://mycloud.mydomen.ml) и логин-пароль. Настройка подключения элементарная, описывать не буду.


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


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

Показать полностью 21
[моё] Owncloud Linux Centos Настройка Nginx Redis Инструкция Длиннопост
124
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии