RouterOS容器安装Linux+Nginx+Mysql+PHP完整网站
RouterOS是一个强大的软路由系统,自7.4版后就开始支持Container(也就是Docker)功能,这就给Router OS提供了更多的想象空间。也让我们这次可以通过Docker功能来实现完整网站的功能。
- 升级RouterOS软路由
- 将系统升级到最新的系统。
- 打开Mikrotik的官方网站:https://mikrotik.com/download,下载X86的扩展包
- 将压缩包中的container.7.xx.npk扩展包,上传到ROS根目录中,然后重启ROS
- 重启后,使用WINBOX登录ROS,左侧主菜单中出现Container,就说明Docker的扩展包已经安装成功。
- Container容器安装后,默认是关闭的,需要我们开启,打开WINBOX中的终端,运行以下命令:
/system/device-mode/update container=yes
命令运行后,需要直接关闭ROS的电源,进行一次硬重启。(不能使用WINBOX中的重启或关闭功能)重启完成后,可以在终端中使用命令来查看容器功能是否已经开启。
/system/device-mode/print
如果显示为 container:yes即说明已经开启成功。
- 将系统升级到最新的系统。
- 创建Docker网络
- 创建一个虚拟的接口veth1,IP地址为 172.17.0.2/24,网关172.17.0.1
- 创建一个docker的桥接网络,然后将veth1加入该网络
- 给docker桥接网络设置一个IP地址172.17.0.1/24,也就是docker网络的网关
- 设置docker的NAT映射(如果已经做好了全网的NAT映射,就不需要做这一步)
- 创建一个虚拟的接口veth1,IP地址为 172.17.0.2/24,网关172.17.0.1
- 安装LNMP的Docker镜像
网上可以找到的LNMP容器镜像一般都分为几个不同的包,这样在安装时就会加大困难,所以本人就自己制作了一个Nginx+Mysql+PHP合一的整合包,方便安装,在Docker上的名称为:yhssdl/lnmp,现在容器的安装因为被墙造成安装失败的情况非常普遍,所以也可以直接在蓝奏云上下载容器镜像包:https://ssdl.lanzouj.com/i1tei2bssyti
镜像情况说明:
采用Nginx 容器作为基础,首次运行时使用脚本来安装Mysql+PHP。
/etc/nginx/conf.d/www.conf为网站默认配置文件。
环境变量:MYSQL_ROOT_PASSWORD用于指定Mysql的root账号的密码。
环境变量:MYSQL_DATABASE用于指定创建的数据库名称。
环境变量:MIRRORS_USTC不为空时,使用中科大的软件源。
-
- 设置RouterOS中Container的配置
如果是在国内,现在使用这个URL一般会被墙,那就可以直接下载镜像包来安装,将下载的lnmp.tar镜像包上传到RouterOS根目录中。 - 创建相应的环境变量
- 创建挂载目录,主要用于数据持久化
- 创建LNMP容器,如果国内Docker被墙,可以使用File:lnmp.tar创建容器,否则直接使用yhssdl/lnmp来远程下载镜像创建容器。
- 创建完成后,可以点击Start来启动容器,状态显示为runing则说明运行正常。
- 运行成功后,使用容器IP访问,应该可以看到phpinfo的内容
- 外网需要访问的话,需要创建端口映射,先创建外网的地址列表WAN_IP,用于端口映射
如果是PPPOE拨号的动态IP,可以先设置为127.0.0.1,后面使用脚本实时更新该地址。
第一个页面设置后,切换到Action页面,按下面设置。
- 动态域名及WAN_IP的实时更新
- 动态域名申请:在https://now-dns.com/网站上注册一个账号,登录后就可以创建免费的动态域名。
- 动态域名脚本,红色字体的内容根据情况修改:
- 动态域名申请:在https://now-dns.com/网站上注册一个账号,登录后就可以创建免费的动态域名。
- 设置RouterOS中Container的配置
# now-dns.com 动态域名脚本 :local NowUser "账号邮箱" :local NowPass "账号密码" :local NowHost1 "xxx.ownip.net" :local dnsurl "https://now-dns.com/update\3F" # PPPOE 名称,根据情况修改 :local pppoe "pppoe-out1" :local ipaddr [/ip address get [/ip address find interface=$pppoe] address] :set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)] :global wanip :if ($ipaddr != $wanip) do={ /ip firewall address-list set [/ip firewall address-list find list="WAN_IP"] address=$ipaddr :local result [/tool fetch url=($dnsurl . "hostname=$NowHost1") user=$NowUser password=$NowPass mode=https as-value output=user]; :if ($result->"status" = "finished") do={ :set wanip $ipaddr :if ($result->"data" = "\"good\"") do={ :log war ("域名解析成功:".$wanip) } else={ :if ($result->"data" = "\"nochg\"") do={ :log war ("域名IP无变化:".$wanip) } else={ :log error "域名解析失败。"; } } } }
-
-
- PPPOE连接后自动运行脚本更新域名
- 定时调用动态域名脚本(双保险,保证域名IP能及时更新)
- PPPOE连接后自动运行脚本更新域名
-
- WordPress 博客系统安装
- 在容器中安装ssh远程服务
- 先进入容器,打开Winbox中的终端,使用命令:container/shell number=0(0为第一个容器,1为第二个容器,后面类推)
- 安装openssh,方便远程管理,该容器基于Alpine,安装软件使用 apk 命令
- 先进入容器,打开Winbox中的终端,使用命令:container/shell number=0(0为第一个容器,1为第二个容器,后面类推)
- 在容器中安装ssh远程服务
//安装ssh服务端 apk add openssh sed //进入/etc/ssh目录后,生成密钥 cd /etc/ssh ssh-keygen -A //修改ssh配置,允许root登录 sed -i 's%#PermitRootLogin prohibit-password%PermitRootLogin yes%' /etc/ssh/sshd_config //启动ssh /usr/sbin/sshd //设置root密码,输入passwd后两次输入密码即可。 passwd
-
-
- 上面安装openssh后,容器重启后ssh不会自动运行,我们还需要将启动命令加入到启动命令中,使用vi编辑器打开vi /docker-entrypoint.sh 文件,滚动到文件最后面,在php-fpm83前面,加入/usr/sbin/sshd启动ssh。
- 安装好ssh后,我们就可以使用ssh客户端进行远程管理,也可以对文件进行管理,会方便很多。
- 上面安装openssh后,容器重启后ssh不会自动运行,我们还需要将启动命令加入到启动命令中,使用vi编辑器打开vi /docker-entrypoint.sh 文件,滚动到文件最后面,在php-fpm83前面,加入/usr/sbin/sshd启动ssh。
- 下载wordpress的安装压缩包解压后,然后使用ssh客户端上传到/app/www文件夹中,最后可以看到如下情况:
- 再次使用容器IP访问主页,就可以发现已经进入wordpress的安装界面
- 将环境变量中设置好的数据库账号等填写到安装程序中,会提示无法写入wp-config.php文件,我们可以运行chmod 777 /app/www修改权限。
接下来继续填写相关信息就可以完成wordpress的安装。
-
- 安装并启用SSL证书
- 安装acme.sh证书自动部署脚本。
apk add curl openssl socat curl https://get.acme.sh | sh //如果安装失败,可以用gitee上的安装方式。 apk add git openssl socat git clone https://gitee.com/neilpang/acme.sh.git cd acme.sh chmod +x acme.sh ./acme.sh --install -m xxx@example.com
运行上面的命令后,在/root/.acme.sh文件夹中,就已经下载好acme.sh的脚本。
-
- 给wordpress的动态域名网站申请SSL证书
/root/.acme.sh/acme.sh --register-account -m my@example.com /root/.acme.sh/acme.sh --issue -d xxx.ownip.net --webroot /app/www/ --standalone --httpport 80
-
- 申请成功后,会在/root/.acme.sh/下创建域名开头的子文件夹,内有SSL证书的文件。
-
- 修改/etc/nginx/conf.d/www.conf中的内容,去掉ssl配置部分的#注释,然后将域名修改即可。
- 保存配置后,先停止运行,然后再启动容器,让新的配置能生效。至此整个网站的安装与配置已经全部完成,在使用过程中安装插件,上传图片等可能会出现目录权限不够的情况,可以调整目录权限即可。
- 修改/etc/nginx/conf.d/www.conf中的内容,去掉ssl配置部分的#注释,然后将域名修改即可。
评论前必须登录!
注册