Ubuntu 16.04에 Wekan (Open Source Kanban)을 설치하는 방법

Wekan은 Meteor JavaScript 프레임 워크로 구축 된 칸반 보드입니다. 거의 동일한 기능을 제공하는 Trello의 오픈 소스 및 자체 호스팅 대안으로 간주됩니다. 카드 기반의 "할 일"관리 목록을 만들 수 있습니다. Wekan은 협업 환경에서 작업 할 때 생산성을 높이는 데 매우 도움이됩니다. Wekan은 반응이 빠른 웹 인터페이스를 가지고 있으며 많은 언어로 활발하게 번역되어 있습니다.

전제 조건

이 자습서에서는 wekan.example.comVultr 인스턴스를 가리키는 도메인 이름으로 사용 합니다. 도메인 이름 예를 모두 실제 이름으로 바꾸십시오.

Ubuntu 16.04 업데이트 방법 안내서를 사용하여 기본 시스템을 업데이트하십시오 . 시스템이 업데이트되면 종속성 설치를 진행하십시오.

Node.js 설치

Wekan 만 지원합니다 Node.js LTS version 4.8. Node.js를 설치하기 위해 노드 버전 관리자를 사용합니다. 설치 nvm관리자 스크립트를 실행하여 설치하십시오.

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash

즉시 사용을 시작하려면 nvm이것을 실행하십시오.

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

nvm성공적으로 설치 되면 버전을 확인할 수 있습니다.

user@vultr:~$ nvm --version
0.33.4

Node.js를 설치하십시오.

nvm install v4.8

Node.js의 기본 버전을 설정하십시오.

nvm use node

Node.js가 성공적으로 설치되면 버전을 확인할 수 있습니다.

node -v

이 출력이 표시됩니다.

user@vultr:~$ node -v
v4.8.4

NVM은 현재 사용자에게만 Node.js를 설치합니다. Node.js가 전역 적으로 액세스 가능하도록하려면 이것을 실행하십시오.

n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr

Node.js는 이제로 사용할 수 있습니다 /usr/bin/node.

user@vultr:~$ sudo which node
/usr/bin/node

MongoDB 설치

MongoDB는 무료 오픈 소스 NoSQL 데이터베이스 서버입니다. 테이블을 사용하여 데이터를 구성하는 기존 데이터베이스와 달리 MongoDB는 문서 지향적이며 스키마없이 JSON과 유사한 문서를 사용합니다. Wekan은 MongoDB를 사용하여 데이터를 저장합니다.

Wekan은 와만 호환됩니다 MongoDB version 3.2. 새 저장소 파일을 작성하십시오.

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

MongoDB 공개 GPG 키를 가져 와서 패키지 목록을 업데이트하십시오.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
sudo apt update

MongoDB를 설치하십시오.

sudo apt install -y mongodb-org

MongoDB를 시작하고 자동으로 시작하십시오.

sudo systemctl start mongod
sudo systemctl enable mongod

MongoDB 인스턴스 보안

기본적으로 MongoDB 서버에는 인증이 활성화되어 있지 않습니다. 서버의 터미널에 액세스 할 수있는 모든 사용자는 MongoDB 설치에 대한 모든 권한을 갖습니다. 데이터베이스 서버를 보호하고 권한이없는 사용자의 액세스를 제한하려면 서버에서 인증을 설정해야합니다.

MongoDB는 MongoDB mongo에서 쿼리를 실행하는 데 사용되는 쉘을 제공합니다 . mongo쉘로 전환하십시오 .

mongo

루트 권한으로 새로운 MongoDB 사용자를 작성하십시오. 원하는 모든 사용자 이름을 사용할 수 있습니다. 반드시 비밀번호를 교체하십시오 .

db.createUser(
  {
    user: "admin",
    pwd: "StrongAdminPassword",
    roles: [ { role: "root", db: "admin" } ]
  }
)

