前提:已安装docker,域名已解析,已配置https,如没有域名 调整相关配置
编写DockerfileFROM php:7.2.3-fpm
RUN apt-get update
RUN docker-php-ext-install pdo_mysql
保存Dockerfile
在Dockerfile目录构建镜像docker build -t scofieldpeng/php:7.2.3-fpm .
cd /data/app/
创建docker编排文件touch docker-compose.yml
mysql文件夹,用来存放mysql数据,方便后期导出mkdir mysql
mysql镜像的环境touch mysql.env
nginx配置文件touch typecho.conf
克隆官方仓库git clone https://github.com/typecho/typecho.git
mysql.env中的内容
MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=111111
MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=111111
typecho.conf的内容为server {
listen 0.0.0.0:80;
root /app;
index index.php;
server_name www.baidu.com baidu.com;
rewrite ^ https://$server_name$request_uri? permanent;
access_log /var/log/nginx/typecho_access.log main;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
location ~ .*\.php(\/.*)*$ {
##try_files $uri = 404;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass php-fpm:9000;
}
}
server {
listen 443 ssl;
root /app;
index index.php;
server_name www.baidu.com baidu.com;
ssl_certificate /etc/letsencrypt/live/www.baidu.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.baidu.com/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets on;
ssl_dhparam /etc/ssl/private/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/typecho_access.log main;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
location ~ .*\.php(\/.*)*$ {
##try_files $uri = 404;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass php-fpm:9000;
}
}
docker-compose.yml中内容
version: '2'
services:
nginx:
image: nginx:1.13.9-alpine
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- ./typecho:/app
- ./typecho.conf:/etc/nginx/conf.d/default.conf
- logs:/var/log/nginx
- /etc/ssl:/etc/ssl
- /etc/letsencrypt:/etc/letsencrypt
links:
- php-fpm
depends_on:
- php-fpm
php-fpm:
image: scofieldpeng/php:7.2.3-fpm
restart: always
volumes:
- ./typecho:/app
links:
- db
depends_on:
- db
db:
image: mysql:5.7.21
restart: always
ports:
- 7878:3306
volumes:
- ./mysql:/var/lib/mysql
- logs:/var/logs/mysql
- /data/app/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
env_file:
- mysql.env
volumes:
logs:
注意
最先docker-compose没有挂载
/data/app/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
导致Err [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes
所以第一次运行docker-compose up -d
根据域名访问检查无错误后docker-compose down
cd /data/app/mysql/
vim mysqld.cnf
在[mysqld]下加入
max_allowed_packet=400M
重新运行docker-compose up -d
我的mysqld.cnf[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_allowed_packet=400M
直接在第一次的时候复制到/data/app/mysql/挂载上去,避免报错
最后
Typecho 安装好后,默认的后台路径是”你的域名/admin“,为了提高安全性,把访问路径设置为“你的域名/自定义文件夹”。
网站根目录下的config.inc.php文件里,找到:
后台路径(相对路径)
define('__TYPECHO_ADMIN_DIR__', '/admin/');
把这个/admin/路径改成自己想要的路径就行了,同时把网站中的admin文件夹改成相同的名字。重新建立个admin文件夹,建立index.html文件,里面可以随意写嘲讽内容。