背景
由于云主机马上就要到期了,所以最近对比了几家云服务器提供商。最终决定尝试一下 UCloud。于是不得不把原博客(typecho)迁移过来。下面是流水账式地记录一下过程。
过程记录
本想尝试按照以前的笔记重新搭建一套环境,然后再把数据导过来,但是一想到这一长串的步骤,以及可能碰到的问题就头疼,于是决定构建一个基于容器的 LNMP 环境,一劳永逸,也方便日后继续做博客迁移。当然如果有同学也想搭建基于 LNMP 的博客如 Typecho,则可以参考我的模板:-)(文末有 Github 链接)。
注:以下命令及配置都是基于 CentOS7。
容器环境
由于此次环境的搭建是用的 docker,所以先保证机器上安装了 docker 和 docker-compose:
# 安装 docker
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker
# 安装 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
LNMP 环境配置
构建基于 docker-compose
,目录结构如下:
.
├── docker-compose.yml # docker-compose 配置文件
├── mysql
│ ├── conf # mysql 配置文件目录
│ │ ├── my.cnf
│ └── data # mysql 数据文件目录
├── nginx
│ ├── cert # nginx ssl 证书目录
│ │ ├── nightfield.com.cn.key
│ │ ├── nightfield.com.cn.pem
│ ├── conf # nginx 配置目录
│ │ ├── nightfield.com.cn.conf
│ ├── html # nginx Web 根目录
│ │ ├── info.php
│ └── log # nginx 日志目录
├── php
│ ├── conf # php 配置目录
│ │ └── php.ini
│ └── Dockerfile # php 的 Dockerfile 配置
可以看到主要是对应软件的一些配置文件。docker-compose.yml
文件内容如下:
version: "3"
services:
nginx:
image: nginx:latest
container_name: nginx
networks:
- lnmp
depends_on:
- php
ports:
- "80:80"
- "443:443"
expose:
- "80"
- "443"
volumes:
- /opt/docker/nginx/html:/usr/share/nginx/html # nginx web 根目录
- /opt/docker/nginx/conf/:/etc/nginx/conf.d # 配置目录
- /opt/docker/nginx/log:/var/log/nginx # 日志目录
- /opt/docker/nginx/cert:/etc/nginx/cert # ssl 证书目录
links:
- php
php:
build: # 由于 PHP 的构建相对较为复杂,所以用了 Dockerfile 的方式
context: ./php
dockerfile: Dockerfile
container_name: php
volumes:
- /opt/docker/nginx/html:/usr/share/nginx/html # nginx web 根目录
- /opt/docker/php/conf/:/usr/local/etc/php/conf.d # 配置目录
networks:
- lnmp
depends_on:
- mysql
expose:
- "9000"
mysql:
image: mysql:5.7
container_name: mysql
volumes:
- /opt/docker/mysql/conf/:/etc/mysql/conf.d # 配置目录
- /opt/docker/mysql/data:/var/lib/mysql # 数据目录
environment:
MYSQL_ROOT_PASSWORD: password # 改为自定义密码
networks:
- lnmp
expose:
- "3306"
ports:
- "3306:3306"
networks:
lnmp:
Mysql
Mysql 的配置较为简单不再赘述,注意将对应的配置目录以及数据目录从容器中映射出来便于管理。
Nginx
将 Nginx 的配置从容器中映射出来,模版如下:
# https ssl, 对应 443 端口
server {
listen 443 ssl;
server_name nightfield.com.cn; # 域名或者服务器 ip
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
index index.php;
root /usr/share/nginx/html;
# ssl 配置
ssl_certificate_key cert/nightfield.com.cn.key; # 证书 key
ssl_certificate cert/nightfield.com.cn.pem; # 证书 pem
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on