搭建自己的云笔记-为知笔记私有部署

搭建自己的云笔记-为知笔记私有部署
Photo by Kelly Sikkema / Unsplash

公有云笔记有很多,就不一一列举。这些云笔记各有各的特点,不足的是数据不可控,并且部分功能需要付费才能使用。

为知笔记也算是老牌的笔记了,但是知道的人却不是很多。为知笔记服务端提供了docker镜像,只需要简单几步,就可以将为知笔记服务端部署在自己的服务器上。选择它的原因主要有以下几点。

1、多端丰富,PC、Mac、iOS、安卓都有,且支持多端同步。

2、有加密功能,有些个人资料可以加密处理。

3、笔记支持多级目录,并且支持多格式导出。

4、私有版5 用户以下免费使用。

我的服务器是腾讯云的云主机,系统是Ubuntu Server 18.04.1 64位。因为为知笔记是docker镜像的,所以装之前需要先安装docker。首先通过终端连接到服务器,然后在终端按顺序输入以下命令。

1、先卸载旧版本的docker;

sudo apt-get remove docker docker-engine docker.io containerd runc

2、更新apt包索引,并安装以下包以允许apt通过 HTTPS 使用存储库;

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

3、添加 Docker 的官方 GPG 密钥;

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4、设置存储库;

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5、更新apt包索引,并安装docker;

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

6、安装完成后,每次执行都需要sudo才可以正常执行,可以通过以下命令解决

sudo groupadd docker
sudo usermod -aG docker $USER

7、设置开机启动,服务器重启后docker服务可以自启动。

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

现在在终端输入 docker --version 能看到docker的版本就证明安装成功了。以上更详细内容可以查看官方说明文档

docker安装完成后,现在就可以部署为知笔记了。在终端输入以下命令

cd ~
mkdir wizdata

这个是进入当前用户目录,创建wizdata目录,也是可以创建其他位置的,不过后续命令需要对应修改,新手不建议更改目录。

docker run --name wiz --restart=always -it -d -v  ~/wizdata:/wiz/storage -v  /etc/localtime:/etc/localtime -p 8080:80 -p 9269:9269/udp  wiznote/wizserver

如果wizdata不在用户根目录,需要把~/wizdata改到对应的路径。等命令执行完成,没报错的话私有笔记就部署完成了。

打开浏览器,在地址栏输入 服务器的IP地址:8080,敲回车。就可以看到如下界面

默认管理员账号:[email protected],密码:123456。请在部署完成后,使用这个账号,登录网页版,然后修改管理员密码。

以上更多内容可以查看为知笔记官方文档

虽然部署完成了,但是又有些问题需要考虑下。一直使用IP加端口访问的方式不够美观,并且如果服务器换IP或者端口换了,客户端都需要更改,用域名访问才是更好的解决办法。注册域名和域名解析在这里不就说了。

这里主要说下nginx的安装了配置。安装比较简单,输入以下命令即可

sudo apt-get install nginx

安装完成后,在浏览器中输入服务器的IP地址,就可以看到nginx的说明界面。如果看不到可能还需要执行以下命令,打开nginx对应的端口并且启动nginx。

sudo ufw allow 'Nginx Full'
sudo systemctl restart nginx

然后就是申请免费的HTTPS证书,可以通过acme.h申请,详细内容看这里

证书申请完成后,进入nginx目录创建域名的配置文件,配置nginx反向代理。

cd /etc/nginx/sites-available/

通过上面命令进入的nginx的配置文件目录,然后

vi 域名.conf //域名替换为为知笔记对应的域名,用于区分

然后按 i 进入编辑模式,复制以下内容,把中文替换为相应域名,再粘贴进去即可。

server {
    listen 80;
    server_name 为知笔记域名;
    return	301 https://为知笔记域名$request_uri;
}

