最近看到了一个比较有意思的服务 Memos,支持自己部署,所以我也来搞了一个玩玩,下面是大概的流程

1、安装 docker

我服务器使用的是 Centos8,如果你使用的是其他发行版可以参考 Docker 官方的说明文档

首先卸载已经安装的旧 docker

1
2
3
4
5
6
7
8
sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

安装 yum-utils 包

1
sudo yum install -y yum-utils

添加 docker 软件源

1
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装最新版的 docker

1
sudo yum install docker-ce

启动 docker,并将它设置为开机自启

1
2
sudo systemctl start docker
sudo systemctl enable docker

确认 docker 启动成功

1
sudo docker info

2、安装 Memos

官网提供了 docker 和 docker-compose 的部署方式,因为只有一个服务,所以我选择直接使用 docker 部署

官方文档链接

先创建一个目录用来存放 Memos 的数据文件

1
mkdir /opt/memos

安装 Memos

1
2
3
4
5
6
docker run -d \
  --init \
  --name memos \
  --publish 5230:5230 \
  --volume /opt/memos/:/var/opt/memos \
  neosmemo/memos:stable

上面命令执行完之后 Memos 就跑起来了,可以使用 http://ip:5230 来测试一下

3、添加域名解析

添加一条 A 记录,如 memos.dianbanjiu.com 解析到自己服务器的公网 IP 上

  1. 在 cloudflare 选择自己的站点
  2. 在侧边栏选择 DNS->记录
  3. 选择添加记录按钮,添加一条 A 记录(类型选择 A,名称输入 memos,IPV4 地址填自己的服务器公网 IP)

后续我会把服务改为 https 访问,而我的域名是托管在 cloudflare 上的,所以可以直接用 cloudflare 生成一份 15 年有效期的证书

  1. 在 cloudflare 选择自己的站点
  2. 在侧边栏选择 SSL/TLS->源服务器
  3. 点击创建证书按钮,根据提示创建即可。推荐生成 pem 格式的私钥

将证书保存为 dianbanjiu.com.pem,将私钥保存为 dianbanjiu.com.key

将生成的两个文件上传至服务器的 /etc/nginx/cert 下

4、安装 nginx

官方软件源里的 nginx 版本可能比较老,可以选择安装 nginx 软件源,以安装最新的 nginx

1
rpm -ivh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.24.0-1.el8.ngx.x86_64.rpm

上面的命令会直接安装好 1.24.0 版本的 nginx,这也是当前最新版本

启动 nginx 并设置开机自启

1
2
sudo systemctl start nginx
sudo systemctl enable nginx

在浏览器直接访问 http://ip 应该就可以看到 nginx 的输出了

新增 Memos 的 nginx 配置,在 /etc/nginx/conf.d 中新增一个 memos.dianbanjiu.com.conf 文件。文件内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
    listen       443 ssl http2;
    server_name  memos.dianbanjiu.com;

    ssl_certificate /etc/nginx/cert/dianbanjiu.com.pem;
    ssl_certificate_key /etc/nginx/cert/dianbanjiu.com.key;
    ssl_prefer_server_ciphers on;

    access_log  /var/log/nginx/memos.access.log  main;

    location / {
        proxy_pass http://127.0.0.1:5230;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

server {
        listen 80;
        server_name memos.dianbanjiu.com;
        rewrite ^/(.*)$ https://memos.dianbanjiu.com/$1 permanent;
}

重新加载 nginx 配置

1
2
nginx -t #检查配置文件是否有误
nginx -s reload

直接通过浏览器访问 https://memos.dianbanjiu.com 确认服务是否安装成功

如果你是在国内服务器上搭建的 Memos,服务在短暂能访问之后就出现再也无法访问的情况,有可能是因为域名未备案导致被服务商直接拦截了,这种情况下要么去备案并自己修改页面在最下面加上备案信息,要么就只能通过 ip 访问。