# OKMAB
**Repository Path**: edxuanlen/OKMAB
## Basic Information
- **Project Name**: OKMAB
- **Description**: One Key Make A Blog
- **Primary Language**: Shell
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-07-02
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# One Key Make A Blog
以debian 9树莓派环境为例,其他linux发行版也差不多
这是对脚本的一些解释和安装过程中的一些坑和解决方法
注意不要用sudo运行脚本,因为一些路径使用了\$USER、\$HOME等系统变量
## 内网穿透部分
内网穿透简单来说就是让外网能访问到你局域网内的服务(比如你的电脑,你的树梅派)
我们使用花生壳内网穿透功能
详细操作可以参考花生壳的官网
先到官网下载最新版的客户端 选择合适的版本下载后安装
```bash
sudo dpkg -i phddns_xxx.deb
```
然后会得到类似下列的一个SN账号
```sh
+--------------------------------------------------+
| Oray PeanutHull Linux 3.0 |
+--------------------------------------------------+
| Runstatus: OFFLINE |
+--------------------------------------------------+
| SN: ORAYb810bxxxxxxx |
+--------------------------------------------------+
| Remote Management Address http://b.oray.com |
+--------------------------------------------------+
```
然后使用这个账号登录 \
然后申请内网穿透 \
会分配一个域名带端口号 \
填写映射端口号后如果成功就可以访问到内网的机子上
## 树莓派换源问题
更换过清华源、中科大和阿里等多个源,但好像一直有问题,apt update没问题但是软件列表一共只有几千个(远远小于没换源的5万+个),于是最后选择不换源,慢慢的更新(也不会太慢)。
```sh
sudo apt update
sudo apt upgrade
```
## 安装docker
首先是下载docker,docker官网给出了脚本,下载的时候确保网络通畅,否则可能会出现问题。如果安装过docker还会人性化的询问是否重新安装。\
docker-ce需要先添加下载源
```sh
# 下载需要的工具
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
# 添加信任证书和公钥
sudo curl -fsSL https://download.docker.com/linux/$(. /etc/os-release;echo "$ID")/gpg | sudo apt-key add -
# 添加docker-ce下载预源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release;echo"$ID") $(lsb_release -cs) stable"
# 获取docker官方安装脚本
sudo wget https://get.docker.com -O $HOME/get_docker.sh
# 使用阿里云镜像
sudo sh get_docker.sh --mirror Aliyun
```
## 安装docker-compose
两种方法
1. 官方安装方法
```sh
sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```
2. 推荐pip安装
```sh
sudo apt-get update
sudo apt-get install -y python python-pip
sudo pip install docker-compose
```
检查安装是否成功
```sh
docker-compose -v
```
## docker的配置
```sh
# docker 换源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors" : ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 将用户加入docker的组,可以运行docker不加sudo,但是要注意重启系统后才生效
sudo usermod -aG docker $USER
```
## 获取ghost镜像失败
一开始第一次拉取时,一直卡在一个点,然后自动重新拉取报了个ERROR就停止了,没有其他提示 \
尝试拉取了自己上传的镜像才报出了一个是因为docker所在的文件空间不足 \
解决方法就只能移动文件夹,并修改相关文件
```sh
docker stop $(docker ps -q -f status=running)
systemctl stop docker
mv /var/lib/docker /DIR
# DIR 是你想要移动到的位置
# 查找修改docker.service
sudo vim /lib/systemd/system/docker.service
```
修改Execstart那行为
```sh
ExecStart=/usr/bin/dockerd -g 新目录
```
重新运行并查看现在的目录信息
```sh
systemctl daemon-reload
systemctl start docker
docker info | grep "Docker Root Dir"
```
如果docker info 报了Warning:
```sh
vim /etc/default/grub
```
找到 GRUB_CMDLINE_LINUX="" \
在双引号里面输入 cgroup_enable=memory swapaccount=1 \
然后执行
```sh
sudo update-grub
reboot
```
到这里大坑基本踩完
## 配置镜像和容器(docker-compose.yaml)
### docker-compose.yaml
```yaml
version: '3.0'
services:
ghost:
image: ghost
restart: always
container_name: ghost
volumes:
- ~/ghost/config.production.json:/var/lib/ghost/config.production.json # 配置文件
- ~/ghost/content:/var/lib/ghost/content # 博客数据
environment:
URL: http://$HOST
nginx:
image: nginx
restart: always
container_name: nginx_ghost
ports: # 开放端口号,用到的端口都该映射到宿主机
- 80:80
- 443:443
links: # 链接到ghost容器
- ghost
volumes:
- ~/nginx/conf.d:/etc/nginx/conf.d # 配置文件
- ~/nginx/log:/var/log/nginx # 日志
- ~/nginx/www:/var/www # 默认
- ~/nginx/letsencrypt:/etc/letsencrypt # ssl 配置文件
```
### ghost.conf
可以自行添加ssl证书开启https访问
```conf
server {
listen 80; # 监听80端口
server_name $HOST;
# 定义首页索引目录和名称
location / {
proxy_pass http://ghost:2368; # 代理到ghost容器的2368端口
}
}
```
### config.production.json
可以自己更改配置,如添加邮箱配置等等
```json
{
"url": "http://$HOST",
"database":{
"client" :"sqlite3",
"connection": {
"filename": "/var/lib/ghost/content/data/ghost.db"
}
},
"admin":{
"url":"http://$HOST"
},
"server":{
"host":"0.0.0.0",
"port": 2368
},
"paths":{
"contentPath" : "/var/lib/ghost/content/"
},
"logging": {
"path": "/var/lib/ghost/content/logs/",
"transports": ["stdout", "file"]
}
}
```