本文主要是为了记录我研究Alpine部署typecho的过程,固然过程并不像文章里这么顺利,主要是开始搞错了方向,使我遇到了"技术难题".若是你也苦恼 容器内服务开机自启的问题,建议看看《谁是Docker容器的init(1)进程》/)php
docker run \
--name vsftpd \
-d \
-e FTP_USER=www \
-e FTP_PASS=my-password \
-e PASV_ADDRESS=5.6.7.8 \
-e PASV_MIN=21100 \
-e PASV_MAX=21110 \
-p 21:21 \
-p 21100-21110:21100-21110 \
avenus/vsftpd-alpinemysql
docker exec -it vsftpd shnginx
发现开启了不少端口 -p 21100-21110:21100-21110这些都是被动模式端口,关于被动端口百度是这样说的:git
FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是通常形式的FTP。它们的区别在于使用数据传输端口(ftp- data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。github
因此能够经过更改vsftpd配置文件关闭全部端口,从新打包镜像,删除-p 21100-21110:21100-21110,只保留21端口sql
ftp客户端须要关闭被动模式docker
vi /etc/apk/repositories数据库
http://mirrors.aliyun.com/alp...
http://mirrors.aliyun.com/alp...apache
更新一下使源地址生效
apk update
apk add --no-cache nginx
mkdir /run/nginx
创建ftp用户并能够直接操做nginx目录
adduser -h /etc/nginx -s /sbin/nologin php -G root
更改目录属性,赋予ftp用户读写权限
chmod -R 777 /etc/nginx
用软件登录FTP
在/etc/nginx里新建一个html文件夹
在文件夹里新建一个 index.html文件作为nginx的首页
hello world
server {
listen 80 default_server;
location / {
index index.html;
root /etc/nginx/html;
}
location = /404.html {
internal;
}
}
访问http://192.168.5.116:18080页面显示hello world表示成功
apk add php7-fpm php7-mcrypt php7-soap php7-openssl php7-gmp php7-json php7-dom php7-pdo php7-zip php7-apcu php7-pdo_pgsql php7-bcmath php7-pdo_mysql php7-pdo_sqlite php7-gettext php7-xmlreader php7-xmlrpc php7-bz2 php7-iconv php7-pdo_dblib php7-curl php7-ctype php7-mbstring php7-gd
在html文件夹新建info.php文件
<?php
phpinfo();
server {
listen 80;
index index.html index.php;
location / {
index index.html;
root /etc/nginx/html;
#实现PHP伪静态 由于会用typecho作例子因此这个是适用于typecho的
#能够百度其余nginx伪静态写法
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-e $request_filename){
rewrite (.*) /index.php;
}
}
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
#添加php支持
location ~ .php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /etc/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
}
php-fpm7 --daemonize
nginx -s reload
打开浏览器访问http://192.168.5.116:18080/info.php会显示php信息,表示成功
下载typecho 解压,ftp上传到html文件夹,
打开浏览器访问http://192.168.5.116:18080
typecho call to undefined function session_start()
#查询有关session软件
apk search session
#选择本身php 版本对应的插件
apk add php7-session
#重启PHP
killall php-fpm7
php-fpm7 --daemonize
Call to undefined function token_get_all()
同理查找到了这个扩展 php7-tokenizer-7.1.17-r0 安装后重启
安装管理软件
apk add openrc
设置开机自启
rc-update add php-fpm7
rc-update add nginx
测试是否能够正常启动
rc-service vsftp start
报错了 awk: /etc/network/interfaces: No such file or directory
sed -i 's/#rc_sys=""/rc_sys="lxc"/g' /etc/rc.conf &&\
echo 'rc_provide="loopback net"' >> /etc/rc.conf
将CMD改为init系统启动
这时FTP连不上了???
把vsftpd也添加到开机自启
rc-update add vsftpd
测试是否能够启动
rc-service vsftp start
sh到这里发现vsftp 也能够本身安装,具体方法网上也有并不难,这里就再也不说明了
打包镜像
docker commit -a "liwenwen" -m "apache" alpine lnmp-alpine:vxx
docker run \ --name blog \ --restart=always \ -d \ -p 81:80 \ -p 8081:8080 \ -p 21:21 \ lnmp-alpine:vxx