提示:授權聲明:本篇文章授權活動官方亞馬遜云科技文章轉發、改寫權,包括不限于在 Developer Centre, 知乎,自媒體平臺,第三方開發者媒體等亞馬遜云科技官方渠道
文章目錄
- 前言
- 實踐知識儲備
- Lightsail介紹
- Leanote介紹
- 實踐流程
- 一、啟動Lightsail實例
- 二、開放Lightsail安全組
- 三、下載 `leanote` 二進制版
- 四、安裝 `mongodb`
- 4.1 測試`mongodb`安裝
- 五、導入初始數據
- 六、配置`leanote`
- 七、運行`leanote`
- 總結
- 部署常見問題
- 1. no reachable server
- 2. 修改Leanote運行端口
- 3. 配置Nginx
前言
作為一個程序員,編寫文檔成為日常生活中必不可少的一件事情,有些是公司內部的文檔資料,還有是希望寫一些自己的學習筆記,我在撰寫筆記的時候就發現那些筆記平臺都漸漸走向付費模式了,圖片上傳要付費,同步也要付費,新增的功能更不必說,其實我只是想寫個筆記而已,我一直在想能不能做一個自己的筆記平臺。然后最近在開源社區發現了 Leanote
,這是包含富文本編輯器和Markdown
編輯器開源筆記系統,只要我們有自己的服務器就能搭建,可以把筆記和圖片都放到自己的服務器,同時保障了隱私也避免了被筆記平臺限制。剛好最近也注冊了AWS
,免費領取了12個月
的EC2
和3個月Lightsail
使用時間,于是我就把系統搭建在了 AWS
的 Lightsail
實例上,大家感興趣的可以跟著我一起搭建!
提示:以下是本篇文章正文內容,下面案例可供參考
實踐知識儲備
在我們進行實踐的時候,我們需要對AWS
的Lightsail
有一定了解,需要了解一些Linux
的基本操作,如包管理、SSH
連接等,因為筆記需要存儲到數據庫系統,所以你還需要了解一些關于MongoDB
的基本操作
Lightsail介紹
AWS Lightsail
是一項非常棒的云計算服務,可以幫助個人和小型企業快速啟動和管理他們的應用程序和網站。
它提供了一種簡單而強大的方式來啟動虛擬服務器,并且我們可以選擇多種不同的應用程序模板,比如WordPress
、Ghost
等,在幾分鐘內就能搭建起一個完整的網站。而且,AWS Lightsail
還提供了一個直觀的用戶界面,讓我們可以輕松管理服務器和網絡設置。可以根據自己的需求選擇不同的實例規格和存儲選項,以及自動擴展功能來應對流量增長。
AWS Lightsail
還具備出色的可靠性和安全性。它使用AWS
云基礎設施作為后盾,這意味著我們可以放心地將數據存儲在高度安全的環境中,并且直接獲得到可靠的性能和穩定性。
對于那些對成本敏感的朋友來說,AWS Lightsail
也是一個不錯的選擇。它提供了靈活的計費模型,我們只需支付實際使用的資源,沒有任何隱藏費用。而且,AWS Lightsail
與其他AWS
服務集成得非常方便快捷。
大家可以通過官網了解:https://aws.amazon.com/cn/lightsail/?nc2=h_ql_prod_fs_ls
Leanote介紹
介紹引用自官方開源文檔
Leanote
是一個高效筆記開源系統,Leanote
有易操作的界面, 包含一款富文本編輯器和Markdown
編輯器,讓我們的筆記記錄更輕松和高效。對高階用戶,還提供Vim
和Emacs
編輯模式,助推寫作速度更上層樓。
- 知識管理:
Leanote
靈活而強大的“筆記本-筆記-標簽”系統,讓它成為你個人知識管理的利器。 - 分享: 你可以通過
Leanote
同好友分享知識、想法和經歷, 邀請好友加入你的筆記簿,通過云端交流信息。 - 協作:
Leanote
協助你與同事之間相互協作,激蕩新思路,隨時隨地頭腦風暴。 - 博客:
Leanote
也可以作為你的個人博客, 把你的知識傳播的更遠!
其它特性
- 支持
Markdown
編輯 - 寫作模式
Vim
及Emacs
編輯模式- 支持
PDF
導出 - 支持批量操作
- 博客自定義主題, 實現高度定制化
一套完整的、全平臺覆蓋的軟件套裝,包括了web
、桌面、安卓、IOS
設備,而且全部開源!支持團隊協同,企業級私有云部署。
- 官方文檔:
https://leanote.com/
實踐流程
- 啟動Lightsail實例
- 開放Lightsail安全組
- 下載
leanote
二進制版。 - 安裝
mongodb
。 - 導入初始數據。
- 配置
leanote
。 - 運行
leanote
。
一、啟動Lightsail實例
從首頁進入控制臺后,在搜索框輸入:Lightsail
,進入Lightsail
控制臺
進入到 instance
列表頁后,我們會看到右上角有一個 Create instance
,點擊進入開始創建實例
根據我們擅長的系統進行選擇,這里我們的環境是:
- 平臺:Linux
- 系統:Ubuntu20.04LTS
選擇套餐3,2GB 2CPU
滑到最下點擊 Create instance
就可以開始創建實例,創建完成后返回列表頁就可以看到我們的實例了
二、開放Lightsail安全組
為了保證筆記搭建起來能被公網訪問,我們需要對防火墻進行開放,默認 Lightsail
是只開放了 80
和 22
端口的
點擊實例,然后點擊 Networking
我們會看到有一個 IPv4 Firewall
,是用來配置流量進出的,這里我們添加一個規則 Add rule
,選擇 All TCP
,點擊 Create
即可,這樣就把我們所有的流量開放了,但是在生產環境不建議咱們這么做,還是需要對每個服務需要開放的端口進行控制,而不是全部放開。
三、下載 leanote
二進制版
配置好Lightsail
后,我們就可以對 leanote
進行部署了,我們需要先下載我們需要部署的應用代碼,可以從這里下載 leanote 最新二進制版。
這里我們安裝一個 v2.6.1 的最新版:
wget http://sourceforge.net/projects/leanote-bin/files/2.6.1/leanote-linux-amd64-v2.6.1.bin.tar.gz
tar -xzvf leanote-linux-amd64-v2.6.1.bin.tar.gz
代碼下載好后,因為運行起來還需要環境依賴,所以我們先接著往下進行配置
四、安裝 mongodb
到 mongodb 官網 下載相應系統的最新版安裝包,或者從以下鏈接下載舊版本:
- 64位 linux mongodb 5.0.22 下載鏈接: https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/5.0/multiverse/binary-amd64/mongodb-org-server_5.0.22_amd64.deb
- 下載下來是一個 deb:
wget https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/5.0/multiverse/binary-amd64/mongodb-org-server_5.0.22_amd64.deb
- 通過 dpkg安裝
dpkg -i mongodb-org-server_5.0.22_amd64.deb
4.1 測試mongodb
安裝
- 先在
/home/root
下新建一個目錄data
存放mongodb
數據:
mkdir /root/data
- 用以下命令安裝客戶端啟動
mongod
測試:
# 需要先安裝客戶端
apt update
apt install mongodb-clients
mongod --dbpath /root/data
這時mongod
已經啟動,重新打開一個終端, 鍵入mongo
進入交互程序:
mongo
> show dbs
...數據庫列表
mongodb
安裝到此為止, 下面為mongodb
導入leanote
初始數據。
五、導入初始數據
leanote
初始數據存放在 /root/leanote/mongodb_backup/leanote_install_data
中。
- 打開終端, 輸入以下命令導入數據。
mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/
這里大家可能會出現: Command 'mongorestore' not found, but can be installed with
,我們需要先安裝一下 mongo-tools
,然后再重新運行導入數據
apt update
apt install mongo-tools
#重新導入數據
mongorestore -h localhost -d leanote --dir /root/leanote/mongodb_backup/leanote_install_data/
看到 done
,即表示完成了,現在在mongodb
中已經新建了leanote
數據庫, 可用命令查看下leanote
有多少張"表":
# 通過client連接
mongo# 查看數據庫
show dbs admin 0.000GB
config 0.000GB
leanote 0.002GB
local 0.000GB# 切換到leanote數據庫
use leanote# 查看表
show collections
album
sattachs
blog_comments
blog_likes
blog_singles
configs
email_logs
....
初始數據的users
表中已有2個用戶:
- 賬號:admin, 密碼: abc123 (管理員, 只有該用戶才有權管理后臺, 請及時修改密碼)
- 賬號:demo@leanote.com, 密碼: demo@leanote.com (僅供體驗使用)
六、配置leanote
leanote
的配置存儲在文件 conf/app.conf
中。我們需要修改配置中的app.secret
,這是一個密鑰,不能用默認的, 否則會有安全隱患!我這里隨便把他改成了一個字符
其他配置可以暫時不修改
七、運行leanote
注意: 在此之前請確保mongodb
已在運行!
- 執行以下命令:
cd /root/leanote/bin
bash run.sh
最后出現以下信息證明運行成功:
...
DEBUG 06:04:21 revel controller.go:523: RegisterController:Registered controller section=controller controller=App\\memberuser
DEBUG 06:04:21 revel server.go:106: InitServerEngine: Found server engine and invoking section=server name=go
Listening on.. 0.0.0.0:9000
恭喜你, 打開瀏覽器輸入: http://localhost:9000
體驗leanote
吧!效果如下:
我們使用管理員賬號登錄一下:
- 賬號:admin, 密碼: abc123
總結
實踐到這里就已經是成功基于AWS Lightsail
部署Leanote
,并且實現了筆記的私有化。通過利用AWS Lightsail
提供了簡單而強大的云計算服務,讓我們在幾分鐘內輕松搭建起Leanote
實例。而且Leanote
是一個開源的筆記應用程序,我可以完全控制我的筆記數據,數據存儲也在高度安全的AWS云環境中,我再也不用擔心隱私問題了。
AWS Lightsail
特別適合個人開發者進行快速測試和驗證想法,可以讓我們在幾分鐘內啟動一個完整的應用程序。這大大加快了開發周期,能夠迅速構建原型、測試功能和驗證概念。AWS Lightsail
還提供了直觀的用戶界面和簡化的管理工具,我們可以輕松管理他們的應用程序和服務器設置。通過幾個簡單的步驟啟動、監控和擴展應用程序,而無需深入了解復雜的云基礎設施。
部署常見問題
1. no reachable server
請確保數據庫是否啟動, 如果確定已啟動 可以 嘗試將 conf/app.conf db.host=localhost
改為 db.host=127.0.0.1
修改后請重新啟動Leanote
.
2. 修改Leanote運行端口
比如想以8080端口啟動.
修改conf/app.conf:
http.port=8080
site.url=http://localhost:8080
請重啟Leanote, 使用http://localhost:8080訪問.
3. 配置Nginx
假設Leanote運行的端口是9000, 域名為a.com, 那么nginx.conf可以配置如下:
# 本配置只有http部分, 不全
http {include /etc/nginx/mime.types;default_type application/octet-stream;upstream a.com {server localhost:9000;}# httpserver{listen 80;server_name a.com;# 強制https# 如果不需要, 請注釋這一行rewriterewrite ^/(.*) https://jp_linode2.com/$1 permanent;location / {proxy_pass http://a.com;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}# httpsserver{listen 443 ssl;server_name a.com;ssl_certificate /root/a.com.crt; # 修改路徑, 到a.com.crt, 下同ssl_certificate_key /root/a.com.key;location / {proxy_pass http://a.com;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}