├── .gitignore ├── docker-entrypoint.sh ├── Dockerfile ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | readme_temp.md 2 | .history 3 | .vscode 4 | -------------------------------------------------------------------------------- /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Apache2 4 | if [ ! -f "/etc/apache2/apache2.conf" ]; then 5 | cp /usr/apache2 /etc -r 6 | fi 7 | 8 | # Typecho last release version from 2017 - 1.1-17.10.30-release 9 | if [ ! -f "/var/www/html/install.php" ]; then 10 | curl -o /usr/typecho.tar.gz -fL "http://typecho.org/downloads/1.1-17.10.30-release.tar.gz" \ 11 | && tar -zxvf /usr/typecho.tar.gz -C /var/www/html \ 12 | && cp -r /var/www/html/build/* /var/www/html \ 13 | && rm /var/www/html/build -rf \ 14 | && rm /usr/typecho.tar.gz 15 | fi 16 | 17 | # Start Apache2 18 | /usr/sbin/apache2ctl -D FOREGROUND 19 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.4.16-apache 2 | LABEL maintainer="liuq@bilishare.com" 3 | LABEL author="liuq" 4 | LABEL description="Docker environment for fast installing typecho blog" 5 | 6 | ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ 7 | RUN chmod +x /usr/local/bin/install-php-extensions && sync && \ 8 | install-php-extensions pdo_mysql 9 | 10 | COPY ./docker-entrypoint.sh /docker-entrypoint.sh 11 | RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf 12 | RUN cp /etc/apache2 /usr -r && rm -rf /etc/apache2/* 13 | 14 | ENTRYPOINT [ "/docker-entrypoint.sh" ] 15 | 16 | VOLUME /var/www/html 17 | VOLUME /etc/apache2 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 liuqian1996 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-typecho 2 | 3 | Docker 环境下安装部署 [Typecho](https://typecho.org/) 博客模板 4 | 5 | ## 官方 6 | 7 | 官方已经提供容器镜像 8 | 9 | + 仓库地址: 10 | + Docker Hub 地址: 11 | 12 | ## 容器环境 13 | 14 | + OS:Debian 15 | + PHP:7.4.16 16 | + Apache:2.4.38 17 | 18 | ## docker安装 19 | 20 | + Centos:`yum install docker -y` 21 | 22 | + 其他: 23 | + `curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun` 24 | + `curl -sSL https://get.daocloud.io/docker | sh` 25 | 26 | ## Usage 27 | 28 | 拉取镜像 29 | 30 | ```bash 31 | docker pull linkaliu/docker-typecho:7.4.16-apache 32 | ``` 33 | 34 | 选择一个目录用来安装 Typecho 和 Apache 35 | 36 | ```bash 37 | cd /var/www/blog 38 | ``` 39 | 40 | 快速使用 41 | 42 | ```bash 43 | docker run -d --name typecho \ 44 | -p 80:80 -p 443:443 \ 45 | -v $PWD/typecho:/var/www/html \ 46 | -v $PWD/apache2:/etc/apache2 linkaliu/docker-typecho:7.4.16-apache 47 | ``` 48 | 49 | 默认安装的 Typecho 版本是1.1-17.10.30-release,你可以在启动容器后,将原有代码迁移到`$PWD/typecho`目录,然后重启容器`docker restart typecho`。**迁移时注意备份原有代码** 50 | 51 | 如果当前目录下有`typecho`目录,则会覆盖掉内部的安装步骤,如果当前目录下有`apache2`目录,则会覆盖内部的 Apache2 配置文件。 52 | 53 | 访问 **`http://`**,进行下一步操作 54 | 55 | 删除容器 56 | 57 | ```bash 58 | docker rm typecho -f 59 | ``` 60 | 61 | 删除后重新启动容器,因为当前目录下,已经存在`typecho`和`apache2`目录,将不会执行安装步骤,仅会启动 server,如果需要重新执行安装步骤,请删除目录后`rm typecho apache2 -rf`重新启动容器。 62 | 63 | ## 数据库连接 64 | 65 | 常用方式:云数据库、服务器数据库、Docker数据库镜像 66 | 67 | 推荐使用云数据库进行连接,方便部署和迁移,使用云数据库时,需放开80端口,如果需要使用https,还需放开443端口。其他方式需使用内网地址进行连接 68 | 69 | 常见错误: 70 | 71 | 1. 错误:*Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/install.php:202) in /var/www/html/var/Typecho/Cookie.php on line 102** 或 **Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/install.php:202) in /var/www/html/install.php on line 559* 72 | 73 | 解决方案:云数据库问题,在**typecho/install.php** **56**行添加**ob_start();** 74 | 75 | 2. 错误:*安装程序捕捉到以下错误: "SQLSTATE[HY000]: General error: 3161 Storage engine MyISAM is disabled (Table creation is disallowed).". 程序被终止, 请检查您的配置信息.* 76 | 77 | 解决方案:因为mysql当前版本不支持MyISAM引擎,将**typecho/install/Mysql.sql**中的**MyISAM**修改为**INNODB**,刷新页面 78 | 79 | ## 遇到的错误 80 | 81 | + `Error: statfs /app/typecho: no such file or directory` 82 | 83 | 解决方案,手动创建目录,`mkdir $PWD/typecho $PWD/apache2` 84 | 85 | ## 其他 86 | 87 | ### 地址重写,去掉index.php 88 | 89 | 在**设置** - **永久链接设置**下,强制启用**地址重写功能** 90 | 91 | ```bash 92 | # 进入opt目录 93 | cd /opt 94 | 95 | # 启用地址重新功能rewrite 96 | cp apache2/mods-available/rewrite.load apache2/mods-enabled/ 97 | 98 | # 修改apache2/apache2.conf 99 | # 添加以下语句 100 | RewriteEngine On 101 | 102 | Options Indexes FollowSymLinks 103 | AllowOverride All 104 | RewriteCond %{REQUEST_FILENAME} !-d 105 | RewriteCond %{REQUEST_FILENAME} !-f 106 | RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 107 | Require all granted 108 | 109 | 110 | # 重启docker容器typecho 111 | docker restart typecho 112 | ``` 113 | 114 | ### 使用域名 115 | 116 | ```bash 117 | # 进入opt目录 118 | cd /opt 119 | 120 | # 修改apache2/sites-enabled/000-default.conf 121 | # 在ServerAdmin下面增加一行,将www.example.com改为自己的域名 122 | ServerName www.example.com 123 | 124 | # 重启typecho容器 125 | docker restart typecho 126 | ``` 127 | 128 | ### 使用Https 129 | 130 | ```bash 131 | # 进入opt目录 132 | cd /opt 133 | 134 | # 启用SSL功能 135 | cp apache2/mods-available/ssl.* apache2/mods-enabled/ && \ 136 | cp apache2/mods-available/socache_shmcb.load apache2/mods-enabled/ && \ 137 | cp apache2/sites-available/default-ssl.conf apache2/sites-enabled/ 138 | 139 | # 删除原有镜像 140 | docker rm typecho -f 141 | 142 | # 暴露443端口 143 | docker run -d --name typecho \ 144 | -p 80:80 -p 443:443 \ 145 | -v /opt/typecho:/var/www/html \ 146 | -v /opt/apache2:/etc/apache2 linkaliu/docker-typecho 147 | 148 | # 将证书上传到apache2文件夹cert内 149 | # 修改apache2/sites-enabled/default-ssl.conf 150 | # 在ServerAdmin下面添加一行,将www.example.com改为自己的域名 151 | ServerName www.example.com 152 | 153 | # 修改对应的key,使用自己的证书 154 | SSLCertificateFile cert/5580757_blog.bilishare.com_public.crt 155 | SSLCertificateKeyFile cert/5580757_blog.bilishare.com.key 156 | SSLCertificateChainFile cert/5580757_blog.bilishare.com_chain.crt 157 | ``` 158 | 159 | ### http跳转https 160 | 161 | ```bash 162 | # 进入opt目录 163 | cd /opt 164 | 165 | # 修改apache2/sites-enabled/000-default.conf 166 | # 添加以下内容 167 | RewriteCond %{SERVER_PORT} !^443$ 168 | RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R] 169 | ``` 170 | 171 | ## License 172 | 173 | [MIT](https://github.com/aliuq/docker-typecho/blob/main/LICENSE) 174 | --------------------------------------------------------------------------------