docker Alpine部署LNMP +FTP 超小鏡像

本文主要是爲了記錄我研究Alpine部署typecho的過程,固然過程並不像文章裏這麼順利,主要是開始搞錯了方向,使我遇到了"技術難題".

若是你也苦惱 容器內服務開機自啓的問題,建議看看《誰是Docker容器的init(1)進程》/)php

文章參考了《在docker的alpine類鏡像上安裝LNMP服務》《Alpine Linux使用教程》html

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-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服務器指定數據傳輸所使用的端口,默認值爲20PASV FTP由FTP客戶端決定數據傳輸的端口github

因此能夠經過更改vsftpd配置文件關閉全部端口,從新打包鏡像,刪除-p 21100-21110:21100-21110,只保留21端口sql

ftp客戶端須要關閉被動模式docker

nginx

指定國內鏡像源

  • 輸入命令行打開repositories文件

 vi /etc/apk/repositories數據庫

  • 在文件中輸入源地址:

 http://mirrors.aliyun.com/alp...
 http://mirrors.aliyun.com/alp...apache

更新

更新一下使源地址生效

 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

相關文章
相關標籤/搜索