在debian 10上通过docket搭建remark42评论系统
目录
- 需要的基础知识
- 通过putty软件,登录你自己的服务器(vps)。
- 安装相对应的环境文件(复制$ 后面的内容)
- remark42环境搭建
- 设置remark42的网页访问功能
- 提供服务的网站的静态网页插入js,并在需要现实的地方插入HTML片段。
remark42是一种小型评论系统,它可以嵌入静态网站中,而不用搭建论坛或wordpress等动态系统即可实现与用户的互动。
remark42的官方网站是: remark42.com。以下是我搭建的过程,由于该系统很小众,说明资料也很少,所以把安装过程记录下来,方便后继之人安装使用。
需要的基础知识
- 知道debian是什么
- 知道什么是putty类软件
- 会用nano或VI或VIM命令编辑配置文件
- 知道linux的非管理员账号是什么
- 非管理员账号会使用sudo命令
- 知道什么是IP地址
- 了解nginx(web服务程序)
- 了解SSL的大概情况
- 了解80,443代表什么意思
- 有自己的域名并具有管理权
- 会新建二级子域名并关联到你现在的服务器地址
- 看得懂简单的英语
- 了解HTML语言的基础知识
- 有计算机输入设备(键盘)
通过putty软件,登录你自己的服务器(vps)。
安装相对应的环境文件(复制$ 后面的内容)
安装 nginx
更新软件清单。
$ sudo apt-get update
安装依赖:
$ sudo apt install curl gnupg2 ca-certificates lsb-release
以下4部为验证完整性步骤To set up the apt repository for stable nginx packages, run the following command:
$ echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Next, import an official nginx signing key so apt could verify the packages authenticity:
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Verify that you now have the proper key:
$ sudo apt-key fingerprint ABF5BD827BD9BF62
The output should contain the full fingerprint 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
as follows:
pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14] 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62 uid [ unknown] nginx signing key <signing-key@nginx.com>
安装nginx网络服务器:
$ sudo apt update $ sudo apt install nginx
安装docket
卸载或有的docket文件
$ sudo apt-get remove docker docker-engine docker.io containerd runc
更新软件清单。
$ sudo apt-get update
安装依赖
$ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
验证完整性
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88 会显示如下,则没有问题: pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22
X86或X64的系统使用以下命令:
$ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable"
-
不知道自己的系统,使用 (#部分不要复制)
$ cat /proc/cpuinfo # 查看CPU信息 $ uname -a # 查看内核/操作系统/CPU信息
其他系统请浏览以下链接查阅: 官方安装指引(英文)
安装DOCKER ENGINE
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
验证是否安装成功
$ sudo docker run hello-world
This command downloads a test image and runs it in a container. When the container runs, it prints an informational message and exits.(如果验证成功,则会留下信息并退出)
Install Docker Compose
下载最新的版本
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
给执行权限
$ sudo chmod +x /usr/local/bin/docker-compose
链接指向路径
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose --version docker-compose version 1.27.4, build 1110ad01
添加当前用户为docker的执行用户,将以下命令的your_username
换成你当前的用户名
$ sudo usermod -aG docker your_username
remark42环境搭建
新建remark42的目录
$ cd $ cd /srv/ #进入/srv/目录 $ sudo mkdir -m 755 www #新建www文件夹,并设置权限755 $ cd /srv/www/ #进入/srv/www/目录 $ sudo mkdir -m 755 remark42 #新建remark42文件夹,并设置权限755
配置remark42的设置文件
$ cd /srv/www/remark42/ $ sudo nano docker-compose.yml #编辑docker-compose.yml内容:
假设你的二级子域名是remark42.yourdomain.com,将下面的内容复制到docker-compose.yml,然后按CTRL+O进行保存,CTRL+X退出NANO编辑模式。
你需要调整**environment:**下的
REMARK_URL=
、- SECRET=
、- SITE=
,的值。其中REMARK_URL=
需要是你的二级子域名的网址。而- SECRET=
和- SITE=
你可以随意。其他数值都可以不改。
version: '2'
services:
remark:
build: .
image: umputun/remark42:latest
container_name: "remark42"
hostname: "remark42"
restart: always
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
# uncomment to expose directly (no proxy)
#ports:
# - "80:8080"
environment:
- REMARK_URL=https://remark42.yourdomain.com
- SECRET=remark42
- SITE=remark42
- STORE_BOLT_PATH=/srv/var/db
- BACKUP_PATH=/srv/var/backup
- DEBUG=true
- AUTH_GOOGLE_CID
- AUTH_GOOGLE_CSEC
- AUTH_GITHUB_CID=
- AUTH_GITHUB_CSEC=
- NOTIFY_TYPE=telegram
- NOTIFY_TELEGRAM_CHAN=
- NOTIFY_TELEGRAM_TOKEN=
- AUTH_FACEBOOK_CID
- AUTH_FACEBOOK_CSEC
- AUTH_DISQUS_CID
- AUTH_DISQUS_CSEC
- AUTH_ANON=true
- EMOJI=true
# - ADMIN_PASSWD=password
volumes:
- ./var:/srv/var
拉取remark42程序
$ cd /srv/www/remark42/ $ docker pull umputun/remark42 Using default tag: latest latest: Pulling from umputun/remark42 Digest: sha256:ce85044f6b8d53a9a21b9825929d65fea5867d1bd2d37026222831feaaf3d3a3 Status: Image is up to date for umputun/remark42:latest docker.io/umputun/remark42:latest
$ docker-compose pull && docker-compose up -d Pulling remark ... done Creating remark42 ... done
删除、重装remark42程序(非必须步骤,如果配置有问题可进行该步骤)
有时候配置不成功,可以进行此处操作。
$ cd /srv/www/remark42/ $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 55c87ca05274 umputun/remark42:latest "/entrypoint.sh serv…" 26 hours ago Up 10 hours (healthy) 0.0.0.0:8080->8080/tcp remark42
删除CONTAINER ID的数字,用于移除remark42
$ docker rm -f 55c87ca05274
测试是否已经移除
$ docker container ls -a
重装
$ docker pull umputun/remark42 $ docker-compose pull && docker-compose up -d
到这里,remark42就已经安装到你的服务器上了。并且根据你先前在remark42目录中的docker-compose.yml进行了启动。所以如果你调整配置,就需要到你的remark42的文件夹中调整docker-compose.yml
如果已经运行
$ docker-compose stop remark // go to hibernate
$ docker-compose rm remark // shutdown the PC
$ docker-compose create remark // create the container from image and put it in hibernate
$ docker-compose start remark //bring container to life from hibernation
上述四步可以简化成:
$ docker-compose up -d
设置remark42的网页访问功能
在nginx(网络服务程序)中进行配置
进入nginx的配置文件
编辑默认配置文件
$ cd /etc/nginx/
$ ls
$ cd /etc/nginx/conf.d
$ ls
$ sudo nano default.conf
修改default.conf
,将server_name后面的内容改成yourdomain.com
,注意将yourdomain.com
换成你目前的域名的根域名或其他,不要是remark42.yourdomain.com即可
server {
server_name yourdomain.com;
}
然后按CTRL+O进行保存,CTRL+X退出NANO编辑模式。
新建remark42的二级域名设置文件
$ cd /etc/nginx/conf.d $ sudo nano remark42.conf
编辑内容如下:
server {
listen 80;
listen [::]:80;
server_name remark42.yourdomain.com;
root /srv/www/remark42;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
然后按CTRL+O进行保存,CTRL+X退出NANO编辑模式。
测试nginx配置是否正确并刷新web服务:
$ sudo systemctl stop nginx
$ sudo systemctl start nginx
$ sudo service nginx reload
由于配置文件的调整是事后编辑的,所以如果有错误,导致无法加载nginx,请参考其他关于nginx的文章。**注意这里先不要添加443访问模式。**确保在进入下一步前,nginx的配置是可以正常启动nginx的。
添加SSL安全访问模式
以Let’s Encrypt证书为例,你并不需要知道什么是Let’s Encrypt。
使用Certbot自动配置SSL
-
安装snapd
$ sudo apt update $ sudo apt install snapd $ sudo snap install core core 16-2.45.2 from Canonical✓ installed $ sudo snap install core; sudo snap refresh core
-
确保没有残留的cerbot
$ sudo apt-get remove certbot
-
安装cerbot
$ sudo snap install --classic certbot
-
指向路径可执行
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
-
自动配置SSL
$ sudo certbot --nginx
-
测试SSL是否自动续期:
$ sudo certbot renew --dry-run
查看并编辑nginx的conf文件
查看remark42程序的内网IP:
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' remark42
172.18.0.1
得到IP:172.18.0.1
打开配置文件
$ cd /etc/nginx/conf.d
$ ls
$ sudo nano remark42.conf
查看里面的文件,并将内容修改如下(注意保留certbot生成的内容),172.18.0.1
改成你刚才得到的IP地址,yourdomain.com
改成你自己的域名。
server {
server_name remark42.yourdomain.com;
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
gzip on;
gzip_types text/plain application/json text/css application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
gzip_min_length 1000;
gzip_proxied any;
location ~ /\.git {
deny all;
}
location /index.html {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://172.18.0.1:8080/web/index.html;
}
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://172.18.0.1:8080/;
}
access_log /var/log/nginx/remark42.log;
}
server {
listen 80;
server_name remark42.yourdomain.com;
return 301 https://remark42.yourdomain.com$request_uri;
}
测试nginx配置是否正确并刷新web服务:
$ sudo systemctl stop nginx
$ sudo systemctl start nginx
$ sudo service nginx reload
访问remark42.yourdomain.com/web/
,如果一切正常,你的remark42就成功了。
接下来需要到你需要
提供服务的网站的静态网页插入js,并在需要显示的地方插入到HTML。
插入的JS如下:
<script>
var remark_config = {
host: "REMARK_URL", // hostname of remark server, same as REMARK_URL in backend config, e.g. "https://demo.remark42.com"
site_id: 'YOUR_SITE_ID',
components: ['embed'], // optional param; which components to load. default to ["embed"]
// to load all components define components as ['embed', 'last-comments', 'counter']
// available component are:
// - 'embed': basic comments widget
// - 'last-comments': last comments widget, see `Last Comments` section below
// - 'counter': counter widget, see `Counter` section below
url: 'PAGE_URL', // optional param; if it isn't defined
// `window.location.origin + window.location.pathname` will be used,
//
// Note that if you use query parameters as significant part of url
// (the one that actually changes content on page)
// you will have to configure url manually to keep query params, as
// `window.location.origin + window.location.pathname` doesn't contain query params and
// hash. For example default url for `https://example/com/example-post?id=1#hash`
// would be `https://example/com/example-post`.
//
// The problem with query params is that they often contain useless params added by
// various trackers (utm params) and doesn't have defined order, so Remark treats differently
// all this examples:
// https://example.com/?postid=1&date=2007-02-11
// https://example.com/?date=2007-02-11&postid=1
// https://example.com/?date=2007-02-11&postid=1&utm_source=google
//
// If you deal with query parameters make sure you pass only significant part of it
// in well defined order
max_shown_comments: 10, // optional param; if it isn't defined default value (15) will be used
theme: 'dark', // optional param; if it isn't defined default value ('light') will be used
page_title: 'Moving to Remark42', // optional param; if it isn't defined `document.title` will be used
locale: 'en', // set up locale and language, if it isn't defined default value ('en') will be used
show_email_subscription: false // optional param; by default it is `true` and you can see email subscription feature
// in interface when enable it from backend side
// if you set this param in `false` you will get notifications email notifications as admin
// but your users won't have interface for subscription
};
(function(c) {
for(var i = 0; i < c.length; i++){
var d = document, s = d.createElement('script');
s.src = remark_config.host + '/web/' +c[i] +'.js';
s.defer = true;
(d.head || d.body).appendChild(s);
}
})(remark_config.components || ['embed']);
</script>
然后在需要显示评论的html文件中插入
<div id="remark42"></div>
感觉对于新手最难的地方过去了,其他关于配置可访问: github.com/umputun/remark42查阅设置。