Blame
| 961225 | Terry | 2026-01-30 02:08:26 | 1 | # Pelican安装简要配置说明 |
| 2 | ||||
| 3 | ## 环境准备 |
|||
| 4 | ||||
| 5 | ### 安装miniconda |
|||
| 6 | ||||
| 7 | 下载最新版本miniconda |
|||
| 8 | ||||
| d263e3 | Terry | 2026-02-02 05:59:44 | 9 | ```shell= |
| 961225 | Terry | 2026-01-30 02:08:26 | 10 | wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh |
| 11 | ``` |
|||
| 12 | ||||
| 13 | ### 建立虚拟环境 |
|||
| 14 | ||||
| d263e3 | Terry | 2026-02-02 05:59:44 | 15 | ```shell= |
| 961225 | Terry | 2026-01-30 02:08:26 | 16 | conda create -n pelicanenv # pelicanenv 为环境名称 |
| 17 | ``` |
|||
| 18 | ||||
| 19 | ### 激活虚拟环境 |
|||
| 20 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 21 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 22 | conda ativate pelicanenv |
| 23 | ``` |
|||
| 24 | ||||
| 25 | ## 安装软件包 |
|||
| 26 | ||||
| 27 | ### 安装pelican |
|||
| 28 | ||||
| 29 | 此处使用最新版: |
|||
| 30 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 31 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 32 | conda install conda-forge::pelican |
| 33 | ``` |
|||
| 34 | ||||
| 35 | ### 安装nginx |
|||
| 36 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 37 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 38 | apt-get install nginx |
| 39 | ``` |
|||
| 40 | ||||
| 41 | ## 创建项目 |
|||
| 42 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 43 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 44 | mkdir /xxx/xxx # 创建项目目录 |
| 45 | cd /xxx/xxx # 进入项目目录 |
|||
| 46 | pelican-quickstart # 生成pelican 项目 |
|||
| 47 | ``` |
|||
| 48 | ||||
| 49 | *安装过程过,会有很多需要你输入的配置项,如果不知道怎么填就直接忽略或者选择n,因为这些配置项在后面可以自己手动再添加的。* |
|||
| 50 | ||||
| 51 | 创建完成后生成的目录结构如下: |
|||
| 52 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 53 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 54 | . |
| 55 | ├── Makefile |
|||
| 56 | ├── content/ |
|||
| 57 | ├── develop_server.sh |
|||
| 58 | ├── fabfile.py |
|||
| 59 | ├── output/ |
|||
| 60 | ├── pelicanconf.py |
|||
| 61 | └── publishconf.py |
|||
| 62 | ``` |
|||
| 63 | ||||
| 64 | 所有文字,都保存在content 目录下。 |
|||
| 65 | ||||
| 66 | 建议使用markdown来写文章。 |
|||
| 67 | ||||
| 68 | ### 创建第一篇文章 |
|||
| 69 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 70 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 71 | touch xxx.md |
| 72 | ``` |
|||
| 73 | ||||
| 74 | 模板参考 |
|||
| 75 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 76 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 77 | Title: 这是我的第一篇技术博客 |
| 78 | Date: 2019-04-24 13:47:06 |
|||
| 79 | Category: 技术 |
|||
| 80 | Tags: python |
|||
| 81 | Slug: hello-world |
|||
| 82 | Summary: 这是我的第一篇技术博客,欢迎捧场 |
|||
| 83 | ||||
| 84 | ||||
| 85 | 这是我的第一篇技术博客,欢迎捧场,第一次写文章,还没想好怎么写,所有就随便写了一点儿。 |
|||
| 86 | ``` |
|||
| 87 | ||||
| 88 | ### 生成静态文件 |
|||
| 89 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 90 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 91 | pelican content |
| 92 | ``` |
|||
| 93 | ||||
| 94 | ### 启动测试服务 |
|||
| 95 | ||||
| 96 | Pelican 自己内置了一个HTTP Server,但是除非是本地开发和测试环境,否则不建议直接使用测试服务 |
|||
| 97 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 98 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 99 | pelican --listen |
| 100 | ``` |
|||
| 101 | ||||
| 102 | ### 配置nginx |
|||
| 103 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 104 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 105 | vim /etc/nginx/sites-available/default |
| 106 | ``` |
|||
| 107 | ||||
| 108 | ## 主题安装 |
|||
| 109 | ||||
| 110 | ### 下载主题 |
|||
| 111 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 112 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 113 | git clone --recursive https://github.com/getpelican/pelican-themes ~/pelican-themes |
| 114 | ``` |
|||
| 115 | ||||
| 116 | ### 安装主题 |
|||
| 117 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 118 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 119 | pelican-themes -i pelican-themes/gum |
| 120 | ``` |
|||
| 121 | ||||
| 122 | ### 启用主题 |
|||
| 123 | ||||
| 124 | 编辑 pelicanconf.py |
|||
| 125 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 126 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 127 | vim pelicanconf.py |
| 128 | ``` |
|||
| 129 | ||||
| 130 | ```python |
|||
| 131 | THEME = "gum" |
|||
| 132 | ``` |
|||
| 133 | ||||
| 134 | 重新生成静态文件 |
|||
| 135 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 136 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 137 | pelican-themes -l |
| 138 | ``` |
|||
| 139 | ||||
| 140 | 查看已经安装可用的主题 |
|||
| 141 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 142 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 143 | pelican-themes -l |
| 144 | ``` |
|||
| 145 | ||||
| 146 | ## 导入wordpress 文章 |
|||
| 147 | ||||
| 148 | 先将wordpress 文章导出为xxxx.xml |
|||
| 149 | ||||
| 150 | 然后导入pelican |
|||
| 151 | ||||
| ad8263 | Terry | 2026-01-30 02:11:02 | 152 | ```shell |
| 961225 | Terry | 2026-01-30 02:08:26 | 153 | pelican-import --blogger -o ~/output ~/posts.xml |
| 154 | ``` |
|||
| 155 | ||||
| 156 | 导入后,有大量的rst 文件 |
|||
| 157 | ||||
| 158 | rst 文中slug 字段由于文章名称是中的可能出现乱码,造成前端无法直接访问 |
|||
| 159 | ||||
| 160 | 需要处理一下相关链接后,再生成相关相关静态页面 |
|||
| 161 | ||||
| 162 | 可以使用以下python 脚本: |
|||
| 163 | ||||
| fdd696 | Terry | 2026-02-02 07:27:44 | 164 | ```python= |
| 961225 | Terry | 2026-01-30 02:08:26 | 165 | # -*- coding: utf-8 -*- |
| 166 | import os |
|||
| 167 | ||||
| 168 | def find_slug_lines(file_path): |
|||
| 169 | # 打开文件并逐行读取 |
|||
| 170 | with open(file_path, "r", ) as file: |
|||
| 171 | target_line_number = None |
|||
| 172 | target_line = None |
|||
| 173 | #alines = file.readlines() |
|||
| 174 | for line_number, line in enumerate(file, start=1): |
|||
| 175 | #alines = file.readlines() |
|||
| 176 | #print("执行第 " + str(line_number) + " 行") |
|||
| 177 | #print(line) |
|||
| 178 | if ":slug:" in line: |
|||
| 179 | target_line_number = line_number |
|||
| 180 | elif ":date:" in line: |
|||
| 181 | target_line = line.strip()[7:].replace(" ", "").replace("-", "").replace(":", "") |
|||
| 182 | target_line = ":slug: " + str(target_line) + "\n" |
|||
| 183 | ||||
| 184 | ||||
| 185 | with open(file_path, "r", ) as wfile: |
|||
| 186 | alines = wfile.readlines() |
|||
| 187 | target_line_number = target_line_number - 1 |
|||
| 188 | #print(alines[target_line_number]) |
|||
| 189 | print(alines) |
|||
| 190 | alines[target_line_number] = target_line |
|||
| 191 | #print(alines[target_line_number]) |
|||
| 192 | print(alines) |
|||
| 193 | ||||
| 194 | f = open(file_path, "w", encoding="utf-8") |
|||
| 195 | f.writelines(alines) |
|||
| 196 | ||||
| 197 | # 获取当前工作目录 |
|||
| 198 | current_directory = os.getcwd() |
|||
| 199 | ||||
| 200 | # 列出当前目录下的所有文件和文件夹 |
|||
| 201 | items = os.listdir(current_directory) |
|||
| 202 | ||||
| 203 | number = 0 |
|||
| 204 | for item in items: |
|||
| 205 | # 如果项是文件而不是文件夹,则打印它 |
|||
| 206 | if os.path.isfile(os.path.join(current_directory, item)): |
|||
| 207 | print(number) |
|||
| 208 | number = number + 1 |
|||
| 209 | print("文件名:") |
|||
| 210 | print(item) |
|||
| 211 | file_path = item |
|||
| 212 | try: |
|||
| 213 | find_slug_lines(file_path) |
|||
| 214 | except Exception as e: |
|||
| 215 | print(item + "不支持") |
|||
| 216 | ||||
| 217 | ``` |