Установка Wekan Open-Source kanban (аналог Trello)
Установка Wekan вручную
Установка Ubuntu
Для начала установим чистую Ubuntu на сервер. Для этого я взял установочный образ ubuntu-18.04.1.0-live-server-amd64.
После подключаемся к серверу через Putty или через CMD
ssh root@IP_адрес_сервера
Обновляем пакеты системы до актуального состояния
sudo apt update sudo apt upgrade
Установка Nodejs
Wekan использует библиотеки nodejs. Мы не будем использовать репозиторий убунты а установим NVM (Node Version Manager).
Прежде чем мы приступим к установке nodejs, создадим пользователя wekan в системе.
useradd -m -s /bin/bash wekan passwd wekan
Логинимся под новым пользователем и качаем установочный скрипт
su - wekan curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
Команда установит nvm под пользователем 'itlocate' и добавит новую конфигурацию в файл конфигурации '.bashrc'.
source ~/.bashrc
Теперь протестируем с помощью команды nvm, как показано ниже
command -v nvm nvm --version
Вы увидите, что у вас установлен nvm '0.33.8'. Теперь установим nodejs 4.8 с помощью NVM.
nvm install v4.8 nvm use node
Проверяем версию
node -v
Установка и настройка БД MongoDB
Обратно логинимся под пользователем с рут правами которого вы создали при установке системы
su - username
Для работы Wekan необходима MongoDB 3.2.x. Сейчас мы её и установим, добавляем репозиторий.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
Теперь устанавливаем
sudo apt update sudo apt install -y mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools
После установки прописываем службу, для автоматического старта mongo при загрузке системы
sudo systemctl start mongod sudo systemctl enable mongod
Теперь необходимо её настроить. Логинимся в mongo.
mongo
Создаём нового пользователя admin с полными правами
db.createUser( { user: "admin", pwd: "Password", roles: [ { role: "root", db: "admin" } ] } )
Выходим из приложения
exit
Теперь админа мы создали. Для включения аутентификации нам необходимо отредактировать файл /etc/mongod.conf.
vim /etc/mongod.conf
Ищем и раскомментируем строку security
security: authorization: enabled
Сохраняемся и выходим. ESC потом :wq и Enter. Теперь нужно перезапустить службу MongoDB
systemctl restart mongod
Теперь нужно создать базы данных для Wekan. Назовём базу wekan, пользователя wekan с паролем WekanPassword. Логинимся под админом.
mongo -u admin -p
И выполняем запрос
use wekan db.createUser( { user: "wekan", pwd: "WekanPassword", roles: ["readWrite"] } )
Установка Wekan
Логинимся под пользователем wekan и скачиваем архив для установки.
su - wekan wget https://github.com/wekan/wekan/releases/download/v0.63/wekan-0.63.tar.gz tar xf wekan-0.63.tar.gz
У нас появится новая директория bundle. Перейдём в каталог и установим все зависимости Wekan.
cd bundle/programs/server npm install
Теперь мы попробуем запустить Wekan. Осталось настроить переменные для приложения Wekan.
export MONGO_URL='mongodb://wekan:WekanPassword@127.0.0.1:27017/wekan?authSource=wekan' export ROOT_URL='http://192.168.1.57/' export MAIL_URL='smtp://user:pass@mail.domain.co:25/' export MAIL_FROM='wekan@domain.co' export PORT=8000
Теперь идём в каталог bundle и запускаем приложение Node.js
cd ~/bundle node main.js
Теперь сервер запущен на 8000 порту. Открываем браузер и вводим туда: http://192.168.1.57:8000
Настройка Wekan
Сервер Wekan работает, теперь нам нужно создать службу в systemd
su - wekan cd bundle/ vim .env
Скопируйте туда следующую конфигурацию
MONGO_URL='mongodb://wekan:WekanPassword@127.0.0.1:27017/wekan?authSource=wekan' ROOT_URL='http://wekan.itlocate.ru' MAIL_URL='smtp://user:pass@mail.domain.co:25/' MAIL_FROM='wekan@domain.co' PORT=8000 HTTP_FORWARDED_COUNT=1
Сохраните и выйдите. Теперь создадим службу wekan.service. Её нужно создать от пользователя root.
cd /etc/systemd/system/ vim wekan.service
Скопируйте это
[Unit] Description=Wekan Server After=syslog.target After=network.target [Service] Type=simple Restart=on-failure StartLimitInterval=86400 StartLimitBurst=5 RestartSec=10 ExecStart=/home/wekan/.nvm/versions/node/v4.8.7/bin/node bundle/main.js EnvironmentFile=/home/wekan/bundle/.env ExecReload=/bin/kill -USR1 $MAINPID RestartSec=10 User=wekan Group=wekan WorkingDirectory=/home/wekan StandardOutput=syslog StandardError=syslog SyslogIdentifier=Wekan [Install] WantedBy=multi-user.target
Сохраните и выйдите. Теперь создадим службу wekan.service.
Перезапустим systemd следующей командой
systemctl daemon-reload
прописываем службу, для автоматического старта mongo при загрузке системы
systemctl start wekan systemctl enable wekan
Теперь проверьте сервис Wekan, используя команды ниже
netstat -plntu systemctl status wekan
Установим Nginx в качестве прокси для Wekan
Устанавливаем
sudo apt install nginx -y
После установки открываем директорию /etc/nginx/sites-available' и создаём новый виртуальный хост wekan.
cd /etc/nginx/sites-available vim wekan
Копируем туда
# this section is needed to proxy web-socket connections map $http_upgrade $connection_upgrade { default upgrade; '' close; } # HTTP server { listen 80; # if this is not a default server, remove "default_server" listen [::]:80 ipv6only=on; server_name wekan.itlocate.ru; # redirect non-SSL to SSL location / { rewrite ^ https://wekan.itlocate.ru$request_uri? permanent; } } # HTTPS server server { listen 443 ssl http2; # we enable HTTP/2 here (previously SPDY) server_name wekan.itlocate.ru; # this domain must match Common Name (CN) in the SSL certificate ssl_certificate /etc/letsencrypt/live/wekan.itlocate.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wekan.itlocate.ru/privkey.pem; # If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update # This works because IE 11 does not present itself as MSIE anymore if ($http_user_agent ~ "MSIE" ) { return 303 https://browser-update.org/update.html; } # Pass requests to Wekan. # If you have Wekan at https://wekan.itlocate.ru/wekan , change location to: # location /wekan { location / { # proxy_pass http://127.0.0.1:8000/wekan; proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; # allow websockets proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP # this setting allows the browser to cache the application in a way compatible with Meteor # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days) # the root path (/) MUST NOT be cached #if ($uri != '/wekan') { # expires 30d; #} } }
Ещё необходимо немного подправить nginx.conf
vim /etc/nginx/nginx.conf
Заменяем содержимое на следующее
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## ## Max attachment size that can be uploaded to Wekan: client_max_body_size 100M; sendfile on; tcp_nopush on; tcp_nodelay on; types_hash_max_size 2048; server_tokens off; set_real_ip_from 0.0.0.0/32; # All addresses get a real IP. real_ip_header X-Forwarded-For; limit_conn_zone $binary_remote_addr zone=arbeit:10m; client_body_timeout 60; client_header_timeout 60; keepalive_timeout 10 10; send_timeout 60; reset_timedout_connection on; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1.2 TLSv1.1 TLSv1; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:30m; ssl_session_timeout 1d; ssl_ciphers ECDH+aRSA+AESGCM:ECDH+aRSA+SHA384:ECDH+aRSA+SHA256:ECDH:EDH+CAMELLIA:EDH+aRSA:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA; ssl_dhparam /etc/ssl/dh_param.pem; ssl_ecdh_curve secp384r1; ssl_stapling on; ssl_stapling_verify on; add_header X-XSS-Protection '1; mode=block'; add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security 'max-age=31536000'; add_header X-Content-Options nosniff; add_header X-Micro-Cache $upstream_cache_status; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_buffers 16 8k; gzip_comp_level 1; gzip_http_version 1.1; gzip_min_length 10; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/x-icon application/vnd.ms-fontobject font/opentype application/x-font-ttf; gzip_vary on; gzip_proxied any; # Compression for all requests. ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Сохраните и выйдите. Теперь перезапустим службу nginx.
systemctl restart nginx systemctl enable nginx
Проверяем что 80 порт открыт на nginx
netstat -plntu
На этом с nginx закончим.
Проверяем
Внимание! В Wekan пользователей по умолчанию нету. После установки его необходимо создать через терминал. Как это сделать, читайте ниже!
Переходим по адресу http://wekan.itlocate.ru. Жмём на регистрацию, заполняем форму и жмём зарегистрировать. И скорее всего у вас ничего не выйдет) Потому что мы активируем первого пользователя из терминала! Пароль от wekan: WekanPassword
mongo -u wekan -p --authenticationDatabase "wekan"
Выполните следующий запрос
use wekan db.users.update({username:'itlocate'},{$set:{isAdmin:true}})
Заново пробуем зайти
Поздравляю! У вас получилось! =)
Установка Snap пакетом
Во время установки Ubuntu
А можно прямо во время установки системы выбрать snap пакет wekan
На установленную систему Ubuntu
Вот список команд для убунты:
sudo apt install snapd sudo snap install wekan sudo snap set wekan root-url="http://wekan.itlocate.ru/" sudo snap set wekan port="8000" sudo systemctl restart snap.wekan.mongodb sudo systemctl restart snap.wekan.wekan
Файл сервиса wekan лежит тут: /etc/systemd/system/snap.wekan.wekan.service. Проверить статус сервиса можно командой ниж:
systemctl status snap.wekan.wekan
В дополнение к работе с snap пактом Wekan рассмотрим ещё несколько команд:
Используйте следующую команду для включения сервиса wekan при загрузке системы.
sudo snap enable wekan
Используйте следующую команду для отключения запуска сервиса wekan при загрузке системы.
sudo snap disable wekan
MongoDB сервис порт также может быть изменён на любой другой:
sudo snap set wekan mongodb-port=27019
Для изменения порта можно использовать MongoDB CLI. (но для этого нужен пакет MongoDB 3.2.x tools):
mongo --port 27019
Если вы внесли какие-либо изменения в сервис wekan вам потребуется перезапук. Это можно сделать следующей командой:
sudo systemctl restart snap.wekan.wekan
Автоматически установить snap обновления можно следующей командой, где 01:00-03:00 это промежуток времени между часом ночи и тремя часами ночи:
snap set core refresh.schedule=01:00-03:00
Автоматические обновления сервер получает когда выходит новый релиз wekan, по расписанию или в процессе выполнения команды:
sudo snap refresh
Также можно дополнительно настроить почтовые уведомления
sudo snap set wekan mail-url='smtps://user:pass@mailserver.example.com:453' sudo snap set wekan mail-from='Wekan Boards <wekan@example.com>'
Рекомендованные настроеки Nginx configuration,/etc/nginx/nginx.conf
user nginx; worker_processes auto; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; types_hash_max_size 2048; server_tokens off; set_real_ip_from 0.0.0.0/32; # All addresses get a real IP. real_ip_header X-Forwarded-For; limit_conn_zone $binary_remote_addr zone=arbeit:10m; client_body_timeout 60; client_header_timeout 60; keepalive_timeout 10 10; send_timeout 60; reset_timedout_connection on; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1.2 TLSv1.1 TLSv1; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:30m; ssl_session_timeout 1d; ssl_ciphers ECDH+aRSA+AESGCM:ECDH+aRSA+SHA384:ECDH+aRSA+SHA256:ECDH:EDH+CAMELLIA:EDH+aRSA:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA; ssl_ecdh_curve secp384r1; ssl_stapling on; ssl_stapling_verify on; add_header X-XSS-Protection '1; mode=block'; add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security 'max-age=31536000'; add_header X-Content-Options nosniff; add_header X-Micro-Cache $upstream_cache_status; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_buffers 16 8k; gzip_comp_level 1; gzip_http_version 1.1; gzip_min_length 10; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/x-icon application/vnd.ms-fontobject font/opentype application/x-font-ttf; gzip_vary on; gzip_proxied any; # Compression for all requests. ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
Создание Nginx файла Virtual Host для Wekan на HTTP протоколе. Откройте конфигурационный файл
sudo nano /etc/nginx/conf.d/wekan.conf
И добавьте туда следующее содержимое:
# This section is needed to proxy web-socket connections map $http_upgrade $connection_upgrade { default upgrade; '' close; } # HTTP server { listen 80; server_name wekan.example.com; # If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update # This works because IE 11 does not present itself as MSIE anymore if ($http_user_agent ~ "MSIE" ) { return 303 https://browser-update.org/update.html; } # Pass requests to Wekan. # If you have Wekan at https://example.com/wekan, change the location to: # location /wekan { location / { proxy_pass http://127.0.0.1:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; # allow websockets proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP # this setting allows the browser to cache the application in a way compatible with Meteor # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days) # the root path (/) MUST NOT be cached #if ($uri != '/wekan') { # expires 30d; #} } }
Установка SSL сертификата Let's Encrypt для Wekan
Если вы хотите использовать Wekan с SSL сертификатом, то читайте ниже что необходимо сделать. Будем использовать Let's Encrypt для защиты доступа к панели мониторинга Wekan, так как это бесплатный сертификат и его легко получить. Чтобы certbot смог создать сертификат SSL, вам нужен открытый порт 80, который не используется ни одной веб-службой. Если у вас работает брандмауэр UFW, откройте порт с помощью:
sudo ufw allow proto tcp from any to any port 80,443
Мы запросим сертификат с помощью certbot-auto. Поставщик сертификата запросит действующий адрес электронной почты (туда будут приходить уведомлений об истечении срока действия сертификата и действующего домена, используемый Wekan.
wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto mv certbot-auto /usr/local/bin export DOMAIN="wekan.example.com" export EMAIL="wekan-mail@example.com" certbot-auto certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $EMAIL --keep-until-expiring
Ок, теперь сконфигурируем Nginx. Откроем:
sudo vim /etc/nginx/conf.d/wekan.conf
И вставим туда содержимое ниже:
# this section is needed to proxy web-socket connections map $http_upgrade $connection_upgrade { default upgrade; '' close; } # HTTP server { listen 80; server_name example.com; # redirect non-SSL to SSL location / { rewrite ^ https://example.com$request_uri? permanent; } } # HTTPS server server { listen 443 ssl http2; # we enable HTTP/2 here (previously SPDY) server_name example.com; # this domain must match Common Name (CN) in the SSL certificate ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update # This works because IE 11 does not present itself as MSIE anymore if ($http_user_agent ~ "MSIE" ) { return 303 https://browser-update.org/update.html; } # Pass requests to Wekan. # If you have Wekan at https://example.com/wekan , change location to: # location /wekan { location / { proxy_pass http://127.0.0.1:3001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; # allow websockets proxy_set_header Connection $connection_upgrade; proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP # this setting allows the browser to cache the application in a way compatible with Meteor # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days) # the root path (/) MUST NOT be cached #if ($uri != '/wekan') { # expires 30d; #} } }
Включим автозапуск сервиса при старте системы с wekan:
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 sudo systemctl enable nginx
Теперь нужно перейти по URL или на IP адрес вашего сервера через браузер и создать аккаунт администратора. Так как первый пользователь, который будет зарегистрирован в Wekan автоматом получает права админа. Вот так! И да, если у вас будет ошибка на счёт email адреса, то просто проигнорируйте это, ведь email не обязательный параметр и без него wekan прекрасно работает. Все последующие пользователи будут регистрироваться с обычными правами. Если вы хотите отключить открытыю регистрацию пользователей, то эту настройку вы можете найти dmin Panel / Settings / Registration / Disable self-registration
Спасибо что дочитали эту ну уж очень большую простыню из конфигов и прочей ерунды! Хочу в ближайшем времени сделать обзорчик этой системы, возможно запилить видос, так что жмакай на RSS в верхнем правом углу сайта дабы не пропустить сиё чудо цифровой революции просторов интернета!