Русский
Русский
English
Статистика
Реклама

Ubuntu-server

Быстрый запуск Nextcloud и Onlyoffice на Ubuntu SSL от Letsencrypt

20.06.2021 18:15:44 | Автор: admin

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

Однажды мне понадобилось 1Tb облачного хранилища и выбор пал на Nextcloud, который и было решено развернуть на собственном домашнем сервере

В данной статье я опишу как быстро и безболезненно установить и настроить облако Nextcloud и облачный редактор Onlyoffice

Статья предполагает, что у вас уже установлен и настроен Ubuntu.

Все действия были проверены на Ubuntu Server 20.04

Что будем делать:
1. Установим Nginx, PHP и MariaDB
2. Добавим бесплатный SSL-сертификат Let's Encrypt
3. Развернем NextCloud
4. Произведем тонкие настройки сервера
5. Установим Onlyoffice

Бесплатные доменные имена в домене .tk можно получить на www.freenom.com

Первым делом, устанавливаем вспомогательные утилиты

sudo apt-get install nano mc zip -y

Этот пункт можно пропустить, если настраиваете облако на локальный диск, а не на отдельную машину с доступом по nfs, мне понадобилось сделать это именно на nfs

# Ставим nfs-clientsudo apt install nfs-common -y# -------------------# Монтируем папку nfs# Ставим nginxsudo mkdir -p /nfs/ncsudo mount your_host_ip:/папка_шары_nfs/ /nfs/ncsudo ls -l /nfs/nc/sudo df -hsudo du -sh /nfs/nc/# -------------------# Монтируем nfs при загрузкеsudo nano /etc/fstab# Добавим такую строку в конец файлаyour_host_ip:/папка_шары_nfs/  /nfs/nc  nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

Ставим nginx

sudo apt install nginx -ysudo nginx -Vsudo systemctl enable nginxsudo systemctl start nginx

Ставим php 7.4

sudo apt install php7.4-fpm php7.4-mysql php7.4 php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-common php7.4-xml php7.4-zip php7.4-opcache php-apcu php-imagick -y

Настраиваем php 7.4

sudo nano /etc/php/7.4/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

# Настраиваем php.ini:

sudo nano /etc/php/7.4/fpm/php.ini

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Разрешаем автозапуск php-fpm и перезапускаем его:

sudo systemctl enable php7.4-fpmsudo systemctl restart php7.4-fpm

Устанавливаем MariaDB:

sudo apt install mariadb-serversudo systemctl enable mariadbsudo systemctl start mariadb

Запуск сценария безопасности (здесь можно поменять пароль рута, убрать ненужные разрешения):

sudo mysql_secure_installation

Создаем базу данных для Nextcloud (в примере указан пароль nextcloud, его лучше заменить на свой) :

sudo mysql -u root -p

Вводим пароль рута для MariaDB

 >CREATE DATABASE nextcloud;CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud';GRANT ALL ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'nextcloud' WITH GRANT OPTION;FLUSH PRIVILEGES;EXIT;

Теперь надо создать файл конфигурации Nginx для Nextcloud

sudo nano /etc/nginx/sites-enable/nextcloud.conf

И вставляем в него следующий текст, естественно, заменив nc.myhost.com на свои сервера

