树莓派02 家用服务器

树莓派02 家用服务器

树莓派家庭服务器的搭建以 docker 为核心,通过 docker 统一管理家庭服务,目前搭建的服务还在持续完善中,主要目的是为了方便日常使用、满足学习和探索的需求。

Docker 的安装这里不再赘述,参考 Docker Configuration01 Install on Linux 一文进行安装即可;本篇主要侧重于介绍部署的镜像和服务,以及简单介绍使用方式。

一些 Docker 容器推荐

这里推荐一些 Docker 容器:Alist、XiaoYa、PiDashboard、redis、mysql、portainer、memos、wikijs

相关的 Docker-Compose 文件会上传到AikenH/aikenh-DockerComposeYML (github.com)

数据库部署与远程连接测试

sqlite 3

Sqlite 与 Mysql 等不同,是一个无服务器、零配置的数据库,其更像是一个解析特定数据库文件的命令接口(CLI 工具),其将数据完全存储于一个单一的跨平台磁盘文件中;

由于 sqlite3 的特性,决定了其是一个轻量级不需要额外配置的数据库,但是在远程访问方面,只能通过文件共享来实现远程操作数据库。

大多数的 Linux 系统版本都会附带 SQLite 的安装,因此我们可以直接使用下面的指令验证一下是否安装:

1
sqlite3

如果没有安装的话,可以去官方的下载页面下载对应的预编译包,然后进行安装即可。

1
2
3
4
5
6
wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
tar -zxvf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000
./configure --prefix=/usr/local
make
make install

这里也提供使用 Docker-compose 安装的方式,但实际上看该数据库的特性,用 docker 安装的并不是推荐的选择。

参考资料:SQLite 3 Docker Compose – Mustafa Bugra

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'

services:
sqlite3:
container_name: sqlite3_container
image: nouchka/sqlite3:latest
stdin_open: true
tty: true
volumes:
#Modify following line
- path-to/your/databases/sqlite3:/root/db/
ports:
- '9000:9000' # expose ports - HOST:CONTAINER
restart: unless-stopped

如果是树莓派的 ARM64,可能需要使用另一个镜像

1
docker run --rm -it -v "$(pwd):/workspace" -w /workspace keinos/sqlite3

但是该镜像的使用方式,实际上就是将其当成一个命令来用,所以还是建议本机安装。

redis

使用 docker-compose 拉取指定的镜像进行安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: '3.9'
services:
redis:
image: redis:6.2.5
container_name: docker_redis
privileged: true
volumes:
- ./data:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./logs:/logs
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
ports:
- 29005:6379
environment:
- TZ="Asia/Shanghai"

设置对应的配置文件:

1
2
3
4
5
6
7
8
9
10
11
bind 0.0.0.0
# Allow Lan should be 0,0,0,0
# requirepass 123456
# need password or not
port 6379
timeout 0
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
logfile "redis.log"

这里为了方便远程连接,不设置密码,同时将 bind 设置为 0.0.0.0 允许局域网访问。

在 Python 中测试远程连接是否正常:

1
2
3
import redis
r = redis.Redis(host="192.168.31.111", port=1234, decode_resonses=True)
r.set("key", "balue")

mysql

参考文献:docker-compose 安装mysql - 掘金 (juejin.cn) | 配置MySQL 远程连接 | myfreax

使用 Docker-Compose 安装 mysql 的 docker,启用服务,设置配置文件来完成基础设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3.3"
services:
mysql:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: "password"
MYSQL_USER: 'extra-user'
MYSQL_PASS: "extra-password"
restart: unless-stopped
volumes:
- ./data:/var/lib/mysql
- ./config/my.cnf:/etc/my.cnf
- ./init:/docker-entrypoint-initdb.d/
ports:
- '29006:3306'

随便设置一个基础配置文件如下,将 Bind 地址改为 0.0.0.0 便于局域网访问

1
2
3
4
5
6
7
8
9
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
bind-address=0.0.0.0
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

启动服务后,进入 mysql 初始化用户密码(未设置密码前使用 mysql 命令)

1
2
mysql
# mysql -u root -p

初始化用户脚本,其中%为允许局域网,默认是 LocalHost,密码的引号不要删除。

1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Aa123456';

可以执行 show 查看当前所有的数据表,并通过 use 进入 mysql 表中,提升用户权限

1
2
SHOW databases;
USE mysql

具体提升权限的命令如下:

1
2
3
CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

完成后可以通过 mysql 表中查看各用户的权限是否正确

1
SELECT host, user,authentication_string FROM user;

配置完成后即可在局域网内测试远程连接:

1
mysql -u root -ppassword -h 192.168.31.108 -P 29006

这里需要注意的是-p 和密码之间不要有空格,否则可能会提示你在输入一次密码,并表示数据表不存在。

树莓派性能检测

除了 Docker 的一系列应用之外,这里推荐移动端/mac 端的应用 ServerCat 来对 SSH 终端和 Linux 来进行性能监控,该监控无论是可视化还是连接各方面都做的十分完备。推荐。

image.png

image.png

Author

AikenH

Posted on

2023-07-02

Updated on

2023-10-30

Licensed under


Comments