server{
    listen 443 ssl;
    server_name 为知笔记域名;
    ssl on;

    ssl_certificate 	/etc/nginx/ssl/证书目录/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/证书目录/key.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    access_log   /var/log/nginx/wzi.log;
    error_log    /var/log/nginx/wzi_error.log;

    root /var/www/blog/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x-wiz-real-ip $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:8080;
    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

然后 按ESC退出编辑模式,在终端键入:wq! 回车保存并退出编辑器。官方配置看这里

配置文件完成后,其实还并没有生效。只有在sites-enabled目录下的配置文件才是启用的配置。现在就需要进入创建个软链接指向刚创建的文件即可,然后重启nginx,如果不报错,到这里私有笔记就部署成功了。

sudo ln -s /etc/nginx/sites-available/域名.conf /etc/nginx/sites-enabled/域名.conf

sudo systemctl restart nginx 

Read more

Category和关联对象

Category和关联对象

Category也就是分类,可以在没有类定义的情况下为现有类添加方法、属性、协议,众所周知是不能增加成员变量的,但是是可以通过关联对象给类增加的。 struct category_t { const char *name; classref_t cls; WrappedPtr instanceMethods; WrappedPtr classMethods; struct protocol_list_t *protocols; struct property_list_t *instanceProperties; // Fields below this point are not always present on disk. struct property_list_t *_classProperties; method_list_t *methodsF

By LEMON
内存管理-AutoreleasePool

内存管理-AutoreleasePool

AutoreleasePool(自动释放池)是Objective-C中的一种内存自动回收机制,它可以延迟加入AutoreleasePool中的变量release的时机。 @autoreleasepool { ... }可以通过 clang -rewrite-objc 命令转成C++代码如下 /* @autoreleasepool */ { __AtAutoreleasePool __autoreleasepool; } 然后可以从objc源码中找到__AtAutoreleasePool的定义 struct __AtAutoreleasePool { __AtAutoreleasePool() { atautoreleasepoolobj = objc_autoreleasePoolPush(); } ~__AtAutoreleasePool() { objc_autoreleasePoolPop(atautoreleasepoolobj); } void * atautoreleasepoolobj; }; 这个结构体先

By LEMON
如何为macOS应用开发插件

如何为macOS应用开发插件

本文章只用于学习和交流,转载请注明出处。 玩过越狱手机的应该都了解,iOS的越狱插件是可以为系统或者应用添加一些特色的功能的。越狱插件的开发,已经有完整的工具链,并且插件的加载运行Substrate框架已经为我们做好。 更改应用的功能实现有两种方法,一种是通过反编译工具更改汇编代码后生成新的可执行文件。另一种是写一个动态库,然后注入到可执行文件。第一种适合简单的逻辑修改,毕竟用汇编实现功能是需要很大的工作量的。 第二种要怎么注入呢?了解Mach-O 二进制文件的应该知道,Mach-O 二进制文件Load Commands中的 LC_LOAD_DYLIB 标头告诉 macOS在执行期间要加载哪些动态库 (dylib)。所以我们只需要在二进制文件中添加一条LC_LOAD_DYLIB就可以。而insert_dylib工具已经为我们实现了添加的功能。所以现在唯一需要考虑的就是插件如何开发。 废话不多说,现在就以mac版的迅雷为例开发一款属于我们自己的插件。首先下载最新版本的迅雷(版本5.0.2)。然后用Xcode新建一个macOS下的Framework,如下 新建完目录结构如下,如果

By LEMON
深入分析objc_msgSend尾调用优化

深入分析objc_msgSend尾调用优化

无意间看到了这篇文章 iOS objc_msgSend尾调用优化详解,讲的是在Release模式下,当某函数的最后一项操作是调用另外一个函数,编译器会生成调转至另一函数所需的指令码,而且不会向调用堆栈中推入新的“栈帧”(frame stack),以实现栈帧复用。 栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。所以在每一次函数调用之前,需要保存下执行的环境,以确保正常返回到调用位置。下面是- (void)viewDidLoad方法的汇编代码 可以看出在调用[super viewDidLoad]之前,先申请栈空间,然后保存x29和x30寄存器的值,调用结束后恢复寄存器的值,然后平栈。x29寄存器也就是fp寄存器,保存栈底的地址。x30寄存器也就是lr寄存器,保存返回地址。那栈帧复用又是怎么实现的呢?本着知其然知其所以然的精神,深入研究下。用下文章中的例子 - (NSInteger)func1:(NSInteger)num{ if (num >= 2000000) { return num; } return

By LEMON
京ICP备15024336号-4