# Pelican安装简要配置说明

## 环境准备

### 安装miniconda

下载最新版本miniconda

```shell=
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
```

### 建立虚拟环境

```shell=
conda create -n pelicanenv  # pelicanenv 为环境名称
```

### 激活虚拟环境

```shell
conda ativate pelicanenv
```

## 安装软件包

### 安装pelican

此处使用最新版:

```shell
conda install conda-forge::pelican
```

### 安装nginx

```shell
apt-get install nginx
```

## 创建项目

```shell
mkdir /xxx/xxx           # 创建项目目录
cd /xxx/xxx		 # 进入项目目录
pelican-quickstart	 # 生成pelican 项目
```

*安装过程过,会有很多需要你输入的配置项,如果不知道怎么填就直接忽略或者选择n,因为这些配置项在后面可以自己手动再添加的。*

创建完成后生成的目录结构如下:

```shell
.
├── Makefile
├── content/
├── develop_server.sh
├── fabfile.py
├── output/
├── pelicanconf.py
└── publishconf.py
```

所有文字,都保存在content 目录下。

建议使用markdown来写文章。

### 创建第一篇文章

```shell
touch xxx.md
```

模板参考

```shell
Title: 这是我的第一篇技术博客
Date: 2019-04-24 13:47:06
Category: 技术
Tags: python
Slug: hello-world
Summary: 这是我的第一篇技术博客,欢迎捧场


这是我的第一篇技术博客,欢迎捧场,第一次写文章,还没想好怎么写,所有就随便写了一点儿。
```

### 生成静态文件

```shell
pelican content
```

### 启动测试服务

Pelican 自己内置了一个HTTP Server,但是除非是本地开发和测试环境,否则不建议直接使用测试服务

```shell
pelican --listen
```

### 配置nginx

```shell
vim /etc/nginx/sites-available/default
```

## 主题安装

### 下载主题

```shell
git clone --recursive https://github.com/getpelican/pelican-themes ~/pelican-themes
```

### 安装主题

```shell
pelican-themes -i pelican-themes/gum
```

### 启用主题

编辑 pelicanconf.py

```shell
vim pelicanconf.py
```

```python
THEME = "gum"
```

重新生成静态文件

```shell
pelican-themes -l
```

查看已经安装可用的主题

```shell
pelican-themes -l
```

## 导入wordpress 文章

先将wordpress 文章导出为xxxx.xml

然后导入pelican

```shell
pelican-import --blogger -o ~/output ~/posts.xml
```

导入后,有大量的rst 文件

rst 文中slug 字段由于文章名称是中的可能出现乱码,造成前端无法直接访问

需要处理一下相关链接后,再生成相关相关静态页面

可以使用以下python 脚本:

```python=
# -*- coding: utf-8 -*-
import os

def find_slug_lines(file_path):
    # 打开文件并逐行读取
    with open(file_path, "r", ) as file:
        target_line_number = None
        target_line = None
        #alines = file.readlines()
        for line_number, line in enumerate(file, start=1):
            #alines = file.readlines()
            #print("执行第 " + str(line_number) + " 行")
            #print(line)
            if ":slug:" in line:
                target_line_number = line_number
            elif ":date:" in line:
                target_line = line.strip()[7:].replace(" ", "").replace("-", "").replace(":", "")
                target_line = ":slug: " + str(target_line) + "\n"
    

    with open(file_path, "r", ) as wfile:
        alines = wfile.readlines()
        target_line_number = target_line_number - 1
        #print(alines[target_line_number])
        print(alines)
        alines[target_line_number] = target_line
        #print(alines[target_line_number])
    print(alines)

    f = open(file_path, "w", encoding="utf-8")
    f.writelines(alines)

# 获取当前工作目录
current_directory = os.getcwd()

# 列出当前目录下的所有文件和文件夹
items = os.listdir(current_directory)

number = 0
for item in items:
    # 如果项是文件而不是文件夹,则打印它
    if os.path.isfile(os.path.join(current_directory, item)):
        print(number)
        number = number + 1
        print("文件名:")
        print(item)
        file_path = item
        try:
            find_slug_lines(file_path)
        except Exception as e:
            print(item + "不支持")

```
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9