server {    listen 80;    server_name nc.myhost.com;    return 301 https://$server_name$request_uri;}server {    listen 443 ssl;    server_name nc.myhost.com;    ssl_certificate /etc/nginx/ssl/cert.pem;    ssl_certificate_key /etc/nginx/ssl/cert.key;    root /var/www/nextcloud;    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;    client_max_body_size 10G;    fastcgi_buffers 64 4K;    rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;    rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;    rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;    index index.php;    error_page 403 = /core/templates/403.php;    error_page 404 = /core/templates/404.php;    location = /robots.txt {      allow all;      log_not_found off;      access_log off;    }    location ~ ^/(data|config|\.ht|db_structure\.xml|README) {        deny all;    }    location / {        rewrite ^/.well-known/host-meta /public.php?service=host-meta last;        rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;        rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;        rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;        rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;        try_files $uri $uri/ index.php;    }    location ~ ^(.+?\.php)(/.*)?$ {        try_files $1 = 404;        include fastcgi_params;        fastcgi_param SCRIPT_FILENAME $document_root$1;        fastcgi_param PATH_INFO $2;        fastcgi_param HTTPS on;        fastcgi_pass unix:/run/php/php7.4-fpm.sock;    }    location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {        expires modified +30d;        access_log off;    }}

Теперь необходимо получить сертификаты для ssl

Устанавливаем Certbot и его плагин для Nginx:

sudo apt install certbot python3-certbot-nginx

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

Сначала с ключом --dry-run проверяем все ли в порядке

sudo certbot certonly --agree-tos --email you@mail -d nc.myhost.com-d www.myhost.com -d zabbix.myhost.com --nginx --dry-run --d

Если все хорошо, то получаем сертификаты

sudo certbot certonly --agree-tos --email почта@администратора -d myhost.com-d nc.myhost.com-d cloud.myhost.com-d zabbix.myhost.com-d www.myhost.com-d mail.myhost.com sudo certbot certonly --agree-tos --email your@mail -d nc.myhost.com-d www.33rus.com -d zabbix.33rus.com --nginx n 

Сертификаты появятся в папке /etc/letsencrypt/live/myhost.com cert.pem chain.pem fullchain.pem privkey.pem

Подключаем сертификаты к сайту

sudo nano /etc/nginx/sites-available/nextcloud.conf

ssl_certificate /etc/letsencrypt/live/myhost.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myhost.com/privkey.pem;

Устанавливаем Nextcloud:

Скачиваем последнюю версию с сайте Nextcloud:

cd /tmp/sudo wget https://download.nextcloud.com/server/releases/nextcloud-21.0.0.zipsudo unzip nextcloud-21.0.0.zipsudo cp -R nextcloud /var/www/nextcloud/cd /var/www/sudo chown -R www-data:www-data nextcloud/sudo chown -R www-data:www-data /nfs/nc

Обратите внимание, в данном случае я использую папку на nfs, вам необходимо использовать папку в соответствии с вашими настройками

Почти все. Заходим на https://nc.myhost.com
Создаем пользователя, пароль, прописываем доступ к каталогу /nfs/nc/
Прописываем созданную ранее базу данных и пароль к ней.

Теперь тонкая настройка Nextcloud и установка Onlyoffice

Ставим Redis и APCu

sudo apt install memcached php-memcached -ysudo apt install php-apcu redis-server php-redis -ysudo nano /var/www/nextcloud/config/config.php

И добавляем следующие строки перед закрывающей скобкой )

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' =>
array (
'host' => '127.0.0.1',
'port' => 6379,
),
'memcache.locking' => '\OC\Memcache\Redis',

Переиндексация файлов (если вдруг вы скопировали файлы в папку nexcloud не через интерфейсы nextcloud, то их надо переиндексировать)

sudo -u www-data php /var/www/nextcloud/occ files:scan --all

Устанавливаем OnlyOffice DocumentServer

Первым делом устанавливаем версию PostgreSQL, включенную в вашу версию Ubuntu:

sudo apt install postgresql -y

После установки PostgreSQL создайте базу данных и пользователя PostgreSQL:

Пользователем и паролем для созданной базы данных должны быть onlyoffice.

sudo -i -u postgres psql -c "CREATE DATABASE onlyoffice;"sudo -i -u postgres psql -c "CREATE USER onlyoffice WITH password 'onlyoffice';"sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"

Установка rabbitmq и nginx-extras:

sudo apt install rabbitmq-server -ysudo apt install nginx-extras -y

Установка ONLYOFFICE Docs

Добавьте GPG-ключ:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5

Добавьте репозиторий ONLYOFFICE Docs:

sudo echo "deb https://download.onlyoffice.com/repo/debian squeeze main" | sudo tee /etc/apt/sources.list.d/onlyoffice.list sudo apt update

Устанавливаем mariadb-client!

sudo apt install mariadb-client -y

Устанавливаем ONLYOFFICE Docs. Не ошибитесь с вводом пароля. Это должен быть onlyoffice

sudo apt install onlyoffice-documentserver -y

Переводим onlyoffice на https

sudo cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.confsudo nano /etc/onlyoffice/documentserver/nginx/ds.conf 

Меняем порт ssl не забыв пробросить его в роутере

listen 0.0.0.0:7443 ssl;
listen [::]:7443 ssl default_server;

Перезапускаем nginx

sudo service nginx restart

Настраиваем cron

