Как установить вики-базу знаний Outline на Ubuntu с помощью Docker
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker
- Шаг 3. Установите Docker Compose
- Шаг 4. Создание файла среды для Docker
- Настройка аутентификации Slack
- Настройка интеграции Slack
- Создание учетных данных S3
- Создание секретных ключей
- Создание и редактирование файла среды
Outline — это программное обеспечение для совместной работы с базой знаний с открытым исходным кодом. Вы можете использовать его для размещения документации и фан-страниц или даже использовать его для обмена заметками. Он включает в себя редактор уценки и интегрируется с несколькими сервисами, такими как Slack, Figma, Airtable, Google Docs, Trello, Zapier, Codepen, Spotify, Youtube и т. д. Он имеет функции безопасности, такие как группы пользователей с отдельными разрешениями на чтение и запись, позволяет публичный обмен и имеет поддержку RTL с переводами на 13 языков. Он построен с использованием React и Node.js. Существует два способа использования Outline. Одна из них — это облачная версия, или вы можете разместить ее на своем сервере.
В этом руководстве вы узнаете, как установить Outline Wiki на сервер под управлением Ubuntu с помощью Docker.
Предпосылки
-
A server running Ubuntu 20.04 with a minimum of 1GB of RAM.
-
A non-root user with sudo privileges.
-
A domain name pointing to the server. We will use
https://outline.example.com
for our tutorial. -
Few essential apps to get started.
$ sudo apt install nano curl wget unzip gnupg
Шаг 1. Настройте брандмауэр
Первым шагом является настройка брандмауэра. Ubuntu по умолчанию поставляется с ufw (простой брандмауэр).
Проверьте, работает ли брандмауэр.
$ sudo ufw status
Вы должны получить следующий вывод.
Status: inactive
Разрешить порт SSH, чтобы брандмауэр не прерывал текущее соединение при его включении.
$ sudo ufw allow OpenSSH
Разрешить также порты HTTP и HTTPS.
$ sudo ufw allow 80 $ sudo ufw allow 443
Включите брандмауэр.
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Еще раз проверьте состояние брандмауэра.
$ sudo ufw status
Вы должны увидеть аналогичный вывод.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80 ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
Шаг 2 — Установите Докер
Нам нужно будет установить Docker, используя его официальный репозиторий. Добавьте официальный GPG-ключ Dockers.
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Добавьте репозиторий Docker в систему.
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновите список репозиториев APT и установите Docker.
$ sudo apt update $ sudo apt install docker-ce
Убедитесь, что механизм Docker установлен правильно.
$ docker --version Docker version 20.10.14, build a224086
Выполните следующие команды, чтобы вам не нужно было использовать sudo для запуска команд Docker.
$ sudo usermod -aG docker ${USER} $ su - ${USER}
Шаг 3 — Установите Docker Compose
Выполните следующую команду, чтобы установить Docker compose. Недавно Docker Compose был обновлен до версии 2.0, в которой было внесено множество критических изменений. Мы будем использовать последнюю версию 1.x, доступную на странице релизов Github.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Примените разрешение исполняемого файла к бинарному файлу Docker compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Убедитесь, что Docker Compose установлен правильно.
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
Установить завершение команд для Docker compose.
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose $ source ~/.bashrc
На этом раздел руководства по установке Docker и Docker compose завершен.
Шаг 4 — Создайте файл среды для Docker
Настройка Slack-аутентификации
Outline требует, чтобы вы настроили поставщика проверки подлинности. В нашем руководстве мы настроим вход на основе Slack.
Войдите в свою учетную запись Slack и посетите страницу приложений Slacks API.
Нажмите кнопку «Создать приложение», чтобы продолжить. Нажмите на ссылку From Scratch, чтобы создать приложение.
Выберите имя для своего приложения и выберите рабочую область, в которой вы хотите, чтобы ваше приложение отображалось. Если вы не хотите связывать свое приложение с существующей рабочей областью, вы можете создать еще одну и вернуться к этому шагу.
Нажмите кнопку «Создать приложение», когда закончите. Затем прокрутите вниз до нижней части страницы и дайте вашему приложению описание, значок и цвет фона.
Нажмите кнопку «Сохранить изменения», когда закончите. Выберите параметр OAuth и разрешения на левой боковой панели.
Добавьте URL-адрес перенаправления
https://outline.example.com/auth/slack.callback
в соответствующее поле и нажмите кнопку «Добавить».Нажмите кнопку Сохранить URL-адреса, чтобы продолжить. Прокрутите страницу вниз до раздела User Token Scopes и выберите следующие области в раскрывающемся меню.
identity.avatar
identity.basic
identity.email
identity.team
Вернитесь на страницу основной информации с левой боковой панели. Скопируйте значения Client ID и Client Secret из соответствующих полей в разделе App Credentials.
Настройка интеграции Slack
Посетите опцию Slash Commands на левой боковой панели.
Нажмите кнопку «Новая команда» на появившейся странице. Введите
/outline
в качестве команды. Введитеhttps://outline.example.com/api/hooks.slack
в качестве URL-адреса запроса. Введите описание для вашей команды и слово в качестве подсказки. Нажмите кнопку Сохранить внизу, когда закончите.Откройте меню «Функции» >> «Интерактивность и ярлыки» на левой боковой панели. Включите интерактивность, переключив переключатель и вставив
https://outline.example.com/api/hooks.interactive
в качестве URL-адреса запроса. Нажмите кнопку Сохранить изменения, чтобы закончить.Откройте страницу «Настройки» >> «Установить приложение» на левой боковой панели и нажмите кнопку «Установить в WorkSpace», чтобы установить приложение для рабочей области Slack.
Посетите страницу «Основная информация» на левой боковой панели и скопируйте значения идентификатора приложения и токена подтверждения для слабой интеграции приложения.
Создайте учетные данные S3
Создайте корзину S3 для своей установки Outline на AWS или любом сервисе, совместимом с S3. После создания корзины добавьте следующую политику JSON для настройки совместного использования ресурсов между источниками (CORS). Замените значение
AllowedOrigins
своим URL-адресом Outline.[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "PUT", "POST" ], "AllowedOrigins": [ "https://docs.mycompany.com" ], "ExposeHeaders": [] }, { "AllowedHeaders": [], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [] } ]
Создайте пользователя IAM со следующей политикой. Замените
my-bucket-name
на фактическое имя вашей корзины Outline S3.{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:GetObjectAcl", "s3:DeleteObject", "s3:PutObject", "s3:GetObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::my-bucket-name/*" } ] }
Теперь, когда вы создали своего пользователя IAM, сгенерируйте ключ доступа и секрет для своего пользователя корзины.
Создать секретные ключи
Для файла среды требуется секретный ключ и секрет утилиты. Выполните следующую команду дважды, чтобы сгенерировать оба ключа.
$ openssl rand -hex 32
Скопируйте и сохраните эти значения.
Создайте и отредактируйте файл среды
Создайте каталог для настроек Docker для Outline.
$ mkdir ~/outline
Перейдите в каталог.
$ cd ~/outline
Создайте файл
docker.env
и откройте его для редактирования. В этом файле будут храниться все переменные среды, необходимые для установки.$ nano docker.env
Вставьте в него следующий код. Введите секретный ключ и используйте секрет, созданный ранее. Скопируйте учетные данные Slack, созданные ранее для аутентификации и интеграции приложений. Введите свои учетные данные Amazon S3, как указано ниже.
Если вы хотите использовать Google Analytics для отслеживания статистики вашего приложения Outline, введите свой идентификатор Analytics в поле ниже. На данный момент Outline не поддерживает теги GA4, поэтому вам придется ввести свой старый идентификатор отслеживания.
Для переменной
WEB_CONCURRENCY
разделите оперативную память вашей системы на 512 и введите приблизительное значение. Для переменнойFORCE_HTTPS
установлено значение false, поскольку мы используем Nginx в качестве прокси-сервера.# –––––––––––––––– REQUIRED –––––––––––––––– SECRET_KEY=generate_a_new_key UTILS_SECRET=generate_a_new_key POSTGRES_USER=outlinepg POSTGRES_PASSWORD=yourpassword POSTGRES_DB=outline DATABASE_URL=postgres://outlinepg::5432/outline DATABASE_URL_TEST=postgres://outlinepg::5432/outline-test PGSSLMODE=disable REDIS_URL=redis://localhost:6379 URL=https://docs.example.com PORT=3000 AWS_ACCESS_KEY_ID=get_a_key_from_aws AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key AWS_REGION=us-east-2 AWS_S3_UPLOAD_BUCKET_URL=https://my-bucket-name.s3.us-east-2.amazonaws.com AWS_S3_UPLOAD_BUCKET_NAME=my-bucket-name AWS_S3_UPLOAD_MAX_SIZE=26214400 AWS_S3_FORCE_PATH_STYLE=true # –––––––––––––– AUTHENTICATION –––––––––––––– SLACK_KEY=<slackclientid> SLACK_SECRET=<slackclientsecret> # –––––––––––––––– OPTIONAL –––––––––––––––– GOOGLE_ANALYTICS_ID=UA-XXXXXXX-1 SLACK_VERIFICATION_TOKEN=your_token SLACK_APP_ID=A0XXXXXXX SLACK_MESSAGE_ACTIONS=true FORCE_HTTPS=false ENABLE_UPDATES=true WEB_CONCURRENCY=2
Приведенный выше файл основан на образце файла из репозитория Outlines Github. Если вам нужно настроить какие-либо дополнительные параметры, вы можете скопировать их из него в свой файл.
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Шаг 5. Создайте файл Docker Compose для Outline
Создайте файл
docker-compose.yml
и откройте его для редактирования.$ nano docker-compose.yml
Вставьте в него следующий код.
version: "3" services: outline: image: outlinewiki/outline:latest restart: always command: sh -c "yarn sequelize:migrate --env=production-ssl-disabled && yarn start --env=production-ssl-disabled" env_file: ./docker.env ports: - "3000:3000" depends_on: - postgres - redis redis: image: redis restart: always env_file: ./docker.env ports: - "6379:6379" volumes: - ./redis.conf:/redis.conf command: ["redis-server", "/redis.conf"] postgres: image: postgres restart: always env_file: ./docker.env ports: - "5432:5432" volumes: - database-data:/var/lib/postgresql/data volumes: database-data:
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Шаг 6 — Установите план
Установите Outline, запустив контейнеры.
$ docker-compose up -d
Проверьте состояние контейнеров.
$ docker ps
Шаг 7 — Установите SSL
Чтобы установить SSL-сертификат с помощью Lets Encrypt, нам нужно загрузить инструмент Certbot. Для этого мы будем использовать установщик пакета Snapd.
Установите установщик снапа.
$ sudo apt install snapd
Убедитесь, что ваша версия Snapd обновлена.
$ sudo snap install core && sudo snap refresh core
Установите Сертбот.
$ sudo snap install --classic certbot
Используйте следующую команду, чтобы убедиться, что команду Certbot можно запустить, создав символическую ссылку на каталог
/usr/bin
.$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Создайте SSL-сертификат.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d outline.example.com
Приведенная выше команда загрузит сертификат в каталог
/etc/letsencrypt/live/outline.example.com
на вашем сервере.Создайте групповой сертификат Диффи-Хеллмана.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Создайте корневой каталог вызова для автоматического обновления Lets Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Создайте задание Cron для обновления SSL. Он будет запускаться каждый день, чтобы проверять сертификат и при необходимости обновлять его. Для этого сначала создайте файл
/etc/cron.daily/certbot-renew
и откройте его для редактирования.$ sudo nano /etc/cron.daily/certbot-renew
Вставьте следующий код.
#!/bin/sh certbot renew --cert-name outline.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Измените права доступа к файлу задачи, чтобы сделать его исполняемым.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Шаг 8 — Установите Nginx
Ubuntu поставляется с более старой версией Nginx. Вам необходимо скачать официальный репозиторий Nginx, чтобы установить последнюю версию.
Импортировать ключ подписи Nginxs.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Добавьте репозиторий для стабильной версии Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Обновите системные репозитории.
$ sudo apt update
Установите Нгинкс.
$ sudo apt install nginx
Проверьте установку.
$ nginx -v nginx version: nginx/1.20.2
Включите службу Nginx.
$ sudo systemctl enable nginx
Шаг 9 — Настройте Nginx
До сих пор Shlink работал в локальной системе через порт 8080. Мы будем использовать Nginx в качестве обратного прокси-сервера для работы в его домене.
Создайте файл конфигурации для сервера Shlink в каталоге
/etc/nginx/conf.d
.$ sudo nano /etc/nginx/conf.d/outline.conf
Вставьте в него следующий код.
server { server_name outline.example.com; listen 443 ssl http2; listen [::]:443 ssl http2; access_log /var/log/nginx/outline.access.log; error_log /var/log/nginx/outline.error.log; ssl_certificate /etc/letsencrypt/live/outline.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/outline.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/outline.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://localhost:3000; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; } } ## HTTPS Redirect server { listen 80; listen [::]:80; server_name outline.example.com; return 301 https://$host$request_uri; }
Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Откройте файл
/etc/nginx/nginx.conf
для редактирования.$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой
include /etc/nginx/conf.d/*.conf;
.server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса. Проверьте Nginx еще раз.
Проверьте синтаксис файла конфигурации Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Запустите сервер Nginx.
$ sudo systemctl start nginx
Шаг 10. Доступ к схеме
Запустите домен
https://outline.example.com
в своем браузере, и вы увидите следующую страницу.Нажмите кнопку «Продолжить со Slack», чтобы войти в Slack и подключить свое рабочее пространство.
После входа откроется домашняя страница Outline, и вы сможете начать над ней работать.
Приложение Outline для Slack позволяет искать и вставлять ссылку на любой документ из рабочей области. Для этого откройте рабочее пространство Slack, введите
/outline
в сообщениях и разместите их.Он автоматически найдет документ, связанный с поисковым запросом, и опубликует его в ваших сообщениях.
Шаг 11 — Обновить контур
Чтобы обновить вики Outline, выполните следующие команды. Первая команда завершает работу и удаляет контейнеры. Второй извлекает последнюю версию образов Docker для Outline и других инструментов. Вы можете запустить те же команды, если вам нужно внести какие-либо изменения в файл компоновки Docker или файл среды.
$ docker-compose down --remove-orphans $ docker-compose pull
Выполните следующую команду, чтобы обновить базу данных.
$ docker-compose run --rm outline yarn db:migrate --env=production-ssl-disabled
Запустите новый контейнер со свежими образами, сохранив при этом свои данные.
$ docker-compose up -d
Заключение
На этом мы завершаем наше руководство по установке Outline Knowledgebase Wiki на сервер Ubuntu 20.04 с помощью Docker. Если вы хотите узнать больше о Outline, вы можете ознакомиться с его официальной документацией. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.