다음과 같은 결과가 나타납니다.

user@vultr:~$ mongo
MongoDB shell version: 3.2.17
connecting to: test
Welcome to the MongoDB shell.

...

2017-09-30T18:11:40.274+0000 I CONTROL  [initandlisten]
> db.createUser(
...   {
...     user: "admin",
...     pwd: "StrongAdminPassword",
...     roles: [ { role: "root", db: "admin" } ]
...   }
... )
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

" Ctrl+C" 를 눌러 Linux 터미널에 대한 MongoDB 명령 인터페이스를 종료하십시오 .

MongoDB 구성 파일을 편집하십시오.

sudo nano /etc/mongod.conf

파일 끝에 다음 줄을 추가하십시오.

security:
 authorization: enabled

구성 변경 사항이 적용되도록 MongoDB를 다시 시작하십시오.

sudo systemctl restart mongod

이제 보안이 활성화되었으므로 mongo명령을 사용하여 mongo 쉘로 다시 전환하여 보안이 작동하는지 테스트 할 수 있습니다 . 이번에 show dbs는 데이터베이스 목록 표시 와 같은 쿼리를 실행하면 인증 실패에 대한 메시지보고가 표시됩니다. sudo방금 만든 새 사용자로 로그인을 테스트 한 후 사용자를 다시 종료 하십시오.

administrator방금 만든 사용자 로 로그인하십시오 .

mongo -u admin -p

성공적인 로그인을 위해 사용자의 비밀번호를 제공하십시오. wekanWekan 데이터를 저장하는 데 사용될 데이터베이스 의 새 사용자를 작성하십시오 .

use wekan
db.createUser(
    {
      user: "wekan",
      pwd: "StrongPassword",
      roles: ["readWrite"]
    }
 ) 

StrongPassword비밀번호를 강력한 비밀번호 로 교체해야 합니다. 다음과 같은 결과가 나타납니다.

user@vultr:~$ mongo -u admin -p
MongoDB shell version: 3.2.17
Enter password:
connecting to: test

...

2017-09-30T18:13:26.007+0000 I CONTROL  [initandlisten]
>
> use wekan
switched to db wekan
> db.createUser(
...     {
...       user: "wekan",
...       pwd: "StrongPassword",
...       roles: ["readWrite"]
...     }
...  )
Successfully added user: { "user" : "wekan", "roles" : [ "readWrite" ] }

Wekan 설치

새 릴리스가 매우 빈번하므로 GithubWekan 릴리스에 대한 최신 링크를 확인하십시오 . 설치 프로그램 패키지에 대한 링크를 대체하여 Github에서 최신 버전의 Wekan을 다운로드하십시오.

cd ~
wget https://github.com/wekan/wekan/releases/download/v0.44/wekan-0.44.tar.gz

다운로드 한 아카이브를이라는 새 디렉토리에 추출하십시오 wekan.

mkdir wekan
tar xzvf wekan-*.tar.gz -C wekan

Node.js 종속성을 설치하십시오.

cd wekan/bundle/programs/server && npm install

Wekan 서버는 환경 변수에서 구성을 읽습니다. 다음 명령을 실행하여 구성을 환경 변수로 설정하십시오.

export MONGO_URL='mongodb://wekan:[email protected]:27017/wekan?authSource=wekan'
export ROOT_URL='http://wekan.example.com'
export MAIL_URL='smtp://user:[email protected]:25/'
export MAIL_FROM='[email protected]'
export PORT=4000

wekan작성한 사용자 의 MongoDB 비밀번호를 바꾸십시오 . 또한 SMTP 서버 설정에 따라 메일 URL을 업데이트하십시오. 이메일 서버가 준비되지 않은 경우 언제든지이 구성을 언제든지 변경할 수 있습니다.

즉시 응용 프로그램을 시작합니다.

cd ~/wekan/bundle
node main.js

