docker|docker Alpine部署LNMP +FTP 超小镜像

本文主要是为了记录我研究Alpine部署typecho的过程,当然过程并不像文章里这么顺利,主要是开始搞错了方向,使我遇到了"技术难题". 如果你也苦恼 容器内服务开机自启的问题,建议看看《谁是Docker容器的init(1)进程》/)
文章参考了《在docker的alpine类镜像上安装LNMP服务》《Alpine Linux使用教程》
ftp 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-alpine
docker exec -it vsftpd sh
发现开启了很多端口 -p 21100-21110:21100-21110这些都是被动模式端口,关于被动端口百度是这样说的:
FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。 它们的区别在于使用数据传输端口(ftp- data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。
所以可以通过更改vsftpd配置文件关闭所有端口,重新打包镜像,删除-p 21100-21110:21100-21110,只保留21端口
ftp客户端需要关闭被动模式
nginx 指定国内镜像源
  • 输入命令行打开repositories文件
【docker|docker Alpine部署LNMP +FTP 超小镜像】 vi /etc/apk/repositories
  • 在文件中输入源地址:
http://mirrors.aliyun.com/alp...
http://mirrors.aliyun.com/alp...
更新 更新一下使源地址生效
apk update
安装nginx apk add --no-cache nginx
保护pid mkdir /run/nginx
建立ftp用户并可以直接操作nginx目录
adduser -h /etc/nginx -s /sbin/nologin php -G root
更改目录属性,赋予ftp用户读写权限
chmod -R 777 /etc/nginx
新建设置网页
  • 新建一个网页index.html用软件登陆FTP
    在/etc/nginx里新建一个html文件夹
    在文件夹里新建一个 index.html文件做为nginx的首页
  • 打开index写一个简单的html页面或是只输入一行文字如
hello world
修改nginx的配置文件
  • 修改配置文件/etc/nginx/conf.d/default.conf,只保留最基本配置
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表示成功
php 安装php 及拓展 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
  • 模块文件位置/usr/lib/php7/modules
  • docker|docker Alpine部署LNMP +FTP 超小镜像
    文章图片
  • 这里忘记需不需要安装Sqlite3了,我应该是没有安装 ,没能进入数据库
在html文件夹新建info.php文件
phpinfo();
  • 修改/etc/nginx/conf.d/default.conf文件,增加php支持
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_pass127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /etc/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
}
启动php-fpm重启nginx php-fpm7 --daemonize
nginx -s reload
打开浏览器访问http://192.168.5.116:18080/info.php会显示php信息,表示成功
typecho 下载typecho 解压,ftp上传到html文件夹,
打开浏览器访问http://192.168.5.116:18080
docker|docker Alpine部署LNMP +FTP 超小镜像
文章图片

  • 创建数据库时可能会报错,需要给usr文件夹读写权限
  • 由于php扩展组件安装不全所以有些页面可能会报错
typecho call to undefined function session_start()
docker|docker Alpine部署LNMP +FTP 超小镜像
文章图片

解决
#查询有关session软件
apk search session
#选择自己php 版本对应的插件
apk add php7-session
#重启PHP
killall php-fpm7
php-fpm7 --daemonize
  • 后台点击插件管理出错
Call to undefined function token_get_all()
docker|docker Alpine部署LNMP +FTP 超小镜像
文章图片

同理查找到了这个扩展 php7-tokenizer-7.1.17-r0 安装后重启
  • 如果在永久链接设置界面启用地址重写(其实就是伪静态)报错可以不用管 直接勾选
  • 如果启用插件404了就是地址重写出了问题,对照default.conf是不是和我写的一样,或者百度typecho 伪静态
  • typecho网站的logo可以在网站根目录即html文件夹里添加favicon.ico,如果没效果可以试试清楚浏览器缓存或者在隐私窗口打开网站
开机自启 安装管理软件
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
  • docker环境中修复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系统启动
docker|docker Alpine部署LNMP +FTP 超小镜像
文章图片

这时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

    推荐阅读