Docker를 사용하여 Ubuntu에 Outline Knowledgebase Wiki를 설치하는 방법
이 페이지에서
- 전제 조건
- 1단계 - 방화벽 구성\n
- 2단계 - Docker 설치
- 3단계 - Docker Compose 설치
- 4단계 - Docker용 환경 파일 만들기\n
- Slack 인증 구성
- Slack 통합 구성\n
- S3 자격 증명 생성
- 비밀 키 만들기
- 환경 파일 생성 및 편집\n
Outline은 오픈 소스 협업 지식 기반 소프트웨어입니다. 문서 및 팬 페이지를 호스팅하거나 메모 공유에 사용할 수도 있습니다. 여기에는 마크다운 편집기가 포함되어 있으며 Slack, Figma, Airtable, Google Docs, Trello, Zapier, Codepen, Spotify, Youtube 등과 같은 여러 서비스와 통합됩니다. 별도의 읽기 및 쓰기 권한이 있는 사용자 그룹과 같은 보안 기능이 있으며 공개 공유가 가능합니다. 13개 언어 번역으로 RTL을 지원합니다. React와 Node.js를 사용하여 빌드되었습니다. 아웃라인을 사용하는 방법에는 두 가지가 있습니다. 하나는 클라우드 호스팅 버전이거나 서버에서 호스팅할 수 있습니다.
이 튜토리얼에서는 Docker를 사용하여 Ubuntu 기반 서버에 Outline Wiki를 설치하는 방법을 설명합니다.
전제 조건
-
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단계 - 방화벽 구성
첫 번째 단계는 방화벽을 구성하는 것입니다. 우분투는 기본적으로 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를 설치해야 합니다. Dockers 공식 GPG 키를 추가합니다.
$ 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
Docker 명령을 실행하기 위해 sudo를 사용할 필요가 없도록 다음 명령을 실행합니다.
$ sudo usermod -aG docker ${USER} $ su - ${USER}
3단계 - Docker Compose 설치
다음 명령을 실행하여 Docker Compose를 설치합니다. Docker Compose는 최근 v2.0으로 업데이트되어 많은 주요 변경 사항이 도입되었습니다. Github 릴리스 페이지에서 제공되는 최신 1.x 버전을 사용합니다.
$ 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 저장 버튼을 클릭하십시오. 페이지의 사용자 토큰 범위 섹션까지 아래로 스크롤하고 드롭다운 메뉴에서 다음 범위를 선택합니다.
identity.avatar
identity.basic
identity.email
identity.team
왼쪽 사이드바에서 기본 정보 페이지로 돌아갑니다. App Credentials 아래의 상자에서 Client ID 및 Client Secret 값을 복사합니다.
Slack 통합 구성
왼쪽 사이드바에서 슬래시 명령 옵션을 방문하십시오.
결과 페이지에서 새 명령 버튼을 클릭합니다. 명령으로
/outline
을 입력합니다. 요청 URL로https://outline.example.com/api/hooks.slack
을 입력합니다. 명령에 대한 설명과 힌트로 단어를 입력합니다. 완료되면 하단의 저장 버튼을 클릭합니다.왼쪽 사이드바에서 기능 >> 상호 작용 및 바로 가기 메뉴를 엽니다. 토글 버튼을 전환하여 상호 작용을 활성화하고
https://outline.example.com/api/hooks.interactive
를 요청 URL로 붙여넣습니다. 변경 사항 저장 버튼을 클릭하여 완료합니다.왼쪽 사이드바에서 설정 >> 앱 설치 페이지를 열고 WorkSpace에 설치 버튼을 클릭하여 Slack 워크스페이스용 앱을 설치합니다.
왼쪽 사이드바에서 기본 정보 페이지를 방문하여 Slack 앱 통합을 위한 앱 ID 및 확인 토큰 값을 복사합니다.
S3 자격 증명 생성
AWS 또는 모든 S3 호환 서비스에서 Outline 설치를 위한 S3 버킷을 생성합니다. 버킷을 생성한 후 CORS(Cross-origin Resource Sharing) 구성을 위해 다음 정책 JSON을 추가합니다.
AllowedOrigins
값을 개요 URL로 바꿉니다.[ { "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
이 값을 복사하고 저장하십시오.
환경 파일 생성 및 편집
Outline의 Docker 설정을 위한 디렉터리를 만듭니다.
$ mkdir ~/outline
디렉터리로 전환합니다.
$ cd ~/outline
docker.env
파일을 만들고 편집을 위해 엽니다. 이 파일은 설치에 필요한 모든 환경 변수를 저장합니다.$ nano docker.env
다음 코드를 붙여넣습니다. 이전에 생성한 비밀 키와 utils 비밀을 입력합니다. 인증 및 앱 통합을 위해 이전에 만든 Slack 자격 증명을 복사합니다. 아래 지정된 대로 Amazon S3 자격 증명을 입력합니다.
Google 애널리틱스를 사용하여 Outline 애플리케이션의 통계를 추적하려면 아래 필드에 애널리틱스 ID를 입력하세요. 현재 Outline은 GA4 태그를 지원하지 않으므로 이전 추적 ID를 입력해야 합니다.
WEB_CONCURRENCY
변수의 경우 시스템 램을 512로 나누고 대략적인 값을 입력합니다. Nginx를 프록시 서버로 사용하고 있으므로FORCE_HTTPS
변수는 false로 설정됩니다.# –––––––––––––––– 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 파일 생성
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 설치
Lets Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 다운로드해야 합니다. 이를 위해 Snapd 패키지 설치 프로그램을 사용합니다.
스냅 인스톨러를 설치합니다.
$ sudo apt install snapd
Snapd 버전이 최신인지 확인하세요.
$ sudo snap install core && sudo snap refresh core
Certbot을 설치합니다.
$ sudo snap install --classic certbot
다음 명령을 사용하여
/usr/bin
디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.$ 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
디렉토리에 인증서를 다운로드합니다.Diffie-Hellman 그룹 인증서를 생성합니다.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Lets Encrypt 자동 갱신을 위한 챌린지 웹루트 디렉터리를 만듭니다.
$ sudo mkdir -p /var/lib/letsencrypt
SSL을 갱신하기 위해 Cron 작업을 생성합니다. 인증서를 확인하고 필요한 경우 갱신하기 위해 매일 실행됩니다. 이를 위해 먼저
/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
Nginxs 안정 버전용 리포지토리를 추가합니다.
$ 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
Nginx를 설치합니다.
$ sudo apt install nginx
설치를 확인하십시오.
$ nginx -v nginx version: nginx/1.20.2
Nginx 서비스를 활성화합니다.
$ sudo systemctl enable nginx
9단계 - Nginx 구성
지금까지 Shlink는 포트 8080을 통해 로컬 시스템에서 실행되었습니다. 우리는 Nginx를 사용하여 해당 도메인에서 실행하기 위한 리버스 프록시 역할을 할 것입니다.
/etc/nginx/conf.d
디렉터리에 Shlink 서버에 대한 구성 파일을 만듭니다.$ 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 홈페이지가 열리고 작업을 시작할 수 있습니다.
Slack용 Outline 앱을 사용하면 워크스페이스 내에서 모든 문서에 대한 링크를 검색하고 붙여넣을 수 있습니다. 이렇게 하려면 Slack 작업 공간을 열고 메시지에
/outline
를 입력하고 게시합니다.검색어와 관련된 문서를 자동으로 찾아 메시지에 게시합니다.
11단계 - 개요 업데이트
Outline 위키를 업데이트하려면 다음 명령어를 실행하세요. 첫 번째 명령은 컨테이너를 종료하고 제거합니다. 두 번째는 아웃라인 및 기타 도구용 Docker 이미지의 최신 버전을 가져옵니다. Docker Compose 파일 또는 환경 파일을 변경해야 하는 경우 동일한 명령을 실행할 수 있습니다.
$ docker-compose down --remove-orphans $ docker-compose pull
다음 명령을 실행하여 데이터베이스를 업그레이드하십시오.
$ docker-compose run --rm outline yarn db:migrate --env=production-ssl-disabled
데이터를 그대로 유지하면서 새로운 이미지로 새 컨테이너를 시작하십시오.
$ docker-compose up -d
결론
이것으로 Docker를 사용하여 Ubuntu 20.04 서버에 Outline Knowledgebase Wiki를 설치하는 방법에 대한 자습서를 마칩니다. Outline에 대해 자세히 알아보려면 공식 문서를 참조하세요. 질문이 있으시면 아래 의견에 게시하십시오.