로 이동하여 애플리케이션에 액세스 할 수 있습니다 http://wekan.example.com:4000. Wekan 칸반 보드에 로그인하기위한 인터페이스가 표시됩니다.

프로덕션 용도의 경우 표준 HTTP포트 에서 애플리케이션을 제공하도록 리버스 프록시를 설정 systemd하고 애플리케이션 프로세스를 관리 하는 서비스를 권장합니다 . 이 튜토리얼에서는 Nginx 웹 서버를 역방향 프록시로 사용하고 무료 SSL 암호화로 보안을 유지합니다.

Nginx 리버스 프록시 설정

Certbot PPA시스템에 저장소를 추가하십시오 .

sudo add-apt-repository ppa:certbot/certbot
sudo apt update

Let 's Encrypt CA의 클라이언트 응용 프로그램 인 Nginx 및 Certbot을 설치하십시오.

sudo apt -y install certbot nginx

참고 : Let 's Encrypt CA에서 인증서를 얻는 데 사용하는 도메인 이름은 서버를 가리켜 야합니다. 클라이언트는 인증서를 발행하기 전에 도메인 권한을 확인합니다 .

SSL 인증서를 생성하십시오.

sudo certbot certonly --standalone -d wekan.example.com

생성 된 인증서는 /etc/letsencrypt/live/wekan.example.com/디렉토리에 저장 될 수 있습니다 . SSL 인증서는로 저장 fullchain.pem되고 개인 키는로 저장됩니다 privkey.pem.

인증서 암호화는 90 일 후에 만료되므로 Cronjob을 사용하여 인증서의 자동 갱신을 설정하는 것이 좋습니다. Cron은 정기적 인 작업을 실행하는 데 사용되는 시스템 서비스입니다.

크론 작업 파일을여십시오.

sudo crontab -e

파일 끝에 다음 줄을 추가하십시오.

30 5 * * * /usr/bin/certbot renew --quiet

위의 cron 작업은 매일 오전 5:30에 실행됩니다. 인증서가 만료 예정인 경우 자동으로 갱신됩니다.

새 가상 호스트를 작성하십시오.

sudo nano /etc/nginx/sites-available/wekan.example.com.conf

다음을 사용하여 파일을 채우십시오.

upstream wekan {
        server 127.0.0.1:4000;
}
server {
        listen  80;
        listen [::]:80;
        server_name  wekan.example.com;

        location / {
                if ($ssl_protocol = "") {
                        rewrite     ^   https://$server_name$request_uri? permanent;
                }
        }
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name wekan.example.com;

        add_header Strict-Transport-Security "max-age=15768000";

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

        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:10m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;

        ssl_stapling on;
        ssl_stapling_verify on;

        error_page 497  https://$host:$server_port$request_uri;
        location / {
            proxy_pass http://wekan;
            proxy_http_version 1.1;
            proxy_set_header Host $host:$server_port;
            proxy_set_header Referer $http_referer;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Ssl on;
            proxy_set_header X-Nginx-Proxy true;

            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_redirect off;

            proxy_send_timeout 86400;
            proxy_read_timeout 86400;
        }
}

교체 wekan.example.com위의 구성에서 실제 도메인 이름으로.

새로 추가 된 사이트를 활성화하십시오.

sudo ln -s /etc/nginx/sites-available/wekan.example.com.conf /etc/nginx/sites-enabled/wekan.example.com.conf

변경 사항을 적용하려면 Nginx를 다시 시작하십시오.

sudo systemctl restart nginx

부팅시 Nginx가 자동으로 시작되도록합니다.

sudo systemctl enable nginx

시스템화 된 서비스 설정

프로세스를 실행할 새 사용자를 작성하십시오.

sudo adduser wekan --shell /usr/sbin/nologin --home /opt/wekan

이제 모든 파일을 /opt/wekan디렉토리 로 이동하십시오 .

