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服务器指定数据传输所使用的端口,默认值为20PASV FTP由FTP客户端决定数据传输的端口

所以可以通过更改vsftpd配置文件关闭所有端口,重新打包镜像,删除-p 21100-21110:21100-21110,只保留21端口

ftp客户端需要关闭被动模式

nginx

指定国内镜像源

  • 输入命令行打开repositories文件

 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
  • 批注 2020-04-30 190731
  • 这里忘记需不需要安装Sqlite3了,我应该是没有安装 ,没能进入数据库

在html文件夹新建info.php文件

 <?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_pass   127.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

install.png

  • 创建数据库时可能会报错,需要给usr文件夹读写权限
  • 由于php扩展组件安装不全所以有些页面可能会报错

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()

批注 2020-04-29 185332

同理查找到了这个扩展 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系统启动

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

阅读 2.7k
12 声望
0 粉丝
0 条评论
12 声望
0 粉丝
文章目录
宣传栏