命令行版的docker化lnmp搭建
之前写过一篇用 portainer
图形界面工具来搭建 Docker 化的LNMP。但是每次开一台新的VPS,按照那个流程走下来都要累死,于是按照那个思路,整理了一份命令行版本的部署方案。
创建数据目录
mkdir -p /data/wwwroot
mkdir -p /data/logs
mkdir -p /data/mysql
这三个目录分别用来存储网站文件,网站日志,数据库文件。
在 CentOS 下安装 Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce
systemctl enable docker
systemctl start docker
以上是 Docker 官方给出的在 CentOS 下安装 Docker 的文档,Ubuntu 可以参考这里: https://docs.docker.com/install/linux/docker-ce/ubuntu/ 。在边栏还可以看到其他系统的安装方法。
创建子网络
docker network create --gateway "172.20.0.1" --subnet "172.20.0.0/16" lnmp
把 LNMP 放在独立的网络里更易管理。
部署 Nginx
docker run -itd --name nginx nginx
docker cp nginx:/etc/nginx /etc
docker stop nginx && docker rm nginx
docker run -itd --name nginx -v /etc/nginx:/etc/nginx -v /data/wwwroot:/data/wwwroot -v /data/logs/nginx:/var/log/nginx -p 80:80 -p 443:443 --restart always -v /tmp:/tmp --network lnmp --ip "172.20.0.2" nginx
前三行的作用就是启动一个临时的 Nginx 容器,目的是为了把其中的配置文件复制出来,最后再删除掉这个临时容器。最后一行就是真正启动 Nginx 容器的命令了。
部署 MySQL
docker run -itd --name mysql mariadb
docker cp mysql:/etc/mysql /etc
docker stop mysql && docker rm mysql
read -s mysql_pass
docker run -itd --name mysql -p 3306:3306 -v /etc/mysql:/etc/mysql -v /data/mysql:/var/lib/mysql -v /tmp:/tmp -v /data/logs/mysql:/var/log/mysql --restart always --network lnmp --ip "172.20.0.3" -e MYSQL_ROOT_PASSWORD=$mysql_pass mariadb
前三行依旧是为了复制配置文件出来,第四行会要求你输入 MySQL 的 root 密码。第五行启动 MySQL 容器。
部署 PHP7
docker run -itd --name php7 ety001/php:7.1.17
docker cp php7:/etc/php7 /etc
docker stop php7 && docker rm php7
docker run -itd --name php7 -v /etc/php7:/etc/php7 -v /data/wwwroot:/data/wwwroot -v /tmp:/tmp -v /data/logs/php7:/var/log/php7 --restart always --network lnmp --ip "172.20.0.4" ety001/php:7.1.17
前三行复制配置文件出来,第四行启动 PHP 容器。其中这里使用的镜像是我自己封装的,镜像里面写死了数据目录,如果你更改了数据目录,请自行修改 /etc/php7/php-fpm.conf
中的 chdir
参数值。
修改 Nginx 配置文件并进行测试
打开 /etc/nginx/conf.d/default.conf
文件,改成下面的样子
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /data/wwwroot/default; # <------ 修改这里为自己的目录
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /data/wwwroot/default; # <------ 修改这里为自己的目录
fastcgi_pass 172.20.0.4:9000; # <------ 修改这里为正确的PHP解析地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # <------ 修改这里的路径
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
修改好以后,执行 docker exec nginx nginx -s reload
重载 nginx
配置以使其生效。这时可以在 /data/wwwroot/default
目录下创建一个 index.html
的文件,然后浏览器访问下看看是否可以正常显示。再创建一个含有 <?php phpinfo();?>
代码的 PHP 文件测试下 PHP 是否可用。
后续要添加网站
后续如果要增加新的网站,只需要在 /data/wwwroot/
中新建个文件夹存储网站文件,然后在 /etc/nginx/conf.d/
中增加新网站的配置文件,最后执行 docker exec nginx nginx -s reload
重载 nginx 配置即可生效。
如果要增加 Let's encrypted 的 SSL 的话,建议使用 acme.sh 中的 DNS 方法来注册证书,并把证书安装到 /etc/nginx/ssl
目录里,最后使用 docker restart nginx
来重启 Nginx 容器生效。这个后续可以再开篇文章写一下。
完工!
原文地址:https://blog.domyself.me/2018/11/10/docker-lnmp.html
欢迎使用 SteemEditor 来编写文章,获取 @steemeditor.bot 的大力点赞!
欢迎使用 SteemMention 获取最新的 Steem 回复提醒。
感谢你的阅读,我是中文区见证人之一,欢迎通过 SteemConnect 来给我投票,或者打开 https://steemit.com/~witnesses/ 页面,输入 ety001 进行投票。
中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票:
Thank you for reading. I'm a witness. I would really appreciate your witness vote! You can vote by SteemConnect. Or open https://steemit.com/~witnesses page, input ety001 to vote.
恭喜你!您的这篇文章入选 @justyy 今日 (2018-11-12) 榜单 【优秀的文章】, 回复本条评论24小时内领赏,点赞本评论将支持 @dailychina 并增加将来您的奖赏。
Congratulations! This post has been selected by @justyy as today's (2018-11-12) 【Good Posts】, Steem On! Reply to this message in 24 hours to get rewards. Upvote this comment to support the @dailychina and increase your future rewards! ^_^
Hello! Your post has been resteemed and upvoted by @ilovecoding because we love coding! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!
Reply !stop to disable the comment. Thanks!
不明觉厉