sudo mv ~/wekan/* /opt/wekan/

새로 작성된 사용자에게 파일 소유권을 제공하십시오.

sudo chown -R wekan:wekan /opt/wekan

Wekan은 구성 파일에서 데이터를 가져 오지 않습니다. 대신 환경 변수에서 액세스합니다. 환경 변수를 저장할 새 파일을 만듭니다. 환경 변수가 포함 된 파일이 Systemd서비스를 통해 전달됩니다 .

환경 변수를 저장할 새 파일을 작성하십시오.

 sudo nano /opt/wekan/config.env

다음 내용으로 파일을 채우십시오.

MONGO_URL='mongodb://wekan:[email protected]:27017/wekan?authSource=wekan'
ROOT_URL='http://wekan.example.com'
MAIL_URL='smtp://user:[email protected]:25/'
MAIL_FROM='[email protected]'
PORT=4000
HTTP_FORWARDED_COUNT=1

을 대체 할 수 있는지 확인하십시오 username하고 password.

wekan실행 하여 사용자 에게 소유권을 제공하십시오 .

sudo chown -R wekan:wekan /opt/wekan/config.env

Wekan 시스템 서비스에 대한 새 서비스 파일을 작성하십시오.

sudo nano /etc/systemd/system/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=/usr/bin/node /opt/wekan/bundle/main.js
EnvironmentFile=/opt/wekan/config.env
ExecReload=/bin/kill -USR1 $MAINPID
RestartSec=10
User=wekan
Group=wekan
WorkingDirectory=/opt/wekan
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=Wekan

[Install]
WantedBy=multi-user.target

파일을 저장하고 편집기를 종료하십시오. 이제 Wekan을 쉽게 시작할 수 있습니다.

sudo systemctl start wekan

부팅시 Wekan이 자동으로 시작되도록합니다.

sudo systemctl enable wekan

Wekan 서비스 상태 확인

sudo systemctl status wekan

마무리

이제에서 Wekan 인스턴스에 액세스 할 수 있습니다 https://wekan.example.com. 새 계정을 만들어 시작하십시오. 계정을 만든 후에는 새로 만든 사용자에 대한 관리 액세스를 활성화 할 수 있습니다. 관리 사용자로 MongoDB 쉘에 로그인하십시오.

mongo -u wekan -p --authenticationDatabase "wekan"

이제 wekan데이터베이스를 선택하고 오브젝트를 업데이트하여 사용자를 관리자로 승격 시키십시오.

use wekan
db.users.update({username:'admin_user'},{$set:{isAdmin:true}})

admin_user생성 한 사용자의 실제 사용자 이름 으로 바꾸십시오 . 관리 인터페이스에서 자체 등록을 비활성화하고 SMTP 설정을 업데이트 할 수 있습니다.

축하합니다. Vultr Ubuntu 인스턴스에 Wekan Kanban 보드를 성공적으로 설치했습니다.



Leave a Comment

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

우리 컴퓨터는 모든 데이터를 저널링 파일 시스템이라고 하는 체계적인 방식으로 저장합니다. 검색을 누르는 즉시 컴퓨터에서 파일을 검색하고 표시할 수 있는 효율적인 방법입니다.https://wethegeek.com/?p=94116&preview=true

기술적 특이점: 인류 문명의 먼 미래?

기술적 특이점: 인류 문명의 먼 미래?

과학이 빠른 속도로 발전하고 우리의 많은 노력을 인수함에 따라 설명할 수 없는 특이점에 처할 위험도 높아집니다. 특이점이 우리에게 무엇을 의미할 수 있는지 읽어보십시오.

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

2021년 의료 분야에서 인공 지능의 영향

2021년 의료 분야에서 인공 지능의 영향

의료 분야의 AI는 지난 수십 년 동안 큰 도약을 했습니다. 따라서 의료 분야에서 AI의 미래는 여전히 나날이 성장하고 있습니다.