author by dzh 2019-10-31
前言:
起初是身边同事搞过一个个人网站,然后一个意外的情况,知乎推荐了一个专栏("自己拥有一台服务器可以做哪些很酷的事情")给我,然后一发不可收拾,感兴趣的可以去搜搜。 搭建过程很坎坷,因为对linux上搭建环境不熟,一开始也是在网上找教程按照教程走。但是试过多个教程不是这里有问题就是那里有问题,对于一个小白来说,遗漏任何一个步骤都有可能让用户奔溃。经历种种问题后,我决定亲自写一篇教程,就是希望能让小白走进这个大门,而不是在门外来回试探,最终放弃。本文使用lnmp(linux nginx mysql php)的环境,全部采用是docker部署,涉及docker安装,编排部署,nginx配置等,并尽可能的写下每个步骤。(网上很多一键lnmp部署包,或者宝塔面板工具,我也尝试过lnmp集成部署包,但是没有成功,遇到问题也无人指定,最终选择docker,从0开始搭建,提升一下自己。docker作为当前主流虚拟容器,谁用谁知道) 下面开始分享我的服务器创建血泪史(一步一步挖坑填坑形成的这篇教程,总之不易)
好的,不多说,搭建文档如下
1.安装linux(此处选择的是ubuntu),略
2.进入ubuntu命令行,略
3.安装docker
参见官网安装教程见 https://docs.docker.com/install/
3.1.更新apt包索引:
代码语言:javascript复制$ sudo apt-get update
3.2.安装软件包以允许apt通过HTTPS使用存储库:
代码语言:javascript复制$ sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
命令中途提示输入y,回车
3.3.添加Docker的官方GPG密钥:
代码语言:javascript复制$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
验证执行结果
代码语言:javascript复制$ sudo apt-key fingerprint 0EBFCD88
得到如下信息
代码语言:javascript复制 > pub rsa4096 2017-02-22 [SCEA]
> 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
> uid [ unknown] Docker Release (CE deb) <docker@docker.com>
> sub rsa4096 2017-02-22
3.4.使用以下命令来设置稳定的存储库.
代码语言:javascript复制$ sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
3.5.再次更新Update the apt package index.
代码语言:javascript复制$ sudo apt-get update
3.6.继续安装DOCKER ENGINE- COMMUNITY。中间提示输入y,回车
代码语言:javascript复制$ sudo apt-get install docker-ce docker-ce-cli containerd.io
3.7.通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community.此命令下载测试图像并在容器中运行。容器运行时,它会打印参考消息并退出
代码语言:javascript复制$ sudo docker run hello-world
3.8.可以查看docker版本,打印出版本号代表安装成功
代码语言:javascript复制$ docker -v
3.9.按照docker官方文档装完, 在/etc/docker/的下面会有deamon.json文件,daemon.json 文件是对 Docker Engine 进行配置,因为docke云服务器很慢,添加国内镜像,更改一下docker镜像仓库
如果没有daemon.json ,可以新建一个拖进去, 内容添加
代码语言:javascript复制{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
拖进去时可能没有权限, 需要加目录权限
代码语言:javascript复制$ sudo chmod 777 /etc/docker 即可,然后就能拖进去了
4.安装docker-compose
官方安装教程见 https://docs.docker.com/compose/install/
4.1.下载Docker Compose的当前稳定版本:
代码语言:javascript复制$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
4.2.将可执行权限应用于二进制文件:
代码语言:javascript复制$ sudo chmod x /usr/local/bin/docker-compose
4.3.测试安装.
代码语言:javascript复制$ docker-compose --version
5.构建php镜像
代码语言:javascript复制选择带有pdo_mysql的php镜像(pdo_mysql 是PHP用来访问mysql服务的扩展) 可以使用dockerfile文件构建,内容如下(一般选择放在home/用户名/的下面,并需在该路径下执行docker build) dockerfile文件内容:
#格式:FROM <image>或 FROM <image>:<tag>
FROM php:7.2.3-fpm
#指定维护者的信息
MAINTAINER dingzhenhua
#RUN 每条指令将在当前镜像基础上执行,并提交为新的镜像。(可以用“”换行)
RUN apt-get update
RUN docker-php-ext-install pdo pdo_mysql
执行如下命令构建并生成自己的镜像 (镜像名称此处为dingzhenhua/php)
代码语言:javascript复制$ docker build -t dingzhenhua/php .
注意 上面命令最后有个小点,请带上执行,否则会报错,如下图哦!!!
5.1查看生成的镜像
代码语言:javascript复制$ sudo docker images
5.2 如果想要运行执行,这里先不执行,后面统一用docker-compose 编排执行
代码语言:javascript复制$ docker run -p 192.168.0.105:8080:8080 --name php dingzhenhua/php
6.启动和运行typecho
6.1在opt目录下新建文件夹app(名称自由取,但下面会用到,需要记住哦),在下面在新建mysqldata和typecho文件夹,放入如下东西
typecho文件夹里放官网下载的typecho程序包
(切换到根目录下 cd / ; 然后再chmod 777权限。删除文件夹rm -rf /root/app 删除app整个文件夹)
- . 这个表示docker-compose.yml当前目录位置开始创建这个文件undefined6.2.以下放送上面需要的文件内容
代码语言:javascript复制docker-compose 文件
version: '2'
services:
nginx:
image: nginx:1.13.9-alpine
ports:
- "80:80"
restart: always
volumes:
- ./typecho:/app #前面是宿主机的,后面是容器内部的
- ./nginxTypecho.conf:/etc/nginx/conf.d/default.conf #- . 这个表示docker-compose.yml所在路径
- logs:/var/log/nginx
links:
- php-fpm
depends_on:
- php-fpm
php-fpm:
image: dingzhenhua/php
restart: always
volumes:
- ./typecho:/app
stdin_open: true
tty: true
links:
- db
depends_on:
- db
db:
image: mysql:5.7.21
restart: always
ports:
- 0.0.0.0:3306:3306 #前面是宿主机的,后面是容器内部的
volumes:
- ./mysqldata:/var/lib/mysql # 挂载数据目录
#- ./conf.d/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf # 把mysql的配置文件映射到容器的相应目录
- logs:/var/logs/mysql
env_file:
- mysql.env
volumes:
logs:
代码语言:javascript复制mysql.env 文件
# MySQL的root用户默认密码,这里自行更改
MYSQL_ROOT_PASSWORD=*****
# MySQL镜像创建时自动创建的数据库名称
MYSQL_DATABASE=typecho
# MySQL镜像创建时自动创建的用户名
MYSQL_USER=typecho
# MySQL镜像创建时自动创建的用户密码
MYSQL_PASSWORD=*****
代码语言:javascript复制nginxTypecho.conf 文件
server {
listen 0.0.0.0:80;
server_name ***.**; #填写自己的域名
root /app; #对应的是nginx容器里面的路径
index index.php;
access_log /var/log/nginx/typecho_access.log main;
if (!-e $request_filename){
rewrite ^(.*)$ /index.php$1 last;
}
location ~ .*.php(/.*)*$ {
include fastcgi_params;
fastcgi_split_path_info ^(. ?.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
set $path_info "";
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(. ?.php)(/. )$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_pass php-fpm:9000;
}
}
6.3.在docker-compose.yml所在路径下执行docker-compose up -d 启动运行
6.4.停止 docker-compose stop
6.5.查看 docker ps -a
7.使用ip访问即可(数据库地址写主机的)
FAQ
因为涉及图文较多,这里就省略啦,嫌麻烦,对不住啦,老铁们!
版权属于:dingzhenhua
本文链接:https://cloud.tencent.com/developer/article/2018784
转载时须注明出处及本声明