sudo crontab -u www-data -e

# Добавляем строчку

*/5 * * * * php -f /var/www/nextcloud/cron.php

Ну, вот и все, останется через веб-интерфейс установить плагин ONLYOFFICE в вашем Nextcloud и прописать сервер https://myhost.com:7443

Подробнее..

Установка и настройка Airflow на Ubuntu Server 20

19.03.2021 16:09:40 | Автор: admin

Первый раз я установил Airflow по туториалам за 1 час. Он отлично открывался с сайта, красиво выглядел, но, к сожалению, не работал.

На дальнейшую переустановку и отладку у меня ушло ещё 10-15 часов.

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

Для начала неочевидный факт: когда начинаешь устанавливать airflow, думаешь что это будет одна программа. На самом деле, всё совсем не так. Это 2 сервиса:

  • airflow-webserver - отвечает за ту часть, которую вы видите в web-интерфейсе

  • airflow-scheduler - отвечает за запуск DAGов и в целом за ETL часть

Соответственно и настраивать их нужно отдельно. Если что-то не работает, проблема может быть только в одном из этих сервисов, а может и в обоих одновременно. Правильная локализация ошибки поможет сократить время отладки вдвое. Чтобы понять, что упало, нужно смотреть их статус:

systemctl status airflow-webserversystemctl status airflow-scheduler

Ещё очень помогает системный лог: /var/log/syslog

Но это будем использовать на этапе отладки, а сначала нам нужно всё установить.

Airflow - система, написанная на питоне. И запускается она тоже на питоне. А по умолчанию на только что созданном сервере ubuntu питона и pip нет - нам нужно их установить.

Установка питона

Я ставил python 3. Ставьте самую актуальную стабильную версию на текущий момент.

Необходимо запустить последовательно:

apt updateapt install software-properties-commonadd-apt-repository ppa:deadsnakes/ppaapt install python3.8

Проверим, что питон установился нормально:

python3 version

Установим pip

apt install python3-pip

Установка Airflow

Перед установкой Airflow очень важно указать домашнюю директорию, куда будем ставить

export AIRFLOW_HOME=~/airflow/

Я работал из-под root, директорию не указал, что привело ко всем последующим проблемам, какие у меня были.

После указания директории, ставим сам Airflow:

pip3 install apache-airflow

Он установит все необходимые пакеты и создаст в указанной директории следующие файлы:

  • airflow-webserver.pid - файл нужен для запуска web-сервера, запомните где он лежит

  • airflow.cfg - настройки Airflow, запомните где он лежит - ещё пригодится

  • airflow.db - SQLite база данных - в дальнейшем перейдём на постгресс и она нам не пригодится.

  • unittests.cfg

  • webserver_config.py

Дальше, перейдём в домашний каталог Airflow с этими файлами и создадим в нём ещё одну директорию:

mkdir dags

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

Путь к папке с дагами можно настроить в файле airflow.cfg параметр dags_folder

Если вы всё сделали правильно - можете запускать веб-сервер и шедулер:

systemctl start airflow-webserversystemctl start airflow-scheduler

И возможно у вас всё будет работать как надо - будет открываться веб-интерфейс по 8080 порту ip вашего сервера.

Тогда вам останется только настроить подключение к нормальной БД, где у вас будут храниться пользователи и настройки, например к postgress:

Установка PostgresSQL и настройка подключения к Airflow

Установим PostgreSQL:

apt-get install postgresql

По умолчанию доступ к СУБД имеет пользовательpostgres. Заходим под ним:

sudo -u postgres psql

Создадим базу данных и пользователя к ней для Airflow:

postgres=# create database airflow_metadata;postgres=# CREATE USER airflow WITH password 'password';postgres=# grant all privileges on database airflow_metadata to airflow;

После этого необходимо настроить подключение Airflow к БД:

Окткрываем файл airflow.cfg

правим значение параметраsql_alchemy_connнаpostgresql+psycopg2://airflow:password@localhost/airflow_metadata

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

pip3 install psycopg2-binary

Инициализируем новую базу данных:

airflow initdb

Если в процессе на каком-то этапе не будут применяться изменения - перезапускайте сервисы:

systemctl restart airflow-webserversystemctl restart airflow-scheduler

После чего необходимо создать пользователя Airflow, с которого будем логиниться через web-интерфейс:

airflow users create --username AirflowAdmin --firstname name1 --lastname name2 --role Admin --email airflow@airflow.com

После чего терминал попросит ввести пароль для этого пользователя.

Отладка - та часть, которую не найдёшь в туториалах

Когда я устанавливал airflow и не указал домашнюю директорию, он всё поставил в home директорию пользователя root, что привело к дальнейшим большим проблемам - не делайте так.

Если же вы так сделали - создайте папку с нормальными правами доступа в корне и перенесите туда папку airflow.

Я пытался сначала настроить чтобы всё работало из root - даже выдал всем пользователям полный доступ до папок airflow - но видимо сыграло роль, что это был root пользователь - сервис всё-равно не мог получить доступа до нужных файлов и ругался мне в лог.

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

grep root ./*

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

Для настроек перейдите в папку /usr/lib/systemd/system и отредактируйте фалы таким образом, чтобы они были максимально похожи на следующие:

airflow-webserver.service

[Unit]

Description=Airflow webserver daemon

After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service

Wants=postgresql.service mysql.service redis.service rabbitmq-server.service


[Service]

EnvironmentFile=/etc/sysconfig/airflow

User=airflow

Group=airflow

Type=simple

ExecStart=/usr/local/bin/airflow webserver --pid /airflow/airflow-webserver.pid

Restart=on-failure

RestartSec=5s

PrivateTmp=true


[Install]

WantedBy=multi-user.target

--pid /airflow/airflow-webserver.pid должен указывать туда, где у вас лежит файл airflow-webserver.pid - мы его указывали выше в статье.

airflow-scheduler.service

[Unit]

Description=Airflow scheduler daemon

After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service

Wants=postgresql.service mysql.service redis.service rabbitmq-server.service


[Service]

EnvironmentFile=/etc/sysconfig/airflow

User=airflow

Group=airflow

Type=simple

ExecStart=/usr/local/bin/airflow scheduler

Restart=always

RestartSec=10s


[Install]

WantedBy=multi-user.target

Что ещё может потребоваться настроить:

Перейти по в папку /etc/sysconfig/ и там отредактировать файл airflow - указать в нём правильный путь AIRFLOW_CONFIG и AIRFLOW_HOME

После чего необходимо обновить и перезапустить сервисы:

daemon-reloadsystemctl restart airflow-schedulersystemctl restart airflow-webserver

И последняя проблема: после создания пользователя пытался зайти в Airflow. Говорит "login failed".

Сначала я думал, что не создался пользователь - несколько раз его пересоздавал, проверял в БД - пользователь на месте, а с интерфейса не заходит.

Читаем логи (/var/log/syslog):

Видим, что веб сервер одновременно запущен и работает, и при этом постоянно пытается запуститься ещё раз.

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

systemctl status airflow-webserver

airflow-webserver.service - Airflow webserver daemon

Loaded: loaded (/lib/systemd/system/airflow-webserver.service; enabled; vendor preset: enabled)

Active: activating (auto-restart) (Result: exit-code) since Tue 2021-03-16 18:00:03 MSK; 2s ago

Process: 761523 ExecStart=/usr/local/bin/airflow webserver --pid /run/airflow/webserver.pid (code=exited, status=1/FAILURE)

Main PID: 761523 (code=exited, status=1/FAILURE)

Mar 16 18:00:03 digitalberd systemd[1]: airflow-webserver.service: Main process exited, code=exited, status=1/FAILURE

Mar 16 18:00:03 digitalberd systemd[1]: airflow-webserver.service: Failed with result 'exit-code'.

При всём при этом на сайте по 8080 порту Airflow отлично работает, только залогиниться не даёт.

Самое удивительное было, когда я его остановил принудительно: systemctl stop airflow-webserver: статус у него был, что он остановлен, но на сайте по 8080 порту он отлично показывал веб-интерфейс.

В чём же было дело и как удалось решить эту проблему? Посмотрим, что работает по этому порту:

lsof -i tcp:8080

выяснилось, что после остановки airflow-webserver остался запущенным gunicorn, который занимал 8080 порт и отрисовывал интерфейс.

После того как убил его по ID и перезапустил веб-сервер, всё наконец заработало нормально.

Вроде всё. Если что-то забыл или возникли ещё проблемы при установке - пишите, добавлю в статью.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru